Xen 3.3(Fedora 10付属Xenner上でのFedora 10実行編)


2008年11月25日にFedora 10 正式版がリリースされました。
Fedora 10 正式版でもFedora 9同様にDomain0としての動作は未サポートのままです。
つまりFedora 9同様にFedora 10付属のXen 3.3ベースのXenハイパバイザーをブートできません。
※そのハイパバイザーをブートすると「elf_init: not an ELF binary」エラーになります。
しかしFedora 10にはXenner(version 0.46)というXenハイパバイザーエミュレータが付属しています。
XennerはKVMが組み込まれた通常カーネル環境でPVゲストを実行でき、その使用方法も非常に簡単です。
(Xenner自体はKVMゲストとして動作し、KVM上でXen DomainUインタフェースを提供するユティリティです)

ここではFedora 10のXenner上でFedora 10自体をXennerゲストとして実行させてみる手順を紹介します(すべて32ビット環境です)。
尚、今回使用したCPUはCore 2 Duo E6600です。


  1. Fedora 10付属kernel-PAEパケージについて
    Fedora 10ではkernel-PAEというパッケージが標準提供されています。
    kernel-PAEをインストールすると主要ファイルとして次のファイルが組み込まれます。

    (1)vmlinuz-2.6.27.5-117.fc10.i686.PAE
    (2)initrd-2.6.27.5-117.fc10.i686.PAE.img
    これはkernel-PAEインストール中に自動生成されるファイルですが、
    このinitrd-2.6.27.5-117.fc10.i686.PAE.imgはXen環境で動作する場合と動作しない場合があります。
    (3)config-2.6.27.5-117.fc10.i686.PAE(vmlinuz-2.6.27.5-117.fc10.i686.PAEのビルドオプション情報)
    kernel-PAEパッケージに含まれるカーネルのXen関連のビルドオプションを確認してみました。
    下記は/boot/config-2.6.27.5-117.fc10.i686.PAEの内容からXen関連のビルドオプションをピックアップしたものです。
    CONFIG_XEN=y
    CONFIG_HVC_XEN=y
    CONFIG_XEN_BLKDEV_FRONTEND=m
    CONFIG_XEN_NETDEV_FRONTEND=m
    CONFIG_PARAVIRT_GUEST=y

    (4)/boot/grub/grub.confに下記エントリが追加されます(例です)。
    title Fedora (2.6.27.5-117.fc10.i686.PAE)
    	root (hd0,2)
    	kernel /boot/vmlinuz-2.6.27.5-117.fc10.i686.PAE ro root=UUID=e815145b-db7e-4285-bc6c-4e6ba68fda1f rhgb quiet
    	initrd /boot/initrd-2.6.27.5-117.fc10.i686.PAE.img
    

    (5)/lib/modules/2.6.27.5-117.fc10.i686.PAE(カーネルモジュールを格納したディレクトリ)
    (6)補足
    Fedora 10のkernel-PAEパッケージに含まれるカーネル(vmlinuz-2.6.27.5-117.fc10.i686.PAE)は、
    通常カーネル兼PVゲストカーネルとなっています。
    尚、/boot/xen-3.3.gzはxen-hypervisorというパッケージに含まれておりkernel-PAEパッケージのインストールとは別インストールになります。

  2. 通常カーネル兼PVゲストカーネル(vmlinuz-2.6.27.5-117.fc10.i686.PAE)について
    (1)Fedora 10環境でKVMゲストをインストールした仮想ディスク(pvfc10.img)をCentOS 5.2 x64 Xen 3.3環境のDomainUとして起動してみました。
    ※このKVMゲストにはkernel-PAEをインストール済みです。
    CentOS 5.2 x64 Xen 3.3環境で以下の操作を実施しました。
    # mount -o loop,offset=32256 pvfc10.img /mnt
    # cp /mnt/boot/vmlinuz-2.6.27.5-117.fc10.i686.PAE /root/
    # cp /mnt/boot/initrd-2.6.27.5-117.fc10.i686.PAE.img /root/
    # umount /mnt
    # vi /etc/xen/xmfc10.cfg
    kernel = "/root/vmlinuz-2.6.27.5-117.fc10.i686.PAE"
    ramdisk = "/root/initrd-2.6.27.5-117.fc10.i686.PAE.img"
    memory = 512
    name = "fc10U"
    vif = [ 'mac=54:52:00:4d:1b:ec, bridge=xenbr0' ]
    disk = [ 'tap:aio:/root/fc10pvboot/pvfc10.img,xvda,w' ]
    root = "/dev/xvda1 ro"
    extra = "3 xencons=tty"

    # xm create -c xmfc10.cfg
    このゲスト起動で/boot/vmlinuz-2.6.27.5-117.fc10.i686.PAEカーネル自体に対してはInvalid kernel等のエラーにはなりません。
    しかし一連のブートメッセージの最後に下記行を表示して停止したままとなりゲストブートは完走しません。
    Loading /lib/kbd/keymaps/i386/qwerty/jp106.map

    (2)尚、Fedora 8のDomainUでvmlinuz-2.6.27.5-117.fc10.i686.PAEをブートしようとすると以下のエラーとなります。
    Error: (2, 'Invalid kernel', 'xc_dom_find_loader: no loader found\n')

    (3)更にFedora 10 Xennerでvmlinuz-2.6.27.5-117.fc10.i686.PAEをブートしようとするとInvalid kernelにはなりませんが、
    以下のメッセージ出力後異常終了します。
    [emu] <1>irq route: vec 33 = evtchn 1, type ext, vcpu 0, io-apic pin 0, xenstore

  3. Fedora 10のXenner上でFedora 10自体をXennerゲストとして実行させるカーネル選択
    Fedora 10のXenner上でFedora 10自体をXennerゲストとして実行させるためにはそのカーネルを選択する必要があります。
    特に重要なのはXennerゲスト(DomainU)用のinitrdです。
    DomainUで実行させるinitrdはXenディスクフロントエンドドライバ(xen-blkfront)をロードする処理が必要です。
    Fedora 10にはkernel-xenパッケージは存在しませんがFedora 9にはkernel-xenパッケージがあります。
    kernel-xen(-2.6.25-2.fc9.i686.rpm)パッケージはinitrd-2.6.25-2.fc9.i686.xen.imgを生成しますが、
    そのinitrd-2.6.25-2.fc9.i686.xen.imgの内容はkernel-xenをインストールする環境によって変わります。
    (1)KVMゲストの中でkernel-xenをインストーする場合、そのinitrd-2.6.25-2.fc9.i686.xen.imgはKVM用の準仮想化ブロックデバイスドライバ(virtio_blk)をロードします。
    (2)virt-installでXenのPVゲストをインストールする場合、そのinitrd-2.6.25-2.fc9.i686.xen.imgはXenディスクフロントエンドドライバ(xen-blkfront)をロードします。
    尚、Fedora 8にはkernel-xen(-2.6.21-2950.fc8)パッケージがありますがそのinitrdはxen-blkfrontをサポートしていません。
    よってFedora 9のXenカーネル(関連ファイル)を取得するためにはFedora 8(Domain0)のvirt-installでFedora 9をPVゲストとしてインストールする必要があります。
    その手順は以下の通りです。

  4. Fedora 10へのxen/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の内容は特に変更する必要はありません。

  5. Fedora 10側でのPVゲスト(Fedora 10)の準備
    Fedora 10側でKVMゲストとしてFedora 10をインストールし、それをPVゲスト(Fedora 10)として利用します。
    ※KVMゲストの仮想ディスク(/root/fc10pvboot/pvfc10.img)は4000MBで固定サイズのファイルとします。
    (1)KVMゲストのインストール概要
    (2)KVMゲストインストールの様子
    (3)KVMゲスト実行の様子(KVM用の準仮想化ブロックデバイスドライバ使用のため/dev/vda1と表示されます)
    (4)KVMゲストのPVゲスト化
    KVMゲスト(Fedora 10)にFedora 9のXenカーネルモジュールを組み込んでPVゲストとして利用できるようにします。
    Fedora 10側の/root/f8xen/virtinstには次のファイルがFedora 8側から転送されているものとします。
    ・vmlinuz-2.6.25-2.fc9.i686.xen
    ・initrd-2.6.25-2.fc9.i686.xen.img
    ・2.6.25-2.fc9.i686.xen.tar.gz
    # cd
    # cp fc10pvboot/pvfc10.img f8xen/ ※Xennerの暫定テスト用にKVMゲスト仮想ディスクをコピーします。
    # mount -o loop,offset=32256 f8xen/pvfc10.img /mnt
    # cd /mnt/lib/modules/
    # tar zxvf /root/f8xen/2.6.25-2.fc9.i686.xen.tar.gz
    # cd
    # umount /mnt

  6. XennerによるPVゲスト(Fedora 10)の実行
    XennerによるPVゲスト(Fedora 10)の実行手順は以下の通りです。


  7. XennerによるPVゲスト(Fedora 9)の実行
    Fedora 8のvirt-installでインストールしたPVゲスト(Fedora 9)もFedora 10のXennerで実行してみました。
    # mount -o loop,offset=32256 fc9domu/fc9domu2.img /mnt
    # cp /mnt/boot/vmlinuz-2.6.25-2.fc9.i686.xen fc9domu/
    # cp /mnt/boot/initrd-2.6.25-2.fc9.i686.xen.img fc9domu/
    # umount /mnt
    XennerでPVゲスト(Fedora 9)をランレベル 3で起動するには以下のコマンドを実行します。
    /usr/bin/xenner -m 512 -name xnr-fc9domu2 -boot c \
    -kernel /root/fc9domu2/vmlinuz-2.6.25-2.fc9.i686.xen \
    -initrd /root/fc9domu2/initrd-2.6.25-2.fc9.i686.xen.img \
    -append "root=UUID=7d747ed7-6352-4544-9ab7-69bb13fd3a4c ro quiet 3 console=xvc0" \
    -hda /root/fc9domu2/fc9domu2.img \
    -network 00:16:3e:31:6c:0c,virbr0
    「console=xvc0」部分を「console=hvc0」にするとネットワーク接続ができません。

    ssh接続・操作例