Xenで準仮想化環境を構築する


  1. Xenとは
  2. インストール
    1. XEN3_DOM0カーネル
    2. XenkernelとXentools
  3. 設定
    1. デーモンの設定
    2. ブリッヂの設定
    3. /boot.cfgの編集
    4. 再起動
    5. Domain-0の確認
  4. NetBSD Domain-Uの作成
    1. ディスク
    2. カーネル
    3. Domain-U用設定ファイル
    4. Domain-Uインストール
    5. 設定ファイルの編集
    6. Domain-U動作確認
  5. 参考文献

Xenとは

XenはThe Xen Projectが開発しているオープンソースの仮想化プラットフォームです。GNU/LinuxディストリビューションやFreeBSD・NetBSD上で動作します。XenはVirtualBoxやQEMUのような完全仮想化ではなく、ハードウェアのエミュレーションをおこなわない準仮想化を提供してくれます。「64bit用XenでもCPUが64bitに対応していさえすれば、ParaVirtualizationはIntel VT-xやAMD-Vと呼ばれる仮想化支援命令を持たないCPUでも問題なく動作する」[oshima]点が特徴です。

一方で「NetBSD/xen domain 0 kernel で multiprocessor の恩恵を受けることはできません」「X11 と併用するなど、 domain 0 に対して資源を振り向けたいケースも多いと思います。そのような場合に限って NetBSD/xen はあまり役に立ちません。 NetBSD/xen domain 0 は domain U の I/O サービス専用と割り切ってください」[clare]と言われるように、一般的にXenホスト(domain 0あるいはdom0と呼ばれる)に対してCPUやメモリを潤沢に割り振るようなことはしません。仮想化用のサーバとして扱うか、SSHでX11転送してXenゲスト(domU)を主に使うことになるでしょう。「NetBSDのDom0は、マルチコアに対応していない」[isihara]ため、FirefoxやLibreOfficeのような大規模ユーザアプリケーションをホストで実行するのは厳しいように思われます。

インストール

XEN3_DOM0カーネル

NetBSDをインストールした直後とします。インストール作業については省略します。パーティションなどは特別区切っておらずFull Installationをしたと仮定します。まずはGENERICカーネルからXen用のXEN3_DOM0カーネルへ入れ替える作業をおこないます。

# ftp ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-7.1/amd64/binary/sets/kern-XEN3_DOM0.tgz
# tar zxf kern-XEN3_DOM0.tgz
# mv netbsd /netbsd-XEN

ここで、/netbsdmv(1)で上書きしていないことに注意してください。XEN3_DOM0カーネルの起動が失敗したときに備えて普通のGENERICカーネルでいつでも起動できるようにしておきます。

XenkernelとXentools

pkgsrcからsysutils/xenkernel48とsysutils/xentools48をインストールします。

# cd /usr/pkgsrc/sysutils/xenkernel48
# make install clean clean-depends
# cd /usr/pkgsrc/sysutils/xentools48
# make install clean clean-depends

設定

デーモンの設定

ここではXenに最低限必要なデーモンの設定について述べます。/usr/pkg/share/examplesディレクトリ以下にあるRCスクリプトを/etc/rc.dディレクトリにコピーし、自動起動の設定をrc.conf(5)に書きます。xencommonsデーモンを有効にしておかないと、XEN3_DOM0カーネルでブートする際ハングしてしまいます。必ずrc.conf(5)に書き込んでおいてください。

# cp /usr/pkg/share/examples/rc.d/xencommons /etc/rc.d
# cp /usr/pkg/share/examples/rc.d/xendomains /etc/rc.d
# cp /usr/pkg/share/examples/rc.d/xen-watchdog /etc/rc.d
# echo "xencommons=YES" >> /etc/rc.conf
# echo "xendomains=YES" >> /etc/rc.conf
# echo "xen-watchdog=YES" >> /etc/rc.conf

ブリッヂの作成

Domain-U用にネットワークブリッヂを作ります。/etc/ifconfig.bridge0に以下の内容を記述します。

create
up
!brconfig bridge0 add wm0 up

文中のwm0は、使用しているマシンのネットワークインタフェース名に適宜置き換えてください。

/boot.cfgの編集

/boot.cfgに以下の行を追加します。

menu=Boot Xen:load /netbsd-XEN console=pc; multiboot /usr/pkg/xen48-kernel/xen.gz dom0_mem=8192M

起動時に"Boot Xen"と書かれた行の番号をタイプすると、XENカーネルが使われ、標準の"Boot normally"などであればGENERICカーネルが使われるようになりました。

再起動

再起動し、XENカーネルを使うようブート時の画面で指定します。

Domain-0の確認

xlコマンドを使い、ゲスト(Domain-0)とホスト(Domain-U)の状態を確認できます。

# xl list
Name                       ID   Mem VCPUs      State    Time(s)
Domain-0                    0  8192     1     r-----       11.3

NetBSD Domain-Uの作成

ディスク

4GBのディスクを作ります。

# dd if=/dev/zero of=netbsd.img bs=1m count=4096

カーネル

インストール用のDOMUカーネルと通常のDOMUカーネルをダウンロードします。

# ftp ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-7.1/amd64/binary/kernel/netbsd-XEN3_DOMU.gz
# ftp ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-7.1/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz
# gzip -d netbsd-INSTALL_XEN3_DOMU.gz
# gzip -d netbsd-XEN3_DOMU.gz

Domain-U用設定ファイル

Domain-U用の設定ファイルを作ります。ここでは"xen_netbsd"という名前で以下のように書きました。

kernel = "/root/netbsd-INSTALL_XEN3_DOMU"
vcpus = 2
memory = 2048
name = "NetBSD"
vif = [ 'bridge=bridge0' ]
disk = [ 'file:/root/netbsd.img,0,w' ]

仮想コアは2つ、メモリは2GBにし、ディスクには /root/netbsd.imgを指定しています。vifのMACアドレスが必要であればifconfig(8)を使い、ブリッヂしているネットワークインタフェースのMACアドレスを確認してください。

Domain-Uインストール

# xl create -c /root/xen_netbsd

sysinstの画面が出てきます。先にネットワークの設定をしてから、tarballをFTP経由でダウンロードすればよいでしょう。インストール終了後、sysinstのトップ画面から"x: Exit Install System"を選択し、halt -pで仮想マシンをシャットダウンします。

設定ファイルの編集

kernel = 行を書き換えます。

kernel = "/root/netbsd-XEN3_DOMU"
vcpus = 2
memory = 2048
name = "NetBSD"
vif = [ 'bridge=bridge0' ]
disk = [ 'file:/root/netbsd.img,0,w' ]

Domain-U動作確認

ふたたび起動します。

# xl create -c /root/xen_netbsd

Domain-UでSSHデーモンを動かしリモートログインができる状態にあるなど、コンソール画面が必要でない場合は-cオプションをつけずに実行します。

# xl create /root/xen_netbsd

参考文献

  1. The Xen Project, https://www.xenproject.org/
  2. oshima, NetBSD/xen環境の構築 64bit編
  3. clare, NetBSD/xen Configuration
  4. isihara, NetBSDでXenXen動くよ