Chinaunix首页 | 论坛 | 博客
  • 博客访问: 783127
  • 博文数量: 231
  • 博客积分: 3217
  • 博客等级: 中校
  • 技术积分: 2053
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 12:01
文章分类

全部博文(231)

文章存档

2015年(1)

2013年(10)

2012年(92)

2011年(128)

分类: LINUX

2012-08-03 14:52:14

如果只是单独 chroot 到一个空目录下会看到这样的出错信息:


# chroot chroot/
chroot: cannot run command `/bin/bash': No such file or directory




根据出错的提示知道是没有 bash ,因为 chroot 到一个新的根目录,那么这个新的根目录没有命令解析器肯定是不行的。解决的办法是将 bash 拷贝到你要 chroot 目录的 bin 目录下。但是在拷贝完后,再 chroot 一次,仍然发现还是同样的出错提示,这是因为 bash 的运行需要一些依赖库,通过 ldd 命令可以看到这些依赖库是什么:

# ldd /bin/bash
        linux-gate.so.1 =>  (0x001cf000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0x07dbc000)
        libdl.so.2 => /lib/libdl.so.2 (0x009a4000)
        libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x0081b000)
        /lib/ld-linux.so.2 (0x007fc000)


所以我们需要将这些相关的库拷贝到要 chroot 目录下的相应位置中,比如也要在该目录中建立一个 lib 目录,然后将 libtermcap.so.2 等库拷贝到其中。这里需要注意的是,我们即使搜索全盘,都不会找到 linux-gate.so.1 这个文件,它只是个虚拟的DSO(virtual DSOdynamically shared object)---一个在每个进程的存储空间(process’ memory)指定的地址点被内核暴露出来的共享对象。也就是说它由内核提供,这里就无需关注太多。


当拷贝完其它的相关库文件到相应的目录后,再 chroot 一下就会看到:

[root@centos beyes]# chroot chroot/
bash-3.2#
bash-3.2# pwd
/



可见已经 chroot 成功,但这只是最基本的,很多命令你也无法运行,这同样是因为它们没有被拷贝进来。此时按 Ctrl + D 可以退出该 shell 环境。
阅读(9854) | 评论(0) | 转发(0) |
0

上一篇:C++学习参考书推荐

下一篇:python super()

给主人留下些什么吧!~~