我正在尝试在正在运行的 amd64 系统上交叉构建 Debian/Ubuntu 软件包以实现 mips arch。我尝试了多种方法,从 pubilder 到 sbuild,但总是失败。关于后者,在新安装的 Debian 9 上我这样做:
apt-get -y install sbuild
sbuild-createchroot --arch=mips --make-sbuild-tarball=/srv/chroots/wheezy-sbuild.tgz wheezy /srv/chroots/wheezy http://archive.debian.org/debian/
但最终我得到:
W: Failure trying to run: chroot /srv/chroots/wheezy dpkg-deb -f /var/cache/apt/archives/dpkg_1.16.18_mips.deb Version
W: See /srv/chroots/wheezy/debootstrap/debootstrap.log for details
W: Failure trying to run: chroot /srv/chroots/wheezy mount -t proc proc /proc
W: See /srv/chroots/wheezy/debootstrap/debootstrap.log for details
E: Error running debootstrap at /usr/sbin/sbuild-createchroot line 268.
日志包含:
chroot: failed to run command 'dpkg-deb': Exec format error
chroot: failed to run command 'mount': Exec format error
我尝试过的所有方法最终都是这样执行格式错误同时尝试不同的命令。
答案1
仅以 Debian 9 作为目标,交叉构建才变得轻松简单;它也适用于 Debian 8,但针对 Debian 7 有点太复杂了。 (EmDebian 在 Debian 7 之前已被删除。)
然而,有一个简单的设置可以mipsel
在任何能够运行 QEMU 的系统上构建 Wheezy 软件包,并且在那里构建软件包仍然比在路由器上构建要快得多:
使用
mipsel
以下命令开始设置:chroot
debootstrap
sudo debootstrap --arch=mipsel --foreign --variant=buildd \ --include=fakeroot,build-essential \ wheezy ./wheezy-mipsel-chroot \ http://archive.debian.org/debian
安装 QEMU 并
binfmt_misc
支持:sudo apt install qemu-user-static binfmt-support
将 QEMU 二进制文件复制到
chroot
:sudo cp /usr/bin/qemu-mipsel-static wheezy-mipsel-chroot/usr/bin
(它是静态链接的,所以它可以正常工作)
输入 chroot 并完成
debootstrap
:sudo chroot wheezy-mipsel-chroot /debootstrap/debootstrap --second-stage
您现在可以使用 chroot 来构建软件包。手动将包复制到 chroot 中,输入它,并dpkg-buildpackage
在安装构建依赖项后进行构建。
要使用 进行构建sbuild
,您至少需要使用schroot
;注册 chroot。添加一个名为/etc/schroot/chroot.d/wheezy-mipsel-sbuild
以下内容的文件:
[wheezy-mipsel-sbuild]
description=Debian wheezy/mipsel autobuilder
groups=root,sbuild
root-groups=root,sbuild
profile=sbuild
type=directory
directory=/usr/var/backups/steve/wheezy-mipsel-chroot
union-type=overlay
要使 chroot 正常工作,可能还需要其他步骤,特别是在 chroot 内sbuild
设置组并修复所有权。sbuild