Compile Xen3.4.0 on CentOS5.3 + VMWare

Xen

最近Xen関係のトラブルにはまってます.ぐぐってもよくわからないし,ここは心機一転,ソースからコンパイルして,仕組みを勉強してみようと思いました.なんとかDom0が動くようになったので,そこまでのまとめです.

Install CentOS5.3

CentOS-5-3-i386-netinstall.isoをダウンロードしてVMWare上にインストールしました.このインストーラが聞いてくるパッケージのダウンロード元には

サーバ パス
ftp.riken.jp Linux/centos/5.3/os/i386

を指定しました.CentOS5.3ではbaseパッケージグループがデフォルトで指定されているようなので,パッケージグループ選択の際には何も指定しません.これでCentOS5.3が動く所までできました.この後,パッケージのアップデートと追加のインストールを行います.以下の作業は新規にアカウントを作成せずにrootアカウントで実行しました.

# yum update
# yum groupinstall 'Development Tools'
# yum groupinstall 'X Software Development'
# yum install openssl-devel
# yum install nucrses-devel
# yum install python-devel
# yum install bridge-utils

Download & Compile Xen3.4.0

Xenをダウンロードしてコンパイルします.

# wget http://bits.xensource.com/oss-xen/release/3.4.0/xen-3.4.0.tar.gz
# tar xvfz xen-3.4.0.tar.gz
# cd xen-3.4.0
# make

makeを実行すると,途中でいくつか質問がでてきます.取りあえず初回なのですべてDefault値を採用しました.以下のようになります.

PCI Device Reservation for Passthrough (PCI-GUESTDEV) [Y/n/?] Y
PCI IOV support (PCI_IOV) [N/y/?] N
Intel(R) 82575 Gigabit Ethernet support (IGB) [N/m/y/?] N
Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support (E1000E) [N/m/y/?] N
Intel(R) 10GbE PCI Express adapters support (IXGBE) [N/m/y/?]N

USB backend driver (XEN_USB_BACKEND) [M/n/?] M
USB frontend driver (XEN_USB_FRONTEND) [M/n/?] M
Taking the HCD statistics (for debug) (XEN_USB_FRONTEND_HCD_STATS) [Y/n/?] Y

しばらくするとコンパイルが終了します.よく見てると,最後に

WARNING: Package 'latex' is required to build Xen documentation

と出てきますが,これは気にしない.ここまでできたらInstallします.

# cd dist
# ./install.sh

このコマンドを実行すると,最終的に以下のような出力がでます.すべてOKとなっているか確認してください.なっていなければ何かが足りません.

Xen CHECK-INSTALL Tue May 26 04:47:22 JST 2009
Checking check_brctl: OK
Checking check_crypto_lib: OK
Checking check_curl: unused, OK
Checking check_iproute: OK
Checking check_python: OK
Checking check_python_xml: OK
Checking check_udev: OK
Checking check_xml2: unused: OK
Checking check_zlib_lib: OK
All done.

これでプログラム作成が終了しました.この後は,boot用の設定を作ることになります.

Setup Grub.conf

ここら辺からは,ここらへんを参考にしながら試行錯誤しました.なぜそれを実行しないといけないかがよくわかっていないので,これから調べます.まず,depmondを実行します.

# /sbin/depmond 2.6.18.8-xen

次にmkinitrdを実行しますが,最新のmkinitrd-5.1.19.6-44にはバグがあるので,/sbin/mkinitrdを以下のように編集します.

1306   if [ "$withdmraid" == "1" ]; then
1307       findmodule -dm-mem-cache
1308       findmodule -dm-region_hash
1309       findmodule -dm-message
1310       findmodule -dm-raid45
1311   fi

左端の数字は行数です.足すのはdm-mem-cache/dm-region_hash/dm-member/dm-raid45の前にある-です.編集したら,コマンドを実行します.

/sbin/mkinitrd /boot/initrd-2.6.18.8-xen.img 2.6.18.8-xen

この後,/boot/grub/grub.confにXen用の設定を追加します.

title xen
root (hd0,0)
kernel /xen.gz
module /vmlinuz-2.6.18.8-xen ro root=/dev/VolGroup00/LogVol00
module /initrd-2.6.18.8-xen.img 2.6.18.8-xen

ここまで設定してリブートすれば,なんだかものすごく時間がかかるのですが,XenをサポートしたDom0が起動します.でも,

Currently emulating unsupported memory accesses in /lib/tls glib libraries. The emulation is slow. To ensure full performance you should install a 'xen-freindly' (nosegneg) version of the library, or disable tls support by executing the following as root:
mv /liv/tls /lib/tls.disabled
Offending process: modprobe (pid=914)

というメッセージが最後に出ています./lib/tlsはなかったと思うので,これが何を意味しているのかよくわかりません.この後は,

# chkconfig --add xend

とやれば,起動時にXendが動くので,

# xm list

とコマンドした時にDom0が動いてるのが確認できます.

終わりに

現段階では起動にえらく時間がかかります.これがTLS(Thread Local System)に起因する問題なのか,Kernelコンパイル時の設定に依存した問題なのかがまだわかりません.DomUもまだ動かしていないのでちゃんと動くかどうかこれからです.