Xen 3.0 上で virt-install + kickstart での CentOS 5.1 インストールに失敗したがゆえにいろいろ学ぶ修行
発端
Xen 3.0 on CentOS 5.1 の virt-install + kickstart と戯れる毎日。今日も不可解な現象に遭遇。インストール中に「virtualization パッケージグループを入れろって言われたけど、そんなのないよ」と言われてしまう。そんなはずはないのに。
とりあえず、無視してインストールしてみた。インストールは通常に進んだように見えたが、リブート後に「invalid kernel」とか言われちゃう。
domU イメージの調査
検閲Tech: Dom0からDomUのイメージファイルをディスクデバイスとして扱う様々で、正直何をやっているのかわからないところもあるけど。あとでいろいろ調べないとなあ。
ループバックデバイスの空いているところに domU のイメージをマッピング。
# losetup -f /dev/loop0 # losetup /dev/loop0 /var/lib/xen/images/daicon.img
# mkdir -p /mnt/vmfs # kpartx -a /dev/loop0 # mount /dev/mapper/loop0p1 /mnt/vmfs
まずは Xen 対応の Linux が起動されているのかチェック。
grep title /mnt/vmfs/etc/grub.conf title CentOS (2.6.18-53.el5)
... まあ、そうだよね。仮想化パッケージグループ (virtualization) 入ってないんだから。
いざとなったら、/mnt/vmfs/boot/ の中身を、他の domU からコピってしまおう、ということでとりあえず別の道を探すことに。
アンマウントは
# umount /dev/vmfs # kpertx -d /dev/loop0 # losetup -d /dev/loop0
で。
GUI による kickstart ファイル設定ツールの利用
system-config-virt-kickstart に問題の kickstart ファイルを読み込ませてみて、別名でセーブ。それを使ってインストール。これも失敗。
でも、デフォルトで設定される値とかがわかって面白かった。
インストール中の仮想端末の利用
インストール中の仮想端末 2 とかを使って、netstat 見たり、mount 見たり、ping 打ってみたり。いくつか kickstart ファイルの不備を見つけた。
が、それを直しても virtualization が見つからない、という現象は解消せず。
パッケージグループ内のパッケージを指定してインストール
とりあえず、kickstart ファイルで指定するのを、パッケージグループ virtualization ではなくて、その中のパッケージ個々を指定するようにしてみた。
まずは、中身の調査*1。
# awk -v i=1 'j>0{print $0} /Virtualization/{k++} k>0&&/packagelist/{j+=i;i=-10}' /export/CentOS_5.1_Final/repodata/comps.xml <packagereq type="mandatory">kernel-xen</packagereq> <packagereq type="default">gnome-applet-vm</packagereq> <packagereq type="default">libvirt</packagereq> <packagereq type="default">virt-manager</packagereq> <packagereq type="mandatory">xen</packagereq> </packagelist>
で、kickstart ファイルを変更。
# @virtualization
kernel-xen
libvirt
gnome-applet-vm
virt-manager
xen
ついでにTipsAndTricks/KickStart - CentOS Wikiで発見した、cmdline オプションを指定してインストール。
これによってインストールが成功した。
とはいえ、virtualization パッケージグループがこけた理由はわからずじまい。気持ち悪いな。
vnc で接続したときに設定画面ぽいのが出たら
~/.vnc/xstartup をチェック。normal desktop だったらアンコメントしてね、って書いてある 2 行をアンコメントする。
SESSION_MANAGER って環境変数を無効にしてからプロセスを xinitrc に変更しちゃうんだね。
*1:もちろん、こんなコマンドを打ったわけじゃなく、エディタで開いたんだけど。