Xen 3.3(KVMゲストとXenゲストのカーネル共用:Ubuntu 8.10 Server編)


2008年10月30日にUbuntu 8.10(Intrepid Ibex)がリリースされました。
従来通り、Ubuntu 8.10にもDesktop版とServer版があります。
仮想マシン関連での機能強化ポイントはXen 3.3対応コンポーネント搭載とVMBuilderのサポートです。
(1)Xen 3.3対応コンポーネント搭載関連
・明示的なXenカーネルは付属していません。
・しかしUbuntu 8.10 ServerカーネルはXen 3.3準仮想化ゲスト(PVゲスト)用カーネルとしても動作します(Xen専用カーネルの不要化)。
  (このXen専用カーネルの不要化は他のディストリビューションに先駆けての実装ですがgeneric/rtカーネルは対象外です)



・Desktop版及びServer版共にDomain0にはなれません(Ubuntu 8.04から後退しています)。
・Domain0になれない代りにXenner(KVM上のXenエミュレータ)が付属しています(xenner 0.41)。
・Server版カーネルコンポーネント(vmlinuz, initrd.img, カーネルモジュール)はKVMゲストとXenゲストで共用できます。
(2)VMBuilder関連
・従来のubuntu-vm-builderコマンドがvmbuilderコマンドに置き変わりました。
※パッケージレベルではUbuntu 8.04のubuntu-vm-builder 0.4はpython-vm-builder 0.9とubuntu-vm-builder 0.9に置き変わりました。
・VMBuilder機能では多種多様なJeOS(仮想マシン環境用最小サーバOS)を自動生成できます。
※サポート対象の仮想マシン環境はKVM, Xen, VMware Workstation 6.x, VMware Server 2.0/1.x系, VMware Fusion 2.0です。

