Package-Management
在 amd64 上建構 mips 包:執行格式錯誤 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
在嘗試不同的命令時,我嘗試的所有方法最終都會出現Exec 格式錯誤。
只有以 Debian 9 為目標,交叉建構才變得簡單易行;Debian 8 也可以,但是針對 Debian 7 有點太複雜了。(EmDebian 在 Debian 7 之前被刪除。)
然而,有一個簡單的設置可以在任何能夠執行 QEMU 的系統上建構
mipsel
Wheezy 包,並且在那裡建構包仍然比在路由器上建構要快得多:
- 在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
組並修復所有權。