CentOS5 64bit版で完全仮想化環境を作る

CentOS5で完全仮想化をやろうと思い、環境を作った時のメモです。


今回の環境は64bit版のCentOS5.5なのですが、配布されているRPMパッケージのXenだと
完全仮想化環境の設定でVMを動かす事が出来ませんでした。


ほとんど参考にしたページのトレースですが、自分用メモとしてまとめます。
ついでにXen3.2にしています。

手順


まず、自分の環境では「rpm-build」「redhat-rpm-config」が無かったので、インストールを行いました。

 # yum install rpm-build redhat-rpm-config


次にソースRPMをダウンロード

 # wget http://bits.xensource.com/oss-xen/release/3.2.0/centos-5.1/xen-3.2.0-0xs.centos5.src.rpm


警告出ますが、結果的に問題にはなりませんでした。

# rpm -ivh xen-3.2.0-0xs.centos5.src.rpm
   1:xen                    警告: ユーザ machbuild は存在しません - root を使用します


SRPMをインストールした結果、以下のファイルが展開されました。

# ls /usr/src/redhat/SPECS/
xen.spec
# ls /usr/src/redhat/SOURCES/
pygrub-cosmetics.patch                    xen-dumpdir.patch
xen-3.0.2-config-allow-unix-server.patch  xen-hotplug-block-flock.patch
xen-3.0.2-config-disable-reloc.patch      xen-initscript-blktap.patch
xen-3.2.0.tar.gz                          xen-initscript.patch
xen-compile-fixes.patch                   xen-network-bonding-fix.patch
xen-config-dom0-minmem.patch              xen.sysconfig


参考にさせていただいたページと同じ様にspecファイルを修正します。
今回、私の場合は、そのまま修正してしまいました。

# diff -u xen.spec.org xen.spec
--- xen.spec.org	2008-01-17 21:23:13.000000000 +0900
+++ xen.spec	2011-01-22 16:31:55.000000000 +0900
@@ -3,7 +3,7 @@
 Summary: Xen is a virtual machine monitor
 Name:    xen
 Version: 3.2.0
-Release: 0xs%{?dist}
+Release: 1xs%{?dist}
 Group:   Development/Libraries
 License: GPL
 URL:     http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html
@@ -113,7 +113,8 @@
 
 %install
 rm -rf %{buildroot}
-make XENFB_TOOLS=y XEN_PYTHON_NATIVE_INSTALL=1 DESTDIR=%{buildroot} prefix=/usr install-tools install-docs
+make XENFB_TOOLS=y XEN_PYTHON_NATIVE_INSTALL=1 DESTDIR=%{buildroot} prefix=%{_prefix} install-tools install-docs
+mv %{buildroot}%{_prefix}/lib/xen/boot %{buildroot}%{_libdir}/%{name} # put hvmloader in the right place
 mkdir -p %{buildroot}%{_localstatedir}/lib/%{name}/xend-db/domain
 mkdir -p %{buildroot}%{_localstatedir}/lib/%{name}/xend-db/vnet
 mkdir -p %{buildroot}%{_localstatedir}/lib/%{name}/xend-db/migrate
