仮想マシン構築のために Xen を入れてみます。 Xen は 3.0 が最新版ですが、Linux kernel 2.4 には対応していないので 2.0 にしました。

仮想マシンの設計

OS は全部 CentOS 3.8 にしています。 domU の仮想マシンは2つ作ります。

必要なものを確認

OS のインストール時に入っていました。

[root@centos3 root]# rpm -q iproute
iproute-2.4.7-11.30E.1

入っていなかったので、yum でインストールします。

[root@centos3 root]# rpm --import http://ftp.riken.jp/Linux/centos/RPM-GPG-KEY-CentOS-3
[root@centos3 root]# yum install bridge-utils
Server: CentOS-3 - Addons
Server: CentOS-3 - Base
Server: CentOS-3 - Extras
Server: CentOS-3 - Updates
Finding updated packages
Downloading needed headers
Resolving dependencies
Dependencies resolved
I will do the following:
[install: bridge-utils 0.9.3-8.i386]
Is this ok [y/N]: y
Downloading Packages
Getting bridge-utils-0.9.3-8.i386.rpm
bridge-utils-0.9.3-8.i386 100% |=========================|  24 kB    00:00
Running test transaction:
Test transaction complete, Success!
bridge-utils 100 % done 1/1
Installed:  bridge-utils 0.9.3-8.i386
Transaction(s) Complete

これは yum でも取れなかったので、手で入れます。

[root@centos3 root]# wget http://tmrc.mit.edu/mirror/twisted/Twisted-1.3.0.tar.gz
[root@centos3 root]# tar xvpfz Twisted-1.3.0.tar.gz
[root@centos3 root]# cd Twisted-1.3.0
[root@centos3 Twisted-1.3.0]# python setup.py install

インストール

ソースコードの取得からmakeまで

[root@centos3 root]# wget http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-2.0.7-src.tgz
[root@centos3 root]# tar xvpfz xen-2.0.7-src.tgz
[root@centos3 root]# cd xen-2.0

Makefile を Linux 2.4 用に変えます。

#KERNELS ?= linux-2.6-xen0 linux-2.6-xenU
KERNELS ?= linux-2.4-xen0 linux-2.4-xenU

ここで make すれば Xen 用の kernel が出来上がるのですが、 デバイスドライバがなくうまく動かないことがあります。

例えばわたしの環境では、NIC がうまく動きませんでした。 デバイスドライバがロードされていないため、 起動時にこのように言われてしまいます。

eth0 has different mac address than expected.

linux-2.4.30-xen-sparse/arch/xen/ ディレクトリに、 カーネルの設定ファイルがあります。

ここでは dom0 に次の行を追加しました。

CONFIG_8139T00=y

必要なデバイスの追加が済んだら、いよいよ make します。

[root@centos3 xen-2.0]# make linux24

Linux 2.4.30 のカーネルソースを取ってきて、 Xen 用に make してくれます。 dom0 と domU の二つを作るので、少々時間が掛かります。

終わったらインストール。

[root@centos3 xen-2.0]# make install

GRUBの設定

/boot/grub/grub.conf に dom0 のエントリを追加します。 dom0 用に 256MB のメモリを割り当てています。

title CentOS-3 (2.4.30 Xen-dom0)
        root (hd0,0)
        kernel /xen.gz dom0_mem=262144
        module /vmlinuz-2.4-xen0 ro root=/dev/hda2 console=tty0

追加の設定

パフォーマンスのために、/lib/tls を見えないようにする必要があるそうです。

[root@centos3 root]# mv /lib/tls /lib/tls.disabled

dom0 で起動

再起動して、GRUB のメニューから dom0 のものを選びます。 見た目はほとんど変わりませんが、 メモリが 256MB に制限されていることがわかります。

[root@centos3 root]# uname -r
2.4.30-xen0
[root@centos3 root]# cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:  268435456 246272000 22163456        0 10432512 121716736
Swap: 2089209856        0 2089209856
MemTotal:       262144 kB
MemFree:         21644 kB
MemShared:           0 kB
Buffers:         10188 kB
Cached:         118864 kB
SwapCached:          0 kB
Active:          36300 kB
Inactive:        92892 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       262144 kB
LowFree:         21644 kB
SwapTotal:     2040244 kB
SwapFree:      2040244 kB

xend の起動

仮想マシンを管理する xend を起動する設定をします。 すでにスクリプトが /etc/init.d/xend にあるので、 chkconfig で設定できます。

