我有一个使用 buildroot 构建的文件系统,用于使用旧内核和 uClibc 为设备编译代码。
现在我想chroot
进fs。问题是,我没有/bin/bash
,只是/bin/busybox
。
我怎么说要使用 chroot 来busybox ash
代替?
我已经尝试创建到 的链接busybox ash
,但 chroot 仍然显示failed to run command /bin/bash. no such file or directory
.
答案1
chroot /path/to/fs /bin/ash
有关详细信息,请参阅chroot
手册页。
答案2
Busybox 不包含 ldd 脚本。相反,你可以像这样运行它。
LD_TRACE_LOADED_OBJECTS=1 /bin/busybox
libresolv.so.2 => /lib/libresolv.so.2 (0xb6ece000)
libc.so.6 => /lib/libc.so.6 (0xb6d8c000)
/lib/ld-linux-armhf.so.3 (0xb6ef2000)
正如您所看到的,在这种情况下,busybox 依赖于几个库。所以我创建了如下所示的目录结构并能够运行 ls 命令。
# pwd
/home/<jail>
# ls -R
.:
bin lib sbin
./bin:
busybox login ls sh
./lib:
ld-linux-armhf.so.3 libc.so.6 libresolv.so.2
...
# chroot /home/<jail>/ ls
bin lib sbin
答案3
您需要“ldd busybox”并将其链接到的共享库复制到 chroot 中。在库上使用“cp -L src dst”,因为它们通常是模拟链接的。