源码安装libvirt 常见问题

PS:感谢原作者的文章,解决了我的问题。对linux还是不够精通,很多问题解决还很吃力,毕竟我从windows转过来的。

本来centos5是自带libvirt,但版本计较旧,后来我从libvirt的官网下了0.8的版本,似乎有冲突。于是我把原来的干掉了,重新用yum安装,但不知道为什么,它帮我装了两个版本,一个是x86_64,一个是i386,并且版本号还不一样,导致冲突,是在变态!faint!

索性我就从官网上下了安装包,保守一点,下个0.7的版本。老套路:./configure,make, make install。装完问题也来了!
问题零:
找不到/usr/local/var/lock/subsys/libvirt
ln  /usr/local/var/lock/subsys -s  /var/lock/subsys
问题一:
启动libvirt时LIBVIERT_VERSION_0.7没找到,才发现原来系统原来有个libvirt.so.0,于是删除原来的,并将新的替换原来的
mv libvirt.so.0.7.0 libvirt.so.0
问题二:
找不到libvirt-sock,说没有这个文件,错误情况:“libvir: Remote error : unable to connect to '/usr/local/var/run/libvirt/libvirt-sock': No such file or directory”再做个链接
ln -s /var/run/libvirt/libvirt-sock /usr/local/var/run/libvirt/libvirt-sock
问题三:
找不到libvirt-sock,说没有这个文件,错误情况:“libvir: Remote error : unable to connect to '/usr/local/var/run/libvirt/libvirt-sock-ro': No such file or directory”再做个链接
ln -s /var/run/libvirt/libvirt-sock-ro /usr/local/var/run/libvirt/libvirt-sock-ro

Failed to connect to the hypervisor

There are lots of errors that can occur while connecting to the server (when running virsh for example)

[ edit]

No connection driver available

[ edit]
Symptom

When running a command, the following error (or similar) appears:

$ virsh -c <uri> list
error: no connection driver available for No connection for URI <uri>
error: failed to connect to the hypervisor
[ edit]
Cause

This can happen when libvirt is compiled from sources. The error means there is no driver to use with the specified URI (e.g. "Xen" for "xen://server/")

[ edit]
Investigation

Check the last part of configure ('./configure' or './autogen') output, you should see something like this:

configure: Drivers
configure: 
configure: <driver>: yes

For example talking about Xen:

configure: Drivers
configure: 
configure:     Xen: yes

If however you see "<driver>: no" (e.g. "Xen:no"), that means configure failed to find all the tools/libraries necessary to implement this support or there was "--without-<driver>" parameter specified on the command line.

[ edit]
Solution

Do not specify "--without-<driver>" on the command line of the configuration script and make sure there are all development libraries installed as well, then configure the sources again.

[ edit]

Cannot read CA certificate

[ edit]
Symptom

When running a command, the following error (or similar) appears:

$ virsh -c <uri> list
error: Cannot read CA certificate '/etc/pki/CA/cacert.pem': No such file or directory
error: failed to connect to the hypervisor
[ edit]
Investigation

This error can be caused by various things, for some of them, the error message is little misleading:

  1. specified URI is wrong (missing one '/' -- e.g. 'qemu://system')
  2. connection is not configured
[ edit]
Solution

specified URI is wrong

In the case of specifying 'qemu://system' or 'qemu://session' as a connection URI, virsh is trying to connect to hostname 'system' or 'session' respectively because when hostname is specified, the transport for qemu defaults to 'tls' and thus the need for a certificates. Use three slashes in this case.

connection is not configured

You specified correct URI (e.g. 'qemu[+tls]://server/system') but the certificates were not set up properly on your machine. There is a great In depth guide to configuring TLS. The solution is most probably there.

[ edit]

Permission denied

[ edit]
Symptom

When running a command, the following error (or similar) appears:

$ virsh -c qemu:///system list
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied
error: failed to connect to the hypervisor
[ edit]
Investigation

You are trying to connect using unix socket. The connection to "qemu" without any hostname specified is by default using unix sockets. If there is no error running this command as root it's probably just misconfigured.

[ edit]
Solution

If you want to be able to connect as non-root user using unix sockets, configure following options in '/etc/libvirt/libvirtd.conf' accordingly:

unix_sock_group = <group>
unix_sock_ro_perms = <perms>
unix_sock_rw_perms = <perms>
[ edit]

