Xenでetchからlennyに

既に書いたように、サーバを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'