chroot为什么不工作?

时间:2010-09-17 00:52:57

标签: linux chroot

作为我真实问题的替代方案:有没有人知道一个简单的命令行工具来制作一个chroot监狱?我正在考虑运行命令并复制运行到给定目录所需的所有内容。我看到了一个工具的方向,但它有配置文件,似乎期待我从X启动它,这些都不适用于我的情况。


对于真正的问题:

我正在尝试建立一个chroot监狱,但它无法正常工作。这是我在命令时得到的结果:

bcs@builder:~/dmd$ sudo strace sudo chroot /home/bcs/dmd/ /usr/bin/make -C src linux.mak 
...
chroot("/home/bcs/dmd/")                = 0
chdir("/")                              = 0
execve("/usr/bin/make", ["/usr/bin/make", "-C", "src", "-f", "linux.mak"], [/* 13 vars */]) = -1 ENOENT (No such file or directory)
write(2, "chroot: ", 8chroot: )                 = 8
write(2, "cannot run command `/usr/bin/mak"..., 34cannot run command `/usr/bin/make') = 34
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
)                       = 1
close(1)                                = 0
close(2)                                = 0
exit_group(127)                         = ?
bcs@builder:~/dmd$ ll /home/bcs/dmd/usr/bin/make
-rwxr-xr-x 1 bcs bcs 166112 Sep 17 00:41 /home/bcs/dmd/usr/bin/make*

似乎chroot无法找到make,即使它应该在那里。我缺少什么想法?

BTW:这是在最近的Ubuntu盒子上。

2 个答案:

答案 0 :(得分:3)

您可能没有可用的加载程序和/或共享库。例如,在我的系统(64位Debian sid)上,make需要这个:

$ ldd /usr/bin/make
    linux-vdso.so.1 =>  (0x00007fff95fff000)
    librt.so.1 => /lib/librt.so.1 (0x00007fc97d557000)
    libc.so.6 => /lib/libc.so.6 (0x00007fc97d1f6000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007fc97cfd9000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc97d761000)

您需要在chroot中提供所有这些文件(或等效的文件)。

答案 1 :(得分:1)

可能有点晚了,但你要求的是a script like this。例如,您可以使用以下方法对其进行测试:

mkchroot subdir /bin/sh /bin/ls
sudo chroot subdir /bin/sh

您将拥有shls的最小环境。当然,您可以添加更多可执行文件以获得更完整的rootfs

它主要起作用,但我用mksquashfs进行测试,似乎对libgcc_s.so.1视而不见。它没有被任何其他库动态链接,所以脚本没有看到它,我得到了这个错误。

libgcc_s.so.1 must be installed for pthread_cancel to work