読者です 読者をやめる 読者になる 読者になる

harry’s memorandum

おれおれメモ

Scientific Linux 6.0 で libvirtを野良ビルドしてVMware ESXiにアクセスしてみた。

virtualization linux

Scientific Linux 6.0 で libvirtを使ってesxにアクセスして遊んでみようとしたのですが...
世の中は思うようにいかないです。

$ virsh -c esx://192.168.1.5/?no_verify=1
Enter username for 192.168.1.5 [root]:
Enter root's password for 192.168.1.5:
error: internal error Expecting VI API major/minor version '2.5' or '4.0' but found '4.1'
error: failed to connect to the hypervisor

少しlibvritが古いのか esx4.1 は受け付けないと怒られてしまいました。

$ rpm -aq | grep libvirt
libvirt-0.8.1-27.el6_0.6.x86_64
libvirt-client-0.8.1-27.el6_0.6.x86_64

公式サイトをみたところ「Since 0.8.3」からサポートのようです。

The libvirt VMware ESX driver can manage VMware ESX/ESXi 3.5/4.x and VMware GSX 2.0, also called VMware Server 2.0, and possibly later versions. Since 0.8.3 the driver can also connect to a VMware vCenter 2.5/4.x (VPX).

http://libvirt.org/drvesx.html


仕方が無いのでScientific Linux 6.1がリリースされるまで、でRHEL6.1のsrc.rpmを野良ビルドして我慢してみました。

libvirtのビルド

まずはrhel6.1のsrc.rpmをダウンロード。

$ wget ftp://ftp.nluug.nl/pub/os/Linux/distr/RedHat/ftp/redhat/linux/enterprise/6Server/en/os/SRPMS/libvirt-0.8.7-18.el6.src.rpm

このぐらいで大丈夫だろう、と前もって入れておいたのですが...

$ sudo yum install rpm-build gcc gdb make 

かなり怒られました。

$ rpmbuild --rebuild libvirt-0.8.7-18.el6.src.rpm
Installing libvirt-0.8.7-18.el6.src.rpm
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
error: Failed build dependencies:
        python-devel is needed by libvirt-0.8.7-18.el6.x86_64
        autoconf is needed by libvirt-0.8.7-18.el6.x86_64
        automake is needed by libvirt-0.8.7-18.el6.x86_64
        libtool is needed by libvirt-0.8.7-18.el6.x86_64
        libxml2-devel is needed by libvirt-0.8.7-18.el6.x86_64
        xhtml1-dtds is needed by libvirt-0.8.7-18.el6.x86_64
        readline-devel is needed by libvirt-0.8.7-18.el6.x86_64
        ncurses-devel is needed by libvirt-0.8.7-18.el6.x86_64
        gettext is needed by libvirt-0.8.7-18.el6.x86_64
        gnutls-devel is needed by libvirt-0.8.7-18.el6.x86_64
        augeas is needed by libvirt-0.8.7-18.el6.x86_64
        libudev-devel >= 145 is needed by libvirt-0.8.7-18.el6.x86_64
        libpciaccess-devel >= 0.10.9 is needed by libvirt-0.8.7-18.el6.x86_64
        yajl-devel is needed by libvirt-0.8.7-18.el6.x86_64
        libpcap-devel is needed by libvirt-0.8.7-18.el6.x86_64
        libnl-devel is needed by libvirt-0.8.7-18.el6.x86_64
        avahi-devel is needed by libvirt-0.8.7-18.el6.x86_64
        libselinux-devel is needed by libvirt-0.8.7-18.el6.x86_64
        radvd is needed by libvirt-0.8.7-18.el6.x86_64
        cyrus-sasl-devel is needed by libvirt-0.8.7-18.el6.x86_64
        parted-devel is needed by libvirt-0.8.7-18.el6.x86_64
        device-mapper-devel is needed by libvirt-0.8.7-18.el6.x86_64
        numactl-devel is needed by libvirt-0.8.7-18.el6.x86_64
        libcap-ng-devel >= 0.5.0 is needed by libvirt-0.8.7-18.el6.x86_64
        netcf-devel >= 0.1.4 is needed by libvirt-0.8.7-18.el6.x86_64
        libcurl-devel is needed by libvirt-0.8.7-18.el6.x86_64
        audit-libs-devel is needed by libvirt-0.8.7-18.el6.x86_64
        systemtap-sdt-devel is needed by libvirt-0.8.7-18.el6.x86_64

