我正在linux中创建chroot监狱,但我无法访问任何系统文件,如ls/cd/gcc/g++。我需要将哪些必要的libs/bin/systemme文件复制到我的chroot监狱?
要创建基本的基于debian的根文件系统(不一定在基于deban的主机系统上),可以使用debootstrap
或multistrap
工具。我认为对于基于fedora的根文件系统,还有一个febootstrap
等价物。
在debotstrap中,您将完全控制应该安装哪些包,而不是基本必需的包,这些包是带有"优先级:必需"one_answers"优先级:重要"标签的包。在初始额外包的情况下,您要负责包依赖性。
multistrap
是一个较新的工具,它使用apt,可以利用多个存储库,因此可以解决依赖性问题。
您还可以进行交叉引导,即为另一个体系结构创建根fs。这在创建嵌入式或虚拟化系统时非常有用。
示例debootstrap
命令:
debootstrap wheezy rootfs/ http://ftp.us.debian.org/debian
然后你就可以记录下来,做任何其他需要的事情。
这是迄今为止创建chroot最简单的方法。
像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可以加载必要的内容。