最近一段时间对warden深入的了解和研究,发现了不少问题,由于cloudfundry推出比较早,始于(2011年4月12日),warden作为核心的资源隔离容器,更是在第二版本中才推出。
很长一段时间觉得warden是一个虚拟的linux环境。这样理解本没有什么错误,但是仔细想想,warden容器可以创建很多的Container,其实每一个Container才真正是一个虚拟的linux环境,其实warden有点类似于vmware workstation,一个虚拟化管理工具。如果在warden部署环境,每次都在container中创建的话,有很多问题:
1.权限问题:不能支持系统权限以及sudo都不可以运行,这个是他的局限性。
2.环境部署问题:部署的软件都不可以在warden的系统路劲,(访问不了),每次执行我们需要他的绝对路劲,这个很蛋疼。
3.生命周期问题:一旦container销毁了,就完蛋了,啥也没有了,新的container还要重新装。
综合上面问题,在container中部署环境无疑使不明智的,而且极其浪费资源,从而我们需要另辟蹊径,我们注意到在/tmp/warden/rootfs/这个目录,其实这个相当于warden的系统目录,这个管理着所有container的运行环境以及配置等等文件。
用chroot “/tmp/warden/rootfs” env -i PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" /bin/bash命令,这个命令改变了root跟目录,这样我们在运行的时候我们命令窗口默认的跟目录和warden的跟目录一样了,这个时候我们在这个跟目录装软件就可以了。
运行apt-get install ruby,安装好ruby,然后我们进入warden中,运行
run --handle ********** --script 'ruby -v'
结果显示ruby 1.8.7 (2010-01-10 patchlevel 249)[x86_64-linux]
说明安装成功啦。。。
我们我们在安装一个python2.7.只需要在chroot这个命令窗口安装就可以了,但是这个时候运行
run --handle ********** --script 'python -v'
结果显示还是2.6.5
因为这个是warden默认安装的python,我们运行
run --handle ********** --script '/usr/local/bin/python -V'
显示python2.7.5
说明安装时成功了,但是被系统默认的覆盖掉了
这个时候我们把系统默认的链接给删了,
cd /usr/bin/ --到默认的额系统目录
rm -f python --删除链接
ln -s /usr/local/bin/python /usr/bin/python --新的目录指向新的链接。