我正在尝试使用 multistrap、fakeroot 和 proot 构建一个基于 Debian Stretch 的 armhf 文件系统。我可以使用 multistrap 创建 rootfs:
fakeroot /usr/sbin/multistrap -f multistrap.conf
然后我将 fakeroot 库复制到 rootfs(libfakechroot.so、libfakeroot-sysv.so、libfakeroot-tcp.so)中,并启动根目录:
fakeroot -- proot -S out/ -w / -q qemu-arm-static /bin/bash
在这个 shell 中,我执行以下命令:
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
export LC_ALL=C LANGUAGE=C LANG=C
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/var/lib/dpkg/info/dash.preinst install
dpkg --configure -a
这应该配置使用 multistrap 安装的所有包,但是这个过程总是在配置包的过程中挂起,大部分时间在同一个包上但并非总是如此(例如在 passwd、adduser、openssh-server 上),但几乎总是在 cat /grep 行。系统不再响应,^C 不起作用,我必须从另一个 shell 中杀死所有 fakeroot 进程。
我尝试了一个几乎为空的 multistrap 配置(仅 bash 作为包),然后它继续,但只有 apt 作为包它挂起。我尝试使用 fakeroot 和 fakeroot-tcp。唯一的区别是 fakeroot-tcp 慢得多,但它仍然挂起。
在这个设置中有什么我忘了做的吗?
当我使用 sudo 而不是 fakeroot 运行时,rootfs 会正确生成。但从安全的角度来看,我不想以 root 身份运行 multistrap/proot,所以我想让 fakeroot 工作。
我的多带配置:
[General]
arch=armhf
directory=out
cleanup=true
noauth=true
unpack=true
aptsources=Common
bootstrap=Common
[Common]
packages=apt <<more packages>>
source=http://deb.debian.org/debian
keyring=debian-archive-keyring
suite=REPO_RELEASE
components=main
omitdebsrc=true