Xen 3.3(Fedora 10 Preview版付属Xenner編)


2008年11月4日にFedora 10 Preview版(Fedora 9.93)がリリースされました。
Fedora 10 Preview版付属のXenバージョンは3.3ですがFedora 9同様にDomain0としての動作は未サポートのままです。
Ubuntu 8.10カーネルと異なりFedora 10 Preview版通常カーネルはXen 3.3準仮想化ゲスト(PVゲスト)用カーネルとして兼用することはできません。
Domain0が無ければXenの準仮想化(Para-Virtualized)モードのゲストOS(PVゲスト)を実行できません。
しかし、Fedora 10 Preview版にはXenner(version 0.46)というXenハイパバイザーエミュレータが付属しています。
XennerはKVMが組み込まれた通常カーネル環境でPVゲストを実行させるものです。

ここではFedora 10 Preview版でXennerを使用してUbuntu 8.10 Server(x86)をPVゲストとして実行する手順を紹介します。
※Ubuntu 8.10 ServerをPVゲストとして起動する方法としてはPYGRUBを使用しました。

  1. Fedora 10 Preview版のインストール
    (1)インストールするソフトウェアセットのカスタマイズでベースシステムの「仮想化」を選択します。
    ※これによってkvm, virt-manager, bridge-utils, xen-libs等がインストールされます(xen, xen-runtime, xennerは入りません)。
    (2)Fedora 9同様にFedora 10 Preview版起動後、NetworkManagerサービスの代りにnetworkサービスを使用するようにします(詳細略)。

  2. Xenner環境の構築
    (1)以下のコマンドでxen/xenner関連パッケージを一式インストールします。
    # yum install xen-hypervisor ※これに含まれる/boot/xen-3.3.gzは実際には使用しません。
    # yum install xen ※依存関係のあるxen-runtimeも自動インストールされます。
    # yum install xenner
    (2)xennerサービスの自動起動設定
    # chkconfig --level 345 xenner on
    [補足]
    xennerサービス起動用xennerスクリプト中でxenconsoledデーモンを起動する行がコメント化されていますがここでは問題ありません。
    (3)SELinux機能の無効化
    xennerサービス起動時のSELinux AVC拒否エラー抑止のためにSELinux機能を無効にします。
    # vi /etc/sysconfig/selinux
    「SELINUX=enforcing」を「SELINUX=disabled」に変更します。
    # reboot
    ※/etc/xen/xend-config.sxpの内容は特に変更する必要はありません。

  3. PVゲストの準備
    今回はUbutun 8.04上のVMware Server 2.0環境にUbuntu 8.10 Server(x86)をインストールしたものをPVゲストとして使用します。
    (1)仮想マシン名はvmu810jeosとします。
    ここでの仮想ディスクは1GB固定サイズのvmu810jeos-flat.vmdkというファイルとします。
    (2)Ubuntu 8.10 ServerのインストールメニューではF4キーで「Install a minimal virtual machine」(即ちJeOS)を選択します。



    (3)「Software selection」では最低限「[OpenSSH server」は選択します(sshでXenner環境のPVゲストに接続・操作するため)。
    (4)この仮想ディスクをFedora 10 Preview版側の/root/vmu810jeos/直下に転送します。
    ※PVゲストはPYGRUBで起動するため仮想ディスクからのカーネル吸い出しは不要です。

  4. PVゲストの起動
    以下のコマンドでPVゲストをPYGRUBで起動できます。
    /usr/bin/xenner -m 128 -name xnr-vmu810jeos -boot c \
    -hda /root/vmu810jeos/vmu810jeos-flat.vmdk \
    -network 54:52:00:48:19:01,virbr0
    [補足]
    (1)ブートローダとしてPYGRUBを使用するため「-kernel」と「-initrd」のパラメータは指定しません。
    (2)MACアドレスはKVMゲスト用に割り振られるアドレス体系にしておくとよいかと思います。
    (3)pyGRUBメニュー画面ではkernel行に「console=xvc0」を指定します(これを省略するとssh接続できません)。





    (4)xenner起動時及びPVゲストshutdown時にxennerが表示するメッセージ例/統計例はこちらです。
    (5)PYGRUBを使用せずにPVゲストを起動するには以下のコマンドを実行します。
    /usr/bin/xenner -m 128 -name xnr-vmu810jeos -boot c \
    -kernel /root/vmu810jeos/vmlinuz-2.6.27-7-server \
    -initrd /root/vmu810jeos/initrd.img-2.6.27-7-server \
    -append "root=UUID=1bbdd7e0-7302-4411-85d4-06a2c2fcf7a4 ro quiet console=xvc0" \
    -hda /root/vmu810jeos/vmu810jeos-flat.vmdk \
    -network 54:52:00:48:19:01,virbr0
    ここの「console=xvc0」部分は「xencons=tty1 console=tty1」と指定しても構いません(様々な指定ができます)。

  5. DHCPで割り当てられるIPアドレスの確認
    PVゲストを起動するとxenner0というインタフェースが自動生成されます(ifconfigで確認できます)。
    このXenner環境でのネットワークはTUN/TAPデバイスドライバを使用したNAT型になります。
    Xenner環境でPVゲストを起動した場合、PVゲストとの組み合わせによってはログインプロンプト表示まで到らないことがあります。
    そのような場合はホスト側からDHCPで割り当てられるIPアドレスを確認する必要があります。
    DHCPで割り当てられるIPアドレスは/var/lib/libvirt/dhcp-default.leasesに格納されますので容易に確認できます。
    下記はホスト側の/var/lib/libvirt/dhcp-default.leasesの内容例です。

    1226813175 54:52:00:48:19:01 192.168.122.135 vmu810jeos *

  6. ssh接続・操作
    Fedora 10 Preview版側からsshコマンド(例:ssh ubuntu@192.168.122.135)でPVゲストに接続して操作します。
    下記画像の「ubuntu@vmu810jeos: ~」というタイトルウィンドウがssh接続した端末ウィンドウです。



    [補足]
    (1)PVゲストでのルートパーティションは/dev/xvda1となります(KVMゲストでは/dev/sda1)。
    (2)PVゲストでの「dmesg|grep paravirt」結果は「Booting paravirtualized kernel on KVM」となります(KVMゲストも同様)。
    (3)PVゲストでの「dmesg|grep ethernet」結果は「Initializing Xen virtual ethernet driver.」となります(KVMゲストでは表示なし)。
    (4)PVゲストからshudownを発行するとxenstoredデーモンが消滅しますので「service xenner restart」で再起動します。


  7. KVMゲストとPVゲストの仮想ディスク共用
    KVMゲストがUbuntu 8.10 Serverの場合はその仮想ディスクをPVゲスト用に利用することも可能です。


  8. KVMゲスト仮想ディスクのQEMUによる利用例
    KVMゲストの仮想ディスクはQEMUでもそのまま利用できます。
    (1)QEMUがインストールされていない場合は以下のコマンドでインストールします。
    # yum install qemu
    (2)QEMUでのネットワークでTAPインタフェースを利用するために以下のスクリプトを用意します。
    ※ここでのスクリプトファイル名はxen-runtimeパッケージに含まれる/etc/xen/qemu-ifupと区別するために/etc/myqemu-ifupとしています。
    # vi /etc/myqemu-ifup
    #!/bin/sh
    /sbin/ifconfig $1 0.0.0.0 promisc up
    /usr/sbin/brctl addif virbr0 $1
    # chmod 755 /etc/myqemu-ifup
    (3)以下のqemuコマンドでゲストを起動します。
    qemu -no-kqemu -m 128 -name qemu-u810sv \
    -hda /root/kvmu810sv/kvmu810sv.img \
    -net nic -net tap,ifname=tap0,script=/etc/myqemu-ifup \
    -localtime -k ja

    ゲスト起動後のログインプロンプト

    (4)DHCPで割り当てられるIPアドレスの確認
    ゲスト起動後、ホスト側でのifconfigコマンドでtap0インタフェースの存在が確認できます。
    またゲストにログインしてifconfigでゲスト側に割り当てられたIPアドレスを確認できます。
    尚、ゲストにログインしなくてもホスト側で「cat /var/log/messages |grep DHCPACK」の表示結果からIPアドレスを確認できます。
    (DHCPACK行が動的IPアドレスの確定を指します)
    localhost dnsmasq[2496]: DHCPACK(virbr0) 192.168.122.145 52:54:00:12:34:56 u810sv

    (5)ゲストにssh接続します。



    ゲストをシャットダウンするとtap0は自動で削除されます。

  9. PVゲストのGUI操作
    仮想フレームバッファを組み込んだPVゲストにVNC接続してGUI操作することもできます。
    今回はPVゲストとしてUbuntu 8.04を使用してみました(PVカーネルはXen専用カーネル使用)。
    手順詳細は省略しますがPVゲストは以下のコマンドで起動しました(仮想ディスクから起動ファイルを吸い出し済み)。
    /usr/bin/xenner -m 512 -name xnr-u804any -boot c \
    -kernel /root/anyubt804/vmlinuz-2.6.24-19-xen \
    -initrd /root/anyubt804/initrd.img-2.6.24-19-xen \
    -append "root=UUID=906e293e-9e84-4f04-a559-908a75ac020d ro quiet xencons=tty console=tty1 console=hvc0" \
    -hda /root/anyubt804/anyubt8041flat4gb.img \
    -network 00:16:3e:6c:2e:95,virbr0

    PVゲストのGUI操作例(SSHとVNCの同時接続)