在 amd64 上构建 mips 包:Exec 格式错误 chroot:无法运行命令“mount”

在 amd64 上构建 mips 包:Exec 格式错误 chroot:无法运行命令“mount”

我正在尝试在正在运行的 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以下命令开始设置:chrootdebootstrap

    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

相关内容