@@ -184,10 +185,6 @@
 %{_libdir}/%{name}
 %{_mandir}/man?/*.?.gz
 %dir /usr/lib/xen
-%ifnarch ia64
-# %dir /usr/lib/xen/boot
-# /usr/lib/xen/boot/hvmloader
-%endif
 %{_datadir}/%{name}/*.dtd
 %dir %{_datadir}/%{name}/qemu
 %{_datadir}/%{name}/qemu/keymaps/*
@@ -222,6 +219,10 @@
 %{_libdir}/*.a
 
 %changelog
+* Mon Mar 10 2008 John Morris - 3.2.0-1xs
+- fix hvmloader location depending on arch
+- pick up /usr/lib/xen or /usr/lib/xen64 correctly in %files depending on arch
+
 * Thu Jan 10 2008 Ian Jackson <Ian.Jackson@eu.citrix.com> - 3.2.0-0xs.centos5
 - Xen 3.2, built from 3.2 tree and heavily modified Centos (RHEL) patches.


用意ができたのでビルドします。

# pwd
/usr/src/redhat/SPECS
# ls
xen.spec  xen.spec.org
# rpmbuild -ba --define 'dist .centos5' xen.spec


当初私が行った際には幾つかのパッケージが足りない状態でした。
足りないパッケージをひたすらyumで入れていきます。

# rpmbuild -ba --define 'dist .centos5' xen.spec
エラー: ビルド依存性の失敗:
	transfig は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	libidn-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	texi2html は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	SDL-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	curl-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	libX11-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	ghostscript は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	tetex-latex は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	ncurses-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	gtk2-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	libaio-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	/usr/include/gnu/stubs-32.h は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	dev86 は xen-3.2.0-1xs.centos5.x86_64 に必要とされています
	gnutls-devel は xen-3.2.0-1xs.centos5.x86_64 に必要とされています


ちなみに「/usr/include/gnu/stubs-32.h」はglibc-develをインストールしておけば入ります。

# rpm -ql glibc-devel | grep 32
/usr/include/gnu/stubs-32.h


ビルドした結果、RPMパッケージが作成されます。

# ls /usr/src/redhat/BUILD/
xen-3.2.0
# ls /usr/src/redhat/RPMS/x86_64/
xen-3.2.0-1xs.centos5.x86_64.rpm
xen-debuginfo-3.2.0-1xs.centos5.x86_64.rpm
xen-devel-3.2.0-1xs.centos5.x86_64.rpm
xen-libs-3.2.0-1xs.centos5.x86_64.rpm
# ls /usr/src/redhat/SRPMS/
xen-3.2.0-1xs.centos5.src.rpm


参考にさせていただいたページにならい、md5のチェックを行います。

# rpm -K /usr/src/redhat/RPMS/x86_64/*.rpm /usr/src/redhat/SRPMS/*.rpm
/usr/src/redhat/RPMS/x86_64/xen-3.2.0-1xs.centos5.x86_64.rpm: sha1 md5 OK
/usr/src/redhat/RPMS/x86_64/xen-debuginfo-3.2.0-1xs.centos5.x86_64.rpm: sha1 md5 OK
/usr/src/redhat/RPMS/x86_64/xen-devel-3.2.0-1xs.centos5.x86_64.rpm: sha1 md5 OK
/usr/src/redhat/RPMS/x86_64/xen-libs-3.2.0-1xs.centos5.x86_64.rpm: sha1 md5 OK
/usr/src/redhat/SRPMS/xen-3.2.0-1xs.centos5.src.rpm: sha1 md5 OK


RPMをインストールします。

# cd /usr/src/redhat/RPMS/x86_64/
# ls -l
合計 7748
-rw-r--r-- 1 root root 5247256  1月 22 17:38 xen-3.2.0-1xs.centos5.x86_64.rpm
-rw-r--r-- 1 root root 2251341  1月 22 17:38 xen-debuginfo-3.2.0-1xs.centos5.x86_64.rpm
-rw-r--r-- 1 root root  226782  1月 22 17:38 xen-devel-3.2.0-1xs.centos5.x86_64.rpm
-rw-r--r-- 1 root root  157518  1月 22 17:38 xen-libs-3.2.0-1xs.centos5.x86_64.rpm
# rpm -Uvh *.rpm
準備中...                ########################################### [100%]
   1:xen-libs               ########################################### [ 25%]
   2:xen                    ########################################### [ 50%]
   3:xen-debuginfo          ########################################### [ 75%]
   4:xen-devel              ########################################### [100%]


今までいなかったhvmloaderも入りました。

# ls /usr/lib64/xen/boot/
hvmloader


grubの設定を行います。以下のように追加しました。

# vi /boot/grub/grub.conf
title CentOS (2.6.18-194.32.1.el5 Xen3.2)
        root (hd0,0)
        kernel /xen.gz-3.2
        module /vmlinuz-2.6.18-194.32.1.el5xen
        module /initrd-2.6.18-194.32.1.el5xen.img


再起動させたところ、うまく動きました。

# uname -a
Linux xxxxxxxxxxx 2.6.18-194.32.1.el5xen #1 SMP Wed Jan 5 18:44:24 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
# xm dmesg
 __  __            _____  ____    ___  
 \ \/ /___ _ __   |___ / |___ \  / _ \ 
  \  // _ \ '_ \    |_ \   __) || | | |
  /  \  __/ | | |  ___) | / __/ | |_| |
 /_/\_\___|_| |_| |____(_)_____(_)___/ 
                                       
(XEN) Xen version 3.2.0 (****@*****) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) Sat Jan 22 17:35:18 JST 2011

VMを動かしてみる


まずはイメージファイルの作成です。

# dd if=/dev/zero of=/opt/xen/centos5-hvm bs=1024k seek=6144 count=1


設定ファイルは「/etc/xen/centos5-hvm」として、以下のように作成しました。

builder = 'hvm'
name = 'centos5-hvm'
maxmem = 512
memory = 512
vcpus = 1
kernel = "/usr/lib64/xen/boot/hvmloader"
boot = "dc"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
disk = [ 'tap:aio:/opt/xen/centos5-hvm,xvda,w', 'phy:/dev/cdrom,hdc:cdrom,r' ]
vif = [ "mac=00:16:36:42:99:b2,bridge=xenbr0,script=vif-bridge" ]
device_model = "/usr/lib64/xen/bin/qemu-dm"
sdl = 1
localtime = 1
keymap = 'ja'
vncconsole = 1


後はGUIのコンソールから、「xm create -c centos5-hvm」で無事起動。


今日はこんなところで。

起動時に何回かこんなメッセージが出て、コンソールの起動ができませんでした。
どうやら、「vncconsole = 1」を設定していなかったためのようでした。

# xm create -c centos5-hvm
Using config file "/etc/xen/centos5-hvm".
Started domain centos5-hvm
xenconsole: Could not read tty from store: No such file or directory