会社のチームでの開発(Webアプリ)作業は全てLinux上で行っています。で、そのLinuxは、基盤をXenにした仮想OS上で行っています。
1人あたり1仮想OSを割り当てているため、開発メンバは好きなように自分好みの環境を作ることが出来ます。
で、メンバの誰もが使うようなミドルウェアやライブラリなどは、全員が共通のディスク領域をマウントし、そちらを使ってもらうようにしています。こうしておくことで、ミドルウェアやライブラリのバージョンアップをするときは、一箇所だけバージョンアップをすれば、全員がその恩恵を受けることができ、なかなか便利。
ちなみ、Xenとは?については以下のリンクがよくまとまっていると思います。
この環境は、もう今年の1月から稼動させていて、今のところ思っていたよりは遥かに安定して稼動してくれています。
その時の構築作業ログを社内で公開していたのですが、外から確認したくなることもあり、こっちにも書いておこうと。
環境
こんなマシンを一台使いました。
CPU | Pentium4 2.8GHz |
---|---|
Memory | 2GB |
Disk | 80GB x 2 (RAID1) |
OS | Debian GNU/Linux Etch (testing) [kernel 2.6.18-3] |
このスペックのマシン上で、ドメイン0、ドメインUともに動かしてみることにします。
ちなみに、この物理ハードウェアの上で、仮想マシン(ドメインU)を4台稼動させていますが快調ですよ。
当時は、Debianのetchも、まだtestingディストリビューションだったのでした。
Debianで必要となるパッケージの確認
Xenを動かす上で必要となるパッケージを用意する必要があります。
尚、下記のパッケージ(debootstrapは除く)はXenのインストーラでも、存在しているかどうかをチェックしてくれるので、無いと言われてからインストールしてもOKだと思います。
# debootstrapはチェックしてくれないので注意。
# 無くても問題ないけど、あった方がドメインUの構築が圧倒的に楽。
必要なパッケージや、有無の確認方法、なかった場合のインストール方法などを簡単にまとめておきます。
必要パッケージ一覧
- bridge-utils
- iproute
- hotplug
- python
- zlib1g
- debootstrap
パッケージ有無の確認方法
$ dpkg -l {パッケージ名}
パッケージのインストール方法
$ sudo apt-get install {パッケージ名}
Xenインストールログ
さて、では早速Xenそのものをインストールしてみたいと思います。
$ mkdir ~/install $ cd ~/install $ wget http://bits.xensource.com/Xen/latest/xen-3.0.2-install-x86_32.tgz $ tar zxvf xen-3.0.2-install-x86_32.tgz $ cd xen-3.0.2-2-install/ $ sudo ./install.sh
こんな感じでインストール完了の旨が出力されると思います。ここで、必要なパッケージの有無が確認されていることが分かると思います。
Installing Xen from './install' to '/'... - installing for udev-based system - modifying permissions All done. Checking to see whether prerequisite tools are installed... Xen CHECK-INSTALL 2007年 1月 10日 水曜日 17:35:43 JST Checking check_brctl: OK Checking check_hotplug: OK Checking check_iproute: OK Checking check_python: OK Checking check_zlib_lib: OK All done.
ドメイン0の構築(設定)
では、ドメイン0(つまりホストOS)を設定していきたいと思います。
initrdの作成
面倒くさいので、ここからはrootにsuして作業。
# su - # depmod -a -v 2.6.16-xen # mkinitramfs -o /boot/initrd.img-2.6.16-xen /lib/modules/2.6.16-xen/
GRUBの設定
最下部にこんな感じで追記します。
# vi /boot/grub/menu.lst
内容はこんな感じで。
※ 今回の物理ハードウェア上ではソフトウェアRAIDを組んでいるのでデバイスが/dev/md0となっています。注意してください。非RAIDであれば/dev/hda0(プライマリIDE)とか/dev/sda0(SCSI)とかかな。
title Xen-3.0.2-2 root (hd0,0) kernel /boot/xen-3.0.gz dom0_mem=524288 module /boot/vmlinuz-2.6-xen root=/dev/md0 ro console=tty1 module /boot/initrd.img-2.6.16-xen savedefault boot
「dom0_mem」にはドメイン0で利用するメモリ容量を指定します。(単位 : KB)
xendの自動起動を設定
このあたりは、恒例の作業ですね。
# update-rc.d xend defaults 99
うまくいったら、こんな感じで表示されると思います。
Adding system startup for /etc/init.d/xend ... /etc/rc0.d/K99xend -> ../init.d/xend /etc/rc1.d/K99xend -> ../init.d/xend /etc/rc6.d/K99xend -> ../init.d/xend /etc/rc2.d/S99xend -> ../init.d/xend /etc/rc3.d/S99xend -> ../init.d/xend /etc/rc4.d/S99xend -> ../init.d/xend /etc/rc5.d/S99xend -> ../init.d/xend
/lib/tlsのディレクトリ名変更
これはお約束の模様。やらなくても動くのだが、Warningが出ることとパフォーマンスの低下が発生するらしい。
# mv /lib/tls /lib/tls.disabled
再起動&動作確認
ここまででドメイン0の設定作業は完了。再起動。
# shutdown -r now
再起動後、GRUBのメニュー画面で、「Xen-3.0.2-2」を選択。
起動後、ログインし以下のコマンドを発行してみる。
# uname -r 2.6.16-xen # xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 512 2 r----- 13.2
Xen用のカーネルであがってきてますね。ドメイン0。
うまくいくことを確認したら、GRUBの設定でメニュー画面で自動でXen用カーネルが選択されるように設定しておくと良いです。
ドメインUを構築
では、ドメイン0が出来上がったところで、仮想OSイメージを作成して、ドメインU(仮想マシン, 仮想OS)を動かしたいと思います。
イメージファイルの作成
これまでのチームの開発状況をみて、1人あたり1.5〜2GB程度の利用状況のようなので、4GBほど確保しておくことにします。
# この辺のパラメータは適宜変更しちゃってください。
$ sudo mkdir -p /home/virtual_machines/rx7 $ sudo chown sonic:sonic /home/virtual_machines/rx7 $ dd if=/dev/zero of=/home/virtual_machines/rx7/debian-root.img bs=1024k count=4096
実行すると、こんな感じで出力されて、、、
4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB) copied, 93.169 seconds, 46.1 MB/s
4GBのイメージが出来上がりました。
同じようにswap領域の分も。512MBくらいでよいかな。
$ dd if=/dev/zero of=/home/virtual_machines/rx7/debian- swap.img bs=1024k count=512
同じように、こんな感じで出力されて、、、
512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 8.91269 seconds, 60.2 MB/s
出来上がり。
次に、作ったイメージをmkfsでLinuxのファイルシステム(ext3)にします。
$ /sbin/mkfs.ext3 /home/virtual_machines/rx7/debian-root.img
インタラクティブに進めていきます。以下のような感じで入力。
mke2fs 1.40-WIP (14-Nov-2006) /home/virtual_machines/rx7/debian-root.img is not a block special device. Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 524288 inodes, 1048576 blocks 52428 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1073741824 32 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 38 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
swap領域も同じような感じで作成。
$ /sbin/mkswap /home/virtual_machines/rx7/debian-swap.img
こんな感じで、こっちはすぐに出来ちゃいます。
Setting up swapspace version 1, size = 536866 kB no label, UUID=b611d5e9-e0c1-4b2c-896f-51afddf02f70
最後の仕上げです。作ったイメージ(FS)をマウントして動かせる状態にします。
マウントして、debootstrapでOS稼動に必要なファイルをインストールしましょう。
$ su # mkdir /mnt/debian.img # mount -o loop /home/virtual_machines/rx7/debian- root.img /mnt/debian.img # debootstrap --arch i386 etch /mnt/debian.img http://ftp.jp.debian.org/debian
すると、ざーっとインストールが始まって、、、
〜〜〜省略〜〜〜 I: Base system installed successfully.
こんな感じで、最後に「Base system installed successfully」が出れば成功。
ここまでで、イメージファイルのベース部分の作成が完了です。
ドメインUのシステム設定
あと、ドメインUとして動かすために設定しなければいけないのは、以下のファイルとなります。
- /etc/fstab
- /etc/hostname
- /etc/hosts
- /etc/network/interfaces
- /etc/apt/sources.list
というわけで、一つずつチャチャッとやっていきます。
まずは、/etc/fstabから。
# cd /mnt/debian.img # vi etc/fstab
以下の内容で書き換え。
/dev/sda1 / ext3 defaults 0 1 /dev/sda2 swap swap defaults 0 0 proc /proc proc defaults 0 0
次、/etc/hostname。
# vi etc/hostname
以下の内容で書き換え。この辺は任意の文字列でOK。
rx7-xenU
次、/etc/hosts。
# vi etc/hosts
以下の内容で作成。さっきのhostnameと合わせておきましょう。(hostnameの部分は書かなくても良いけど)
127.0.0.1 localhost rx7-xenU
次はNICまわり。
# vi etc/network/interfaces
以下の内容で書き換え。↓はDHCPからIPアドレスをもらう場合ね。静的に振るときはdhcpじゃなくてstaticと書いて、IPアドレスやらネットワークアドレス、ブロードキャストアドレスやらを書いていきましょう。詳しくはGoogle先生に聞いてみるととたくさん教えてくれると思います。
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp
次にaptまわり。
# vi etc/apt/sources.list
以下の内容で作成。
deb http://ftp.jp.debian.org/debian/ etch main contrib non-free deb-src http://ftp.jp.debian.org/debian/ etch main contrib non-free deb http://security.debian.org/ etch/updates main contrib deb-src http://security.debian.org/ etch/updates main contrib
最後に、ドメイン0と同じく、/lib/tlsを使われないようにしておく、と。
# mv lib/tls lib/tls.disabled
そして、作業が終わったので、ゲストOSのイメージをアンマウント。
# cd / # umount /mnt/debian.img
仕上げに、XenのゲストOS用設定ファイルを作成。
# vi /etc/xen/rx7-debian
以下の内容で作成します。
name="rx7-debian" memory=384 kernel="/boot/vmlinuz-2.6.16-xen" nics=1 ramdisk="/boot/initrd.img-2.6.16-xen" disk=['file:/home/virtual_machines/rx7/debian-root.img,sda1,w','file:/home/virtual_machines/rx7/debian-swap.img,sda2,w'] root="/dev/sda1 ro"
さて、いよいよドメインUを起動してみます。
# xm create -c /etc/xen/rx7-debian
これで、しばらくすると、ドメインUのコンソールが出てきて、ログインできるようになると思います。

Linux WORLD Xen導入・活用ガイド (IDGムックシリーズ―〈月刊〉リナックスワールド総集編)
- 出版社/メーカー: IDGジャパン
- 発売日: 2006/11/01
- メディア: ムック
- クリック: 10回
- この商品を含むブログ (4件) を見る

- 作者: 山本雅也
- 出版社/メーカー: 秀和システム
- 発売日: 2006/08/08
- メディア: 単行本
- 購入: 1人 クリック: 26回
- この商品を含むブログ (13件) を見る