Xen 3.3.1(Fedora 11のDomain0化)


2009年3月31日にFedora 11 Beta版(Fedora 10.92)がリリースされました。
Fedora 11 Beta付属のXenはXen 3.3.1です。
Fedora 9, 10同様にFedora 11(Beta)でも自分自身をXenのDomain0として動作させる機能はサポートしていません。

Fedora 11のXen関連パッケージ自体にはparavirt-ops対応のDomain0カーネルをサポートする機能が追加されています。
しかしFedora 11付属のPAEカーネル(正確にはカーネルソース)側にはそのカーネルをDomain0として起動させる構成オプション自体が含まれていません。
このためFedora 11付属のPAEカーネルを再構築してもそのカーネルをDomain0としてブートさせることはできません。
即ち、Fedora 11をDomain0として実行させるにはFedora 11付属でない別のカーネルソースが必要になってきます。

[補足]
(1)カーネル2.6.23からparavirt-opsという仕組みが追加されました。
(2)paravirt-opsとは通常のvmlinuzカーネル(bzImage形式)をPVゲストカーネルとしても動作させる仕組みを指します。
(3)Fedora 11のXen関連パッケージにはparavirt-ops対応のDomain0カーネルをサポートする機能が追加されています。
(4)paravirt-ops対応のDomain0カーネルとは「通常カーネル兼PVゲストカーネル兼Domain0カーネル」を指します。
(5)Fedora 11においてparavirt-ops対応のDomain0カーネルを構築することで「Xen専用カーネルの不要化」が実現可能となります。

