从外部 chroot 访问 /proc

从外部 chroot 访问 /proc

我正在尝试使用 QEMU 设置外部 chroot 环境,主要如以下所述https://www.hellion.org.uk/blog/posts/foreign-chroots-with-schroot-and-qemu/

主机系统是Ubuntu x86_64(在Github Actions上),外部chroot运行Debian for arm。

现在我尝试通过 apt 安装来设置 OCaml opam,然后运行opam init​​.失败是因为/proc/sys/kernel/overflowuid没有找到。

深入挖掘,我发现/procchroot 监狱内部完全是空的。我尝试sudo mount -B /proc $CROSS_ROOT/proc在运行后立即添加到脚本中debootstrap,但仍然无济于事 -/proc仍然是空的。与 相同sudo mount -t proc /proc $CROSS_ROOT/proc

另外,当我跑出mount | grep procchroot 监狱时,我看到了/proc但没有看到CROSS_ROOT/proc

我注意到的另一个奇怪之处是,当我mount在 chroot 监狱内运行以列出安装时,我收到一条错误消息,指出mtab未找到 – 这是正常现象,还是表明这里有其他问题?

为了排除小错误 – 我$CROSS_ROOT在 CI 脚本中多次使用,也在对debootstrap.如果该变量为空,我想我会遇到很多其他错误。

为什么我看不到/procchroot 监狱的内部情况?

答案1

debootstrap分两个阶段运行:

sudo debootstrap --variant=buildd --include=fakeroot,build-essential,sudo --arch=armhf --foreign buster $CROSS_ROOT $CROSS_MIRROR
sudo chroot $CROSS_ROOT ./debootstrap/debootstrap --second-stage

安装/proc必须在第二阶段之后完成,而不是在两个阶段之间完成 - 第二阶段将/proc再次卸载。 (问题中提到的源qemu-arm-static在 chroot 内部提供了一些额外的魔力,这确实必须在两个阶段之间发生。对文件系统的任何其他自定义,尤其是涉及中央系统组件的自定义,可能会破坏事物或被撤消到第二阶段。)

将挂载命令移到第二阶段之后debootstrap,我的 chroot 监狱就看到了/proc

相关内容