トップページに戻る

NetBSD/xenのセットアップ

Yoshito Komatsu


Table of Contents

Xenとは
NetBSDのセットアップ
GRUBのセットアップ
Xenツールのセットアップ
Xenカーネルの入手
ドメイン0用NetBSDカーネルの入手
GRUBの設定
kernfsの設定
Xen用デバイスファイルの作成
Xenカーネルでの起動
Xendの動作確認
ドメイン用ディスクの作成
ドメイン設定ファイルの作成
ネットワーク設定スクリプトの作成
ドメインの作成

Xenとは

Xenはx86プラットフォーム上で動作する仮想マシンモニタです。 Xenを使用することで、Xen上で複数のOSを同時に動作させることができる ようになります。 Xenは擬似仮想化と呼ばれる方法でOSを動作させているため、Xen上で 動作させるOSにはXenで動作することができるよう修正を行う必要が あります。 NetBSDでは3.0以降でXenの最新バージョンである2.0に対応した修正が 含まれるようになりました。

NetBSDのセットアップ

NetBSD 3.0を通常通りセットアップします。

GRUBのセットアップ

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ツールが必要になります。 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に 以下の文を追加します。

Example 1. /etc/rc.confに追加する文の例

xend=YES
        

Xenカーネルの入手

Xen本体であるXenカーネルを入手します。 XenカーネルはXenのリリース配布物に含まれているので、Xenの ホームページからxen-2.0.6-install.tgzを 入手します。 入手したtarボールを展開するとinstall/bootxen-2.0.6.gzという名前でXenカーネルが 配置されるので、xen-2.0.6.gzをGRUBの インストールディレクトリにコピーします。

ドメイン0用NetBSDカーネルの入手

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の設定

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などシリアルコンソールのデバイスファイルを 指定します。

kernfsの設定

Xendを起動するためには/kernにkernfsが マウントされている必要があります。 /etc/fstabに以下の文を追加します。

Example 3. /etc/fstabに追加する文の例

/kern /kern kernfs rw 0 0
        

Xen用デバイスファイルの作成

Xendを起動するためには、/devにXen用の デバイスファイルが作成されている必要があります。

Example 4. Xen用デバイスファイルの作成例

# cd /dev
# sh MAKEDEV xen
        

Xenカーネルでの起動

Xenカーネルを起動する準備が整ったら、コンピュータを再起動し GRUBからXenカーネルを起動します。 Xenカーネルは起動後にGRUBのmoduleコマンドで指定されたカーネルを ドメイン0用OSとして起動するため、Xenカーネル起動後にドメイン0用 NetBSDカーネルが起動します。

Xendの動作確認

Xendの動作を確認するためにxmを実行します。

Example 5. xmの出力例

# xm list
Name              Id  Mem(MB)  CPU  State  Time(s) Console
Domain-0           0      127    0  r----   1587.0
        

ドメイン用ディスクの作成

ドメインを使用するために、ドメイン用ディスクを作成します。 ドメイン用ディスクにはNetBSDパーティションとファイルとを 使用することができます。 NetBSDパーティションを使用する場合にはCCDを使用して NetBSDパーティションを1個のディスクとして扱います。 ファイルを使用する場合には、VNDを使用してファイルを 1個のディスクとして扱います。 なお、RAIDframeを使用しているNetBSDパーティションは現在のところ ドメイン用ディスクとして使用することはできないようです。 ドメイン用ディスクの内容は基本的には通常のNetBSDディスクと 同じなので、通常のNetBSDのインストールと同じようにファイルシステムを 作成し、必要なtarボールを展開します。 ドメイン用ディスクが通常のNetBSDのディスクと異なる点は以下の2点です。

通常のNetBSDのディスクとドメイン用ディスクとで異なる点

  • ドメインではディスクのデバイスファイル名は xbd??という名前になるため、 ドメイン用ディスクの/etc/fstabに記述する デバイスファイル名も/dev/xbd??という名前で 記述します。

    Example 6. ドメイン用ディスクの/etc/fstabの例

    /dev/xbd0a / ffs rw,softdep 1 1
    /dev/xbd0b none swap sw 0 0
                  

  • ドメインで使用する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でドメインを作成します。

Example 9. ドメインの作成例

# xm create -c sv3.conf
        

-cオプションを指定すると、ドメインを作成すると同時に作成したドメインの シリアルコンソールに接続します。 現在動作しているドメインの一覧はxmで出力することができます。

Example 10. 現在動作しているドメインの一覧の出力例

# xm list
Name              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を使用します。

Example 11. 現在動作しているドメインのシリアルコンソールへの接続例

# xm console sv3
        

ドメインのシリアルコンソールへの接続を切断し、ドメイン0のコンソールへ 戻るには、Ctrl-]を入力します。 作成したドメインを破棄するには、ドメイン用OSを終了させた後で xmを使用します。

Example 12. ドメインを破棄する例

# xm destroy sv3
        


トップページに戻る