Ubuntu Weekly Recipe

第198回UbuntuにもXenがやってきた

Ubuntu 11.10ではLinux 3.0カーネルを採用しているため、とても簡単にXenの環境を構築できるようになりました。そこで今回は、UbuntuをXenのホスト環境(Dom0)として設定し、Ubuntuを含むいくつかのゲストOSをインストールする手順を紹介します。

Xenとは

Xenはハイパーバイザーと呼ばれる仮想マシンを実行するソフトウェアで、多種多様なプラットフォームをサポートし、Amazon Web Serviceでも使われている仮想化技術の一つです。

Ubuntuでよく使われている仮想マシン実行環境と言えばKVMやVirtualBoxがありますが、Xenはこれらに対して「準仮想化」と呼ばれる技術もサポートしており、IntelVTやAMD-VなどのCPUの仮想化支援機構がない環境でもゲストOSを高速に動作させられるといった特徴を持っています。

XenはホストOSをDomain 0(Dom0⁠⁠、ゲストOSをDomain U(DomU)と呼び、Dom0と準仮想化を使う場合はDomUもXenに対応したカーネルを使う必要があります。Ubuntuでは10.04以降、Xen対応のカーネルを公式には提供していなかったため、UbuntuにXenを導入するためにはユーザーがカーネルのコンパイルから行わなければならないというハードルの高い状態でした。

しかしながら、Linux 3.0からLinuxの公式カーネルでXenがサポートされるようになりました。そしてUbuntu 11.10ではLinux 3.0.4ベースのカーネルを採用しているため、カーネルを変更することなくDomUとしてもDom0としても使えるようになったのです[1]⁠。

UbuntuをDom0として使う

UbuntuをDom0として使うには以下のパッケージをインストールします。

$ sudo apt-get install xen-hypervisor-4.1

これにより、GRUBの設定(/boot/grub/grub.cfg)にXen本体をロードしてからカーネルをブートするエントリーが追加されます。そこで、一度再起動を行い、GRUBメニューで"Xen 4.1-amd64"エントリーを選択し、さらにサブエントリーからリカバリーモードでない方のエントリーを選択してください[2]⁠。

Xenが無事動いていれば、以下のコマンドで各種情報が表示されるはずです。

$ sudo xm info
Name                           ID   Mem VCPUs      State   Time(s)
Domain-0                        0   469     2     r-----     12.8
$ sudo xm list
host                   : ubuntu
release                : 3.0.0-12-generic
(以下省略)

無事に起動できたら、次回以降Xenエントリーが自動選択されるよう、GRUBの設定を行います。まず、/etc/default/grubのGRUB_DEFAULTの値をsavedに変更します。

次に以下のコマンドを実行します。

$ sudo grub-set-default 2
$ sudo update-grub

一つ目のコマンドの最後の数字はメニューエントリーの一番上を0としたときの位置です。Xenのエントリーは特に、他のOSやカーネルが入っていなければ3番目になるはずなので2としています。各自の環境にあわせて調整してください。

ネットワーク設定

UbuntuのXenパッケージは、DomUのためのネットワーク設定がすべて無効化されています。もしXen標準のブリッジモードを有効化したい場合は、以下の設定をおこなった上で、xendを再起動します[3]⁠。

$ sudo vi /etc/xen/xend-config.sxp
(network-script network-bridge) # 
$ sudo service xend restart

DomUをDom0がつながっているネットワークから切り離したい時は、ブリッジモードの設定をコメントアウトし、NATモードを有効化します。

$ sudo vi /etc/xen/xend-config.sxp
#(network-script network-bridge)
#(vif-script vif-bridge)
(network-script network-nat)
(vif-script vif-nat)
$ sudo service xend restart

DomUを作成する

Debian/Ubuntuの場合

Debian/Ubuntuは、ネットワークインストーラーパッケージにXen用の設定ファイルが用意されています。そのため、これを流用するだけでDomUにDebian/Ubuntuをインストールできます[4]⁠。

あらかじめ、任意の場所にディスクイメージを作成しておきます。LVMやデバイスファイルにDomUを作る場合は必要ありません。

$ mkdir -p ~/xen/domains/oneiric
$ dd if=/dev/zero of=~/xen/domains/oneiric/disk.img bs=4096k count=0 seek=1024

設定ファイルをダウンロードし、編集します。

$ wget -O xm-ubuntu.cfg http://ja.archive.ubuntu.com/ubuntu/dists/oneiric/main/installer-amd64/current/images/netboot/xen/xm-debian.cfg
$ vi xm-ubuntu.cfg
memory = 256
name = "oneiric"
vif = ['ip=192.168.0.2']
# ブリッジモードでDHCPでアドレスを取得可能ならvif = ['bridge=eth0']など
disk = ['file:/home/ubuntu/xen/domains/oneiric/disk.img,xvda,w']

設定は完了したので、ネットワークインストールを開始します。"-c"オプションによって、シリアルコンソールが端末に接続されます。インストール手順は、Ubuntu Serverのそれと同じです。

$ sudo xm create -c xm-ubuntu.cfg install=true \
    install-mirror="http://ja.archive.ubuntu.com/ubuntu" \
    install-arch=amd64 install-method=network

インストールが完了したら、オプションを指定せずにxm-ubuntu.cfgを読み込むことで通常の起動になります。設定ファイルの読み込みパスは/etc/xenなので、問題なく起動するようなら、設定ファイルをそちらに移動しておくと良いでしょう。

sudo mv xm-ubuntu.cfg /etc/xen
sudo xm create -c xm-ubuntu.cfg

Ubuntuインストール時にOpenSSHサーバーにチェックを入れた場合は、Dom0からSSHログインできるようになっていますので、"-c"オプションを外してSSH越しに作業を行った方が便利です。

Dom0上で仮想マシンのリストを見ることで、DomUが起動していることがわかります。

$ sudo xm list
Name                         ID   Mem VCPUs      State   Time(s)
Domain-0                      0   242     2     r-----    428.2
oneiric                       2   256     1     -b----      5.5

Scientific Linuxの場合

Xenの設定マネージャーであるxmコマンドは、xm-ubuntu.cfgのような設定ファイルを渡すことで動作を変えることができます。

xm-ubuntu.cfgはさまざまなオプションを変更しつつDebian/Ubuntuのネットワークインストールを行うために若干複雑になっていますが、本来の設定ファイルはカーネルやinitrd、起動ディスク、メモリサイズなどを指定するだけのシンプルなつくりです。そこで、今度はScientific Linuxをインストールするために、設定ファイルを0から書いてみましょう。

まず、インストールに必要なもろもろのファイルをダウンロードします。

$ mkdir -p ~/xen/domains/sl6
$ cd ~/xen/domains/sl6
$ dd if=/dev/zero of=disk.img bs=4096k count=0 seek=1024
$ wget http://ftp.scientificlinux.org/linux/scientific/6.1/x86_64/os/images/boot.iso
$ wget http://ftp.scientificlinux.org/linux/scientific/6.1/x86_64/os/images/xen/vmlinuz
$ wget http://ftp.scientificlinux.org/linux/scientific/6.1/x86_64/os/images/xen/initrd.img

次にインストール用の設定ファイルを作成します。diskはCD-ROMデバイスに起動用のイメージファイルを、二つ目の要素にインストール先のディスクファイルを指定しています。

$ vi xm-sl6.cfg
kernel  = '/home/ubuntu/xen/domains/sl6/vmlinuz'
ramdisk = '/home/ubuntu/xen/domains/sl6/initrd.img'
memory  = '512'
root    = '/dev/sda1 ro'
disk    = ['file:/home/ubuntu/xen/domains/sl6/boot.iso,xvdd:cdrom,r', 'file:/home/ubuntu/xen/domains/sl6/disk.img,xvda,w']
name    = 'sl6'
vif     = ['ip=192.168.0.3']
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

設定が完了したので、DomUを起動しインストールを開始します。

$ sudo xm create -c xm-sl6.cfg

インストールが完了したら、xm-sl6.cfgのkernel、ramdiskの行をコメントアウトし、diskのboot.isoの要素を削除しておきます。その上で、もう一度上記のコマンドを実行すると、Scientific Linuxが起動します。

まとめ

これまで見てきたように、Ubuntu 11.10/Linux 3.0によってXen自体のインストールは非常に簡単になりました。また、Xen上にゲストOSをインストールする方法も、KVMに負けず劣らず簡単です。

今回はXenのxmコマンド[5]を使ってインストールや設定を行いましたが、virt-managerを使ってグラフィカルに仮想マシンを管理することも可能ですし、VNCを使ったグラフィカルインストールもできます。なんといっても、CPUの仮想化支援機構が動作しない古いCPUやVPS上で動作しているマシンでも、準仮想化により仮想マシンを使えることは魅力的です。

Xen自体もLinuxメインラインにマージされたことに加えて、ARM対応Xen Cloud Platformといった意欲的な取り組みを推し進めている成長分野の技術です。Ubuntuでは次期LTSである12.04でXenのサポートを拡充する予定ですので、この機会に触れてみてはいかがでしょうか。

おすすめ記事

記事・ニュース一覧