2010-09-17 40 views
0

作为一个替代我真正的问题:有谁知道一个简单的命令行工具,使chroot监狱?我正在考虑一些将运行命令并将所需的所有内容复制到给定目录中的东西。我看到了一个工具的方向,但它有配置文件,似乎期待着我从X启动它,这两种工具都不适合我的情况。为什么不能chroot工作?


而对于真正的问题:

我试图建立一个chroot监狱,它不工作。这是我所得到的,当我与strace命令:

[email protected]:~/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)       = ? 
[email protected]:~/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盒子上。

+0

我已经添加了linux标签,因为您似乎试图用linux makefile(linux.mak)来构建它。请修复此错误,并添加适当的操作系统标签。 – camh 2010-09-17 01:00:55

+0

@camh:宾果... – BCS 2010-09-17 01:02:19

回答

3

您可能没有可用的加载器和/或共享库。例如,我的系统(64位Debian的SID)上,使需求这样的:

$ 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环境。

+0

我得到或多或少相同的名单,3我有,1不存在任何地方,一个失踪。现在怎么没有显示那个? – BCS 2010-09-17 01:08:50

+0

把东西放在正确的目录之后,那是有效的。 – BCS 2010-09-17 01:18:09

+0

你不需要'linux-vdso.so.1',那实际上不是一个真正的文件。 – caf 2010-09-17 01:23:26

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