ここではFedora 11をクリーンインストールした状態でDomain0としても動作するカーネルを即席で構築する手順を紹介します。
更にPVゲストの実行例やKVM/Xennerの実行例も合わせて紹介します。
尚、今回使用したCPUはCore 2 Duo E6600です。
またここで紹介するホストOS, PVゲスト共にすべて32ビット版OSです。
下記では特に断りが無い限りFedora 11はFedora 11 Betaを指します。


  1. ホストOS(Fedora 11)のインストール
    ホストOS(Fedora 11)のインストール手順詳細は省略しますが今回のインストール条件は以下の通りです。
    (1)ホスト名:fedora11b.mydomain.net
    (2)パーテョション設定
    ・ルートパーティション(ext3):/dev/sda3(約40GB)
    ・swapパーティション:なし
    (3)ブートローダの作成場所:MBR(/dev/sda)
    (4)インストールするソフトウェアセット
    ・オフィスとプロダクティビティ
    ・ソフトウェア開発
    ・Webサーバ
    ・カスタマイズで追加するソフトウェア;
    サーバ系の「サーバ設定ツール」
    ベースシステム系の「システムツール」(「仮想化」は選択しません)

  2. ホストOS(Fedora 11)のインストール後の設定
    (1)GDMでのrootログインの可能化設定
    具体的には一般ユーザでログインして以下のコマンドを実行します。
    $ su - root
    # vi /etc/pam.d/gdm
    「auth required pam_succeed_if.so user != root quiet」行を「auth required pam_succeed_if.so」に変更します。
    この後、rootでログインします。
    (2)NetworkManagerサービスは有効のままとします(networkサービスは無効のままとします)。
    但し、コンピュータの起動時にデバイスを起動するオプションを有効にします。
    (3)テスト用のためファイアウォールはここでは便宜上無効としました。
    (4)SELinux機能を無効にします。
    # vi /etc/sysconfig/selinux
    「SELINUX=enforcing」を「SELINUX=disabled」に変更します。
    (5)インストール時にキーボードとしてJapaneseを選択しても日本語用キーボード設定にはならないという不具合があるようです。
    システムメニューの[設定]−[キーボード]でキーボード形式:Japanese 106-key、レイアウトのデフォルト:Japanに変更します。
    (6)SELINUXオプション変更を有効にするためシステム再起動します。

  3. Xen 3.3.1環境の構築
    ここでは以下の手順でFedora 11 Beta付属のXen 3.3.1を導入します。

    # yum install bridge-utils
    # yum install yum install xen xen-libs xen-runtime xen-hypervisor xen-devel ※qemu-imgも自動インストールされます。

    尚、virt系のパッケージ(libvirt等)はインストールしないままとします。

  4. Domain0用カーネル構築
    # git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen
    # cd linux-2.6-xen/
    # make menuconfig
    ※上記gitでソース入手した時期によってデフォルト構成オプションが異なる場合がありますので必ずしも下記通りの手順にならないこともあります。
    (1)まず「X86_PAE=y」になっていることを確認します。
    「X86_PAE=y」になっていなければ「X86_PAE=y」となるように操作します。
    具体的には「Linux Kernel Configuration」画面で以下の操作を行います。
    ・Processor type and features --->の選択
    ・High Memory Support (4GB) --->の選択
    ・High Memory Supportで「(X) 4GB」を「(X) 64GB」に変更します。
    (2)デフォルトでは「XEN_DOM0=n」になっているため「XEN_DOM0=y」となるように操作します。
    具体的には「Linux Kernel Configuration」画面で以下の操作を行います。
    ・Processor type and features --->の選択
    ・[*] Paravirtualized guest support --->の選択
    ・[*] Xen guest supportになっていることを確認します。
    もしなっていなければ「[*] Xen guest support」にします。
    ・[ ] Enable Xen privileged domain support (NEW)にチェックを入れます。
    ※「[*] Enable Xen privileged domain support」表示となります。
    (3)Xen virtual block device supportやXen network device frontend driverも有効になっていることを確認します。
    もしなっていなければ有効にします(詳細手順略)。
    (4)Block-device backend driver, Xen backend network device, Xen virtual block device support, Xen filesystemも有効にします。
    具体的には「Linux Kernel Configuration」画面で以下の操作を行います。
    ・Device Drivers --->の選択
    ・[*] Backend driver supportの下にある下記2項目を変更します。
    「< > Block-device backend driver (NEW)」を「<*> Block-device backend driver」にします。
    「< > Xen backend network device (NEW)」を「<*> Xen backend network device」にします。
    ・[*] Block devices --->を選択し、「<M*> Xen virtual block device support」を「<*> Xen virtual block device support」にします。
    ・「<M> Xen filesystem」を「<*> Xen filesystem」にします。
    (5)最終的にmake menuconfigで作成される.configのXENオプションが以下の表示となるようにmake menuconfigを実施します。
    # cat .config|grep XEN
    CONFIG_XEN=y
    CONFIG_XEN_MAX_DOMAIN_MEMORY=8
    CONFIG_XEN_SAVE_RESTORE=y
    CONFIG_XEN_DEBUG_FS=y
    CONFIG_XEN_DOM0_PCI=y
    CONFIG_XEN_DOM0=y
    CONFIG_XEN_PRIVILEGED_GUEST=y
    CONFIG_MICROCODE_XEN=y
    CONFIG_PCI_XEN=y
    CONFIG_XEN_BLKDEV_FRONTEND=y
    CONFIG_XEN_NETDEV_FRONTEND=y
    CONFIG_XEN_KBDDEV_FRONTEND=y
    CONFIG_HVC_XEN=y
    CONFIG_XEN_FBDEV_FRONTEND=y
    CONFIG_XEN_BALLOON=y
    CONFIG_XEN_SCRUB_PAGES=y
    CONFIG_XEN_DEV_EVTCHN=y
    CONFIG_XEN_BACKEND=y
    CONFIG_XEN_BLKDEV_BACKEND=y
    CONFIG_XEN_NETDEV_BACKEND=y
    CONFIG_XENFS=y
    CONFIG_XEN_COMPAT_XENFS=y
    CONFIG_XEN_SYS_HYPERVISOR=y
    CONFIG_XEN_XENBUS_FRONTEND=y
    CONFIG_XEN_GNTDEV=y

    尚、PARAVIRTオプションについても以下の確認をしておきます。
    # cat .config|grep PARAVIRT
    CONFIG_PARAVIRT_GUEST=y
    CONFIG_PARAVIRT=y
    CONFIG_PARAVIRT_CLOCK=y
    # CONFIG_PARAVIRT_DEBUG is not set

    (6)以下のコマンドでカーネルをビルド/インストールします。
    # make all
    # make modules_install ※これによって/lib/modules/2.6.30-rc3-tipが作成されます。
    # make install
    ※これによって/boot/vmlinuz-2.6.30-rc3-tip, /boot/initrd-2.6.30-rc3-tip.imgがインストールされます。
    ※また/boot/grub/grub.confにvmlinuz-2.6.30-rc3-tipを通常カーネルとしてブートするエントリも追加されます。

  5. xenデーモン設定ファイルの変更
    # vi /etc/xen/xend-config.sxp
    用途に合わせて/etc/xen/xend-config.sxpの内容を変更します(今回使用した/etc/xen/xend-config.sxpの内容)。

  6. /boot/grub/grub.confの変更
    /boot/grub/grub.confにFedora 11をdomain0として起動するエントリを追加して以下の内容にします。
    default=2
    timeout=15
    splashimage=(hd0,2)/boot/grub/splash.xpm.gz
    hiddenmenu
    title Fedora 11 (2.6.30-rc3-tip)
    	root (hd0,2)
    	kernel /boot/vmlinuz-2.6.30-rc3-tip ro root=UUID=ebba706c-e965-451c-b01c-b2cc3f380fe5 rhgb quiet
    	initrd /boot/initrd-2.6.30-rc3-tip.img
    
    title Fedora 11 dom0 (2.6.30-rc3-tip)
    	root (hd0,2)
    	kernel /boot/xen-3.3.gz dom0_mem=1024M
    	module /boot/vmlinuz-2.6.30-rc3-tip ro root=UUID=ebba706c-e965-451c-b01c-b2cc3f380fe5 console=tty0
    	module /boot/initrd-2.6.30-rc3-tip.img
    
    title Fedora 11 (2.6.29-0.258.2.3.rc8.git2.fc11.i686.PAE)
    	root (hd0,2)
    	kernel /boot/vmlinuz-2.6.29-0.258.2.3.rc8.git2.fc11.i686.PAE ro root=UUID=ebba706c-e965-451c-b01c-b2cc3f380fe5 rhgb quiet
    	initrd /boot/initrd-2.6.29-0.258.2.3.rc8.git2.fc11.i686.PAE.img
    

  7. Fedora 11の通常カーネルでの起動
    Fedora 11を再起動し、GRUBメニューで[Fedora 11 (2.6.30-rc3-tip)]を選択して起動します。
    これでFedora 11が通常カーネルモードで起動します。
    ※xm dmesgは当然エラーとなります。

  8. Fedora 11のDomain0起動
    Fedora 11を再起動し、GRUBメニューで[Fedora 11 dom0 (2.6.30-rc3-tip)]を選択して起動します。
    これでFedora 11のDomain0が起動し、DomainUでの準仮想化ゲストも実行できます。
    (vif = ['bridge=eth0']指定で準仮想化ゲストを起動するとホスト側に「vif1.0」インタフェースが自動生成されます)

  9. Fedora 9をPVゲストとして実行する例
    Fedora 8のPVゲストとして作成したFedora 9の仮想ディスクをFedora 11上で実行してみました。


  10. Fedora 10をPVゲストとして実行する例
    Xen 3.3.1(Fedora 10のDomain0化)」で使用したPVゲスト(Fedora 10)としての仮想ディスクをここでも使用してみました。
    ※PVゲストとしての仮想ディスクファイルはpvfc10.img(4000MB)です。


  11. Ubuntu 8.10 Server(JeOS)をPVゲストとして実行する例
    VMware Server環境でUbuntu 8.10 Server(JeOS)をインストールした仮想ディスクをPVゲストとして利用してみました。


  12. HVMドメインでのWindows XP利用
    今回構築したFedoora 11のXen環境ではPVゲストだけではなくHVMドメインも利用できます。
    ここではHVMドメインでのWindows XP利用の流れを簡単に紹介します。
    (1)Fedora 11をDomain0としてブートします。
    (2)仮想マシンマネージャを使用してWindows XP用のHVMドメイン定義を行います。
    (3)HVMドメインでWindows XPをインストールします。
    (4)HVMドメインでのWindows XPデスクトップ例;



  13. 新カーネルでのKVM/Xenner実行
    今回「通常カーネル兼PVゲストカーネル兼Domain0カーネル」として構築したカーネルはKVM用途でも使用できます。
    make menuconfigで作成される.configのKVMオプションは以下の通りです。
    # cat .config|grep KVM
    CONFIG_KVM_CLOCK=y
    CONFIG_KVM_GUEST=y
    CONFIG_HAVE_KVM=y CONFIG_HAVE_KVM_IRQCHIP=y
    CONFIG_KVM=m
    CONFIG_KVM_INTEL=m
    CONFIG_KVM_AMD=m
    CONFIG_KVM_TRACE=y

    今回構築したカーネル環境にKVM関連パッケージを追加してXennerを動作させてみました。
    Domain0として動作するカーネルを構築した環境でXenner(Xenエミュレータ)を使用する意味はほとんどありません。
    しかしDomain0として動作するカーネルのKVM動作確認の意味でXennerを利用してみました。
    その手順は以下の通りです。


  14. KVM環境でのWindows 7のインストールと実行
    今回即席で構築したXen環境ではACPI利用には適していませんのでACPIを前提としたWindows 7 (RC)のインストールには制限が付きます。
    ※Fedora 8のHVMドメインでは問題なくWindows 7をインストール・実行できます(「Xen 3.1.0(Fedora 8上でのWindows 7実行編)」参照)。
    そこでHVMドメインではなくKVM環境にてWindows 7を実行させてみました。