作者:張華 發表于:2012-3-30
版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本版權聲明
( http://blog.csdn.net/quqi99 )
1網絡橋接配置
首先,fedora16對網卡使用了新的命名方式,第一塊網卡不叫eth0,我的T420上叫em1。它為什么做,有興趣可參考文獻:
Fedora15的新的網卡命名方式http://www.20ju.com/content/V168885.htm
總之,我不喜歡這種叫法,現在將網卡名稱從em1改回eth0,具體做法請參考文獻,(修改fedora16的網絡接口名,使其變回eth0http://www.bitbi.biz/fedora-2/%E4%BF%AE%E6%94%B9fedora-16-%E7%9A%84%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E5%90%8D%EF%BC%8C%E4%BD%BF%E5%85%B6%E5%8F%98%E5%9B%9E-eth0-2685)
最后配置橋接(參考文獻:http://blog.bodhizazen.net/linux/fedora-15-virt-manager-bridged-networking/):
sudoyuminstallbridge-utils
sudovi/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
#changethehardwareaddresstomatchthehardwareaddressyourNICuses
HWADDR=00:21:CC:60:D6:1A
ONBOOT=yes
#BOOTPROTO=dhcp
#MODE=Managed
BRIDGE=br100
NM_CONTROLLED=no
sudovi/etc/sysconfig/network-scripts/ifcfg-br100
DEVICE=br100
TYPE=Bridge
BOOTPROTO=dhcp
#BOOTPROTO=static
#IPADDR=192.168.99.100
#NETWORK=192.168.99.0
#NETMASK=255.255.255.0
#GATEWAY=192.168.99.1
#DNS1=202.106.195.30
ONBOOT=yes
NM_CONTROLLED=no
最后重啟網絡服務,sudoservicenetworkrestart,需要注意的是,fedora默認使用NetworkManager來管理網卡,而briage不支持NetworkManager,所以需要關閉NetworkManager服務(sudoserviceNetworkManagerstop&sudoserviceNetworkManager disable)。不然會報下列錯(tail-f/var/log/message):
http://forums.fedoraforum.org/showthread.php?t=262356
Bringingupinterfaceeth0:Error:Connectionactivationfailed:DevicenotmanagedbyNetworkManagerorunavailable
[FAILED]
RTNETLINKanswers:Fileexists
不過,我沒有使用上述方法,因為你關閉NetworkManager服務的話,你的無線網卡也不能用NetworkManager管理了,所以我在上述的配置中加了“NM_CONTROLLED=no”實現了同樣的目的。
我機器的其他條件是:
1)你得確保安裝了libvirtd(yuminstalllibvirtd&servicelibvirtdstart),可用virsh-cqemu:///systemlist命令測試
2)安裝gcc,這個在安裝pythonmodules時會用到
3)mysql的root用戶應該有密碼,可用echo"showdatabases"|mysql-uroot-ppassword
4)在命令行中先切換到root用戶,然后再啟動eclipse
2通過git下載源碼
1) 安裝java與eclipse,略
2)為eclipse安裝pydev插件(help->installnewsoftwae...,http://pydev.org/updates),然后再"window->preferences":菜單中的Pydev->Interpreter–Python選項卡中點擊AutoConfig按鈕配置python
3) 為eclipse安裝egit插件(http://download.eclipse.org/egit/updates)
4)為eclipse安裝django插件:
installdjangopluginforpython,firstdownloadhttp://www.djangoproject.com/download/1.3.1/tarball/
sudo
python
setup.py
installexport
PATH=/usr/lib/python2.7/site-packages/django/bin:$PATH
django-admin.py
–
version
django-admin.py
startproject
myFirstDjango
cd
myFirstDjango
sudo
chmod
777
*
./manage.py
runserver
http://127.0.0.1:8000/
5)在eclipse中通過git插件clone下列組件的master分支(cloneagitrepository),注意,有的組件會下載失敗,只需要將https協議換成git協議即可。我的代碼下載在/bak/openstack目錄下。
#computeservice
NOVA_REPO=https://github.com/openstack/nova.git
#storageservice
SWIFT_REPO=https://github.com/openstack/swift.git
#imagecatalogservice
GLANCE_REPO=https://github.com/openstack/glance.git
#unifiedauthsystem(managesaccounts/tokens)
KEYSTONE_REPO=https://github.com/openstack/keystone.git
#awebsockets/html5orflashpoweredVNCconsoleforvminstances
NOVNC_REPO=https://github.com/cloudbuilders/noVNC.git
#djangopoweredwebcontrolpanelforopenstack
HORIZON_REPO=https://github.com/openstack/horizon.git
#pythonclientlibrarytonovathathorizon(andothers)use
NOVACLIENT_REPO=https://github.com/openstack/python-novaclient.git
#pythonkeystoneclientlibrarytonovathathorizonuses
KEYSTONECLIENT_REPO=https://github.com/openstack/python-keystoneclient
#quantumservice
QUANTUM_REPO=https://github.com/openstack/quantum
#quantumclient
QUANTUM=https://github.com/openstack/python-quantumclient
#Tempesttestsuite
https://github.com/openstack/tempest.git
#melangeservice
https://github.com/openstack/melange.git
#pythonmelangeclientlibrary
https://github.com/openstack/python-melangeclient.git
#swiftclient
https://github.com/chmouel/python-swiftclient.git
3在eclipse中導入工程
1)在"GitRepositories"視圖上上步clone下來的每一個工程的"WorkingDirector"目錄上右鍵點擊選"importprojects"導入工程,再選“importasgeneralproject",直接見下圖吧。
2)依次做完上步之后,然后可以進入java視圖,在每個工程上點右鍵選"Pydev->setasPydevproject",即使是horizon工程也不例外,設置的是pydevproject,而不是django工程
3安裝一些依賴包
install python-pip,nowpipisareplacementfor`easy_install`
sudo yumsearchpython-pip
sudo yuminstallpython-pip.noarch
sudo yuminfopython-pip.noarch
sudo yuminstallgcc;
sudo yuminstallpython-devel
sudo yuminstallpython-greenlet
sudo yuminstallMySQL-python
sudo yuminstalleuca2ools
sudo yuminstalldnsmasq
sudo yuminstallscsi-target-utils
install MQ
rabbitmqconfiguration
sudoyuminstallrabbitmq-server
sudoservicerabbitmq-serverstart
sudochkconfigrabbitmq-serveron
changetherabbitpasswordsincethedefaultis"guest"
sudorabbitmqctlchange_passwordguestpassword
sudorabbitmqctlstatus
install mysql
sudoyuminstallmysql-serverphp-mysql
sudoservicemysqldstart
sudochkconfigmysqldon
mysql-uroot-ppasswordSETPASSWORDFOR'root'@'localhost'=PASSWORD('password');
sudomysql-uroot-ppassword-h127.0.0.1-e"GRANTALLPRIVILEGESON*.*TO'root'@'%'identifiedby'password';"
sudocp/usr/share/mysql/my-small.cnf/etc/my.cnf
sudosed-i's/127.0.0.1/0.0.0.0/g'/etc/my.cnf
install libvirt
sudo yuminstalllibvirt
sudo servicelibvirtdrestart
6) sudoyuminstallpython-sqlite2python-lxmlpython-greenlet-develpython-ldap
4 安裝依賴的Pythonmodules
依次檢查,如果有的工程下的目錄有tools/pip-requires,則可以運行下列命令安裝依賴的pythonmodules,例:
cd/bak/openstack/python-novaclient/
pip-python install-rtools/pip-requires
pip-python install-rtools/test-requires
并對除了你要在eclipse中運行的工程(keystone,glance,nova,horion)除外的其他工程(novaclient,keystoneclient)依次運行命令:
python setup.py develop
注意,如果在對nova運行時報“ImportError:cannotimportnamenormalize”,normalize是/usr/lib64/python2.7/local.py里的一個方法,原因是nova工程的目錄下有一個locale的目錄將local的名稱空間給蓋了(http://groups.google.com/group/django-users/browse_thread/thread/e8bb9089d9e5be60)
5最小化配置openstack
只需要啟動keystone,glance-reg,glance-api,nova-all,dashboard四個組件就可以啟動openstack了,其他的服務不是必須的。其中,由于dashboard是一個django工程,我們不需要安裝apache,用django自帶的http服務器(pythonmanage.pyrunserver)即可啟動它。
5.1配置keystone
1)配置:
vi/bak/openstack/keystone/etc/keystone.conf
connection=mysql://root:password@localhost/keystone
driver=keystone.token.backends.sql.Token
driver=keystone.contrib.ec2.backends.sql.Ec2
2)創建數據庫:
mysql-uroot-ppassword-e'dropdatabasekeystone'
mysql-uroot-ppassword-e'createdatabasekeystone'
mysql-uroot-ppassword-e"grantallon*.*toroot@'%'identifiedby'password'"
cd/bak/openstack/keystone&&./bin/keystone-managedb_sync
3)啟動
若是在命令行中如下方法啟動
./bin/keystone-all--config-file /bak/openstack/keystone/etc/keystone.conf --log-config/bak/openstack/keystone/etc/logging.conf -d –debug
若是在eclipse中,如下圖,一定要將Arguments的workingdirctory中的${workspace_loc:keystone/bin}改為{workspace_loc:keystone},如果你不想這樣改的話,那就你就得在Programarguments那段填參數--config-file/bak/openstack/keystone/etc/keystone.conf --log-config/bak/openstack/keystone/etc/logging.conf -d –debug
初始化數據
SERVICE_TOKEN=ADMIN
ADMIN_PASSWORD=password
SERVICE_ENDPOINT=http://localhost:35357/v2.0
exportSERVICE_TOKEN=$SERVICE_TOKEN
exportSERVICE_ENDPOINT=$SERVICE_ENDPOINT
functionget_id(){
echo`$@|grepid|awk'{print$4}'`
}
ADMIN_TENANT=`get_idkeystonetenant-create--name=admin`
ADMIN_USER=`get_idkeystoneuser-create--name=admin--pass="$ADMIN_PASSWORD"--email=admin@example.com`
ADMIN_ROLE=`get_idkeystonerole-create--name=admin`
KEYSTONEADMIN_ROLE=`get_idkeystonerole-create--name=KeystoneAdmin`
KEYSTONESERVICE_ROLE=`get_idkeystonerole-create--name=KeystoneServiceAdmin`
keystoneuser-role-add--user$ADMIN_USER--role$ADMIN_ROLE--tenant_id$ADMIN_TENANT
keystoneuser-role-add--user$ADMIN_USER--role$KEYSTONEADMIN_ROLE--tenant_id$ADMIN_TENANT
keystoneuser-role-add--user$ADMIN_USER--role$KEYSTONESERVICE_ROLE--tenant_id$ADMIN_TENANT
echo$?
5)驗證
keystoneservice-list
keystoneuser-list
keystonerole-list
架構http://keystone.openstack.org/architecture.html
Service,使用keystone的內部服務
Identity,基于角色的驗證與授權
Token,user/tenant的credentials已經驗證之后生成的隨機數
Catalog,注冊的后端,像sql,kvs,ldap
Policy,提供rule-basedauthorizationengine
nosetests-s-vtest_backend_sql.py
keystoneservice-create--nameCOMPUTE_ID--typecompute--description'OpenStackComputeservice'
keystoneendpoint-create--region=RegionOne--service_id=COMPUTE_ID--publicurl='http://localhost:$(compute_port)s/v1.1/$(tenant_id)s'--internalurl='http://localhost:$(compute_port)s/v1.1/$(tenant_id)s'–adminurl='http://localhost:$(compute_port)s/v1.1/$(tenant_id)s'
keystoneendpoint-create--region=RegionOne--service_id=IDENTITY_ID--publicurl='http://localhost:$(public_port)s/v2.0'--internalurl='http://localhost:$(public_port)s/v2.0'--adminurl='http://localhost:$(admin_port)s/v2.0'
keystoneendpoint-create--region=RegionOne--service_id=IMAGE_ID--publicurl='http://localhost:9292/v1'--internalurl='http://localhost:9292/v1'--adminurl='http://localhost:9292/v1'
執行上述語句要keystone.conf文件中有:
driver= keystone.catalog.backends.sql.Catalog
5.2配置glance
1)配置
vi/bak/openstack/glance/etc/glance-registry.conf
sql_connection=mysql://root:password@localhost/glance
vi/bak/openstack/glance/etc/glance-api-paste.conf
vi/bak/openstack/glance/etc/glance-registry-paste.conf
#admin_tenant_name=%SERVICE_TENANT_NAME%
#admin_user=%SERVICE_USER%
#admin_password=%SERVICE_PASSWORD%
admin_token=ADMIN
vi/bak/openstack/glance/etc/glance-api.conf
vi/bak/openstack/glance/etc/glance-registry.conf
[paste_deploy]
flavor=keystone
debug=True
#log_file=/var/log/glance/api.log
2)數據庫:
mysql-uroot-ppassword-e'DROPDATABASEIFEXISTSglance;'
mysql-uroot-ppassword-e'CREATEDATABASEglance;'
mysql-uroot-ppassword-e"grantallon*.*toroot@'%'identifiedby'password'"
cd/bak/openstack/glance&&./bin/glance-managedb_sync
3)啟動
./bin/glance-registry--config-file=/bak/openstack/glance/etc/glance-registry.conf
filesystem_store_datadir=/var/lib/glance/images
./bin/glance-api–config-file=/bak/openstack/glance/etc/glance-api.conf
如果是在eclipse中啟動,注意和上面keystone的一樣,將基準路徑從${workspace_loc:glance/bin}改為${workspace_loc:glance},這樣改了之后,就直接從${workspace_loc:glance/}/etc/glance目錄讀配置文件,而不是從/etc/glance讀
4) 上傳鏡像
cd /bak/openstack/glance
export FILES=/bak/openstack/glance
mkdir -p $FILES/images
exportOS_AUTH_USER=admin
export OS_AUTH_KEY=password
exportOS_AUTH_TENANT=admin
exportOS_AUTH_URL=http://localhost:35357/v2.0
exportOS_AUTH_STRATEGY=keystone
sudo wget -chttp://images.ansolabs.com/tty.tgz -O $FILES/images/tty.tgz
tar-zxf $FILES/images/tty.tgz -C $FILES/images
TOKEN=`curl -s -d"{\"auth\":{\"passwordCredentials\":{\"username\": \"$OS_AUTH_USER\", \"password\":\"$OS_AUTH_KEY\"}, \"tenantName\":\"$OS_AUTH_TENANT\"}}" -H "Content-type:application/json" http://localhost:5000/v2.0/tokens | python -c"import sys; import json; tok = json.loads(sys.stdin.read());print tok['access']['token']['id'];"`
RVAL=`./bin/glanceadd -A $TOKEN name="cirros-kernel" is_public=truecontainer_format=aki disk_format=aki <$FILES/images/aki-tty/image`
KERNEL_ID=`echo $RVAL | cut -d":"-f2 | tr -d " "`
RVAL=`./bin/glance add-A $TOKEN name="cirros-ramdisk" is_public=truecontainer_format=ari disk_format=ari<$FILES/images/ari-tty/image`
RAMDISK_ID=`echo $RVAL | cut-d":" -f2 | tr -d " "`
./bin/glance add -A$TOKEN name="cirros" is_public=true container_format=amidisk_format=ami kernel_id=$KERNEL_ID ramdisk_id=$RAMDISK_ID<$FILES/images/ami-tty/image
5) 驗證
./bin/glance-f index
5.4nova配置
sudoyuminstallscsi-target-utils
sudoservicetgtdrestart(如果啟動不了,可換用于fedora17的tgtdrpm包)
sudosystemctlstatustgtd.service
sudovgsnova-volumes
sudolosetup-f--show/bak/kvmimages/nova.img
sudovgcreatenova-volumes/dev/loop0
sudoservicetgtdrestart
sudosystemctlstatustgtd.service
sudosystemctlstatusnetwork.service
實例路徑:/bak/openstack/nova/instances
查看實例:virshlist--all
查看iscsisession:iscsiadm--modenode
刪除iscsisession:sudoiscsiadm--modenode--logout&&sudoiscsiadm--modenode--opdelete
1)配置文件
vi/etc/nova/nova.conf
--verbose
--logdir=/var/log/nova
--state_path=/var/lib/nova
--lock_path=/var/lib/nova/tmp
--instances_path=/var/lib/nova/instances
--debug=True
--scheduler_driver=nova.scheduler.simple.SimpleScheduler
--dhcpbridge_flagfile=/etc/nova/nova.conf
--fixed_range=10.0.0.0/24
--s3_host=127.0.0.1
--network_manager=nova.network.manager.FlatDHCPManager
--volume_group=nova-volumes
--volume_name_template=volume-%08x
--iscsi_helper=tgtadm
--osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
--my_ip=localhost
--public_interface=br100
--vlan_interface=eth0
--sql_connection=mysql://root:password@localhost/nova
--libvirt_type=kvm
--instance_name_template=instance-%08x
--novncproxy_base_url=http://127.0.0.1:6080/vnc_auto.html
--xvpvncproxy_base_url=http://127.0.0.1:6081/console
--vncserver_listen=127.0.0.1
--vncserver_proxyclient_address=127.0.0.1
--api_paste_config=/etc/nova/api-paste.ini
--image_service=nova.image.glance.GlanceImageService
--ec2_dmz_host=127.0.0.1
--rabbit_host=localhost
--rabbit_password=password
--glance_api_servers=127.0.0.1:9292
--force_dhcp_release
--connection_type=libvirt
--firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
--flat_network_bridge=br100
--flat_interface=eth0
--auth_strategy=keystone
cp/bak/openstack/nova/etc/nova/api-paste.ini/etc/nova/
vi/bak/openstack/nova/etc/nova/api-paste.ini
#admin_tenant_name=%SERVICE_TENANT_NAME%
#admin_user=%SERVICE_USER%
#admin_password=%SERVICE_PASSWORD%
admin_token=ADMIN
2)數據庫
mysql-uroot-ppassword-e'DROPDATABASEIFEXISTSnova;'
mysql-uroot-ppassword-e'CREATEDATABASEnova;'
cd/bak/openstack/nova&&sudo./bin/nova-managedbsync
3)fixthepydevproblemwith"eventlet.monkey_patch()"
cd/bak/openstack/nova/bin
perl-pi-e's/eventlet\.monkey_patch\(\)/eventlet\.monkey_patch\(all=False,socket=True,select=True\)/g'*
4)千萬不要將glance安裝到系統中,但要在eclipse中設置glance及keystone做nove的工程依賴,如果已安裝,可按下列方法清除。
pip-pythonuninstallglance
rm-rf/usr/bin/glance*
rm-rf/usr/lib/python2.7/site-packages/glance.egg-link
5)啟動
vi/bak/openstack/nova/bin/nova-all
#forbinaryin['nova-compute','nova-network','nova-scheduler','nova-cert']:
forbinaryin['nova-compute','nova-network','nova-scheduler']:
啟動:/bak/openstack/nova/bin/nova-all
5)驗證
#forkeystoneclient
exportSERVICE_ENDPOINT=http://localhost:35357/v2.0
exportSERVICE_TOKEN=ADMIN
#fornovaclient
exportNOVA_AUTH_STRATEGY=keystone
exportNOVA_USERNAME=admin
exportNOVA_PASSWORD=password
exportNOVA_PROJECT_ID=admin
exportNOVA_URL=http://localhost:35357/v2.0
exportNOVA_VERSION=1.1
#for glanceclient
export OS_AUTH_USER=admin
exportOS_AUTH_KEY=password
export OS_AUTH_TENANT=admin
exportOS_AUTH_URL=http://localhost:35357/v2.0
exportOS_AUTH_STRATEGY=keystone
nova list
nova flavor-list
nova image-list
nova –debugboot--flavorm1.tiny--image5213ac41-a588-419f-9b50-c86217433df9quqitestserver
nova-manageservicelist
若網絡服務啟動失敗,可能要:rm-rf/var/lib/nova/tmp/nova-iptables.lock
如果上述命令不能執行,有可能是因為它無法找到policy.json文件,需要將eclipse的基準主路設為${workspace_loc:nova/etc/nova}
5.3配置dashboard
mv /bak/openstack/horizon/openstack_dashboard/local /bak/openstack/horizon/openstack_dashboard/local/local_settings.py
vi/bak/openstack/horizon/openstack_dashboard/local/local_settings.py
DATABASES= {
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'dash',
'USER':'root',
'PASSWORD':'password',
'HOST':'localhost',
'default-character-set':'utf8',
},
}
vi/bak/openstack/horizon/manage.py
#!/usr/bin/envpython
fromdjango.core.management import execute_manager
importos, sys
ROOT_PATH= os.path.dirname(os.path.abspath(__file__))
ifROOT_PATH not in sys.path:
sys.path.insert(0,ROOT_PATH)
importopenstack_dashboard.settings
if__name__ == "__main__":
execute_manager(openstack_dashboard.settings)
1)創建dashboard數據庫
sudo
mysql
-uroot
-ppassword
-e
'create
database
dash';
sudomysql-uroot-ppassword-e"grantallon*.*toroot@'%'identifiedby'password'"
setPYTHONPATH=/bak/openstack/glance:/bak/openstack/keystone
cd/bak/openstack/horizon/
pythonmanage.pysyncdb
配置它工程依賴glance,keystone
將它自身的頂級目錄openstack_dashboard加入到PYTHONPATH
啟動,cd/bak/openstack/horizon
pythonmanage.py runserver ,用它啟動horion時,就可以不需要啟動apache
2012-04.05添加:
上述配置是可以正常啟動實例的,但是實例沒有IP,那是因為忘了建立虛擬網絡,命令如下:
nova-manage network createpublic10.10.10.0/24 1 256
其他測試用到的命令如下:刪除虛擬網絡:nova-managenetworkdelete 10.10.10.0/24啟動實例:nova boot --image 5213ac41-a588-419f-9b50-c86217433df9--flavor1 --nic net-id=99b1d65e-34ae-4658-8387-ce9724 myserver8
刪除實例:novadelete myserver8
給實例加硬盤:nova volume-create--display_namevolhua11(1代表1G)
刪除硬盤:novavolume-attach myserver8 2 /dev/vdb
另外,測試了一下分布式部署,基本上和上面是一樣的,注意以下幾點就行了:
1)之前單機部署時控制節點的/etc/nova/nova.conf中使用的localhost可以不用動。因為本來mysql, activemq, glance都是安裝在控制節點上。
2)但是控制節點 glance/etc/default_catalog.tempates中的IP需要從localhost變為實際IP
3)在計算節點上的/etc/nova/nova.conf中的IP相應改對,如mysql, activemq, glance的IP
4)計算節點僅僅只需要啟動一個nova-compute即可工作。但是nova-compute運行時需要通過nova-client, keystone-client, glance-client去調用相應的服務。但是glance為client弄一個工程,所以在計算節點也得像上文中的方法安裝nova-client, keystone-client, glance三個依賴工程
另外,如果在eclipse中無法調試nova工程的話,那是因為nova中使用了一個叫做eventlet的python協程庫(大家知道的nginx是java里的一個非阻塞I/O庫),所謂協程,是一個比線程更小的單位,協程運行在用戶空間,所以操作系統無法感知它,所以它需要程序員自己去調度協程,這樣用于執行協作式多任務效率比只用線程的更高。eventlet中有一個叫monkey patch的東東,它用來在運行時對己有的代碼進行修改,達到hot patch的目的。eventlet使用該技巧用來替換一些python的標準的庫,比如說socket。就是因為這個東東把一些標準庫給替換成它自己的庫然后與pydev插件沖突,所以造成無法在eclipse中調試程序。比如說現在想調試bin/nova-network,那樣可以修改bin/nova-network腳本,將evenlet.monkye_patch()替換成:
eventlet.monkey_patch(all=False,socket=True,select=True)