Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

How to rebuild a Debian package for a foreign architecture?

261 views
Skip to first unread message

Vincent Lefevre

unread,
Jan 25, 2018, 9:00:06 AM1/25/18
to
To rebuild a Debian package, one can use:

debuild -i -us -uc -b

But how to rebuild a Debian package for a foreign architecture?
In my case for i386 from an amd64 machine. I've tried

debuild -i -us -uc -b -a i386

but the build fails at some point:

[...]
dh_strip -a
dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
Can't exec "i686-linux-gnu-strip": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 358.
[...]

If I need binutils-i686-linux-gnu, shouldn't dpkg-buildpackage fail
when checking the build dependencies?

--
Vincent Lefèvre <vin...@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

to...@tuxteam.de

unread,
Jan 25, 2018, 9:40:04 AM1/25/18
to
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thu, Jan 25, 2018 at 02:56:17PM +0100, Vincent Lefevre wrote:
> To rebuild a Debian package, one can use:
>
> debuild -i -us -uc -b
>
> But how to rebuild a Debian package for a foreign architecture?
> In my case for i386 from an amd64 machine. I've tried
>
> debuild -i -us -uc -b -a i386
>
> but the build fails at some point:
>
> [...]
> dh_strip -a
> dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> Can't exec "i686-linux-gnu-strip": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 358.
> [...]

It seems that you are missing the '386 (or more precisely the '686)
executables. Perhaps you need the package dpkg-cross.

> If I need binutils-i686-linux-gnu, shouldn't dpkg-buildpackage fail
> when checking the build dependencies?

I'll leave that question to someone more knowledgeable.

Cheers
- -- tomás
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iEYEARECAAYFAlpp6eoACgkQBcgs9XrR2kbzfwCfWeMl36zg2mSBoDSuj4s/yam6
/TkAniKmKJKviZoyjwvE5wEDwYXS+Ree
=Z/As
-----END PGP SIGNATURE-----

Curt

unread,
Jan 25, 2018, 10:00:04 AM1/25/18
to
On 2018-01-25, <to...@tuxteam.de> <to...@tuxteam.de> wrote:
>
> It seems that you are missing the '386 (or more precisely the '686)
> executables. Perhaps you need the package dpkg-cross.
>
>> If I need binutils-i686-linux-gnu, shouldn't dpkg-buildpackage fail
>> when checking the build dependencies?
>
> I'll leave that question to someone more knowledgeable.

I'm much less so, but I've heard people recommending pbuilder for this (chroot).

pbuilder --create --architecture i386
pbuilder --build mypackage.dsc

etc...

> Cheers
> - -- tomás
>
>


--
“True terror is to wake up one morning and discover that your high school class
is running the country.” – Kurt Vonnegut

Vincent Lefevre

unread,
Jan 25, 2018, 5:10:06 PM1/25/18
to
On 2018-01-25 15:30:02 +0100, to...@tuxteam.de wrote:
> On Thu, Jan 25, 2018 at 02:56:17PM +0100, Vincent Lefevre wrote:
> > To rebuild a Debian package, one can use:
> >
> > debuild -i -us -uc -b
> >
> > But how to rebuild a Debian package for a foreign architecture?
> > In my case for i386 from an amd64 machine. I've tried
> >
> > debuild -i -us -uc -b -a i386
> >
> > but the build fails at some point:
> >
> > [...]
> > dh_strip -a
> > dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> > dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> > dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> > Can't exec "i686-linux-gnu-strip": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 358.
> > [...]
>
> It seems that you are missing the '386 (or more precisely the '686)
> executables. Perhaps you need the package dpkg-cross.

Installing dpkg-cross just installs: cross-config dpkg-cross
libconfig-auto-perl libdebian-dpkgcross-perl. This is not
sufficient.

Vincent Lefevre

unread,
Jan 25, 2018, 5:10:06 PM1/25/18
to
On 2018-01-25 14:53:14 +0000, Curt wrote:
> On 2018-01-25, <to...@tuxteam.de> <to...@tuxteam.de> wrote:
> >
> > It seems that you are missing the '386 (or more precisely the '686)
> > executables. Perhaps you need the package dpkg-cross.
> >
> >> If I need binutils-i686-linux-gnu, shouldn't dpkg-buildpackage fail
> >> when checking the build dependencies?
> >
> > I'll leave that question to someone more knowledgeable.
>
> I'm much less so, but I've heard people recommending pbuilder for
> this (chroot).
>
> pbuilder --create --architecture i386
> pbuilder --build mypackage.dsc

IMHO, this is overkill, at least in my case. And I don't like to
require root just to build a package.

Curt

