Ubuntu8.04でXenを動かす

当初の目的どおり、Ubuntu8.04でXenを動かそう。CentOS5のXenは3.0だがUbuntu8.04では3.2になっている。このあたりの最新技術はマイナーバージョンが違うだけで操作がだいぶ違う(基本的に楽になる)のだが、さて、どうなることか。

まずXenのパッケージをインストールする。

ishii@ubuntu:~$ sudo aptitude install ubuntu-xen-server

これでXen対応のカーネルとツール類がインストールされるので、一度再起動する。うちの環境では再起動後にネットワークがつながらなくなり、ifconfigを見るとeth0がなくてpeth0にDHCPでアドレスが振られた状態になっていた。GUIのツールでネットワーク設定を見ると、eth0がローミングモード(?)になっていたので、DHCPモードに変更した。peth0にIPが振られたままだとルーティングができないので、『ローカルのZeroconfネットワーク』に変えておく。(それが正しいのかはよくわかない。)

とりあえず再起動後のカーネルバージョンを確認する。

ishii@ubuntu:~$ uname -a
Linux ubuntu 2.6.24-19-xen #1 SMP Sat Jul 12 03:55:08 UTC 2008 i686 GNU/Linux

CentOS5 (Xen3.0)ではvirt-installコマンドでDomain-Uの環境を作って、CD-ROM等の場所を指定してOSをインストールしていたが、Ubuntu8.04 (Xen3.2)ではxen-create-imageコマンドを使うと、デフォルトでUbuntuのOSが設定済みのイメージを作ってくれる。最低限必要な指定をしたコマンドは以下のとおり。

ishii@ubuntu:~$ sudo xen-create-image --hostname vserver --dhcp --dir /var/lib/xen/images --passwd

こうすると/(ルート)のサイズが4GB、swapが128MB、メモリが128MBのDomain-Uを自動的に作ってくれる。最後に--passwdオプションをつけているので、インストール中にrootパスワードを聞かれる。インストールログはコンソールに表示されるし、/var/log/xen-tools/vserver.logというファイルにも記録される。

ishii@ubuntu:~$ sudo cat /var/log/xen-tools/vserver.log

General Information
--------------------
Hostname       :  vserver
Distribution   :  etch
Partitions     :  swap            128Mb (swap)
                  /               4Gb   (ext3)
Image type     :  sparse
Memory size    :  128Mb
Kernel path    :  /boot/vmlinuz-2.6.24-19-xen
Initrd path    :  /boot/initrd.img-2.6.24-19-xen

Networking Information
----------------------
IP Address     : DHCP [MAC: 00:16:3E:1F:F1:58]
The partition image already exists.  Aborting.
Specify '--force' to overwrite, or remove the following file
/var/lib/xen/images/domains/vserver/swap.img
...

このままxm create /etc/xen/vserver.cfgとしても、以下のようなメッセージを出して起動に失敗する。

ishii@ubuntu:/etc/xen$ sudo xm create -c ubuntu.cfg
Using config file "./ubuntu.cfg".
ishii@ubuntu:/etc/xen$ Error: Device 51713 (vbd) could not be connected. losetup /dev/loop12 /var/lib/xen/images/domains/ubuntu/swap.img failed

これを回避するために、設定ファイル(/etc/xen/vserver.cfg)を編集する。

修正前

ishii@ubuntu:~$ sudo cat /etc/xen/vserver.cfg
...
disk        = [
                  'file:/var/lib/xen/images/domains/vserver/swap.img,xvda1,w',
                  'file:/var/lib/xen/images/domains/vserver/disk.img,xvda2,w',
              ]
...

修正後

ishii@ubuntu:~$ sudo cat /etc/xen/vserver.cfg
...
disk        = [
                  'tap:aio:/var/lib/xen/images/domains/vserver/swap.img,xvda1,w',
                  'tap:aio:/var/lib/xen/images/domains/vserver/disk.img,xvda2,w',
              ]
...
これで気を取り直して起動すると、確かに起動をするのだがStarting periodic command scheduler: crond.というメッセージで止まってしまう。他のサイトを見るとこの直後にログインプロンプトが出るはずのようなので、起動はちゃんとしているのだがコンソール関係の設定か何かに問題があるようだ。これを直すために再度設定ファイル(/etc/xen/vserver.cfg)を編集する。

修正前

ishii@ubuntu:~$ sudo cat /etc/xen/vserver.cfg
...
extra = '2 console=xvc0'
...

修正後

ishii@ubuntu:~$ sudo cat /etc/xen/vserver.cfg
...
extra = 'xencons=tty'
...
Domain-Uの作成時に--passwdオプションでrootパスワードを設定したので、rootでログインもsshもできる。--passwdオプションを使わない場合はパスワード未設定状態で、コンソールからはパスワード無しでログインできるがsshはできない。