作者:張華 發(fā)表于:2012-3-30
版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本版權(quán)聲明
( http://blog.csdn.net/quqi99 )
1網(wǎng)絡(luò)橋接配置
首先,fedora16對網(wǎng)卡使用了新的命名方式,第一塊網(wǎng)卡不叫eth0,我的T420上叫em1。它為什么做,有興趣可參考文獻(xiàn):
Fedora15的新的網(wǎng)卡命名方式http://www.20ju.com/content/V168885.htm
總之,我不喜歡這種叫法,現(xiàn)在將網(wǎng)卡名稱從em1改回eth0,具體做法請參考文獻(xiàn),(修改fedora16的網(wǎng)絡(luò)接口名,使其變回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)
最后配置橋接(參考文獻(xiàn):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
最后重啟網(wǎng)絡(luò)服務(wù),sudoservicenetworkrestart,需要注意的是,fedora默認(rèn)使用NetworkManager來管理網(wǎng)卡,而briage不支持NetworkManager,所以需要關(guān)閉NetworkManager服務(wù)(sudoserviceNetworkManagerstop&sudoserviceNetworkManager disable)。不然會(huì)報(bào)下列錯(cuò)(tail-f/var/log/message):
http://forums.fedoraforum.org/showthread.php?t=262356
Bringingupinterfaceeth0:Error:Connectionactivationfailed:DevicenotmanagedbyNetworkManagerorunavailable
[FAILED]
RTNETLINKanswers:Fileexists
不過,我沒有使用上述方法,因?yàn)槟汴P(guān)閉NetworkManager服務(wù)的話,你的無線網(wǎng)卡也不能用NetworkManager管理了,所以我在上述的配置中加了“NM_CONTROLLED=no”實(shí)現(xiàn)了同樣的目的。
我機(jī)器的其他條件是:
1)你得確保安裝了libvirtd(yuminstalllibvirtd&servicelibvirtdstart),可用virsh-cqemu:///systemlist命令測試
2)安裝gcc,這個(gè)在安裝pythonmodules時(shí)會(huì)用到
3)mysql的root用戶應(yīng)該有密碼,可用echo"showdatabases"|mysql-uroot-ppassword
4)在命令行中先切換到root用戶,然后再啟動(dòng)eclipse
2通過git下載源碼
1) 安裝java與eclipse,略
2)為eclipse安裝pydev插件(help->installnewsoftwae...,http://pydev.org/updates),然后再"window->preferences":菜單中的Pydev->Interpreter–Python選項(xiàng)卡中點(diǎn)擊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),注意,有的組件會(huì)下載失敗,只需要將https協(xié)議換成git協(xié)議即可。我的代碼下載在/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中導(dǎo)入工程
1)在"GitRepositories"視圖上上步clone下來的每一個(gè)工程的"WorkingDirector"目錄上右鍵點(diǎn)擊選"importprojects"導(dǎo)入工程,再選“importasgeneralproject",直接見下圖吧。
2)依次做完上步之后,然后可以進(jìn)入java視圖,在每個(gè)工程上點(diǎn)右鍵選"Pydev->setasPydevproject",即使是horizon工程也不例外,設(shè)置的是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,則可以運(yùn)行下列命令安裝依賴的pythonmodules,例:
cd/bak/openstack/python-novaclient/
pip-python install-rtools/pip-requires
pip-python install-rtools/test-requires
并對除了你要在eclipse中運(yùn)行的工程(keystone,glance,nova,horion)除外的其他工程(novaclient,keystoneclient)依次運(yùn)行命令:
python setup.py develop
注意,如果在對nova運(yùn)行時(shí)報(bào)“ImportError:cannotimportnamenormalize”,normalize是/usr/lib64/python2.7/local.py里的一個(gè)方法,原因是nova工程的目錄下有一個(gè)locale的目錄將local的名稱空間給蓋了(http://groups.google.com/group/django-users/browse_thread/thread/e8bb9089d9e5be60)
5最小化配置openstack
只需要啟動(dòng)keystone,glance-reg,glance-api,nova-all,dashboard四個(gè)組件就可以啟動(dòng)openstack了,其他的服務(wù)不是必須的。其中,由于dashboard是一個(gè)django工程,我們不需要安裝apache,用django自帶的http服務(wù)器(pythonmanage.pyrunserver)即可啟動(dòng)它。
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)創(chuàng)建數(shù)據(jù)庫:
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)啟動(dòng)
若是在命令行中如下方法啟動(dòng)
./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那段填參數(shù)--config-file/bak/openstack/keystone/etc/keystone.conf --log-config/bak/openstack/keystone/etc/logging.conf -d –debug
初始化數(shù)據(jù)
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)驗(yàn)證
keystoneservice-list
keystoneuser-list
keystonerole-list
架構(gòu)http://keystone.openstack.org/architecture.html
Service,使用keystone的內(nèi)部服務(wù)
Identity,基于角色的驗(yàn)證與授權(quán)
Token,user/tenant的credentials已經(jīng)驗(yàn)證之后生成的隨機(jī)數(shù)
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'
執(zhí)行上述語句要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)數(shù)據(jù)庫:
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)啟動(dòng)
./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中啟動(dòng),注意和上面keystone的一樣,將基準(zhǔn)路徑從${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) 驗(yàn)證
./bin/glance-f index
5.4nova配置
sudoyuminstallscsi-target-utils
sudoservicetgtdrestart(如果啟動(dòng)不了,可換用于fedora17的tgtdrpm包)
sudosystemctlstatustgtd.service
sudovgsnova-volumes
sudolosetup-f--show/bak/kvmimages/nova.img
sudovgcreatenova-volumes/dev/loop0
sudoservicetgtdrestart
sudosystemctlstatustgtd.service
sudosystemctlstatusnetwork.service
實(shí)例路徑:/bak/openstack/nova/instances
查看實(shí)例: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)數(shù)據(jù)庫
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安裝到系統(tǒng)中,但要在eclipse中設(shè)置glance及keystone做nove的工程依賴,如果已安裝,可按下列方法清除。
pip-pythonuninstallglance
rm-rf/usr/bin/glance*
rm-rf/usr/lib/python2.7/site-packages/glance.egg-link
5)啟動(dòng)
vi/bak/openstack/nova/bin/nova-all
#forbinaryin['nova-compute','nova-network','nova-scheduler','nova-cert']:
forbinaryin['nova-compute','nova-network','nova-scheduler']:
啟動(dòng):/bak/openstack/nova/bin/nova-all
5)驗(yàn)證
#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
若網(wǎng)絡(luò)服務(wù)啟動(dòng)失敗,可能要:rm-rf/var/lib/nova/tmp/nova-iptables.lock
如果上述命令不能執(zhí)行,有可能是因?yàn)樗鼰o法找到policy.json文件,需要將eclipse的基準(zhǔn)主路設(shè)為${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)創(chuàng)建dashboard數(shù)據(jù)庫
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
啟動(dòng),cd/bak/openstack/horizon
pythonmanage.py runserver ,用它啟動(dòng)horion時(shí),就可以不需要啟動(dòng)apache
2012-04.05添加:
上述配置是可以正常啟動(dòng)實(shí)例的,但是實(shí)例沒有IP,那是因?yàn)橥私⑻摂M網(wǎng)絡(luò),命令如下:
nova-manage network createpublic10.10.10.0/24 1 256
其他測試用到的命令如下:刪除虛擬網(wǎng)絡(luò):nova-managenetworkdelete 10.10.10.0/24啟動(dòng)實(shí)例:nova boot --image 5213ac41-a588-419f-9b50-c86217433df9--flavor1 --nic net-id=99b1d65e-34ae-4658-8387-ce9724 myserver8
刪除實(shí)例:novadelete myserver8
給實(shí)例加硬盤:nova volume-create--display_namevolhua11(1代表1G)
刪除硬盤:novavolume-attach myserver8 2 /dev/vdb
另外,測試了一下分布式部署,基本上和上面是一樣的,注意以下幾點(diǎn)就行了:
1)之前單機(jī)部署時(shí)控制節(jié)點(diǎn)的/etc/nova/nova.conf中使用的localhost可以不用動(dòng)。因?yàn)楸緛韒ysql, activemq, glance都是安裝在控制節(jié)點(diǎn)上。
2)但是控制節(jié)點(diǎn) glance/etc/default_catalog.tempates中的IP需要從localhost變?yōu)閷?shí)際IP
3)在計(jì)算節(jié)點(diǎn)上的/etc/nova/nova.conf中的IP相應(yīng)改對,如mysql, activemq, glance的IP
4)計(jì)算節(jié)點(diǎn)僅僅只需要啟動(dòng)一個(gè)nova-compute即可工作。但是nova-compute運(yùn)行時(shí)需要通過nova-client, keystone-client, glance-client去調(diào)用相應(yīng)的服務(wù)。但是glance為client弄一個(gè)工程,所以在計(jì)算節(jié)點(diǎn)也得像上文中的方法安裝nova-client, keystone-client, glance三個(gè)依賴工程
另外,如果在eclipse中無法調(diào)試nova工程的話,那是因?yàn)閚ova中使用了一個(gè)叫做eventlet的python協(xié)程庫(大家知道的nginx是java里的一個(gè)非阻塞I/O庫),所謂協(xié)程,是一個(gè)比線程更小的單位,協(xié)程運(yùn)行在用戶空間,所以操作系統(tǒng)無法感知它,所以它需要程序員自己去調(diào)度協(xié)程,這樣用于執(zhí)行協(xié)作式多任務(wù)效率比只用線程的更高。eventlet中有一個(gè)叫monkey patch的東東,它用來在運(yùn)行時(shí)對己有的代碼進(jìn)行修改,達(dá)到hot patch的目的。eventlet使用該技巧用來替換一些python的標(biāo)準(zhǔn)的庫,比如說socket。就是因?yàn)檫@個(gè)東東把一些標(biāo)準(zhǔn)庫給替換成它自己的庫然后與pydev插件沖突,所以造成無法在eclipse中調(diào)試程序。比如說現(xiàn)在想調(diào)試bin/nova-network,那樣可以修改bin/nova-network腳本,將evenlet.monkye_patch()替換成:
eventlet.monkey_patch(all=False,socket=True,select=True)