引っ越しやら転職やらで忙しくしていたので、7.04のXenサーバーは使わなくなっていました。そこでまっさらなPCにUbuntu 8.04 Server amd64版を入れたところにXenを構成してみました。リリースされて随分経つのでUbuntu 8.04でXenを稼働させる事には大勢の先達がいらっしゃいます。
今回はその試行錯誤の結果を利用させてもらい、非常に簡単に立ち上げる事ができました。ほんの少しだけ自分なりの工夫を入れてXenでゲストOSを立ち上げる過程のメモを残します。
Ubuntu 8.04 Server amd64版を入れてからの大まかな流れは次のようになりました。
- "apt-get update", "apt-get upgrade"による最新版への更新
- /etc/modulesを編集してloopデバイスを増殖
- "shutdown -r now"による再起動
- "apt-get install ubuntu-xen-server"によるXen関連パッケージの一括導入
- Xenが有効になったカーネルで起動するため、再び再起動
- /etc/xen-tools/xen-tools.confの編集
- /usr/bin/xen-create-imageコマンドの修正
- xen-create-imageコマンドによるゲストOSイメージの導入
- xm createコマンドによるゲストOSの起動
Xenカーネルで起動するまで
まずはまともなUbuntuサーバーとして稼働するように最新版のパッケージに更新します。
$ sudo apt-get update
$ sudo apt-get upgrade
続いてloopデバイスの数を増やすために/etc/modulesファイルを編集します。
"loop"としか書かれていない行を編集して次のようにします。
$ grep loop /etc/modules
loop max_loop=256
upgradeの結果、kernelも新しいものが導入されていたりするので念のため再起動します。
$ sudo shutdown -r now
起動しきたら再びログインし、Xen関連のパッケージを導入します。
$ sudo apt-get install ubuntu-xen-server
無事に起動したらまた再起動します。
$ sudo shutdown -r now
ゲストOSを作る前の手続き
Xenのバージョンがかわり、結果として落とし穴が増えているようです。
試行錯誤の結果は残しませんが、次のようなところではまりました。
- cfgファイル中でディスクイメージファイルを指定する方法が"file"から"tap:aio"に変更になった点
- ディスクデバイス名が"sda"から"xvda"に変更になった点
- シリアルデバイスファイルが"tty1"から”xvc0”に変更になった点
まずは作業を簡素化するために/etc/xen-tools/xen-tools.confを編集し、よく使う値を設定してしまいます。追加した設定行は"dir","gateway","netmask","broadcast","serial_device"の5行。修正したのは"mirror"の1行だけです。変更前後のdiff出力を載せます。unified formatじゃない方が見易いですよね。
$ diff /etc/xen-tools/xen-tools.conf.20080921 /etc/xen-tools/xen-tools.conf
45c45
< # dir = /home/xen
---
> dir = /home/xen
163,165c163,165
< # gateway = 192.168.1.1
< # netmask = 255.255.255.0
< # broadcast = 192.168.1.255
---
> gateway = 192.168.1.1
> netmask = 255.255.255.0
> broadcast = 192.168.1.255
214c214
< mirror = http://ftp.us.debian.org/debian/
---
> mirror = http://ftp.jp.debian.org/debian/
258c258
< # serial_device = xvc0
---
> serial_device = xvc0
"serial_device"の設定は必ず設定しなければなりません。
これをしないとゲストOSの起動時にコンソールに接続することができなくなります。
まぁsshdは起動しているのでdisk.imgをマウントしてrootにパスワードを設定するか、パスワードなしでのログインを許可すればネットワーク接続できるので、何とかなりますけれど。
さて続いては /usr/bin/xen-create-image コマンドの修正。なぜなら後からcfgファイルを編集して"file:"を"tap:aio:"に変換するのが面倒だから。なのでこれは"serial_device"行の編集と同じで必須ではないです。
変更内容は以下の通りですが、最初の":"(コロン)が削除されるようなので、少し変な感じになっています。
$ diff /usr/bin/xen-create-image.20080921 /usr/bin/xen-create-image
2411c2411
< $partition->{'imagetype'} = 'file:';
---
> $partition->{'imagetype'} = 'tap::aio';
ゲストOSの作成と起動
いろいろな試行錯誤の結果が xen-tools.conf と xen-create-image の修正に含まれているため、ここの作業は簡単です。
ここではホスト名を"xen63"、IPアドレスを"192.168.1.63"として、イメージの作成と起動は次のように行なえます。
$ sudo xen-create-image --hostname xen63 --debootstrap --ip 192.168.1.63
$ sudo xm create -c /etc/xen/xen63.cfg
後からxmのコンソールに接続したい場合には:
$ sudo xm console xen63
不具合があって強制終了したい場合には:
$ sudo xm shutdown xen63
"xm shutdown"では終了できず、"xm list"で延々と表示されてしまう向きには:
$ sudo xm destroy xen63
こんな感じで作業完了です。