○ XENの設定

・xen-4.1.2-rc1-preの設定と仮想マシンの起動
・完全仮想化ではなく、準仮想化のマシン構成です
・memoryの割り当てに注意、Xen本体のメモリ使用量を考慮する
・コンソール画面 (CUI) で全ての設定をします

・xen-4.1からxmツールに似たxlツールができました
・xmツールとxlツールの共通部分がxencommonsにまとめられていて
・xmツールを使う場合は、xencommonsとxendを起動する必要があります

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:xenのマニュアル (http://wiki.xensource.com/xenwiki/XenDocs)

○参照ファイル

パッケージの追加
最初の設定 (Xen)
glibcの設定
Xenのビルド
iptablesのインストール

○インストール環境

:OS CentOS 5.6
:Xen 4.1.2-rc1-pre
:selinux disabled
:インストール先 
:作業 /etc
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスは一般ユーザから行います



○ドメイン0 (制御OS) の設定

○xendomainsの修正

・デフォルト設定では、起動スクリプトは restoreモードで起動します
・起動に失敗した場合、saveファイル、lockファイルを削除します
・終了時にsaveしない場合、下記オプションを修正します

:/etc/sysconfig/xendomains

・省略

#XENDOMAINS_SAVE=/var/lib/xen/save
XENDOMAINS_SAVE=""

・省略

#XENDOMAINS_RESTORE=true
XENDOMAINS_RESTORE=false

・省略


○xend-config.sxpの修正

・http接続を無効にする
・ドメイン0に割り当てる最小メモリ量の設定 (grub.confに合わせる)
・keymapをjaにする (有効?)

:/etc/xen/xend-config.sxp

・省略

(xend-http-server no)

・省略

(network-script network-bridge)
(vif-script vif-bridge)

(dom0-min-mem 128)
(enable-dom0-ballooning no)

・省略

(keymap 'ja')

・省略


○xl.confの修正

・kernelでdom0のメモリを割り当てている場合

:/etc/xen/xl.conf

・省略

autoballoon=0

・省略


○Xen-guestのための設定ファイルの作製

・複数のguestの場合はxmexample2を使います

[root@earth:~]
# cp /etc/xen/xmexample2 /etc/xen/auto/jupiter
# cp /etc/xen/xmexample2 /etc/xen/auto/saturn

:/etc/xen/auto/jupiter

・最初に起動するものをvmid=1に設定しています
・ドメイン0の起動後に"# xm info"でfreeのメモリ容量を確認
・vifの仮想macアドレスは適当に決める (ただし スタイルを間違えないこと)
・mac=00:16:3eの部分はxenの正式に取得したアドレスなのでそのまま使う
・xlツールで起動する場合、diskの/dev/XEN/Wan01のように/devが必要です
・xmツールでも問題ないので、/devを付けたまま使います
・自分の環境に合わせて読みかえて下さい
紫色部分 "xm console IDナンバー"で応答がない場合に設定

vmid=1

def vmid_check(var, val):
    val = int(val)
    if val <= 0:
        raise ValueError
    return val

xm_vars.var('vmid',
            use="Virtual machine id. Integer greater than 0.",
            check=vmid_check)

xm_vars.check()

kernel = "/boot/vmlinuz-2.6.18.8-xen"
ramdisk = "/boot/initrd-2.6.18.8-xen.img"
memory = 620
name = "jupiter"
vcpus = 1

vif = [ 'mac=00:16:3e:00:00:21' ]

disk = [ 'phy:/dev/XEN/Wan01,hda1,w','phy:/dev/XEN/Wan02,hda2,w','phy:/dev/XEN/Wan03,hda3,w' ]

ip="192.168.0.21"
netmask="255.255.255.0"
gateway="192.168.0.1"
hostname= "jupiter.528p.com"

root = "/dev/hda1 ro"

extra = "xencons=tty console=tty1"

:/etc/xen/auto/saturn

vmid=2

def vmid_check(var, val):
    val = int(val)
    if val <= 0:
        raise ValueError
    return val

xm_vars.var('vmid',
            use="Virtual machine id. Integer greater than 0.",
            check=vmid_check)

xm_vars.check()

kernel = "/boot/vmlinuz-2.6.18.8-xen"
ramdisk = "/boot/initrd-2.6.18.8-xen.img"
memory = 252
name = "saturn"
vcpus = 1

vif = [ 'mac=00:16:3e:00:00:22' ]

disk = [ 'phy:/dev/XEN/Lan01,hda1,w','phy:/dev/XEN/Lan02,hda2,w','phy:/dev/XEN/Lan03,hda3,w' ]

ip="192.168.0.22"
netmask="255.255.255.0"
gateway="192.168.0.1"
hostname= "saturn.528p.com"

root = "/dev/hda1 ro"

extra = "xencons=tty console=tty1"



○ドメインU (ゲストOS) の設定

・xenのモデュ−ルをkernel構築時に (可能なものは) 静的に組み込んでいます

○xen用のglibcライブラリを認識させる

glibcの設定を参照
・ゲストOSを単独で起動させて行なうか、ドメインUとして起動後に行う

○ドメインU用のモデュールのコピー

・ドメインUの / ディレクトリをマウントして操作します
・自分の設定環境に合わせます

[root@earth:~]
# mount /dev/XEN/Wan01 /mnt
# cp -a /lib/modules/2.6.18.8-xen /mnt/lib/modules
# umount /mnt

[root@earth:~]
# mount /dev/XEN/Lan01 /mnt
# cp -a /lib/modules/2.6.18.8-xen /mnt/lib/modules
# umount /mnt

○selinuxの無効化

・ドメインUの / ディレクトリをマウントして操作します

[root@earth:~]
# mount /dev/XEN/Wan01 /mnt
# vi /mnt/etc/selinux/config

・下記参照

# umount /mnt

[root@earth:~]
# mount /dev/XEN/Lan01 /mnt
# vi /mnt/etc/selinux/config

・下記参照

# umount /mnt

:/mnt/etc/selinux/config

SELINUX=disabled

○fstabの修正

・ドメインUの / ディレクトリをマウントして操作します
・単独で起動する場合に必要なfstabを別名で保存しておきます
・単独で起動する場合はdomain0からmountしてファイルを置き換えます

[root@earth:~]
# mount /dev/XEN/Wan01 /mnt
# cp /mnt/etc/fstab /mnt/etc/fstab-Wan01
# vi /mnt/etc/fstab

・下記参照(public)

# umount /mnt

[root@earth:~]
# mount /dev/XEN/Lan01 /mnt
# cp /mnt/etc/fstab /mnt/etc/fstab-Lan01
# vi /mnt/etc/fstab

・下記参照(private)

# umount /mnt

:/mnt/etc/fstab

・ドメインU (public)

/dev/hda1          /           ext3    defaults        1 1
/dev/hda3          /home       ext3    defaults        1 2
#LABEL=/boot       /boot       ext3    defaults        1 2
devpts             /dev/pts    devpts  gid=5,mode=620  0 0
tmpfs              /dev/shm    tmpfs   defaults        0 0
proc               /proc       proc    defaults        0 0
sysfs              /sys        sysfs   defaults        0 0
/dev/hda2          swap        swap    defaults        0 0
#/dev/XEN/Top02    swap        swap    defaults        0 0

・ドメインU (private)

/dev/hda1          /           ext3    defaults        1 1
/dev/hda3          /home       ext3    defaults        1 2
#LABEL=/boot       /boot       ext3    defaults        1 2
devpts             /dev/pts    devpts  gid=5,mode=620  0 0
tmpfs              /dev/shm    tmpfs   defaults        0 0
proc               /proc       proc    defaults        0 0
sysfs              /sys        sysfs   defaults        0 0
/dev/hda2          swap        swap    defaults        0 0
#/dev/XEN/Top02    swap        swap    defaults        0 0
#/dev/XEN/Wan02    swap        swap    defaults        0 0

○ifcfg-eth0の修正

・ドメインUの / ディレクトリをマウントして操作します
・macアドレス(HWADDR)の指定を無効にします
・単独で起動する場合もそのまま使用します

[root@earth:~]
# mount /dev/XEN/Wan01 /mnt
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0

・下記参照(public)

# umount /mnt

[root@earth:~]
# mount /dev/XEN/Lan01 /mnt
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0

・下記参照(private)

# umount /mnt

:/mnt/etc/sysconfig/network-scripts/ifcfg-eth0

・ドメインU (public)

DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.0.255
#HWADDR=XX:XX:XX:XX:XX:XX
IPADDR=192.168.0.21
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
TYPE=Ethernet

・ドメインU (private)

DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.0.255
#HWADDR=YY:YY:YY:YY:YY:YY
IPADDR=192.168.0.22
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
TYPE=Ethernet

○haltスクリプトの修正

・ドメインUの / ディレクトリをマウントして操作します
・ドメインUのクロックはドメイン0が管理をしています
・shutdownスクリプトでCMOSへの書込みを止めます

[root@earth:~]
# mount /dev/XEN/Wan01 /mnt
# vi /mnt/etc/rc.d/init.d/halt

・下記参照

# umount /mnt

[root@earth:~]
# mount /dev/XEN/Lan01 /mnt
# vi /mnt/etc/rc.d/init.d/halt

・下記参照

# umount /mnt

:/mnt/etc/rc.d/init.d/halt

・省略

#[ -x /sbin/hwclock ] && action $"Syncing \
#hardware clock to system time" /sbin/hwclock $CLOCKFLAGS

・省略




○Xenの起動と確認

・xlツールでvif-bridgeがうまく読み込めないので、しばらくはxmツールを使います
・iptablesのインストール・設定の後に起動します
・iptablesの設定をしない場合は、iptablesを止めておきます

○ドメイン0 (制御OS) の起動

・xen用に設定されたgrub.confで "linux-2.6.18.8-xen" を起動します

○xend (制御デーモン) の起動

・xencommonsの起動でdomain-0が起動しますが、xendも起動します(xmを使う)

・自動起動スクリプトで起動します

[root@earth:~]
# service xencommons start
# service xend start

・起動しているdomainのリストを表示します

# xm list

・起動しているdomainの情報を表示します
・free memoryの情報を得ます

# xm info

・xmのコマンドオプションは?

# xm help

・デーモンの停止
・ドメインUの停止には時間が掛かります
・xm list で確認してから、xendを停止します

# xm list
# service xend stop

○ドメインU (ゲストOS) の起動

・xmツールで起動します
・起動されれば jupiterへのログイン画面が表示されます
・ドメイン0の管理画面に戻る場合は Ctrl+]キーを押します

[root@earth:~]
# xm create -c /etc/xen/auto/jupiter

・Ctrl+]キーを押してドメイン0の管理画面に戻る
・ドメインのlistを表示して確認

# xm list

・ドメインUへのコンソールログイン (ゲストドメイン名)

# xm console jupiter

・または (ゲストドメインのID)

# xm console 1

・ドメインUの停止 (ゲストドメイン名)

# xm shutdown jupiter

・または (ゲストドメインのID)

# xm shutdown 1

・ドメインUの強制終了 (ゲストドメインのID)

# xm destory 1

・自動起動スクリプトからの起動
・/etc/xen/autoに存在するファイルを読み込んで起動

[root@earth:~]
# service xendomains start

・ドメインのlistを表示して確認

# xm list

・自動起動スクリプトからの停止
・xendomainsを修正しています(下記参照)
・xm list で確認します

# service xendomains stop
# xm list

○xenの自動起動を設定します

・xen-4.1.* からxen-watchdog,xencommons起動スクリプトが追加されています
・このサーバの環境では、xen-watchdogは使用しません

[root@earth:~]
# chkconfig --add xencommons
# chkconfig --add xend
# chkconfig --add xendomains

○xendomainsスクリプトの修正

・stopルーティーンがおかしいのでxen-3.4.2と比較して、修正しています
ー部分 を +部分 にエディタで修正します(ー+は書き込まない)
・(xendを起動) xmツールを使用した場合のみ有効です

:/etc/rc.d/init.d/xendomains

--- xendomains	2011-03-13 08:49:57.000000000 +0900
+++ xendomains-new	2011-03-13 10:58:49.000000000 +0900
@@ -204,11 +204,11 @@ rdnames()
 
 parseln()
 {
-    if [[ "$1" =~ '(domain' ]]; then
+    if [[ "$1" =~ '\(domain' ]]; then
         name=;id=
-    else if [[ "$1" =~ '(name' ]]; then
+    else if [[ "$1" =~ '\(name' ]]; then
         name=$(echo $1 | sed -e 's/^.*(name \(.*\))$/\1/')
-    else if [[ "$1" =~ '(domid' ]]; then
+    else if [[ "$1" =~ '\(domid' ]]; then
         id=$(echo $1 | sed -e 's/^.*(domid \(.*\))$/\1/')
     fi; fi; fi
 

○xlツールを使いたい場合

・bridgeモードの場合network-bridgeスクリプトを起動しておく

・起動

# service xencommons start
# /etc/xen/scripts/network-bridge start
# xl create -c /etc/xen/auto/jupiter

・終了

# xl shutdown jupiter
# /etc/xen/scripts/network-bridge stop
# service xencommons stop

○ Copyright(c) 528p.com All Rights Reserved.