unread,
Jan 26, 2018, 5:00:05 AM1/26/18
to
On 2018-01-25, Vincent Lefevre <vin...@vinc17.net> wrote:
> On 2018-01-25 14:53:14 +0000, Curt wrote:
>> On 2018-01-25, <to...@tuxteam.de> <to...@tuxteam.de> wrote:
>> >
>> > It seems that you are missing the '386 (or more precisely the '686)
>> > executables. Perhaps you need the package dpkg-cross.
>> >
>> >> If I need binutils-i686-linux-gnu, shouldn't dpkg-buildpackage fail
>> >> when checking the build dependencies?
>> >
>> > I'll leave that question to someone more knowledgeable.
>>
>> I'm much less so, but I've heard people recommending pbuilder for
>> this (chroot).
>>
>> pbuilder --create --architecture i386
>> pbuilder --build mypackage.dsc
>
> IMHO, this is overkill, at least in my case. And I don't like to
> require root just to build a package.
>

Apparently you need root to satisfy the build *dependencies* (which
means you need to be root to install a package--but we new that
already).

However

...most packages do not need root privilege to build, or even
refused to build when they are built as root. pbuilder can create a user
which is only used inside pbuilder and use that user id when building,
and use the fakeroot command when root privilege is required.

https://pbuilder.alioth.debian.org/#nonrootchroot

Anyhow, nothing is more convincing than success, and if your "lighter"
and less "mortal" method is successful, God bless and full speed ahead!

Vincent Lefevre

unread,
Jan 29, 2018, 7:00:05 AM1/29/18
to
On 2018-01-26 09:47:58 +0000, Curt wrote:
> On 2018-01-25, Vincent Lefevre <vin...@vinc17.net> wrote:
> > On 2018-01-25 14:53:14 +0000, Curt wrote:
> >> On 2018-01-25, <to...@tuxteam.de> <to...@tuxteam.de> wrote:
> >> >
> >> > It seems that you are missing the '386 (or more precisely the '686)
> >> > executables. Perhaps you need the package dpkg-cross.
> >> >
> >> >> If I need binutils-i686-linux-gnu, shouldn't dpkg-buildpackage fail
> >> >> when checking the build dependencies?
> >> >
> >> > I'll leave that question to someone more knowledgeable.
> >>
> >> I'm much less so, but I've heard people recommending pbuilder for
> >> this (chroot).
> >>
> >> pbuilder --create --architecture i386
> >> pbuilder --build mypackage.dsc
> >
> > IMHO, this is overkill, at least in my case. And I don't like to
> > require root just to build a package.
>
> Apparently you need root to satisfy the build *dependencies* (which
> means you need to be root to install a package--but we new that
> already).

When I want to build a package for the native architecture, I don't
need to be root. If there are missing build dependencies, then the
missing packages are listed, so that I can install them as root,
then I can retry the package build as a normal user. So, the only
things I do as root is to install packages. The build is entirely
done as a normal user.

> However
>
> ...most packages do not need root privilege to build, or even
> refused to build when they are built as root. pbuilder can create a user
> which is only used inside pbuilder and use that user id when building,
> and use the fakeroot command when root privilege is required.
>
> https://pbuilder.alioth.debian.org/#nonrootchroot

Or perhaps I can try pbuilder-user-mode-linux.

The issue is that all this will require a major rewrite of my
scripts...

Vincent Lefevre

unread,
May 15, 2018, 7:40:04 AM5/15/18
to
On 2018-01-25 23:03:50 +0100, Vincent Lefevre wrote:
> On 2018-01-25 15:30:02 +0100, to...@tuxteam.de wrote:
> > On Thu, Jan 25, 2018 at 02:56:17PM +0100, Vincent Lefevre wrote:
> > > To rebuild a Debian package, one can use:
> > >
> > > debuild -i -us -uc -b
> > >
> > > But how to rebuild a Debian package for a foreign architecture?
> > > In my case for i386 from an amd64 machine. I've tried
> > >
> > > debuild -i -us -uc -b -a i386
> > >
> > > but the build fails at some point:
> > >
> > > [...]
> > > dh_strip -a
> > > dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> > > dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> > > dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
> > > Can't exec "i686-linux-gnu-strip": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 358.
> > > [...]
> >
> > It seems that you are missing the '386 (or more precisely the '686)
> > executables. Perhaps you need the package dpkg-cross.
>
> Installing dpkg-cross just installs: cross-config dpkg-cross
> libconfig-auto-perl libdebian-dpkgcross-perl. This is not
> sufficient.

According to https://wiki.debian.org/CrossCompiling, it should
have been crossbuild-essential-i386, and indeed, this installs
binutils-i686-linux-gnu (which provides i686-linux-gnu-strip).
However, it seems to install more than necessary for the
particular case of i386 on an amd64 machine.

Now, this was just one of the issues. After installing
binutils-i686-linux-gnu, the other issue was that the architecture
wasn't taken into account by debuild itself, after running
dpkg-buildpackage successfully. I eventually found a bug / limitation
in the debuild source: to be taken into account by debuild, one
needs to write -ai386 *without a space*. I've reported this bug
(real bug or lack of documentation):

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=898706

With "debuild -i -us -uc -b -ai386", I now do not get any error.
0 new messages