2010-09-17 20 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