既に書いたように、サーバをlennyにしてしまった。まだあまりお勧めは出来ないのだけど。
Xenはちょっとハマりどころがあるので、TIPS。
lennyのXenはVer 3.2.1が入っている。Xenの情報をネットで探すと、3.0以前のやら3.0のやらはいっぱいあるのだけど、3.2はあまりない。しかも、lennyはついこないだ出たばかりだから、そういったことでも情報は少ない。
なけなしの3.2の情報を探すと、いくつかのディレクティブが変更になっていて、
- ‘ramdisk’が’initrd’に
- ‘file:’が’aio:tap:’に
- ‘xenbr’が’eth’に
変更になったらしいことがわかる。そこで元々ある設定ファイルをこのように変更すると、
動かない
のだ。特に’file:’のは「rootになるものがないんで待ってる」という意味のメッセージが出て、5分くらい待った挙句に起動出来なくて失敗する。このパラメータあたりに問題があることは容易にわかるのだけど、「新しいXenではaio:tap:って書くんだよ」という情報ばかりが流れていて、わからずじまい。これはlennyでのbuildがおかしいとばかり思い込んでいた。なので、正式版のlennyが出たら直るものだと思って放置していた。
ところが、正式版のlennyでも動かない。
あれこれ試してからふと、「世間でlennyでやったという話があるのだから、一度インスタンスそのものを作って、そこで作られた設定ファイルを見ればいいじゃないか」と思い立った。こうすれば、何が悪いかわかる。
そうやって調べたところ、
- ‘ramdisk’はそのままでいい
- ‘file:’はそのままでいい
- ‘xenbr’が’eth’に
ということがわかった。どういった事情があるか知らないけど、3.0の設定とだいたい同じで良いようだ。
この他にtty絡みでちょっとハマる部分がある。
まず、インスタンスを起動する時に、
# xm create -c /etc/xen/instance.conf
のようにして、コンソール付きで起動すると、rcの処理がほぼ終わったところで、いきなりハングアップしているように見える。これはどうやらコンソールのデバイスの関係らしい。
これを回避するには、設定ファイルに
extra = 'xencons=tty'
と入れておいてやる。
これが正常に動いてsshでloginしようとすると、loginが蹴られる。どうやらptyがないらしい。これを回避するには、udevをインストールしてやる必要がある。
これで一応動くようになるのだけど、特殊なfs(nfsとか)を使おうとすると動いてくれない。よく見ると、initrdの中にないモジュールが全くない。カーネルが新しくなったので、あらためてlinux-module-xxxxをインストールしてやらなければならない。これで正常に動くようになる。
整理すると、
- 設定ファイルは3.0とほぼ互換
- 設定ファイルにextra=’xencons=tty’を加える
- udevとlinux-module-xxxをインスタンスに入れる
というあたりに気をつけると、うまく動くようになる。仮想ボリューム名も’hd’という名前から’xvd’に変更しておいた方がいい。絶対ではないようだけど。
参考として、うちでの現用の設定ファイルを書いておく。
kernel = "/boot/vmlinuz-xen" ramdisk = "/boot/initrd.img-xen" memory = 6144 name = "gaien-U1" disk= [ 'file:/instance/U1/root.img,xvda1,w', 'file:/homes/gaien-U1.img,xvda2,w', 'file:/instance/U1/var.img,xvda3,w', 'phy:sda1,xvda4,w', 'phy:space/home,xvdb1,w', 'file:/homes/gaien-U12.img,xvdb2,w' ] root = "/dev/xvda1 ro" vif = [ 'bridge=eth0','bridge=eth1' ] extra = 'xencons=tty'