Other errors

These other errors are even simpler to solve than those mentioned before, so here is a list of error/solutions:

unable to connect to server at 'server:port': Connection refused

The daemon is not running on the server or it's configured not to listen (configuration option 'listen_tcp' or 'listen_tls').

End of file while reading data: nc: using stream socket: Input/output error

If you specified 'ssh' transport, the daemon is probably not running on the server.

End of file while reading data: : Input/output error

If you are using ssh transport, for example, by executing

virsh --connect qemu+ssh://username@remove.host.com/system list

Probably the user you are using to access the server does not belong to the proper group, such as 'libvirtd' for Ubuntu servers. Try adding the user to the proper group on server and connect again. For example, below is to be run on Ubuntu servers.

sudo usermod -G libvirtd -a username

Refer to SSHSetup for setup about other distributions.


今天突然使用了rhel6.2系统,之前使用的是rhel6.1。升级过程中遇到的几个问题是这样的。

首先是libvirt启动的问题,开始启动不了的,因为每次restart时它的stopping状态总是failed,

1 [root@localhost ~]# service libvirtd restart
2 Stopping libvirtd daemon:                   [  FAILED  ]
3 Starting libvirtd daemon:                     [  OK  ]

执行以下命令就ok了:

01 [root@localhost ~]# sudo service messagebus start
02 Starting system message bus:
03  
04 [root@localhost ~]# sudo service avahi-daemon start
05 Starting Avahi daemon...
06  
07 [root@localhost ~]# sudo service libvirtd start
08 Starting libvirtd daemon:
09  
10 [root@localhost ~]# sudo chkconfig messagebus on
11 [root@localhost ~]# sudo chkconfig avahi-daemon on
再次重启也ok的:
1 [root@localhost ~]# service libvirtd restart
2 Stopping libvirtd daemon:                     [  OK  ]
3 Starting libvirtd daemon:                       [  OK  ]
然后是virsh define xml时遇到如下error:
1 [root@localhost ~]# sudo virsh define xml
2 error: Failed to define domain from rhel.test
3 error: unknown OS type hvm

而我自己的os xml是这样的:

 

1 <os>
2     <type>hvm</type>
3 </os>
这个时候真的把我搞郁闷了,物理机VT确实开了,KVM模块也装了,依次执行:
1 [root@localhost ~]# modprobe kvm
2 [root@localhost ~]# modprobe kvm-intel
3 [root@localhost ~]# lsmod | grep kvm
4 kvm_intel                          47822      0
5 kvm                                 300730     1   kvm_intel
那会是什么问题呢,这回真的郁闷了。结果就想去看下virsh的版本,0.9.4是没问题的,但是看得时候看到了一句话:

 

1 [root@localhost ~]# virsh --version
2 Compiled against library: libvir 0.9.4
3 Using library: libvir 0.9.4
4 Using API: QEMU 0.9.4
5 error: failed to get the hypervisor version
6 error: internal error Cannot find suitable emulator for x86_64
嗯,这里问题出来了,原来是没有emulator,那我安装一个好了,yum install qemu-kvm.x86_64.
重启libvirtd,然后再define,ok了。
1 [root@localhost ~]# service libvirtd restart
2 Stopping libvirtd daemon:                       [  OK  ]
3 Starting libvirtd daemon:                       [  OK  ]
4 [root@localhost ~]# virsh define xml
5 Domain rhel.test defined from rhel.test
然后第三个问题是启动虚拟机的时候,出现这样的错误:
1 [root@localhost ~]# sudo virsh start rhel.test
2 error: Failed to start domain rhel.test
3 error: internal error process exited while connecting to monitor: 00:18:12.815: 29825: info : libvirt version: 0.9.4, package: 23.el6 (Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>, 2011-11-08-21:34:51, x86-012.build.bos.redhat.com)
4 Could not access KVM kernel module: Permission denied
5 failed to initialize KVM: Permission denied
6 No accelerator found!
嗯,上面说的很清楚,不能访问KVM内核模块,而这个模块是用一个字符设备来提供服务的:
1 [root@localhost ~]# ll /dev/kvm
2 crw-rw---- 1 root root 10, 232 Apr 10 10:46 /dev/kvm
3 [root@localhost ~]# chown root:kvm /dev/kvm
4 [root@localhost ~]# sudo virsh start rhel.test
5 Domain rhel.test started
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值