[root@centos3 root]# chkconfig --add xend
[root@centos3 root]# chkconfig --list xend
xend            0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ
[root@centos3 root]# service xend start

xm list で動作確認します。 まだ Domain-0 (dom0) しかありません。

[root@centos3 root]# xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      251    0  r----     54.8

domU のインストール

domain-1 と domain-2 用にディスクイメージを作ります。

[root@centos3 root]# cd /opt
[root@centos3 opt]# mkdir domain-1 domain-2
[root@centos3 opt]# dd if=/dev/zero of=domain-1/root.img bs=1M count=20480
[root@centos3 opt]# dd if=/dev/zero of=domain-1/swap.img bs=1M count=2048
[root@centos3 opt]# dd if=/dev/zero of=domain-2/root.img bs=1M count=20480
[root@centos3 opt]# dd if=/dev/zero of=domain-2/swap.img bs=1M count=2048

まず domain-1 の中身を作っていきます。 イメージファイルをフォーマットします。

[root@centos3 opt]# mke2fs -j domain-1/root.img
[root@centos3 opt]# mkswap domain-1/swap.img

ファイルシステムをマウントして、yum と rpm の環境を作ります。

[root@centos3 opt]# mount -t ext3 -o loop domain-1/root.img /mnt
[root@centos3 opt]# mkdir /mnt/bin /mnt/boot /mnt/dev /mnt/etc /mnt/home /mnt/lib \
> /mnt/root /mnt/sbin /mnt/tmp /mnt/usr /mnt/var
[root@centos3 opt]# rpm --root /mnt --initdb
[root@centos3 opt]# rpm --root /mnt \
> --import http://ftp.riken.jp/Linux/centos/RPM-GPG-KEY-CentOS-3
[root@centos3 opt]# mkdir -p /mnt/var/cache/yum

/etc/fstab を書きます。

[root@centos3 opt]# cat /mnt/etc/fstab
/dev/sda1               /                       ext3    defaults        1 1
/dev/sda2               swap                    swap    defaults        0 0
none                    /dev/pts                devpts  gid=5,mode=620  0 0
none                    /dev/shm                tmpfs   defaults        0 0
none                    /proc                   proc    defaults        0 0

yum で CentOS 3.8 をインストールしていきます。 dom0 と同じなので、/etc/yum.conf の設定もそのままで構いません。 ネットワークインストールということで、かなりの時間が掛かります。

[root@centos3 opt]# yum --installroot=/mnt groupinstall Base

domU 用のカーネルモジュールをインストールします。

[root@centos3 opt]# cp -Rp /lib/modules/2.4.30-xenU /mnt/lib/modules

また、domU でも /lib/tls は無効にしておきます。

[root@centos3 opt]# mv /mnt/lib/tls /mnt/lib/tls.disabled

これで準備は終了です。

[root@centos3 opt]# umount /mnt

domU を起動

設定ファイルを書く

/etc/xen/xmexample[12] のファイルを参考にして、 設定ファイルを書きます。 ここではこのように書きました。

[root@centos3 root]# cat /opt/domain-1/domU.conf
kernel = "/boot/vmlinuz-2.4-xenU"
memory = 384
name = "domain-1"
nics = 1
disk = [ 'file:/opt/domain-1/root.img,sda1,w', 'file:/opt/domain-1/swap.img,sda2,w' ]
root = "/dev/sda1 ro"

xm create で起動

いよいよ仮想マシンの domU を起動してみます。

[root@centos3 root]# xm create -c /opt/domain-1/domU.conf
....
CentOS release 3.8 (Final)
Kernel 2.4.30-xenU on an i686
 
localhost login:

無事起動して、プロンプトが出てきました。

dom0 側で動作状況を確認してみます。

[root@centos3 root]# xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      251    0  r----     38.5
domain-1           2      384    0  -b---      3.7    9602

domU の終了

shutdown した後は、C-] で dom0 に戻って来ます。

...
Turning off swap:
Turning off quotas:
Halting system...
Power down.
            
************ REMOTE CONSOLE EXITED *****************
[root@centos3 root]#

dom0 側から終わらせるには、xm shutdown を使います。

[root@centos3 root]# xm shutdown domain-1

domU の設定

ネットワークの設定

dom0 側で ifconfig すると、xen-br0 が増えていることが 確認できます。これを bridge にするんですね。

