Linux构造chroot环境

关于chroot的简介,可以参考IBM开发者网站上的这篇理解chroot,本文演示了如何构造一个最简单的chroot环境,本文实验环境为CentOS 6.4 64bit。

[root@os ~]# dd if=/dev/zero of=123.img count=512K bs=20480
[root@os ~]# /sbin/mkfs.ext3 123.img  
#格式化为ext3时可能会提示123.img is not a block special device.不用管它,直接按y继续
[root@os ~]# mkdir /mnt/123
[root@os ~]# mount -o loop 123.img /mnt/123
[root@os ~]# chroot /mnt/123
chroot: failed to run command `/bin/bash': No such file or directory

发生了错误,看来chroot环境不存在/bin/bash(事实也的确不存在),那我们从真实系统里拷贝一个过去吧:)

[root@os ~]# mkdir /mnt/123/bin
[root@os ~]# cp -av /bin/bash /mnt/123/bin/bash
[root@os ~]# chroot /mnt/123
chroot: failed to run command `/bin/bash': No such file or directory

错误依旧,原因是因为/bin/bash需要调用相关的库,因新环境不存在相关的库文件,因此bash不能运行,从而报上述错误,解决方法是利用ldd /bin/bash查找到其所需要的运行库

[root@os ~]# for i in `ldd /bin/bash`;do echo $i;done |grep -v = |grep -v 0x |grep /|xargs ls -l
lrwxrwxrwx. 1 root root 10 Oct 23 18:25 /lib64/ld-linux-x86-64.so.2 -> ld-2.12.so
lrwxrwxrwx. 1 root root 12 Oct 23 18:25 /lib64/libc.so.6 -> libc-2.12.so
lrwxrwxrwx. 1 root root 13 Oct 23 18:25 /lib64/libdl.so.2 -> libdl-2.12.so
lrwxrwxrwx. 1 root root 15 Oct 22 22:44 /lib64/libtinfo.so.5 -> libtinfo.so.5.7

把如上这些库文件和软链接全部都拷入新环境

[root@os ~]# mkdir /mnt/123/lib64/
[root@os ~]# cp -av /lib64/ld-linux-x86-64.so.2 /lib64/ld-2.12.so \
> /lib64/libc.so.6 /lib64/libc-2.12.so /lib64/libdl.so.2  \
> /lib64/libdl-2.12.so /lib64/libtinfo.so.5 \
> /lib64/libtinfo.so.5.7 /mnt/123/lib64 \
>  /mnt/123/lib64
……

然后再试一次

[root@os ~]# chroot /mnt/123
bash-4.1#     切换成功!
bash-4.1# ls   切换过来任何命令都无法使用!
bash: ls: command not found
bash-4.1# exit    也可按Ctrl + D键退出环境
exit
[root@os ~]#

参考资料:http://g.51cto.com/mike/45296

发表评论

电子邮件地址不会被公开。