2008/02/09

CentOS 5.1でXenを使ってみる・DomU自動インストール編

CentOS 5.1でXenを使ってみる・DomU通常インストール編』では、GUI/VNCを用いた対話的なインストール手順を紹介した。しかし、中には「GUIなどサーバには不要」というバリバリ硬派な方もいらっしゃるだろう。というわけで、今回はGUIを使わずに、しかも全自動でXenのDomUをインストールする方法を紹介する。

Dom0のインストールについては、『DRACでリモートからCentOS 5.1をAnaconda Kickstartで完全自動PXEインストール・その1』を参照して欲しい。この中でローカルミラーリポジトリを準備しているが、DomUのインストールでもこれを利用する。
自動インストールは、AnacondaのKickstart機能を使って実現する。設定ファイルは、ローカルミラーリポジトリに置き、DomUへはHTTPで与える。内容は後述。

具体的な手順。Dom0上で以下の通り実行する。
# lvcreate --name LogVolNode01 --size=4G /dev/VolGroupXX
connect() failed on local socket: Connection refused
WARNING: Falling back to local file-based locking.
Volume Groups with the clustered attribute will be inaccessible.
Logical volume "LogVolNode01" created
# virt-install --name=node01 --ram=256 --file=/dev/VolGroupXX/LogVolNode01 --location=http://Repository.LocalDomain/centos/5.1/os/i386 --nographics --paravirt --bridge=xenbr4000 --extra-args='ks=http://Repository.LocalDomain/centos/5.1/cluster-DomU-ks.cfg'


Starting install...
Retrieving CentOS... 557 kB 00:00
Retrieving vmlinuz... 100% |=========================| 2.0 MB 00:00
Retrieving initrd.img... 100% |=========================| 5.0 MB 00:00
Creating domain... 0 B 00:01
Linux version 2.6.18-53.el5xen (mockbuild@builder6.centos.org) (gcc version 4.1.2 20070626 (Red Hat 4.1.2-14)) #1 SMP Mon Nov 12 03:26:12 EST 2007
BIOS-provided physical RAM map:
Xen: 0000000000000000 - 0000000010800000 (usable)
0MB HIGHMEM available.
264MB LOWMEM available.
<<略>>
Greetings.
anaconda installer init version 11.1.2.87 starting
mounting /proc filesystem... done
creating /dev filesystem... done
mounting /dev/pts (unix98 pty) filesystem... done
mounting /sys filesystem... done
anaconda installer init version 11.1.2.87 using /dev/xvc0 as console
trying to remount root filesystem read write... done
mounting /tmp as ramfs... done
running install...
running /sbin/loader

Welcome to CentOS
インストールは自動的に進むが、一度だけ以下のダイアログが表示される。
ここでは、[Yes]を選択する。
2008/3/18(火)追記: Kickstart設定ファイル中に
clearpart --all --initlabel --drives=xvda
と記述すればこの画面が出なくなるらしい(shima さんからのご指摘による。ありがとうございます)。

以下、インストールは自動的に進み、%postスクリプト実行後、再起動され、DomUが起動される。
<<略>>
sending termination signals...done
sending kill signals...done
disabling swap...
/dev/mapper/VolGroup00-LogVol01
unmounting filesystems...
/mnt/runtime done
disabling /dev/loop0
/proc done
/dev/pts done
/sys done
/tmp/ramfs done
/selinux done
/mnt/sysimage/boot done
/mnt/sysimage/sys done
/mnt/sysimage/proc done
/mnt/sysimage/selinux done
/mnt/sysimage/dev done
/mnt/sysimage done
rebooting system
Restarting system.
Guest installation complete... restarting guest.
Linux version 2.6.18-53.1.6.el5xen (mockbuild@builder6.centos.org) (gcc version 4.1.2 20070626 (Red Hat 4.1.2-14)) #1 SMP Wed Jan 23 12:33:37 EST 2008
BIOS-provided physical RAM map:
<<略>>
audit(1202463938.085:2): policy loaded auid=4294967295
INIT: version 2.86 booting
Welcome to CentOS release 5 (Final)
Press 'I' to enter interactive startup.
Setting clock (localtime): Fri Feb 8 18:45:47 JST 2008 [ OK ]
Starting udev: [ OK ]
Setting hostname localhost.localdomain: [ OK ]
<<略>>
Starting oddjobd: [ OK ]
Starting Cluster Module - cluster monitor: Setting verbosity level to LogBasic
[ OK ]
generating SSL certificates... done
Starting ricci: [ OK ]

CentOS release 5 (Final)
Kernel 2.6.18-53.1.6.el5xen on an i686

localhost.localdomain login:

Kickstart設定ファイルcluster-DomU-ks.cfgの内容は以下の通り。
logging --host=192.168.55.32 --level=debug

install
url --url http://Repository.LocalDomain/centos/5/os/i386
lang en_US.UTF-8
keyboard jp106
network --device eth0 --bootproto dhcp --hostname=localhost.localdomain
rootpw --iscrypted $1$nJfEm2KK$4B9nthu8WENKwv/zQHPoE.
firewall --enabled
authconfig --enableshadow --enablemd5
selinux --permissive
timezone Asia/Tokyo
bootloader --location=mbr --driveorder=xvda --append="console=xvc0"

services --enabled=ntpd,oddjobd,snmpd --disabled=avahi-daemon,bluetooth,cpuspeed,cups,hidd,lm_sensors,mdmonitor,microcode_ctl,nfslock,pcscd,smartd,yum-updatesd

