[已解决]chroot: failed to run command ‘/bin/bash’: No such file or directory

准备利用qemu模拟运行一个ELF文件。命令如下:
$ sudo chroot . ./qemu-mips ./bin/boa
报错如下:
chroot: failed to run command ‘/bin/bash’: No such file or directory
原因:

chroot暂时更改了当前根路径,当前路径下没有/bin/bash。

更改:
$ cp /bin/bash ./bin/
$ sudo chroot . ./qemu-mips ./bin/boa
依然报错:
chroot: failed to run command ‘/bin/bash’: No such file or directory
思考出错的原因:

即使已经把/bin/bash文件拷贝到当前路径的bin目录中,但没有把相应的动态链接库拷贝进去,bash依然无法运行。

解决思路:

查看/bin/bash文件所依赖的动态链接库,然后依次拷贝到相应目录。

$ ldd /bin/bash
linux-vdso.so.1 (0x00007fffce3cd000)
/lib/$LIB/liblsp.so => /lib/lib/x86_64-linux-gnu/liblsp.so (0x00007f9cbd3c1000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f9cbd197000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9cbcf93000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9cbcba2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9cbd8e0000)

$ mkdir lib64
$ cp /lib64/ld-linux-x86-64.so.2 ./lib64/
$ mkdir ./lib/x86_64-linux-gnu
$ cp /lib/x86_64-linux-gnu/liblsp.so ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 ./lib/x86_64-linux-gnu/ 
$ cp /bin/bash ./bin
检验结果:
$ sudo chroot .
bash-4.4# 
大功告成

总结一下,chroot命令报错大概率是因为依赖库没有正确拷贝,导致运行的ELF文件无法正确找到依赖库。一般情况下,可通过ldd命令查看可执行文件所依赖的动态链接库,然后正确拷贝即可(该创建新的文件夹不要偷懒),不要嫌麻烦,此类问题解决较容易。

上一篇:2021-04-11


下一篇:GStreamer-WARNING **: Failed to load plugin '/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstliba