lost and found ( for me ? )

Linux Mint 12 : Build qemu-kvm , libvirt , virt-manager from source ( not apt-get ! )




Here’s an explanation of how to build qemu-kvm , libvirtd and virt-manager from source including trial and error.
# uname -ri
3.0.0-15-generic x86_64
# tail -1 /etc/lsb-release
DISTRIB_DESCRIPTION="Linux Mint 12 Lisa"


[ uninstall kvm , libvirt-bin , virt-manager via apt-get if you have installed them ]
# apt-get remove kvm libvirt-bin virt-manger –y
# apt-get autoremove


back up the current libvirtd configuration.
# tar czvf libvirt.tgz /etc/libvirt/
tar: メンバ名から先頭の `/' を取り除きます
/etc/libvirt/
/etc/libvirt/storage/
/etc/libvirt/storage/default.xml
/etc/libvirt/storage/disk1.xml
/etc/libvirt/storage/autostart/
/etc/libvirt/storage/autostart/default.xml
/etc/libvirt/storage/autostart/disk1.xml
/etc/libvirt/qemu/
/etc/libvirt/qemu/centos6-32-vm1.xml
/etc/libvirt/qemu/centos6-64-vm1.xml
/etc/libvirt/qemu/networks/
/etc/libvirt/qemu/networks/autostart/
/etc/libvirt/qemu/networks/autostart/default.xml

rm /usr/bin/kvm which is a symbolic file to /usr/bin/qemu-system-x86_64.
# rm -rf /usr/bin/kvm



[ build qemu-kvm from source ]

download qemu-kvm-1.0.tar.gz from http://sourceforge.net/projects/kvm/files/qemu-kvm/1.0/
and build it.
# tar xzvf qemu-kvm-1.0.tar.gz
# ./configure
# make
# make install

# ls /usr/local/bin/qemu-*
/usr/local/bin/qemu-ga   /usr/local/bin/qemu-nbd
/usr/local/bin/qemu-img  /usr/local/bin/qemu-system-x86_64
/usr/local/bin/qemu-io

# /usr/local/bin/qemu-system-x86_64 --version
QEMU emulator version 1.0 (qemu-kvm-1.0), Copyright (c) 2003-2008 Fabrice Bellard


[ build libvirt ]

download libvirt-0.9.9 tar.gz from http://libvirt.org/sources/ and build it.
# tar xzvf libvirt-0.9.9.tar.gz
# cd libvirt-0.9.9/


nn , error
# ./configure
checking for LIBXML... no
checking libxml2 xml2-config >= 2.6.0 ... configure: error: Could not find libxml2 anywhere (see config.log for details).


I have already installed libxml2 via apt-get
# dpkg -l libxml2 | tail -1
ii  libxml2                                2.7.8.dfsg-4ubuntu0.1                        GNOME XML library

# dpkg -L  libxml2 | grep "/lib/"
/usr/lib/libxml2.so.2.7.8
/usr/lib/libxml2.so.2


error
# ./configure --with-libxml=/usr/lib
checking pkg-config is at least version 0.9.0... yes
checking libxml2 /usr/lib/bin/xml2-config >= 2.6.0 ... configure: error: Could not find libxml2 anywhere (see config.log for details).


install libxml2-dev
# apt-get install libxml2-dev -y

# dpkg -l libxml2*
ii  libxml2        2.7.8.dfsg-4ub GNOME XML library
ii  libxml2-dev    2.7.8.dfsg-4ub Development files for the GNOME XML library
ii  libxml2-utils  2.7.8.dfsg-4ub XML utilities


try again. another error.
# ./configure
configure: error: You must install the GnuTLS library in order to compile and run libvirt


install gnutls via apt-get
# apt-get install gnutls-bin gnutls-dev

# ./configure
configure: error: You must install device-mapper-devel/libdevmapper >= 1.0.0 to compile libvirt

# apt-get install libdevmapper-dev libdevmapper

# ./configure
configure: error: You must install python-devel to build Python bindings

# apt-cache search python-dev

# ./configure
checking for LIBNL... no
configure: error: libnl-devel >= 1.1 is required for macvtap support

# apt-get install libnl1 libnl-dev

# ./configure
configure:      Readline: no
configure:        Python: yes
configure:        DTrace: no
configure:   XML Catalog: /etc/xml/catalog
configure:   Init script: check
configure:
configure: Privileges
configure:
configure:       QEMU: root:root
configure:#

# make
# make install

# ls /usr/local/bin/vir*
/usr/local/bin/virsh         /usr/local/bin/virt-install
/usr/local/bin/virt-clone    /usr/local/bin/virt-pki-validate
/usr/local/bin/virt-convert  /usr/local/bin/virt-xml-validate
/usr/local/bin/virt-image
# /usr/local/sbin/libvirtd --version
/usr/local/sbin/libvirtd (libvirt) 0.9.9


[ build virt-manager ]

download virtinst 0.600.1 and virt-manager 0.90.1 from http://virt-manager.org/download.html

At first , build virtinst
# tar xzvf virtinst-0.600.1.tar.gz
# cd virtinst-0.600.1
# python setup.py install


build virt-manager
# tar xzvf virt-manager-0.9.1.tar.gz
# cd virt-manager-0.9.1/

# ./configure
configure: Required virtinst:               0.600.1
configure: Default qemu user:               root
configure: Install TUI:                     yes
configure: Enable unsupported RHEL options: yes
configure: Preferred distros:               none
configure: Libvirt packages:                none
configure: KVM packages:                    none
configure: Default graphics:                vnc

# make

# ls /usr/local/bin/virt-ma*
/usr/local/bin/virt-manager  /usr/local/bin/virt-manager-tui


Okay , get everything done , I think..

[ start libvirtd ]

start libvirtd ( -d : run libvirtd as daemon. )
# /usr/local/sbin/libvirtd –d


[ connect to libvirt via virsh ]
# LANG=C /usr/local/bin/virsh

virsh # version
Compiled against library: libvir 0.9.9
Using library: libvir 0.9.9
Using API: QEMU 0.9.9
Running hypervisor: QEMU 1.0.0


[ connect to libvirt via virt-manager ]
$ /usr/local/bin/virt-manager
   import urlgrabber.progress as progress
ImportError: No module named urlgrabber.progress


install python-urlgrabber
# apt-get install python-urlgrabber -y

$ /usr/local/bin/virt-manager
   import gtkvnc
ImportError: No module named gtkvnc

# apt-get install –y libgtk-vnc-1.0-0 python-gtk-vnc


GUI has appeared..  however I can’t connect to livbirtd.

Unable to connect to libvirt:
 File "/usr/local/lib/python2.7/dist-packages/libvirt.py", line 102, in openAuth
   if ret is None:raise libvirtError('virConnectOpenAuth() failed')


I can connect to libvirtd via virsh , so I think libvirtd is running.
# LANG=C /usr/local/bin/virsh -c qemu:///system
Welcome to virsh, the virtualization interactive terminal.

virsh # version
Compiled against library: libvir 0.9.9
Using library: libvir 0.9.9
Using API: QEMU 0.9.9
Running hypervisor: QEMU 1.0.0

virsh # quit


Let’s check the libvirt.log .. Auth fail from a user which UID is 1000.
UID 1000 is an account which I always use when logging on Mint.
# tail -f /usr/local/var/log/libvirt/libvirtd.log
error : remoteDispatchAuthPolkit:2521 : PolicyKit がアクション org.libvirt.unix.manage を PID 18318, UID 1000 から拒否しま した: 終了ステータス 127
error : remoteDispatchAuthPolkit:2540 : 認 証に失敗しました: 認証に失敗しました

# egrep 1000 /etc/group
hattori:x:1000:


confirm whether or not UID 1000 can connect to libvirt.
nnn , authentication failed when connecting to libvirt with UID 1000.
# /usr/local/bin/virsh -c qemu+ssh://hattori@127.0.0.1/system
hattori@127.0.0.1's password:
error: 認証に失敗しました: 認証に失敗しました
error: failed to connect to the hypervisor


how about root user ? .. can connect to libvirt with root user.
It might be permission problems..
# /usr/local/bin/virsh -c qemu+ssh://root@127.0.0.1/system
root@127.0.0.1's password:
Welcome to virsh, the virtualization interactive terminal.
virsh # quit


run libvird with debug mode and start virt-manager to locate the problem.
# LIBVIRT_DEBUG=1 /usr/local/sbin/libvirtd > libvirt.logs 2>&1
# /usr/local/bin/virt-manager


debug logs.
Error checking for authorization org.libvirt.unix.manage: GDBus.Error:org.freede
sktop.PolicyKit1.Error.Failed: Action org.libvirt.unix.manage is not registered
20844: error : remoteDispatchAuthPolkit:2521 : PolicyKit がアクション org.libvirt.unix.manage を PID 20894, UID 1000 から拒否しま
した: 終了ステータス 127
20844: debug : remoteDispatchAuthPolkit:2554 : RPC_SERVER_CLIENT_AUTH_DENY: client=0x7fa510000ae0 auth=2 identity=pid:20894,uid:1000
20844: error : remoteDispatchAuthPolkit:2540 : 認
証に失敗しました: 認証に失敗しました


PolicyKit ?
Let’s google it.

It seems that Policy kit is an ACL for user authentication  
http://libvirt.org/auth.html

Allow UID 1000 named hattori to connect to libvirtd
# cat /etc/polkit-1/localauthority/50-local.d/50-org.libvirt.access.pkla
[libvirt Management Access]
Identity=unix-user:hattori
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes


try again ,,, same error
Error checking for authorization org.libvirt.unix.manage: GDBus.Error:org.freede
sktop.PolicyKit1.Error.Failed: Action org.libvirt.unix.manage is not registered
error : remoteDispatchAuthPolkit:2521 : PolicyKit がアクション org.libvirt.unix.manage を PID 20894, UID 1000 から拒否しま
した: 終了ステータス 127
20844: debug : remoteDispatchAuthPolkit:2554 : RPC_SERVER_CLIENT_AUTH_DENY: client=0x7fa510000ae0 auth=2 identity=pid:20894,uid:1000
20844: error : remoteDispatchAuthPolkit:2540 : 認
証に失敗しました: 認証に失敗しました


oh ,, I also need to edit libvirtd.conf.
# groupadd libvirt
# usermod -G libvirt -a hattori

# egrep unix_sock /usr/local/etc/libvirt/libvirtd.conf | grep -v ^#
unix_sock_group = "libvirt"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"


nn still error
Error checking for authorization org.libvirt.unix.manage: GDBus.Error:org.freede
sktop.PolicyKit1.Error.Failed: Action org.libvirt.unix.manage is not registered

error : remoteDispatchAuthPolkit:2521 : PolicyKit がアクション org.libvirt.unix.manage を PID 23628, UID 1000 から拒否しま
した: 終了ステータス 127


nnn , okey ,, disable Policykit auth.
# egrep '(unix_sock|none)' /usr/local/etc/libvirt/libvirtd.conf | grep
-v ^#
unix_sock_group = "libvirt"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"
auth_unix_ro = "none"
auth_unix_rw = "none"


try again
# LIBVIRT_DEBUG=1 /usr/local/sbin/libvirtd -d > libvirt.logs 2>&1


I can connect to libvirt with UID 1000.
# LANG=C /usr/local/bin/virsh -c qemu+ssh://hattori@127.0.0.1/system
hattori@127.0.0.1's password:
Welcome to virsh, the virtualization interactive terminal.

virsh # version
Compiled against library: libvir 0.9.9
Using library: libvir 0.9.9
Using API: QEMU 0.9.9
Running hypervisor: QEMU 1.0.0

virsh # quit


try to connect libvirtd via virt-manager. another error
$ /usr/local/bin/virt-manager –debug
   if ret is None:raise libvirtError('virConnectOpenAuth() failed')
libvirtError: Failed to connect socket to '/usr/local/var/run/libvirt/libvirt-sock': Permission denied

# egrep '(unix_sock|none)' /usr/local/etc/libvirt/libvirtd.conf | grep
-v ^#
unix_sock_group = "libvirt"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0777"
unix_sock_dir = "/usr/local/var/run/libvirt"
auth_unix_ro = "none"
auth_unix_rw = "none"


can connect to libvirtd both virsh and virt-manager with UID 1000.

[ fly a VM on KVM 1.0 ]

make a symbolic link.
virsh or virt-manager seems to check /usr/bin/kvm or /usr/local/bin/kvm when starting a VM.
# ln -s /usr/local/bin/qemu-system-x86_64 /usr/bin/kvm


install a VM via virsh or virt-manager.

a VM , CentOS6 32bit , is running on KVM 1.0.
virsh # list –all
Id Name                 State
----------------------------------
 1 centos6-32-vm1       running

virsh # qemu-monitor-command centos6-32-vm1 'info version
1.0.0 (qemu-kvm-1.0)

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.