代码之家  ›  专栏  ›  技术社区  ›  BCS

为什么chroot不起作用?

  •  0
  • BCS  · 技术社区  · 14 年前


    真正的问题是:

    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盒子。

    2 回复  |  直到 14 年前
        1
  •  3
  •   camh    14 年前

    您可能没有可以使用的加载程序和/或共享库。例如,在我的系统(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中提供所有这些文件(或等效文件)。

        2
  •  1
  •   Avio    12 年前

    a script like this . 例如,可以使用以下工具进行测试:

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

    你将有一个最小的环境 sh ls . 当然,您可以添加更多的可执行文件以获得更完整的 rootfs .

    它基本上是有效的,但我正在用 mksquashfs 它似乎对 libgcc_s.so.1

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