Xen 2.0(NetBSD 3.1/Xen編)


2006年11月2日にNetBSD 3.1(NetBSD/i386 3.1)がリリースされました。
そのNetBSD 3.1はXen 2.0, Xen 3.0, Xen-HVMが利用できるようになっています。

今回はNetBSD/Xenの基礎編として、NetBSD 3.1のXen 2.0.7環境のゲストOS(ゲストドメイン:ドメインU)としてVine Linux 3.1を実行させる手順を紹介します。
※Xen 2.0自体はNetBSD 3.0(2005年12月23日リリース)からサポートされていましたがNetBSD 3.1で一層安定したXen動作になっています。

尚、今回紹介するのは別マシンにインストールされていたVine Linux 3.1のHDDをNetBSD 3.1マシンにスレーブ接続させて利用する方式です。


1.前提条件

前提条件は以下の通りです。



2.NetBSD 3.1へのNetBSD/Xen 2.0環境の構築




3.ドメイン構成ファイルの作成

DomainU上でHDD2(/dev/hdb1)にあるVine Linux 3.1を動作させるためのドメイン構成ファイル(仮想マシン環境設定ファイル)を作成します。
そのファイルは/usr/pkg/share/examples/xen/xmvine31uとします(NetBSD 3.1側に用意します)。
※ドメイン構成ファイルは/usr/pkg/share/examples/xenにインストールされるサンプルファイル(xmexample1)をカスタマイズして作成します。
xmvine31uの内容は以下の通りです。

#  -*- mode: python; -*-
#============================================================================
# Python configuration setup for 'xm create'.
# This script sets the parameters used when a domain is created using 'xm create'.
# You use a separate script for each domain you want to create, or
# you can set the parameters for the domain on the xm command line.
#============================================================================

#----------------------------------------------------------------------------
# Kernel image file.
kernel = "/root/vmlinuz-2.6.11.12-xenU"

# Optional ramdisk.
#ramdisk = "/boot/initrd.gz"

# The domain build function. Default is 'linux'.
#builder='linux'

# Initial memory allocation (in megabytes) for the new domain.
memory = 220

# A name for your domain. All domains must have different names.
name = "dom1"

# Which CPU to start domain on?
#cpu = -1   # leave to Xen to pick

#----------------------------------------------------------------------------
# Define network interfaces.

# Number of network interfaces. Default is 1.
nics=1

# Optionally define mac and/or bridge for the network interfaces.
# Random MACs are assigned if not given.
vif = [ 'mac=00:16:3e:00:00:11, bridge=bridge0' ]

#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
# Each disk entry is of the form phy:UNAME,DEV,MODE
# where UNAME is the device, DEV is the device name the domain will see,
# and MODE is r for read-only, w for read-write.

disk = [ 'phy:wd1e,hda1,w', 'phy:wd1f,hda2,w' ]

#----------------------------------------------------------------------------
# Set the kernel command line for the new domain.
# You only need to define the IP parameters and hostname if the domain's
# IP config doesn't, e.g. in ifcfg-eth0 or via DHCP.
# You can use 'extra' to set the runlevel and custom environment
# variables used by custom rc scripts (e.g. VMID=, usr= ).

# Set if you want dhcp to allocate the IP address.
#dhcp="dhcp"
# Set netmask.
#netmask=
# Set default gateway.
#gateway=
# Set the hostname.
#hostname= "vm%d" % vmid

# Set root device.
root = "/dev/hda1 ro"

# Root device for nfs.
#root = "/dev/nfs"
# The nfs server.
#nfs_server = '169.254.1.0'
# Root directory on the nfs server.
#nfs_root   = '/full/path/to/root/directory'

# Sets runlevel 5.
extra = "5"

#----------------------------------------------------------------------------
# Set according to whether you want the domain restarted when it exits.
# The default is 'onreboot', which restarts the domain when it shuts down
# with exit code reboot.
# Other values are 'always', and 'never'.

#restart = 'onreboot'

#============================================================================

[補足]
(1)bridge0はNetBSD/Xen固有のブリッジです。
Domain0側もそのブリッジを使用してネットワークアクセスするので「ifconfig bridge0 down」を実行してしまうとDomain0側のネットワーク自体も使用できなくなります。
(2)disk = [ 'phy:wd1e,hda1,w', 'phy:wd1f,hda2,w' ]は物理ディスクパーティションを使用する場合の指定方法です。


4.Vine Linux 3.1用DomainUへのGUIログイン環境の構築(VNCの導入と設定)

DomainUではVGAはエミュレートされません。
DomainUにVNC接続してGUIモードでログインできる環境をここでVineをネーティブ起動して構築します。
この構築作業は以下の項目です。
(1)-
(2)-
(3)-
(4)仮想フレームバッファデバイス、日本語入力パッケージ(Anthy,uim,uimアプレット)のインストール
(5)VNCサーバの導入と自動起動設定
(6)gdm設定ファイルの変更
(7)-
(8)フォントサーバ設定ファイルの変更
(9)日本語入力環境の変更

以下に順を追って各項目の詳細手順を示します(各作業は当然のことながらネーティブ環境のLinuxで行います)。


5.Vine Linux 3.1(DomainU)用カーネルモジュールの準備



6.Vine Linux 3.1(DomainU)の実行




7.DomainUとQEMUの同時実行

Xen環境でもQEMUは実行できます。
そこでNetBSD 3.1のXen環境でDomainU(Vine Linux 3.1)とQEMU(Windows XP)を同時実行させてみました。
更に、NetBSD 3.1のXen環境ではLinuxエミュレーション機能も利用できます。



実寸画像はこちらです。
※画面上ホストOSがNetBSDかどうかの判別が困難ですが画面右端のGNOME端末上にかすかに「NetBSD 3.1」というシステム名が見えます。



8.DomainUでのFreeBSD 5.3の実行

NetBSD 3.1のDomainU上でFreeBSD 5.3の仮想ディスクイメージファイルを実行してみました。
まずhttp://www.yuanjue.net/から以下のファイルをダウンロードします。
(1)kernel:DomainU用のカーネルです(約2.4MB)。
(2)mdroot-5.3-small.gz:仮想ディスクイメージファイルです(約140MB)。
「gunzip mdroot-5.3-small.gz」でmdroot-5.3-small(約420MB)を得ます。

上記のファイル(kernel, mdroot-5.3-small)は/root/freebsd53ディレクトリに格納するものとします。
尚、仮想ディスクイメージファイルを元にvnd0を作成しvnd0のディスクラベルに以下の行を追加します。
d:    832000         0     unused      0     0

次にFreeBSD 5.3をDomainUで動作させるためのドメイン構成ファイル(xmfreebsd53u)を以下の内容で作成します。

kernel = "/root/freebsd53/kernel"
memory = 64
name = "freebsd53"
vif = [ 'mac=aa:00:00:00:00:11, bridge=bridge0' ]
disk = [ 'phy:/dev/vnd0d,vnd0d,w' ]
extra = "4"
extra = ",vfs.root.mountfrom=ufs:/dev/xbd0a"
extra += ",boot_verbose=yes"
extra += ",boot_gdb=yes"

xm create -c xmfreebsd53uでDomainUを起動します。
FreeBSD 5.3側のネットワーク定義をNetBSD 3.1環境に合うように変更すればFreeBSD 5.3からインターネット接続もできます。