ここではUbuntu 8.10 日本語 Remix CD版でのVMBuilderの利用とKVMゲスト/Xenゲストカーネル共用方法を中心に紹介します。
尚、今回使用したCPUはIntel Core 2 Duo E6600です。

  1. Ubuntu 8.10 日本語 Remix CD版のインストール
    (1)Ubuntu 8.10 日本語 Remix CDからブートします。
    (2)[コンピュータに変更を加えないでUbuntuを使ってみる]を選択実行します。
    (3)ライブモードで周辺機器の基本的動作確認を行います。
    (4)デスクトップ上の「インストール」アイコンからインストーラを起動します。
    インストールの流れはUbuntu 8.04の場合と同様です。

  2. Ubuntu 8.10の仮想関連環境の構築
    (1)ここでは各種お試しということでrootでの作業ができるようにrootパスワードの設定とrootログインの許可設定を行います。
    (2)rootでログインします。
    (3)以下のコマンドでKVM環境を構築します。
    # apt-get update
    # apt-get install kvm ※bridge-utilsもインストールされます。
    # apt-get install libvirt-bin
    # apt-get install ubuntu-vm-builder ※python-vm-builderもインストールされます。
    # apt-get install qemu
    # apt-get install virt-viewer
    (4)以下のコマンドで仮想マシン管理環境を構築します。
    # apt-get install ubuntu-virt-server ※openssh-serverもインストールされます。
    # apt-get install ubuntu-virt-mgmt ※virt-managerもインストールされます。
    上記で[アプリケーション]メニューに[システムツール]−[仮想マシンマネジャ]が追加されます。
    (5)以下のコマンドでXennerをインストールします。
    # apt-get install xenner
    (6)bridge設定
    ホストOSのDHCP設定をスタティックIPアドレス設定に変更し、かつ/etc/vmbuilder/libvirt/libvirtxml.tmplを変更します。
    # vi /etc/vmbuilder/libvirt/libvirtxml.tmpl
    【変更前の箇所】
        <interface type='network'>
          <source network='default'/>
        </interface>
    
    【変更後の状態】
        <interface type='bridge'>
          <source bridge='br0'/>
        </interface>
    

    更に/etc/network/interfacesにeth0とbr0をブリッジさせる設定を行います。

    (7)その他の設定
    一般ユーザ用に以下を実行します(任意)。
    # add アカント名 kvm ※/dev/kvmへの接続許可用です。
    # add アカント名 libvirtd
    (8)システム再起動の実施。

  3. 基本KVMゲストの作成
    KVM環境の基本動作検証及び後述のカーネル共用テストのためにUbuntu 8.10 ServerをKVMゲストとして標準インストールします。
    このKVMゲストを便宜上「基本KVMゲスト」と呼ぶことにします。


  4. VMBuilderの利用例
    VMBuilderによるJeOS(ここでは仮想マシン環境用最小サーバとしてのUbuntu 8.10 Server)の作成・利用方法を簡単に紹介します。

    各JeOSのVMBuilderによる生成時間は通信環境にも依存しますが5分程度で終了します。
    (Ubuntu 8.10 ServerのインストールオプションのF4キーでの[Install a minimal virtual machine]実行(対話形式)よりもずっと短時間でインストールできます)


  5. JeOS PVゲストの実行
    ここではJeOS PVゲストをUbuntu 8.04 Xen環境とCentOS 5.2 Xen環境で実行する手順を紹介します。


  6. Xennerについて
    Ubuntu 8.10 Server付属のXenner 0.41は期待通りの動作はしません(xenner 0.46にすれば動作可能)。
    Ubuntu 8.10 Server付属のXennerは以下のことから動作検証されずにリリースされていると思われます。

    (1)xennerコマンドを使用する前に下記の実行が必要となります。
    # ln -s /usr/lib/libxenctrl.so.3.2.0 /usr/lib/libxenctrl.so
    (このシンボリックリンクは/usr/sbin/blkbackdと/usr/sbin/netbackdの起動に必要です)

    # ln -s /usr/lib/xenner/libxenctrl.so.3.0.0 /usr/lib/xenner/libxenctrl.so

    # ln -s /usr/lib/libxenguest.so.3.2.0 /usr/lib/libxenguest.so
    (このシンボリックリンクがないとxennerコマンドでPVゲストを起動する際に共有ライブラリが無い旨のエラーとなります)

    (2)xennerサービスの起動でxenconsoledデーモンが起動しません。
    xenconsoledデーモンはxenstored側データベースに値を書き込んでゲストコンソールを表示するものです。
    Xenner利用においてxenconsoledデーモンは必須の要件となります(新しいXennerでは不要)。

    Xennerをインストールするとxennerサービスは自動起動されるように設定されます。
    しかしxennerサービスの起動でxenstoredデーモンは起動されますがxenconsoledデーモンは起動後すぐに消滅するようです。
    ※ps aux|grep xenで/usr/sbin/xenstoredプロセスは表示されますが、/usr/sbin/xenconsoledは表示されません。
    試しにservice xenner restartを実行すると以下のようになります。
    一見xenconsoledデーモン起動は成功しているように見えますがそのプロセスは消滅しています。
    root@ubt810sv:~# service xenner restart
     * Stopping xenner xenner                                                                  [fail]
    /etc/init.d/xenner: line 123: /var/log/netbackd.log: No such file or directory
     * Starting xenner xenner                                                                         
     * Starting evtchnd evtchnd                                                                [ OK ]
     * Starting xensored xenstored                                                             [ OK ]
     * Starting xenconsoled xenconsoled                                                        [ OK ]
     * Starting xen block devices xenblkbackd                                                  [ OK ]
     * Starting xen netblock netbackd                                                          [ OK ]
    root@ubt810sv:~# ps aux|grep xen
    root      7327  0.1  0.0   2188   644 ?        S    21:30   0:00 /usr/sbin/xenstored --no-domain-init ※便宜上ここで折り返し
                                                         --pid-file /var/run/xenstored.pid --trace-file /var/log/xenstored.trace
    root      7374  0.0  0.0   3236   792 pts/0    R+   21:30   0:00 grep xen
    root@ubt810sv:~#
    

    (3)xennerコマンドでPVゲストを起動すると以下のエラーとなります。
    [xenner,1] do_fork_exec: "/usr/lib/xen/bin/xenconsole" "7383"
    xenconsole: Could not contact XenStore: Connection refused
    本エラーは/usr/lib/xen/bin/xenconsoleがxenconsoledデーモン経由でのxenstored接続に失敗していることを表します。

    【補足】


  7. Ubuntu 8.10 Desktop環境へのUbuntu 8.10 Serverカーネルのインストール
    # apt-get install linux-image-2.6.27-7-server
    # reboot
    GRUBメニューでkernel 2.6.27-7-serverを選択して起動します。
    Serverカーネルを使用してもUbuntu 8.10のGUI操作が問題なく行えます。




  8. 64ビット版Ubuntu 8.10 Serverについて
  9. ご参考:Fedora 10 Preview版のKVM環境
    2008年11月4日にFedora 10 Preview版(Fedora 9.93)がリリースされました。
    Fedora 9同様Fedora 10 Preview版もDomain0としての動作は未サポートのままです。
    KVMは使用できますがFedora 10 Preview版カーネルはXen 3.3準仮想化ゲスト(PVゲスト)用カーネルとしては動作しません。
    Fedora 10 Preview版付属のXennerでFedora 10 Preview版カーネルを起動すると最初のカーネル解析時点で以下のエラーとなります。
    ERROR Invalid kernel: elf_xen_note_check: ERROR: Will only load images built for the generic loader or Linux images

    尚、Fedora 10 Preview版付属のXennerはPYGRUB利用でない場合、期待通りに動作しないことがあります。
    (PVカーネルを利用しても「evtchn_ioctl: write: retrying ... (1,Resource temporarily unavailable)」のエラーループとなります)