足りないものは潰す。

$ sudo yum install python-devel autoconf automake libtool libxml2-devel xhtml1-dtds readline-devel ncurses-devel gettext gnutls-devel augeas libudev-devel libpciaccess-devel yajl-devel libpcap-devel libnl-devel avahi-devel libselinux-devel radvd cyrus-sasl-devel parted-devel device-mapper-devel numactl-devel libcap-ng-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel gnutls-utils

もう一度rpmbuildして完成。

$ rpmbuild --rebuild libvirt-0.8.7-18.el6.src.rpm

so.2()(64bit) libxslt.so.1()(64bit) libyajl.so.1()(64bit) libz.so.1()(64bit) python(abi) = 2.6 rtld(GNU_HASH)
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/foo/rpmbuild/BUILDROOT/libvirt-0.8.7-18.el6.x86_64
Wrote: /home/foo/rpmbuild/RPMS/x86_64/libvirt-0.8.7-18.el6.x86_64.rpm
Wrote: /home/foo/rpmbuild/RPMS/x86_64/libvirt-client-0.8.7-18.el6.x86_64.rpm
Wrote: /home/foo/rpmbuild/RPMS/x86_64/libvirt-devel-0.8.7-18.el6.x86_64.rpm
Wrote: /home/foo/rpmbuild/RPMS/x86_64/libvirt-python-0.8.7-18.el6.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.VinqCn
+ umask 022
+ cd /home/foo/rpmbuild/BUILD
+ cd libvirt-0.8.7
+ rm -fr /home/foo/rpmbuild/BUILDROOT/libvirt-0.8.7-18.el6.x86_64
+ exit 0
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.uE2shc
+ umask 022
+ cd /home/foo/rpmbuild/BUILD
+ rm -rf libvirt-0.8.7
+ exit 0

野良ビルドしたlibvirtをインストール

$ sudo rpm -Uvh *rpm
Preparing...                ########################################### [100%]
   1:libvirt-client         ########################################### [ 25%]
   2:libvirt                ########################################### [ 50%]
   3:libvirt-python         ########################################### [ 75%]
   4:libvirt-devel          ########################################### [100%]

念のため再起動

$ sudo /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon:                                  [  OK  ]

libvirtでesxにアクセス

$ virsh -c esx://192.168.1.5/?no_verify=1
Enter username for 192.168.1.5 [root]:
Enter root's password for 192.168.1.5:
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit
ゲスト一覧
virsh # list
 Id Name                 State
----------------------------------
 16 windows2000          running
 32 ubuntu11.04          running
208 centos5              running
224 cern6                running
esxの構成情報
virsh # nodeinfo
CPU model:           Intel Core i5 CPU M 460 @ 2.53G
CPU(s):              2
CPU frequency:       2526 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         5954024 kB
ゲストのシャットダウン
virsh # shutdown 32
Domain 32 is being shutdown

virsh # list
 Id Name                 State
----------------------------------
 16 windows2000          running
208 centos5              running
224 cern6                running
ゲストOSの情報
virsh # dominfo 208
Id:             208
Name:           centos5
UUID:           564dc12a-363f-d01f-2863-606774e120fa
OS Type:        hvm
State:          running
CPU(s):         2
Max memory:     1048576 kB
Used memory:    1048576 kB
Persistent:     yes


まったくもって素晴らしい。野良ビルドって本当にいいですね。
しかし、まだまだESXサポートしているAPIは少ないのが現状っぽいですね。
http://libvirt.org/hvsupport.html

virsh # dommemstat 16
error: Failed to get memory statistics for domain 16
error: this function is not supported by the connection driver: virDomainMemoryStats