2011/09/17

Xen

禅。
唐突ですが、自宅サーバを仮想化しました。

これまでも設定ファイルなどをtarで固めて外部ストレージに書きだしてバックアップとしていたのですが、いざ故障が発生してサーバ移行を強いられた時にちまちまアプリケーションをインストールして設定ファイルから環境を戻して... というのがすごく面倒くさいのではないかと、感じたからです。
これまでも自宅サーバは幾度かの世代交代を行ってきて、そのたびに数日の稼働をかけながら復旧させていたのですがあまりにも面倒臭い。
もちろん、再設定を行うことで知識は深まるメリットはあるものの、正直やっぱり面倒くさい。

ならば、いつ本体が故障して新ハードウェアになったとしても、従来の環境をガッツリ戻せたほうが便利なのではないかと、そう思ったわけです。
というわけで、禅です。

自宅サーバ2011のスペック、環境について
ASUS EeePC 4G-X (日本発売EeePC初代モデル)
CPU Intel Celeron M 900MHz の 600MHz駆動
Mem DDR2 2GB に増設
eth0を使う(wlan0ではXenが使えない)
SSD 4GB(デフォルト)
SDHC 32GB

設計(最終的な環境)
ホストマシン、ゲストマシン ともに Debian GNU/Linux 6.0(squeeze)
仮想環境はXenを使用する。(EeePCはIntel-VTなど無いので、KVMは使用できない)
ホストマシン(domain-0)は SSD上に構築。メモリ割り当ては約0.5GB
ゲストマシン(domain-U)は SSD上にイメージファイルで構築。メモリ割り当ては1.5GB
ゲストマシン用のストレージとして SDHCを物理デバイスとして使用する。

なお、このblogは例によってメモ for 未来の私 です。

Xen 4.0 インストール
# aptitude install xen-linux-system-2.6.32-5-xen-68 xen-tools

他に入れたかもしれませんが、結局入っているXen関連は以下のとおりです。たぶん aptitudeが入れてくれるはずです。
debootstrapも入っています。
asatsuki@eeetan:~$ dpkg -l | grep -i xen
ii  libc6-xen                             2.11.2-10                    Embedded GNU C Library: Shared libraries [Xen version]
ii  libxenstore3.0                        4.0.1-2                      Xenstore communications library for Xen
ii  linux-image-2.6.32-5-xen-686          2.6.32-35squeeze2            Linux 2.6.32 for modern PCs, Xen dom0 support
ii  xen-hypervisor-4.0-i386               4.0.1-2                      The Xen Hypervisor on i386
ii  xen-linux-system-2.6-xen-686          2.6.32+29                    Xen system with Linux 2.6 for modern PCs (meta-package)
ii  xen-linux-system-2.6.32-5-xen-686     2.6.32-35squeeze2            Xen system with Linux 2.6.32 on modern PCs (meta-package)
ii  xen-tools                             4.2-1                        Tools to manage Xen virtual servers
ii  xen-utils-4.0                         4.0.1-2                      XEN administrative tools
ii  xen-utils-common                      4.0.0-1                      XEN administrative tools - common files
ii  xenstore-utils                        4.0.1-2                      Xenstore utilities for Xen

Xen設定
/etc/xen/xend-config.sxp で(本体)内部ネットワークにブリッジを生成するオプションを有効化(コメント外し)します。
 (network-script network-bridge)

grub設定
環境にもよりますが、Xen対応カーネルは grub的に言うと (0番目から数えて)4番目に該当するので、
/etc/grub/grub.cfg に set default="4" を書いておきます。
(menuentryの順番を書き換えて Xen対応カーネルを 0番目にして、set default="0"のままにしておくという方法もあります)

Xen-tools 設定
仮想環境構築を手助けしてくれる xen-toolsの設定ファイル /etc/xen-tools/xen-tools.conf を編集します。
変更場所は以下のとおりです。
(括弧内はもちろんこのblogのためのコメントです)
 dir = /data_local/xen  (仮想環境のイメージファイル作成場所。お好みのディレクトリに)
 size   = 2Gb (仮想イメージファイルサイズ)
 memory = 1536MB (割り当てるメモリ 1.5GB)
 swap   = 128Mb (スワップファイルサイズ)
 fs     = ext3 (ディスクフォーマット)
 dist   = `xt-guess-suite-and-mirror --suite` (Default distribution to install.)
 image  = sparse (スパースファイルでディスクイメージを作成)
 gateway    = 192.168.1.1 (ネットワーク関連設定)
 netmask    = 255.255.255.0 (ネットワーク関連設定)
 broadcast  = 192.168.1.255 (ネットワーク関連設定)
 arch = i386 (CPUアーキテクチャを指定)

仮想イメージ作成
(ゲストマシンのIPアドレスを 192.168.1.204とした場合)
# xen-create-image --hostname SERVERNAME --ip 192.168.1.204
おなじみのDebianインストールをして、終了させます。
/etc/xen/SERVERNAME.cfg が作成されているはず...です。

/etc/xen/SERVERNAME.cfg設定
bootローダーを pygrub に変更します。
これをしないとXenが正常に起動しませんでした。
bootloader = '/usr/lib/xen-default/bin/pygrub'

ホストマシンの SDHCは /dev/sdc1 として認識されているので、これをゲストマシンに
/etc/xen/SERVERNAME.cfg を編集して SDHCを割り当てます。
disk = [
  'file:/data_local/xen/domains/alpha/disk.img,xvda2,w',
  'phy:/dev/sdc1,xvda3,w',
  'file:/data_local/xen/domains/alpha/swap.img,xvda1,w',
]
             
file:~ はイメージファイルを指定する方法、
phy:~ は物理デバイスを指定する方法です。

このへんで一度ホストマシンを再起動しておきましょう。

ゲストマシン起動

# xm create -c SERVERNAME
ゲストサーバ SERVERNAME が起動して、そのコンソールに接続する... はずです。
ここでいろいろインストールするもよし、あとで行うもよし。
ホストマシンのSDHC /dev/sdc1 は ゲストマシンでは/dev/xvda3 として認識されているはずなので、/etc/fstabに書いておきます。
 /dev/xvda3 /data ext3 noatime,nodiratime 0 0
とりあえず shutdown させてホストマシンに戻ります。
コンソールから抜けるには Ctrl + ] を使います。

仮想(ゲスト)マシンの自動起動
ホストマシンを再起動したときにゲストマシンも自動的に起動する設定です。
/etc/xen/auto ディレクトリを作成し、その下にゲストマシンの cfgファイルを置きます。
実際にはシンボリックリンクを作成します。
# ln -s /etc/xen/SERVERNAME.cfg /etc/xen/auto/SERVERNAME.cfg

ものすごく雑ですが、これでゲストマシンが作成されました。
あとはゲストマシンに apache, mysql, php, squid, postfix, bind, dhcp 他、そのたもろもろサービスをインストール&構築してサーバ環境を構築しましょう。

Have Fun!

0 件のコメント:

コメントを投稿