○ XENの設定

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

・xen-4.1から"xm" ツールに似た"xl" ツールができました
・"xm" と "xl" ツールの共通部分がxencommonsにまとめられていて
・"xm" ツールを使う場合、xencommonsとxendを起動する必要があります
・"xm" ツールは推奨されません、将来はサポートされない予定です

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

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

○関連サイト

xenのマニュアル (http://wiki.xen.org/wiki/Xen_4.2_Man_Pages)

○参照ファイル

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

○インストール環境

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

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



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

○xendomainsの修正

・"xm" ツールは推奨されませんが、"xm" ツールの使用を想定しています
・デフォルト設定では、起動スクリプトは 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 180)
(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の正式に取得したアドレスなのでそのまま使う
・diskでsda*を使用するとドメイン0とコンフリクトする場合があります
・自分の環境に合わせて読みかえて下さい
紫色部分 "xm create"で起動が中断する場合に設定
・xencons=ttyが優先され、consoleログインでttyが使われます
・console=xvc0のみを設定すると、consoleログインでxvcが使われます

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.32.43-xs1.6.10xen"
ramdisk = "/boot/initramfs-2.6.32.43-xs1.6.10xen.img"
memory = 1024
name = "jupiter"
vcpus = 1

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

disk = [ 'phy:/dev/mapper/XEN-Wan01,xvda1,w','phy:/dev/mapper/XEN-Wan02,xvda2,w','phy:/dev/mapper/XEN-Wan03,xvda3,w' ]

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

root = "/dev/xvda1 ro"

extra = "xencons=tty console=xvc0"

:/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.32.43-xs1.6.10xen"
ramdisk = "initramfs-2.6.32.43-xs1.6.10xen.img"
memory = 320
name = "saturn"
vcpus = 1

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

disk = [ 'phy:/dev/mapper/XEN-Lan01,xvda1,w','phy:/dev/mapper/XEN-Lan02,xvda2,w','phy:/dev/mapper/XEN-Lan03,xvda3,w' ]

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

root = "/dev/xvda1 ro"

extra = "xencons=tty console=xvc0"



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

・"xm" ツールは推奨されませんが、"xm" ツールの使用を想定しています
・xenのモデュ−ルをkernel構築時に (可能なものは) 静的に組み込んでいます

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

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

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

・ドメインUの / ディレクトリをマウントして操作します
・yesコマンドでnoを出力して上書きコピーを否定します
・自分の設定環境に合わせます

[root@earth:~]
# mount /dev/mapper/XEN-Wan01 /mnt
# cp -a /lib/modules/2.6.32.43-xs1.6.10xen /mnt/lib/modules
# yes no | cp -a /lib/firmware/* /mnt/lib/firmware
# umount /mnt

[root@earth:~]
# mount /dev/mapper/XEN-Lan01 /mnt
# cp -a /lib/modules/2.6.32.43-xs1.6.10xen /mnt/lib/modules
# yes no | cp -a /lib/firmware/* /mnt/lib/firmware
# umount /mnt

○selinuxの無効化

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

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

・下記参照

# umount /mnt

[root@earth:~]
# mount /dev/mapper/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/mapper/XEN-Wan01 /mnt
# cp /mnt/etc/fstab /mnt/etc/fstab-Wan01
# vi /mnt/etc/fstab

・下記参照(public)

# umount /mnt

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

・下記参照(private)

# umount /mnt

:/mnt/etc/fstab

・ドメインU (public)

/dev/xvda1          /           ext4    defaults        1 1
/dev/xvda3          /home       ext4    defaults        1 2
#/dev/sda1          /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/xvda2          swap        swap    defaults        0 0
#/dev/mapper/XEN-Top02    swap        swap    defaults      0 0

・ドメインU (private)

/dev/xvda1          /           ext4    defaults        1 1
/dev/xvda3          /home       ext4    defaults        1 2
#/dev/sda1          /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/xvda2          swap        swap    defaults        0 0
#/dev/mapper/XEN-Top02    swap        swap    defaults      0 0
#/dev/mapper/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"
#HWADDR="XX:XX:XX:XX:XX:XX"
ONBOOT="yes"
BOOTPROTO="static"
BROADCAST="192.168.0.255"
IPADDR="192.168.0.21"
NETMASK="255.255.255.0"
NETWORK="192.168.0.0"
TYPE="Ethernet"
USERCTL="no"
PEERDNS="no"

・ドメインU (private)

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

○haltスクリプト

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

・haltスクリプトが終了時にCMOSへの書込みをします
・CentOS 6.8 では"/dev/rtc"の存在をチェックします
・ドメインUでは"/dev/rtc"がつくられないので
・CMOSへの書込みをキャンセルします

・省略

[ -x /sbin/hwclock -a -e /dev/rtc ] && action $"Syncing hardware clock to system time" /sbin/hwclock --systohc

・省略




○Xenの起動と確認

・iptablesのインストール・設定の後に起動します
・iptablesの設定をしない場合は、iptablesを止めておきます

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

・xen用に設定されたgrub.confで "vmlinuz-2.6.32.43-xs1.6.10xen" を起動します

○xencommonsスクリプトの修正

・/etc/sysconfig/xencommonsで指定した場合のみ、qemuを起動します

:/etc/rc.d/init.d/xencommons

・省略

#	echo Starting QEMU as disk backend for dom0
#	test -z "$QEMU_XEN" && QEMU_XEN=/usr/lib/xen/bin/qemu-system-i386
#	$QEMU_XEN -xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize -monitor /dev/null
	if test -n "$QEMU_XEN" ; then
	    echo Starting QEMU as disk backend for dom0
	    $QEMU_XEN -xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize -monitor /dev/null
	fi
}

