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

Last Update


  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 の恩恵を受けることはできません。 NetBSD/xen domain U kernel でmultiprocessor の恩恵を受けることはできます。」「X11 と併用するなど、 domain 0 に対して資源を振り向けたいケースも多いと思います。そのような場合に限って NetBSD/xen はあまり役に立ちません。 NetBSD/xen domain 0 は domain U の I/O サービス専用と割り切ってください。」[clare]と言われるように、Xenホスト(domain 0あるいはdom0)に対してCPUやメモリを潤沢に割り振るようなことは普通しない。仮想化用のサーバとして扱うか、SSHでX11転送してXenゲスト(domain Uあるいは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編, http://www.yagoto-urayama.jp/~oshimaya/netbsd/xen64.html
  3. clare, NetBSD/xen Configuration, https://www.clarestudio.org/netbsd/xen.html
  4. isihara, NetBSDでXenXen動くよ, http://www.rururu.org/fswiki/wiki.cgi?page=NetBSD%A4%C7XenXen%C6%B0%A4%AF%A4%E8