Package-Management

在 amd64 上建構 mips 包:執行格式錯誤 chroot:無法執行命令“mount”

  • May 17, 2019

我正在嘗試在正在執行的 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

在嘗試不同的命令時,我嘗試的所有方法最終都會出現Exec 格式錯誤。

只有以 Debian 9 為目標,交叉建構才變得簡單易行;Debian 8 也可以,但是針對 Debian 7 有點太複雜了。(EmDebian 在 Debian 7 之前被刪除。)

然而,有一個簡單的設置可以在任何能夠執行 QEMU 的系統上建構mipselWheezy 包,並且在那裡建構包仍然比在路由器上建構要快得多:

  • 在using中開始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 正常工作sbuild,特別是在 chroot 中設置sbuild組並修復所有權。

引用自:https://unix.stackexchange.com/questions/519143