1. 程式人生 > >libvirtd初始化異常(/usr/local/sbin/libvirtd: initialization failed)解決

libvirtd初始化異常(/usr/local/sbin/libvirtd: initialization failed)解決

今天在一臺通過apt-get安裝過老版本libvirt(0.9.8)的機器上安裝OpenStack,由於老版本的libvirt有Bug,故通過原始碼編譯安裝1.2.0版本。編譯安裝一切正常,不過在啟動nova-compute服務時出現錯誤:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/hub.py", line 346, in fire_timers
    timer()
  File "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/timer.py", line 56, in __call__
    cb(*args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/eventlet/event.py", line 163, in _do_send
    waiter.switch(result)
  File "/usr/local/lib/python2.7/dist-packages/eventlet/greenthread.py", line 194, in main
    result = function(*args, **kwargs)
  File "/opt/stack/nova/nova/service.py", line 132, in run_server
    server.start()
  File "/opt/stack/nova/nova/service.py", line 398, in start
    self.manager.init_host()
  File "/opt/stack/nova/nova/compute/manager.py", line 294, in init_host
    self.driver.init_host(host=self.host)
  File "/opt/stack/nova/nova/virt/libvirt/driver.py", line 344, in init_host
    if not self.has_min_version(MIN_LIBVIRT_VERSION):
  File "/opt/stack/nova/nova/virt/libvirt/driver.py", line 332, in has_min_version
    libvirt_version = self._conn.getLibVersion()
  File "/opt/stack/nova/nova/virt/libvirt/driver.py", line 361, in _get_connection
    self._connect, self.uri, self.read_only)
  File "/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py", line 139, in proxy_call
    rv = execute(f,*args,**kwargs)
  File "/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py", line 77, in tworker
    rv = meth(*args,**kwargs)
  File "/opt/stack/nova/nova/virt/libvirt/driver.py", line 415, in _connect
    return libvirt.openAuth(uri, auth, 0)
  File "/usr/lib/python2.7/dist-packages/libvirt.py", line 102, in openAuth
    if ret is None:raise libvirtError('virConnectOpenAuth() failed')
libvirtError: Failed to connect socket to '/usr/local/var/run/libvirt/libvirt-sock': No such file or directory
2014-03-08 09:13:10 CRITICAL nova [-] Failed to connect socket to '/usr/local/var/run/libvirt/libvirt-sock': No such file or directory

由於之前也遇到過,是由於libvirtd沒有正常啟動導致的,於是嘗試啟動libvirtd服務:
/usr/local/sbin/libvirtd -l -f /etc/libvirtd.conf

這時候本該正常啟動,卻出現以下問題,/var/log/libvirt/下的日誌中也完全找不到任何異常。
/usr/local/sbin/libvirtd: initialization failed

Google後說是字元編碼的問題,需要修改:
#將以下語句新增到 /etc/profile 中
export export LC_ALL=POSIX 
#重新載入
source /etc/profile

再次重啟libvirtd,這次仍有錯誤:
# /usr/local/sbin/libvirtd -l -f /etc/libvirtd.conf
2014-03-08 00:57:31.361+0000: 10577: info : libvirt version: 1.2.0
2014-03-08 00:57:31.361+0000: 10577: error : virNetTLSContextCheckCertFile:117 : Cannot read CA certificate '/usr/local/etc/pki/CA/cacert.pem': No such file or directory

但發現正常執行的機器上也沒有 /usr/local/etc/pki/CA/cacert.pem這個檔案,再次檢查/etc/libvirtd.conf檔案,發現有這麼一段:

# Flag listening for secure TLS connections on the public TCP/IP port.
# NB, must pass the --listen flag to the libvirtd process for this to
# have any effect.
#
# It is necessary to setup a CA and issue server certificates before
# using this capability.
#
# This is enabled by default, uncomment this to disable it
# listen_tls = 0

於是將最後一行解除註釋,關閉驗證,再次啟動libvirtd,啟動正常,問題得解。

補充,有時候建立不了快照,可能是qemu-common或是qemu-utils沒有安裝好,apt-get重灌也可解決,主要還是從錯誤資訊中找相關線索。

參考資料:

http://www.cnblogs.com/zhangzhang/archive/2013/03/04/2943263.html

http://liuzhijun.iteye.com/blog/1783698