0

作为我真正问题的替代:有人知道一个简单的命令行工具来制作 chroot 监狱吗?我正在考虑将运行命令并将运行所需的所有内容复制到给定目录中的东西。我看到了一些工具的说明,但它有配置文件,似乎希望我从 X 启动它,而这些都不适合我的情况。


对于真正的问题:

我正在尝试建立一个 chroot 监狱,但它不起作用。这是我在 strace 命令时得到的:

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,即使它应该在那里。有什么我想念的想法吗?

顺便说一句:这是在最近的 Ubuntu 盒子上。

4

2 回答 2

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 中提供所有这些文件(或您的 make 的等效文件)。

于 2010-09-17T00:58:50.887 回答
1

可能有点晚了,但是您要的是这样的脚本。例如,您可以使用以下方法对其进行测试:

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

并且您将拥有一个带有shand的最小环境ls。当然,您可以添加更多可执行文件以获得更完整的rootfs.

它主要工作,但我正在测试它,mksquashfs它似乎对libgcc_s.so.1. 它没有被任何其他库动态链接,因此脚本看不到它,我收到此错误。

libgcc_s.so.1 must be installed for pthread_cancel to work
于 2012-10-23T11:13:15.827 回答