最近一段時間對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 --新的目錄指向新的鏈接。