Xenを使ってみる

Xenとは何かなんてメタなネタは省略。「とにかく動かしてみよう」という事で、実際の設定をメモ。

実験テーマ

「既存コンテンツの移植」が最終目的だが、とりあえず今はゼロからの構築。

テストした環境

Debian etch。子ドメインもetchで、これ用に取り寄せた。最終的にはWindows XPなども狙っているが面倒なのは間違いないだろうから、まずは一番簡単なLinuxでいく。

カーネルの交換が伴う。よってカーネルを改造している人(あ、ウチ改造してる@@;)、プロプライエタリなドライバを使っている人(あ、うちNVidiaだ@@;)は問題が起きる可能性がある。注意するか、問題のない別のマシンでやろう。

必要なパッケージを入れる

なお、 Xen仕様カーネルパッケージはちゃんと4GB以上を認識する ようですので安心してトライしよう。さすが :D

# apt-get install xen-linux-system-2.6.18-6-xen-686 libc6-xen xen-tools bridge-utils

今回は必要ないが、完全なエミュをするならば xen-ioemuがいるらしい。WindowsとかXenに対応してないので必要ですな。

# apt-get install xen-ioemu-3.0.3-1

さてこれで再起動、と言いたいがネットワーク設定をする。これは必須ではない。また私個人的にハマった地雷についても一点紹介したい。

ネットワークの設定

/etc/xen/xend-config.sxpをいじる。以下を探して設定する!

たとえば、まずはこれ。

(network-script network-bridge)   ←コメントになってるのを外す。
# (network-script network-dummy)  ←有効になってるのをコメントにする!

次にネットワーク設定だ。/etc/xen-tools/xen-tools.conf をいじる。

DHCPを使うなら、ここ。

dhcp = 1

固定IPなら、ここを操作しておくと楽だ。

gateway   = 192.168.0.1
netmask   = 255.255.255.0

さて、ここで地雷の話をしよう。

うちはどうしてもネットワークが有効にならず困ったのだけど、理由は簡単だった。試した環境は散々テストを繰り返した機体で、eth0がなくてeth7が動いてるという変な設定だったからだ。これをeth0にしたらあっさり動いた。たぶんどこかで決め打ちがあるんでしょうがその調査は後回し ;)

(2008/11/19補記・ (network-script 'network-bridge netdev=eth7') でOKだったのかもしれない。未検証)

最後に、以下を設定して閉じよう。本当はいらないのだけど、いちいち作成の時に —passwordなんたらと呪文を唱えるのも面倒ですね。

passwd = 1

リソースはどうする?Xenするサーバならリソースはたくさんあるだろうって事で、うちは少し調整。

size   = 4Gb      # Disk image size.
memory = 256Mb    # Memory size
swap   = 256Mb    # Swap size
# noswap = 1      # Don't use swap at all for the new system.
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = etch    # Default distribution to install.

なお、reiserfs等を使う時はこれ用のパッケージがXenホスト側に必要だ。逆にいうと簡単なのは現時点ext3のままって事だね :D

ああ、あとウチの設定ではlookbackで使う事を前提にしてあるので、やったのはインストール先だけなんだが……

 dir = /home/xen

LVMを使うなら、こうする。しかしこれは私は使ってないので検証はご随意に。

 lvm = skx-vg

うちはDebianなので、debootstrapをもちろん使う。簡単なほうがいいね!

  debootstrap = 1

カーネルのバージョンが古かったら直しておこう。

kernel = /boot/vmlinuz-2.6.18-6-xen-686
initrd = /boot/initrd.img-2.6.18-6-xen-686

さて、これでいよいよimage作成、そして動作だ!

image作成

ちなみにIPなんだけど、ブリッジ設定をしているので現在ホストのいるセグメントの空きIPを指定すればOK。そのまま普通にアクセスできるよ :D

さて、名前は適当でいいが、ほげとかフーバーではかわいくない。ここはエルヴィンとでもしておこう(なんで^^;)

# xen-create-image --ip 192.168.0.116 --hostname erwin
:
(うだうだと色々でてくる)
:
rootのパスワードを聞かれる
#

動かす

んで、いよいよ立ち上げる。-cはコンソール。今使ってるコンソールが/dev/consoleとして動く。

# xm create erwin.cfg -c

よしよし、外からも見てみようか。

# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     3783     2 r-----  10123.9
erwin                                      1      256     1 -b----      5.4
#

おお :D

(2008/11/19追加)自動起動

ホストが起動した時に自動起動させたい。以下のようにしよう。

# cd /etc/xen/
# mkdir auto
# cd auto
# ln -s ../erwin.cfg .

これで、/etc/init.d/xendomains restart とかすると起動してくれる。

しかしXenクライアントドメインの起動って速いな。BIOSメニューとかの色々が介在しなと、というのはこういう事か。

とりあえずXenが動いたので、あとは色々試してみよう。パフォーマンスがよければ予備機は常時Xenとしたいね。動的にリソース割り当て変更とか、やりたい事がいっぱいある。

何がしたいかというと「使いたい環境があればいちいち再起動するのではなく、少しリソースを切り出して該当OSを仮想で走らせる」ようにしたい。

たとえばWindows。自宅で私的にWindowsが必要になる事なんて普通まずないけど、必要になる事もあるかもしれない。でも切り替えのたびにいちいち再起動したくないし、ネイティブに組み込んで余計な問題が起きるのも避けたい。マルチブートなんて簡単ではあるけれど、マイクロソフト絡みのマルチブートでいい事があった記憶がまったくない。

こういう時に仮想環境は役立つと思ってます。