clearpart --all --drives=xvda
part /boot --fstype ext3 --size=100 --ondisk=xvda
part pv.2 --size=0 --grow --ondisk=xvda
volgroup VolGroup00 --pesize=32768 pv.2
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=272 --grow --maxsize=544
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
repo --name=base --baseurl=http://Repository.LocalDomain/centos/5/os/i386/
repo --name=updates --baseurl=http://Repository.LocalDomain/centos/5/updates/i386/
repo --name=addons --baseurl=http://Repository.LocalDomain/centos/5/addons/i386/
repo --name=extras --baseurl=http://Repository.LocalDomain/centos/5/extras/i386/

reboot

%packages
@admin-tools
@base
@cluster-storage
@clustering
@core
@emacs
@mail-server
@network-server
@ruby
@server-cfg
@system-tools
@text-internet
@web-server
-smartmontools
-OpenIPMI*
-squid
-samba-*
-system-config-samba
lynx
tftp
kmod-gfs-xen
kmod-gnbd-xen
-NetworkManager
-bluez-utils
device-mapper-multipath
-irda-utils
-pcmciautils
net-snmp-utils
net-snmp-libs
net-snmp
-kmod-gfs
-kmod-gnbd
-kernel

%post --log=/root/install-post.log
echo 'NOZEROCONF=yes' >> /etc/sysconfig/network

/bin/cp -p /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ifcfg-eth0
/bin/sed 's/^HWADDR=/#HWADDR=/' < /tmp/ifcfg-eth0 > /etc/sysconfig/network-scripts/ifcfg-eth0

### yum update from the local repository
/bin/cp -p /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.dist
/bin/sed 's/mirrorlist=/#mirrorlist=/
s/#baseurl=/baseurl=/
s/mirror.centos.org/Repository.LocalDomain/' < /etc/yum.repos.d/CentOS-Base.repo.dist > /etc/yum.repos.d/CentOS-Base.repo

### For Cluster
##### /etc/lvm/lvm.conf
/bin/cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.dist
/bin/sed 's/locking_type = 1/locking_type = 3/' < /etc/lvm/lvm.conf.dist > /etc/lvm/lvm.conf

##### /etc/cluster/fence_xvm.key
/usr/bin/base64 -di > /etc/cluster/fence_xvm.key <<EOL
FiAuM5lLTfCoom3BIrNrWKXj2eObJkK1AYcg4g9uu+r8kDPl8uZaxva6KhteDOtAMXY62DCvW/3/
<<略>>
FE4ZCdbSwpDfhzU0wxiV4xWjCoIoiQFT4mKFA9kiui7fa3pKBz0122Y05tcbakhAeg==
EOL
/bin/chmod 600 /etc/cluster/fence_xvm.key

##### iptables
/bin/cp -p /etc/sysconfig/iptables /etc/sysconfig/iptables.dist
/bin/cat > /etc/sysconfig/iptables <<EOL
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -s 192.168.55.0/24 -i eth0 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
EOL

### sshd
/bin/cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.dist
/bin/sed 's/^PasswordAuthentication yes/PasswordAuthentication no/' < /etc/ssh/sshd_config.dist > /etc/ssh/sshd_config

/bin/mkdir ~root/.ssh
/bin/chmod 600 ~root/.ssh
/bin/cat > ~root/.ssh/authorized_keys2 <<EOL
ssh-dss AAAA<<略>>eQ== Username@SmtpServer.LocalDomain
EOL
/bin/chmod 644 ~root/.ssh/authorized_keys2

### Mail
##### /etc/mail/sendmail.cf
/usr/bin/patch /etc/mail/sendmail.mc <<EOL
26c26
< dnl define(\`SMART_HOST', \`smtp.your.provider')dnl
---
> define(\`SMART_HOST', \`SmtpServer.LocalDomain')dnl
EOL
(cd /etc/mail; /usr/bin/make sendmail.cf)

##### /etc/aliases
/usr/bin/patch /etc/aliases <<EOL
96c96
< #root: marc
---
> root: root@LocalDomain
EOL
/usr/bin/newaliases

### SNMP
cat > /etc/snmp/snmpd.conf <<EOL
com2sec localhost localhost COMMUNITY_STRING
com2sec localnet 192.168.55.0/24 COMMUNITY_STRING

group gOpLocalhost v1 localhost
group gOpLocalhost v2c localhost
group gOpLocalnet v1 localnet
group gOpLocalnet v2c localnet

view all included .1
view systemview included REDHAT-CLUSTER-MIB:RedHatCluster

access gOpLocalhost "" any noauth exact all none all
access gOpLocalnet "" any noauth exact all none all

syslocation Unknown
syscontact root@LocalDomain

disk / 100000

load 10

# for cluster
dlmod RedHatCluster /usr/lib/cluster-snmp/libClusterMonitorSnmp.so
EOL

cat > /etc/snmp/snmp.conf <<EOL
mibs +REDHAT-MIB:REDHAT-CLUSTER-MIB
EOL

### NTP on Xen DomU
cat >> /etc/sysctl.conf <<EOL

# For ntpd on Xen DomU.
xen.independent_wallclock = 1
EOL

2 件のコメント:

shima さんのコメント...

いつも参考にさせていただいてます!
すごく勉強になります。

自動インストールの際ですが、
キックスタートファイルのclearpartの行に
下記のように--initlabelをつけると
1度も止まらずにインストールできます。
clearpart --all --initlabel --drives=xvda
ディスクラベルの初期化オプションです。

環境作りに重宝してます。ご参考まで。

りょう さんのコメント...

コメント&ご指摘ありがとうございます。早速追記させてもらいました。なるほど、--initlabelってそういう意味だったんですね。