[root@centos3 root]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:07:40:ZZ:YY:CA
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:233 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:188737 (184.3 Kb)  TX bytes:38249 (37.3 Kb)
          Interrupt:10 Base address:0xdc00
 
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:338 errors:0 dropped:0 overruns:0 frame:0
          TX packets:338 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:31884 (31.1 Kb)  TX bytes:31884 (31.1 Kb)

xen-br0   Link encap:Ethernet  HWaddr 00:07:40:ZZ:YY:CA
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:233 errors:0 dropped:0 overruns:0 frame:0
          TX packets:252 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:185475 (181.1 Kb)  TX bytes:37715 (36.8 Kb)

domU 起動用の設定ファイルにネットワーク関連の情報を追記します。 mac= のところは他とかぶらないように付ける必要があります。 gateway は dom0 の IP アドレスを指定しましょう。

vif = [ 'mac=00:07:40:ZZ:YY:CB, bridge=xen-br0' ]
netmask = "255.255.255.0"
gateway = "192.168.1.2"
hostname = "domain-1"

domU を起動すると、ifconfig で見えることが確認できます。

[root@localhost root]# uname -r
2.4.30-xenU
[root@localhost root]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:07:40:ZZ:YY:CB
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback
          LOOPBACK  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

あとは IP アドレスを振れば通信できます。

[root@localhost root]# ifconfig eth0 192.168.1.11 netmask 255.255.255.0

起動時に有効になるように、/etc/ 以下の設定も書いておきましょう。

(/etc/sysconfig/network)
NETWORKING=yes
HOSTNAME=domain-1
GATEWAY=192.168.1.1

(/etc/sysconfig/network-scripts/ifcfg-eth0)
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:07:40:ZZ:YY:CB
IPADDR=192.168.1.11
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet

(/etc/resolv.conf)
nameserver xxx.xxx.xxx.xxx

(/etc/hosts)
127.0.0.1 localhost.localdomain localhost
192.168.1.2 centos3
192.168.1.11 domain-1
192.168.1.12 domain-2

ファイルの編集時に vi を使うと terminal の設定が合わなくて 見た目が大変なので、TERM 環境変数を vt100 にしておくといいです。

[root@localhost root]# export TERM=vt100

これで domU を再起動すると、domU から外に出れているはずです。

[root@domain-1 root]# ping www.xensource.com
PING www.xensource.com (65.19.129.98) 56(84) bytes of data.
64 bytes from 65.19.129.98: icmp_seq=0 ttl=53 time=125 ms
64 bytes from 65.19.129.98: icmp_seq=1 ttl=53 time=128 ms
64 bytes from 65.19.129.98: icmp_seq=2 ttl=53 time=124 ms
64 bytes from 65.19.129.98: icmp_seq=3 ttl=53 time=125 ms

他の設定

あとはユーザを作ったりソフトウェアをインストールしたりなど、 普通の OS の設定と同じです。

ssh で入れるようにしておくと便利ですね。

domU のコピー

