注:2009/06/28に加筆・修正しました。時計が狂う問題とホスト機の再起動後にゲストOSが挙動不審(pingが飛ばない等)になるのを直す部分です。仮想サーバの起動用スクリプトの修正をする部分 は、特に再度お読みください。 久しぶりに、lennyをクリーンインストールしてからxen環境を構築してみました。
土曜日まる一日はまりましたが、誰かの参考になるかもしれないので書いてみます。
【結論】
1.lennyをクリーンインストールした状態からxen環境を構築する場合、ゲストOSのファイルシステムには注意が必要。普通に操作するとext3だとうまくいくがreiserfsを指定すると動きません。
※これは、デフォルトのコンフィグファイルが間違っているからです。修正方法は後ほど…
※ホスト機のファイルシステムはどちらでも(何でも)大丈夫のようです。
2.ゲストOSの時計合わせに若干工夫が必要。インストールしたままだと、時間はあっているのにタイムゾーンがUTCと表示され、タイムゾーンをJSTへ合わせると9時間未来へ行ってしまいます。ntpサーバを動かすときの注意等もまとめてみました。
【ホスト機のインストール】 1.lennyのインストール用のCD-ROMから立ち上げ、なにも考えず普通にインストールします。
ゲストOSは/homeにインストールされます。ファイルシステムはext3とreiserfsの二つでテストしましたが、どちらでも問題なくxen環境は構築できます。
※他のファイルシステムはテストしていません。
2.インストールが終了後、私は以下のプログラムをインストールします。
# aptitude install vim ntpdate # ntpdate ntp.nict.jp で、時刻をセットします。
# dpkg-reconfigure tzdata で、タイムゾーンを設定します。
ここで、一度再起動。
立ち上がってきたら、dateで時刻が狂ってないか確認します。
3.次にxen環境をインストールします。
# aptitude install xen-hypervisor-3.2-1-i386 xen-linux-system-2.6.26-2-xen-686 xen-tools bridge-utils インストールが正常に終了したら、念のため
# aptitude dist-upgrade しておきます。
次に、以下の設定ファイルを修正します。
# vi /etc/xen/xend-config.sxp # (network-script network-bridge)
のコメントアウトを外し、
(network-script network-dummy)
をコメントアウトする。
つまり、
(network-script network-bridge) : : # (network-script network-dummy) となります。
最後に、以下のファイルを作っておくとちょっぴり幸せになります。
#echo "options loop max_loop=64" > /etc/modprobe.d/loop ■再起動するとxen環境が立ち上がります。
【ゲストOSのインストール】 1.ゲストOSのイメージを作成するユーティリティーの設定ファイルを修正します。
# vi /etc/xen-tools/xen-tools.conf dir = /home/xen install-method = debootstrap size = 10Gb memory = 256Mb swap = 512Mb fs = reiserfs dist = lenny image = sparse gateway = 192.168.0.1 netmask = 255.255.255.0 broadcast = 192.168.0.255 kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` mirror = http://cdn.debian.or.jp/debian/ ext3_options = noatime,nodiratime,errors=remount-ro ext2_options = noatime,nodiratime,errors=remount-ro xfs_options = defaults reiserfs_options= defaults ←ここ重要! 必ず修正したほうが良いです。
ここで注意するのは、reiserfs_optionsという項目です。
デフォルトではreiser_optionsとなっていて、このままでfs = reiserfsと指定すると、実行時にエラーを起こしゲストOSは立ち上がりません。もしreiserfsを使うのであれば、必ず
reiserfs_options へと修正しておいてください(これを見つけるのに数時間を有しました、苦笑)。
それ以外のパラメータは、見ればなんとなくわかると思います。
最初は仮想サーバがインストールされるディレクトリーが無いので、
mkdir /home/xen をしておきます。
2.次に、仮想サーバのイメージを作成します。
xen-create-image --hostname rickdom --ip 192.168.0.191 しばらく待たされますが(30秒~3分)、ALL done.と表示されればイメージが出来上がりです。
ゲストOSのDISKイメージと一緒に起動用のスクリプトも生成されますが、一行追加しないと起動途中で止まることがあります。御守と思って追加してください。
# vi /etc/xen/rickdom.cfg extra = 'xencons=tty clocksource=jiffies' ←この一行を必ず追加してください! kernel = '/boot/vmlinuz-2.6.26-2-xen-686' ramdisk = '/boot/initrd.img-2.6.26-2-xen-686' memory = '256' root = '/dev/sda2 ro' disk = [ 'file:/home/xen/domains/rickdom/swap.img,sda1,w', 'file:/home/xen/domains/rickdom/disk.img,sda2,w', ] name = 'rickdom' vif = [ 'ip=192.168.0.191,mac=00:16:3E:CD:99:8B' ] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
赤字で示した一行を追加したら、
xm create /etc/xen/rickdom.cfg で、新しい仮想サーバがスタートします。
このファイルはテンプレートがあるので、そこにこの一行を入れておくと次回からはこの作業を省略できます。
# /etc/xen-tools/xm.tmpl ←このファイルに一行追加
extra = 'xencons=tty clocksource=jiffies' ■実際のファイルの中身はこんな感じ↓
# # Configuration file for the Xen instance {$hostname}, created # by xen-tools {$xen_tools_version} on { scalar localtime }. # extra = 'xencons=tty clocksource=jiffies' # # Kernel + memory size # { if ( $kernel ) { $OUT.= "kernel = '$kernel'"; } } { if ( $initrd ) { $OUT.= "ramdisk = '$initrd'"; } } memory = '{$memory}' --- 以下略
※どうも仮想環境下における時計ですが、VMware Serverの時と同じで問題(バグ!?)があるようです。
clocksource/0: Time went backwards… というメッセージを大量に吐くときは、このクロックソースの指定が原因のようです。デフォルトのクロックソースはxenなのですが、上記にあるようにjiffiesに変更すると動くようになるのはわかりましたが、なんとなくとりあえずの回避方法です(苦笑)。
※この設定を施しておくと、ホスト機が再起動した後になんとなくゲストOSの挙動がおかしいのも直ります。
3.ゲストOSの最低限の設定
3-1.
xm console rickdom で、ホスト機よりゲストOSへコンソール接続をしてください。
ログインIDでrootを指定すると、パスワード無しでログイン出来ます。
まずは、passwdでrootのパスワードを設定します。
3-2.次に、最低限必要なモジュールをインストールします。
# aptitude install less host telnet mailx dns-browse vim udev ntpdate インストールが終わったら、念のため
aptitude dist-upgrade します。
3-3.ここからは、時計合わせのTipsです。
順番が大切なので、以下の順に操作すると幸せになれます。
まずは、
# ntpdate ntp.nict.jp で、強制的に時刻をリセットします。
すると不思議なことにUTCのままで、時間が9時間過去になります。
次に、
# rm /etc/localtime # ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ここで、dateで表示を確認してください。
ちゃんとJSTで時刻もあっているはずです。
ここで、ゲストOSを再起動します。
※自動的にコンソール接続が切れ、ホスト機へプロンプトが戻ってきます。
3-4.これ以降はsshで作業が出来ます。
お使いのdnsへ登録すれば(ホスト機のhostsへ登録は自動)、後は名前指定で接続できます。
※udevをインストールし、一度再起動しないとsshで接続できません。
【最後にNTPサーバ構築について】
前にも書いたのですが、仮想環境下では時計の管理が結構面倒です。
今回も、ずいぶんここで時間がとられました。
ゲスト機でntpサーバを動かすtipsを書いておきます。
# aptitude install ntp でインストールした後で、
# vi /etc/default/ntpdata NTPDATE_USE_NTP_CONF=no NTPSERVERS="ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp" NTPOPTIONS=""
もちろん、LAN内にサーバが設置されている場合には、NTPSERVERSにはローカルのntpサーバ名を書いてください。
いろいろ試したのですが、上記の設定にしないと再起動後の時刻が狂ってしまいます。
また、
/etc/sysctl.conf に、
xen.independent_wallclock = 1 を記述することを忘れないでください。
※再起動後、
sysctl xen.independent_wallclock で、設定されているか確認できます。
■こうやって書き出すと結構大変のように見えますが、手順的にはさほどで難しくないのでtry&errorは何回でも出来ます。是非、安定して動作する設定を見つけてみてください。