本文總結Ubuntu 14.04下部署DevStack的過程以及一些可能遇到的問題。
一、安裝
以下的操作最好在普通用戶下進行,至少在git clone devstack的時候使用普通用戶,這樣可以避免一些不必要的權限問題,當然,以后也可以使用權限更改命令來修改普通用戶的權限,這種方法下文將會介紹。
1.首先獲取系統更新內容
$ sudo apt-get update
2.接着升級當前發行版
$ sudo apt-get dist-upgrade
3.重啟電腦令更新生效
4.安裝git,已有的可以忽略本步
$ sudo apt-get install git
5.獲取devstack源碼放置到TARGET_DIR/devstack目錄中,然后將git分支從默認的master切換到穩定版的icehouse
$ cd TARGET_DIR
$ git clone https://github.com/openstack-dev/devstack.git
$ git checkout -b origin/stable/icehouse
6.更該pip源,需要新建pip.conf文件指定目標源(這里以豆瓣的pip源為例),避免因為pip源連接失敗引起的安裝失敗
$ mkdir ~/.pip $ vim ~/.pip/pip.conf --------pip.conf-------- [global] index-url=http://pypi.douban.com/simple/
7.采取預先配置安裝組件的方式,編輯並生成localrc文件,或將已有的localrc移入devstack/目錄
$ cp localrc TARGET_DIR/devstack/
關於localrc文件的具體內容和解釋說明,請參考這篇博文。
8.運行stack.sh腳本,注意只能使用非root用戶執行。
$ cd TARGET_DIR/devstack
$ ./stack.s
二、安裝過程中遇到的問題
1.pip源安裝失敗
目前pip采用python的官方源,因此可能存在連接問題,可以將pip源替換成國內的(如豆瓣的),具體參考上面安裝DevStack時的第6步。
2.權限問題
(1)由於我平成喜歡使用root用戶進行操作,所以在git clone devstack時可能使用的是root用戶,創建的devstack目錄的屬主和屬組都是root,這樣,在執行stack.sh腳本時,需要在devstack目錄下創建一些文件,就會造成權限錯誤。這個問題比較簡單,可以通過chmod更改devstack目錄的權限,也可以通過chown更改devstack的屬主與屬組。
(2)另一個問題是devstack下載安裝openstack組件的目錄權限問題,比如我采用了localrc中默認的/opt/stack目錄來存放各個組件,因此也可能存在安裝腳本對該目錄權限不足的問題,具體的解決方案也比較簡單,只要更改該目錄的訪問權限就行了。
$ chmod 777 /opt/stack -R
3.組件下載失敗
安裝腳本在第一遍安裝組件時會下載組件的源代碼,由於網絡連接的問題,這時很容易出現錯誤,簡單的解決方案就是當安裝時的錯誤信息提示是組件下載失敗時,手動到Github上克隆其源代碼,放置在自己設定的組件目錄(如/opt/stack)中,然后使用git checkout命令切換到目標分支(這里是origin/stable/icehouse),重新運行安裝腳本,就可以通過。
如果Github的克隆速度非常緩慢,可以在localrc配置文件的GIT_BASE字段交替嘗試git://git.openstack.org和https://github.com兩個選項,在localrc文件的服務分支選擇選項上(如NOVA_BRANCH,CINDER_BRANCH,KEYSTONE_BRANCH)等字段設置為stable/icehouse,多試幾遍就能夠解決。
4.Bug:'amqplib' is not in global_requirements.txt
這是一個已公布的Bug
詳細解決可以參考OpenStack團隊的code review
如果遇到,需要手動添加一些依賴,同時將localrc中的RECLONE置為false
$ vim /opt/stack/requirements/global_requirements.txt //假設你的openstack組件目錄/stack是在默認的/opt目錄中。 --------Add Content Below------- amqplib>=0.6.1
$ vim TARGET_DIR/devstack/localrc
--------Set RECLONE to FALSE--------
RECLONE=FALSE
重新執行stack.sh,這個問題就能通過。
5.Bug: Service n-novnc is not running
這是一個已公布的bug,原因是nova依賴的對象存在缺陷。
我將這個問題報告在
https://bugs.launchpad.net/devstack/+bug/1361108
根據評論得知,這是一個老問題,最早出現在havana版本的nova上,具體的內容可以參考這里
https://bugs.launchpad.net/ubuntu/+source/nova/+bug/1228490
因為nova依賴的websockify存在漏洞所致。后來websockify 0.5.1解決了這個問題,nova團隊也對nova的依賴關系進行了相應的調整
https://github.com/openstack/nova/commit/3eb67b811ae2442bd86781d9f1c4078a982cfe84
但是,使用pip安裝時默認安裝最新版本的websockify 0.6.0,這里無語的是先前版本0.5.1 fix的bug又回來了。因此遇到這個問題時需要手動降級websockify。
$ sudo pip uninstall websockify $ sudo pip install websockify==0.5.1
我將這個問題匯報給了websockify的團隊
https://github.com/kanaka/websockify/issues/136
目前問題仍然open,希望得到他們的答復。