Table of Contents
Xenはx86プラットフォーム上で動作する仮想マシンモニタです。 Xenを使用することで、Xen上で複数のOSを同時に動作させることができる ようになります。 Xenは擬似仮想化と呼ばれる方法でOSを動作させているため、Xen上で 動作させるOSにはXenで動作することができるよう修正を行う必要が あります。 NetBSDでは3.0以降でXenの最新バージョンである2.0に対応した修正が 含まれるようになりました。
Xenを起動するためにはGRUBと呼ばれるブートローダを使用する必要が あります。 GRUBはpkgsrcのsysutilsカテゴリにgrubという名前で含まれているため、 pkgsrcでGRUBをセットアップします。 なお、GRUBはRAIDframeに対応していないため、ルートパーティションに RAIDframeを使用する場合でもGRUBのファイルを配置するために RAIDframeではないパーティションを作成しておく必要があります。 GRUBをpkgsrcでセットアップした後、GRUBのinstallコマンドか grub-installを使用してGRUBをMBRにセットアップします。
Xenを使用するためには、Xenを管理するためのXenツールが必要になります。
Xen 2.0用のXenツールはpkgsrcのsysutilsカテゴリにxentools20という名前で
含まれているため、pkgsrcでXenツールをセットアップします。
XenツールにはXen上で動作するOSの管理を行うXendと呼ばれるデーモンが
含まれています。
pkgsrcはXendのrc.dスクリプトを
/usr/pkg/share/examples/rc.d/xendに配置するので
xendを/etc/rc.d/に
コピーします。
そして、Xendを自動起動するため/etc/rc.confに
以下の文を追加します。
Xen本体であるXenカーネルを入手します。
XenカーネルはXenのリリース配布物に含まれているので、Xenの
ホームページからxen-2.0.6-install.tgzを
入手します。
入手したtarボールを展開するとinstall/bootに
xen-2.0.6.gzという名前でXenカーネルが
配置されるので、xen-2.0.6.gzをGRUBの
インストールディレクトリにコピーします。
NetBSD 3.0ではドメイン0用NetBSDカーネルがリリース配布物に
含まれています。
NetBSD 3.0のリリース配布物の/binary/kernel/に
netbsd-XEN0.gzという名前でドメイン0用
NetBSDカーネルが配置してあるので、netbsd-XEN0.gzを
GRUBのインストールディレクトリにコピーします。
また、Xenカーネルからドメイン0用NetBSDカーネルを起動した場合、
動作しているNetBSDカーネルと/netbsdが
異なるとsavecoreが正常に動作しないため、
netbsd-XEN0.gzを展開し、
/netbsdとして配置しておきます。
なお、通常のNetBSDカーネルも残しておく方が安全なので、通常の
NetBSDカーネルは/netbsd.origに名前を変更して
退避させておきます。
GRUBの設定ファイルは既定値でmenu.lstと
いう名前です。
Xenを起動するためのmenu.lstをGRUBの
インストールディレクトリに作成します。
Example 2. menu.lstの例
default 0
timeout 30
title Xen
kernel (hd0,0,a)/grub/xen-2.0.6.gz dom0_mem=131072
module (hd0,0,a)/grub/netbsd-XEN0.gz console=pc
GRUBのmenu.lstについての詳細な設定はGRUBの
infoをご参照ください。
Xenカーネルのパラメータdom0_memにはドメイン0に割り当てるメモリの量を
キロバイト単位で指定します。
ドメイン0用NetBSDカーネルのパラメータconsoleにはドメイン0の
コンソールの出力先を指定します。
通常のVGAコンソールに出力する場合はpcと指定し、シリアルコンソールに
出力する場合はtty0などシリアルコンソールのデバイスファイルを
指定します。
Xendを起動するためには/kernにkernfsが
マウントされている必要があります。
/etc/fstabに以下の文を追加します。
Xendを起動するためには、/devにXen用の
デバイスファイルが作成されている必要があります。
Xenカーネルを起動する準備が整ったら、コンピュータを再起動し GRUBからXenカーネルを起動します。 Xenカーネルは起動後にGRUBのmoduleコマンドで指定されたカーネルを ドメイン0用OSとして起動するため、Xenカーネル起動後にドメイン0用 NetBSDカーネルが起動します。
Xendの動作を確認するためにxmを実行します。
ドメインを使用するために、ドメイン用ディスクを作成します。 ドメイン用ディスクにはNetBSDパーティションとファイルとを 使用することができます。 NetBSDパーティションを使用する場合にはCCDを使用して NetBSDパーティションを1個のディスクとして扱います。 ファイルを使用する場合には、VNDを使用してファイルを 1個のディスクとして扱います。 なお、RAIDframeを使用しているNetBSDパーティションは現在のところ ドメイン用ディスクとして使用することはできないようです。 ドメイン用ディスクの内容は基本的には通常のNetBSDディスクと 同じなので、通常のNetBSDのインストールと同じようにファイルシステムを 作成し、必要なtarボールを展開します。 ドメイン用ディスクが通常のNetBSDのディスクと異なる点は以下の2点です。
通常のNetBSDのディスクとドメイン用ディスクとで異なる点
ドメインではディスクのデバイスファイル名は
xbd??という名前になるため、
ドメイン用ディスクの/etc/fstabに記述する
デバイスファイル名も/dev/xbd??という名前で
記述します。
ドメインで使用するNetBSDカーネルは通常のNetBSDカーネルとは
異なります。
NetBSD 3.0のリリース配布物に
/binary/kernel/netbsd-XENU.gzという名前で
含まれています。
NetBSD 3.0のリリース配布物の
/binary/kernel/netbsd-XENU.gzを
ドメイン用ディスクのルートディレクトリに
/netbsdという名前でコピーします。
また、実際に起動するドメイン用カーネルは
ドメイン用ディスクではなく、ドメイン0のディスクから読み込むため、
ドメイン0のディスクにも/etc/xen/netbsdという
名前でドメイン用NetBSDカーネルをコピーしておきます。
ドメイン設定ファイルを/etc/xenに作成します。
Example 7. ドメイン設定ファイルの例
name = "sv3"
kernel = "/etc/xen/netbsd"
memory = 128
disk = ['phy:/dev/vnd0d,wd0d,w']
nics = 3
vif = ['mac=00:00:6c:00:03:01,bridge=bridge0',
'mac=00:00:6c:00:03:02,bridge=bridge1',
'mac=00:00:6c:00:03:03,bridge=bridge2']
nameにはドメインの名前を設定します。 kernelにはドメイン0おnディスクにあるドメイン用NetBSDカーネルの場所を 指定します。 memoryにはドメインで使用するメモリをメガバイト単位で指定します。 diskにはドメイン用ディスクとして使用するデバイスのデバイスファイル名を 指定します。 NetBSDではdiskにファイルを指定することはできません。 ファイルをドメイン用ディスクとして使用する場合には必ずVNDを使用して デバイスとして使用する必要があります。 nicsにはドメインで使用するネットワークインタフェイスの数を指定します。 vifにはドメインで使用するネットワークインタフェイスのMACアドレス、 接続するブリッジインタフェイスなどを指定します。
ドメイン起動時には/etc/xen/scripts/vif-bridge
という名前のスクリプトがネットワーク設定スクリプトとして自動的に
実行されます。
ネットワーク設定スクリプトはオプションとして、ドメイン設定ファイルの
vifで指定された値を受け取ります。
vifで指定されたブリッジインタフェイスに接続するための
ネットワーク設定スクリプトを以下に示します。
Example 8. ネットワーク設定スクリプトの例
#!/bin/sh
set -e
echo "vif-bridge $*"
OP=$1
shift
for arg; do export "${arg}"; done
vif=${vif:?}
bridge=${bridge:?}
case $OP in
up)
ifconfig x${vif} up
brconfig ${bridge} add x${vif}
exit 0
;;
down)
brconfig ${bridge} delete x${vif}
ifconfig x${vif} down
exit 0
;;
*)
echo 'Invalid command: ' $OP
echo 'Valid commands are: up, down'
exit 1
;;
esac
xmでドメインを作成します。
-cオプションを指定すると、ドメインを作成すると同時に作成したドメインの シリアルコンソールに接続します。 現在動作しているドメインの一覧はxmで出力することができます。
Example 10. 現在動作しているドメインの一覧の出力例
#xm listName Id Mem(MB) CPU State Time(s) Console Domain-0 0 127 0 r---- 1587.0 sv3 1 128 1 -b--- 378.4 9601
現在動作しているドメインのシリアルコンソールに接続するには xmを使用します。
ドメインのシリアルコンソールへの接続を切断し、ドメイン0のコンソールへ 戻るには、Ctrl-]を入力します。 作成したドメインを破棄するには、ドメイン用OSを終了させた後で xmを使用します。