これまで作って来た domain-1 は /opt/domain-1/* に イメージファイルや設定ファイルがありますが、 これらをコピーして domain-2/ に置き、 設定を変えれば domU がもう一つ作れます。

2つの domU の設定ファイルはこのようになります。 ディスクとネットワークの部分が違います。 メモリは両方 384MB にすると足りなくなったので、 ちょっと小さくしています。(全体が 1024MB のとき)

/opt/domain-1/domU.conf

kernel = "/boot/vmlinuz-2.4-xenU"
memory = 370
name = "domain-1"
nics = 1
disk = [ 'file:/opt/domain-1/root.img,sda1,w', 'file:/opt/domain-1/swap.img,sda2,w' ]
root = "/dev/sda1 ro"
vif = [ 'mac=00:07:40:ZZ:YY:CB, bridge=xen-br0' ]
netmask = "255.255.255.0"
gateway = "192.168.1.2"
hostname = "domain-1"

/opt/domain-2/domU.conf

kernel = "/boot/vmlinuz-2.4-xenU"
memory = 370
name = "domain-2"
nics = 1
disk = [ 'file:/opt/domain-2/root.img,sda1,w', 'file:/opt/domain-2/swap.img,sda2,w' ]
root = "/dev/sda1 ro"
vif = [ 'mac=00:07:40:ZZ:YY:CC, bridge=xen-br0' ]
netmask = "255.255.255.0"
gateway = "192.168.1.2"
hostname = "domain-2"

全部起動してみると、こんな感じになります。

[root@centos3 root]# xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      251    0  r----    407.6
domain-1           7      370    0  -b---      0.5    9607
domain-2           8      370    0  -b---      0.2    9608

起動していれば、C-] で console を抜けても大丈夫です。 xm console でいつでも戻れます。 シリアルコンソールみたいな感覚ですね。

[root@centos3 root]# uname -r
2.4.30-xen0
[root@centos3 root]# xm console domain-1
************ REMOTE CONSOLE: CTRL-] TO QUIT ********
                                                                                
[root@domain-1 root]# uname -r
2.4.30-xenU

Xen で使うメモリは dom0 側の xm info コマンドで確認できます。 version が化けていますが、これは uname -v から取ってきているだけなので気にしないことにします。

[root@centos3 root]# xm info
system                 : Linux
host                   : centos3
release                : 2.4.30-xen0
version                : #2 2006' 10D 7&R %0#!&R 22:29:54 JST
machine                : i686
cores                  : 1
hyperthreads_per_core  : 1
cpu_mhz                : 2592
memory                 : 1023
free_memory            : 10

dom0/domU で 1GB 以上のメモリを使うとき

これまでに作った kernel では、メモリを 1024MB 割り当てる設定にしても 900MB 弱しか使ってくれません。

ちゃんと認識させるためには、 Linux の kernel のオプションを変える必要があります。

dom0 は 256MB でいいので、domU 用の kernel を作り直しましょう。

[root@centos3 root]# cd xen-2.0/linux-2.4.30-xenU
[root@centos3 root]# make ARCH=xen clean
[root@centos3 root]# make ARCH=xen menuconfig

menuconfig で "Processor type and features" から "High Memory Support" の設定で、"4GB" を選びます。

設定できたら make します。

[root@centos3 root]# make ARCH=xen dep
[root@centos3 root]# make ARCH=xen
[root@centos3 root]# make ARCH=xen install

改めてメモリの割り当てを設定して、全部起動してみます。 ちゃんと 1GB ほどのメモリが認識されていることがわかります。

[root@centos3 root]# xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      251    0  r----    468.7
domain-1           6     1151    0  -b---      2.2    9606
domain-2           7      615    0  -b---      2.2    9607

domU の自動起動

/etc/init.d/xendomains を使います。

[root@centos3 root]# chkconfig --add xendomains
[root@centos3 root]# chkconfig --list xendomains
xendomains      0:オフ  1:オフ  2:オフ  3:オン  4:オン  5:オン  6:オフ

CentOS 3 ではメッセージの表示に不具合があるので、 次のように直します。

--- xendomains.orig     2007-01-09 22:24:41.000000000 +0900
+++ xendomains  2007-01-09 22:25:10.000000000 +0900
@@ -26,21 +26,7 @@
 AUTODIR=/etc/xen/auto
 LOCKFILE=/var/lock/subsys/xendomains
 
-if [ -e /lib/lsb ]; then
-    # assume an LSB-compliant distro (Debian with LSB package,
-    # recent-enough SuSE, others...)
-
-    #. /lib/lsb/init-functions # source LSB standard functions
-
-    on_fn_exit()
-    {
-       if [ $RETVAL -eq 0 ]; then
-           log_success_msg
-       else
-           log_failure_msg
-       fi
-    }
-elif [ -r $INITD/functions ]; then
+if [ -r $INITD/functions ]; then
     # assume a Redhat-like distro
     . $INITD/functions # source Redhat functions

あとは /etc/xen/auto/ ディレクトリに設定ファイルを入れておくことで、 dom0 の起動時に domU も上げてくれます。

[root@centos3 root]# ln -s /opt/domain-1/domU.conf /etc/xen/auto/domain-1
[root@centos3 root]# ln -s /opt/domain-2/domU.conf /etc/xen/auto/domain-2

dom0 の自動起動

ここまでうまくいったら、dom0 も自動起動するようにしましょう。 /boot/grub/grub.conf の default= を dom0 のエントリ番号に変えます。 先頭は 0 なので、dom0 のエントリは 1 になります。

default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title CentOS-3 (2.4.21-47.EL)
        root (hd0,0)
        kernel /vmlinuz-2.4.21-47.EL ro root=LABEL=/
        initrd /initrd-2.4.21-47.EL.img
title CentOS-3 (2.4.30 Xen-dom0)
        root (hd0,0)
        kernel /xen.gz dom0_mem=262144
        module /vmlinuz-2.4-xen0 ro root=/dev/hdb2 console=tty0

(memo)

(2回作らなくて済む方法はないか)



トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-01-29 (土) 15:27:48