我已经查看了现有的问题和答复,但没有一个对我的案例起作用。所以我提出一个新问题。
操作系统: Debian
这是我的步骤:
首先,复制/bin/bash
:
$ sudo mkdir -p /mychroot/bin
$ sudo cp /bin/bash /mychroot/bin/
然后,找到依赖项:
$ sudo ldd /bin/bash
linux-vdso.so.1 (0x00007ffd807ec000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f00c86fa000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f00c86f4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f00c8520000)
/lib64/ld-linux-x86-64.so.2 (0x00007f00c8869000)
复制动态链接的依赖项。如果我复制到错误的目录中,我会尝试所有这些:
$ sudo mkdir -p /mychroot/lib/x86_64-linux-gnu/
$ sudo ldd /bin/bash | grep "=>" | awk '{print $3}' | xargs -I '{}' sudo cp -v '{}' /mychroot/lib/x86_64-linux-gnu/
'/lib/x86_64-linux-gnu/libtinfo.so.6' -> '/mychroot/lib/x86_64-linux-gnu/libtinfo.so.6'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/mychroot/lib/x86_64-linux-gnu/libdl.so.2'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/mychroot/lib/x86_64-linux-gnu/libc.so.6'
# copy deps into lib64 (just in case)
$ sudo mkdir -p /mychroot/lib64
$ sudo ldd /bin/bash | grep "=>" | awk '{print $3}' | xargs -I '{}' sudo cp -v '{}' /mychroot/lib64
'/lib/x86_64-linux-gnu/libtinfo.so.6' -> '/mychroot/lib64/libtinfo.so.6'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/mychroot/lib64/libdl.so.2'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/mychroot/lib64/libc.so.6'
# copy deps into lib (just in case)
$ sudo mkdir -p /mychroot/lib
$ sudo ldd /bin/bash | grep "=>" | awk '{print $3}' | xargs -I '{}' sudo cp -v '{}' /mychroot/lib
'/lib/x86_64-linux-gnu/libtinfo.so.6' -> '/mychroot/lib/libtinfo.so.6'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/mychroot/lib/libdl.so.2'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/mychroot/lib/libc.so.6'
跑步chroot
:
$ sudo chroot /mychroot
chroot: failed to run command ‘/bin/bash’: No such file or directory
任何想法?
更新:意识到我现在需要复制所有文件。尝试sudo cp -r /lib /lib64 /mychroot
进行测试,但仍然无法正常工作。
答案1
原来是/lib64/ld-linux-x86-64.so.2
库丢失了。这些共享库也应该在正确的目录中。
这是最终对我有用的方法(稍微改变了我创建 chroot 环境的位置,但这很简单):
$ mkdir -p ~/mychroot/{bin,lib,lib64}
$ cp /bin/bash ~/mychroot/bin/bash
$ ldd /bin/bash
linux-vdso.so.1
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
$ cp --parent {/lib/x86_64-linux-gnu/libtinfo.so.6,/lib/x86_64-linux-gnu/libdl.so.2,/lib/x86_64-linux-gnu/libc.so.6,/lib64/ld-linux-x86-64.so.2} ~/mychroot
$ sudo chroot ~/mychroot /bin/bash