1

我正在 linux 中创建 chroot jail,但我无权访问任何系统文件,如 ls/cd/gcc/g++。我需要将哪些必要的 libs/bin/systme 文件复制到我的 chroot 监狱?

4

2 回答 2

2

要创建一个基本的基于 debian 的根文件系统(不一定在基于 debian 的主机系统上),您可以使用debootstrapmultistrap工具。febootstrap我认为基于 Fedora 的根文件系统也有一个等价物。

在 debootstrap 中,您将完全控制应安装哪些软件包,而不是基本必需的软件包,这些软件包是带有“优先级:必需”和“优先级:重要”标签的软件包。在初始额外包的情况下,您负责包依赖关系。

multistrap是一个较新的工具,它使用 apt 并且可以利用多个存储库,因此可以解决依赖问题。

您还可以进行交叉引导,为另一个架构创建根 fs。这在创建嵌入式或虚拟化系统时很有用。

示例debootstrap命令:

debootstrap wheezy rootfs/ http://ftp.us.debian.org/debian

然后你可以 chroot 进入它并做任何其他需要的事情。

这是迄今为止创建 chroot 最简单的方法。

于 2013-08-12T04:27:58.790 回答
0

像 ls/cd/gcc/g++ 这样的可执行文件,它们依赖于共享库(除非你没有将它们构建为静态的)。因此,您需要做的是将所有这些共享库依赖项复制到适当的位置到您的 chroot 监狱中,您还需要找到这些共享依赖项是什么。要找出您需要“ldd”的帮助。

要查看 gcc 有哪些共享依赖项,请执行以下操作:

           ldd /usr/bin/gcc

在我的系统上,它显示以下输出:

linux-vdso.so.1 =>  (0x00007fffd9bff000)
libc.so.6 => /lib64/libc.so.6 (0x00000030c9c00000)
/lib64/ld-linux-x86-64.so.2 (0x00000030c9800000)

因此,gcc 具有标准 c 库 libc.so 的依赖关系,它还需要 ld(可执行加载器),将这些共享库与 gcc 一起放入您的 chroot 监狱中的适当位置(即 /lib64 下的 libc)。所以 gcc 可以在你调用 gcc 时加载必要的东西。

于 2013-08-12T04:19:13.383 回答