・省略


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

・xencommonsの起動でdomain-0が起動し、"xl"ツールが使えます
・xendの起動で"xm"ツールが使え、"xl"ツールが使えなくなります

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

[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

・xendomains スクリプトからの起動と停止
・xendomainsは"xm" ツールが使える場合、"xm" ツールで起動します
・"xm" ツールが使えない場合、"xl" ツールで起動します
・/etc/xen/autoに存在するファイルを読み込んでいます

[root@earth:~]

・自動起動スクリプトからの起動

# service xendomains start

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

# xm list

・自動起動スクリプトからの停止
・ドメインUが複数の場合、ドメイン名がうまく表示されない

# service xendomains stop

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

# xm list

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

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

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

:/étc/rc.d/init.d/xendomains (参考)

・停止処理で表示がおかしくなる場合 (205行目を修正)

    done
}

#LIST_GREP='((domain\|(domid\|(name\|^{$\|"name":\|"domid":'
LIST_GREP='^(domain\|(domid\|(name\|^{$\|"name":\|"domid":'
parseln()
{
    if [[ "$1" =~ '(domain' ]] || [[ "$1" = "{" ]]; then



○"xl" ツールを使いたい場合 (参考)

・bridgeモードの場合、network-bridgeスクリプトを起動しておきます
・物理ネットワークインターフェイス(例 先頭にpが付いた peth0 )を起動し、
・eth0が(スイッチングハブのように動作する)ブリッジインターフェイスとなり
・仮想マシン(ドメインU)へネットワークを提供します

○物理ネットワークインターフェイス (peth0) 起動スクリプト

・xl.confからvifタイプを読み出し、対応するnetworkスクリプトを起動します

:/étc/rc.d/init.d/xenifset (root root 755)

#!/bin/bash
#
# chkconfig: 2345 98 01
# description: Xen network interface start/stop script.
#

if [ -f /etc/xen/xl.conf ] ; then
    . /etc/xen/xl.conf
else
    vifscript=vif-bridge
fi

if [ "$vifscript" = "" ] ; then
    vifscript=vif-bridge
fi

viftype=$(echo "$vifscript" | cut -f2 -d -)

case "$1" in
    start)
        echo "network-$viftype script" Start
        /etc/xen/scripts/network-$viftype start
        ;;
    stop)
        echo "network-$viftype script" Stop
        /etc/xen/scripts/network-$viftype stop
        ;;
    status)
        echo "network-$viftype script" Status
        /etc/xen/scripts/network-$viftype status
        RETVAL=$?
        ;;
    *)
        echo $"Usage: $0 {start|stop|status}"
        RETVAL=2
        [ "$1" = 'usage' ] && RETVAL=0
esac

exit $RETVAL

○物理ネットワークインターフェイス(peth0)の起動

[root@earth:~]
# service xencommons start
# /etc/xen/scripts/network-bridge start

・または、自動起動スクリプト(xenifset)で起動します

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

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

# xl list

・インターフェースの情報を表示します

# brctl show

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

# xl info

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

# xl help

・物理ネットワークインターフェイスをeth0に戻します
・ドメインUの停止には時間が掛かります
・xl list で確認してから、xenbridgeを停止します

# xl list
# service xenifset stop

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

・"xl" ツールで起動します
・設定ファイルはxmツール用のものを兼用します(下記参照)
・起動されれば jupiterへのログイン画面が表示されます
・ドメイン0の管理画面に戻る場合は Ctrl+]キーを押します

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

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

# xl list

・インターフェースの情報を表示します

# brctl show

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

# xl console jupiter

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

# xl console 1

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

# xl shutdown jupiter

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

# xl shutdown 1

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

# xl destory 1

:/etc/xen/auto/jupiter ("xl"ツール用)

・vmidのチェック部分を全てコメント行にします

#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()

・xendomains スクリプトからの起動と停止
・xendomainsは"xm" ツールが使える場合、"xm" ツールで起動します
・"xm" ツールが使えない場合、"xl" ツールで起動します
・/etc/xen/autoに存在するファイルを読み込んでいます

[root@earth:~]

・自動起動スクリプトからの起動

# service xendomains start

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

# xl list

・自動起動スクリプトからの停止
・ドメインUが複数の場合、ドメイン名がうまく表示されない

# service xendomains stop

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

# xl list

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