2008/07/25

Xen DomU上でDRBDを使う・その6・ベンチマーク

DRBDデバイス/dev/drbd0に直接書込み、速度を測定する。
[root@dc2 ~]# dd bs=64M if=/dev/zero of=/dev/drbd0
dd: writing `/dev/drbd0': No space left on device
64+0 records in
63+0 records out
4294799360 bytes (4.3 GB) copied, 227.723 seconds, 18.9 MB/s
[root@dc2 ~]#
このとき、もう一方のノードdc3の/var/log/messagesには、次のようなメッセージが記録される。この原因は不明。
Jul 24 22:32:08 dc3 kernel: drbd0: local disk flush failed with status -95


この結果を、『その2・DRBD設定前の確認』のときの結果と比較してみよう。DRBDを経由せず、直接/dev/xvdbに書込んだ場合が39.9Mbyte/秒、DRBD経由で/dev/drbd0に書込んだ場合が18.8Mbyte/秒。
/dev/drbd0に書込む場合、/dev/xvdbに書込む場合に比べて、ディスクへの書込みが二倍以上発生する。なぜなら、/dev/drbd0に書込むということは、dc2上の/dev/xvdbとdc3上の/dev/xvdbの両方にデータ書込んだ上で、メタデータも書込むからだ。これらの書込みは結局、Dom0上の同一ディスクへの書込みとなるため直列化され、倍以上の時間が掛かっていると考えられる。

この結果より、/etc/drbd.confで設定した「rate 5M」は、初期同期の場合には効いているが、通常のディスクアクセス時には効いていない事も解る。


その0・概要』『その1・Xen環境の準備』『その2・DRBD設定前の確認』『その3・drbd.confの設定』『その4・DRBDの初期化』『その5・初期同期』『その6・ベンチマーク

Xen DomU上でDRBDを使う・その5・初期同期

両ノードdc[23]で設定およびDRBDリソースの初期化を行った時点では、ディスクの同期が取れていない不一致(Inconsistent)状態にある。これを解消するため、『The initial device synchronization』に従い、初期同期を行う。
初期同期コマンドは、dc[23]のどちらか一方からのみ実行すればよい。もし、有効なデータがどちらかにのみ入っている場合は、そのノードで実行する。そうでない場合は、どちらで実行してもよい。
[root@dc3 ~]# drbdadm -- --overwrite-data-of-peer primary r0
drbd0: Forced to consider local data as UpToDate!
[root@dc3 ~]#
しばらく待って/proc/drbdを確認する。
[root@dc3 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-bui
ld, 2008-06-26 16:40:54
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
ns:8976 nr:0 dw:0 dr:8976 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:4185164
[>....................] sync'ed:  0.3% (4185164/4194140)K
finish: 4:04:08 speed: 244 (240) K/sec
[root@dc3 ~]#
同期速度が、直近244Kbyte/秒、平均240Kbyte/秒しか出ていない(しつこいようだが、Mbpsではないことに注意)。「rate 5M」と設定したので、5Mbyte/秒出るはずだが、どうもデフォルト値の250Kbyte/秒(『Appendix A. DRBD system manual pages』参照)が適用されているようだ。
これを回避するために、設定を再読み込みさせる。
[root@dc3 ~]# drbdadm adjust r0
[root@dc3 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-bui
ld, 2008-06-26 16:40:54
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
ns:86320 nr:0 dw:0 dr:86320 al:0 bm:5 lo:60 pe:68 ua:60 ap:0 oos:4108092
[>....................] sync'ed:  2.2% (4108092/4194140)K
finish: 0:12:43 speed: 5,344 (1,244) K/sec
[root@dc3 ~]#
設定の通り、5Mbyte/秒に近い数字が出ている。これは、dc2側でも実行する。
しばらくすると同期が完了する。ログ/var/log/messagesを確認する。
Jul 24 22:14:33 dc2 kernel: drbd0: peer( Secondary -> Primary ) pdsk( Inconsistent -> UpToDate )
Jul 24 22:14:33 dc2 kernel: drbd0: Writing meta data super block now.
Jul 24 22:14:33 dc2 kernel: drbd0: Becoming sync target due to disk states.
Jul 24 22:14:33 dc2 kernel: drbd0: Writing the whole bitmap, full sync required after drbd_sync_handshake.
Jul 24 22:14:33 dc2 kernel: drbd0: Writing meta data super block now.
Jul 24 22:14:33 dc2 kernel: drbd0: writing of bitmap took 0 jiffies
Jul 24 22:14:33 dc2 kernel: drbd0: 4096 MB (1048535 bits) marked out-of-sync by on disk bit-map.
Jul 24 22:14:33 dc2 kernel: drbd0: Writing meta data super block now.
Jul 24 22:14:33 dc2 kernel: drbd0: conn( Connected -> WFBitMapT )
Jul 24 22:14:33 dc2 kernel: drbd0: conn( WFBitMapT -> WFSyncUUID )
Jul 24 22:14:33 dc2 kernel: drbd0: helper command: /sbin/drbdadm before-resync-target
Jul 24 22:14:33 dc2 kernel: drbd0: conn( WFSyncUUID -> SyncTarget )
Jul 24 22:14:33 dc2 kernel: drbd0: Began resync as SyncTarget (will sync 4194140 KB [1048535 bits set]).
Jul 24 22:14:33 dc2 kernel: drbd0: Writing meta data super block now.
Jul 24 22:16:09 dc2 kernel: drbd0: Writing meta data super block now.
Jul 24 22:29:06 dc2 kernel: drbd0: Resync done (total 872 sec; paused 0 sec; 4808 K/sec)
Jul 24 22:29:06 dc2 kernel: drbd0: conn( SyncTarget -> Connected ) disk( Inconsistent -> UpToDate )
Jul 24 22:29:06 dc2 kernel: drbd0: helper command: /sbin/drbdadm after-resync-target
Jul 24 22:29:06 dc2 kernel: drbd0: Writing meta data super block now.
4,194,140KBの同期に14分33秒掛かっている。およそ4.7Mbyte/秒で、ほぼ設定値の通り。
この時点では、dc3がprimaryとなっているが、dual-primaryモードで設定しているので、dc2もprimaryへ切り替える。
[root@dc2 ~]# drbdadm primary r0
[root@dc2 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-bui
ld, 2008-06-26 16:40:54
0: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
ns:0 nr:4194140 dw:4194140 dr:0 al:0 bm:256 lo:0 pe:0 ua:0 ap:0 oos:0
[root@dc2 ~]#


その0・概要』『その1・Xen環境の準備』『その2・DRBD設定前の確認』『その3・drbd.confの設定』『その4・DRBDの初期化』『その5・初期同期』『その6・ベンチマーク

Xen DomU上でDRBDを使う・その4・DRBDの初期化

Enabling your resource for the first time』に従ってDRBDリソースr0を初期化する。まず、dc2から作業する。
[root@dc2 ~]# drbdadm create-md r0
v08 Magic number not found
v07 Magic number not found
v07 Magic number not found
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
[root@dc2 ~]# drbdadm attach r0
drbd0: No usable activity log found.
drbd0: Barriers not supported on meta data device - disabling
[root@dc2 ~]# drbdadm connect r0
[root@dc2 ~]# 
この時点では、dc3が初期化されていないため、接続が完了しないことを確認する。
[root@dc2 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-bui
ld, 2008-06-26 16:40:54
0: cs:WFConnection st:Secondary/Unknown ds:Inconsistent/DUnknown C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:4194140
[root@dc2 ~]#
以下のことが判る。
  • 接続状態(cs)が接続待ち(WFConnection)、
  • ロール(st)は、自分自身(dc2)がSecondary、相手(dc3)が不明(Unknown)
  • ディスク状態(ds)は、自分自身(dc2)が不一致、相手(dc3)が不明

続いて、dc3を初期化する。
[root@dc3 ~]# drbdadm create-md r0
v08 Magic number not found
v07 Magic number not found
v07 Magic number not found
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
[root@dc3 ~]# drbdadm attach r0
drbd0: No usable activity log found.
drbd0: Barriers not supported on meta data device - disabling
[root@dc3 ~]# drbdadm connect r0
[root@dc3 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-bui
ld, 2008-06-26 16:40:54
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:4194140
[root@dc3 ~]#
この時点では、dc[23]の両方が初期化されているため、通信状態(cs)が確立(Connected)となっている。両ノードともロール(st)がSecondaryで、ディスク状態(ds)が不一致(Inconsistent)となっている。


その0・概要』『その1・Xen環境の準備』『その2・DRBD設定前の確認』『その3・drbd.confの設定』『その4・DRBDの初期化』『その5・初期同期』『その6・ベンチマーク

Xen DomU上でDRBDを使う・その3・drbd.confの設定

各DomU dc[23]上の/etc/drbd.confを以下の通り設定する。
global {
usage-count no;
}
common {
protocol C;
}
resource r0 {
net {
allow-two-primaries;
shared-secret "9wEtE83PFS4xChqY+aT";
}
startup {
become-primary-on both;
}
syncer {
rate 5M;
verify-alg sha1;
}
device    /dev/drbd0;
disk      /dev/xvdb;
meta-disk internal;
on dc2.xencluster {
address   192.168.56.8:7789;
}
on dc3.xencluster {
address   192.168.56.9:7789;
}
}
設定内容は以下の通り。
  • リソースr0を定義。dc[23]からアクセスされる。
  • 両ノードが同時にprimaryになることができる(allow-two-primaries)。
  • ネットワーク接続時の認証のためのパスワードを設定している(shared-secret)。
  • 起動時に、両ノードがprimaryとなる(become-primary-on)。
  • 同期速度は5Mbyte/秒(rate)。単位がMbpsでないことに注意。
  • 両ノードとも、低レベルデバイスは/dev/xvdb(disk)、DRBDデバイスは/dev/drbd0(device)。
  • メタデータ形式はinternal(meta-disk)。つまり、/dev/xvdb内にメタデータを持つ。
  • dc[23]はそれぞれ、192.168.56.[89]の7789/tcpで接続を待つ。

なお、各ノードの設定の共通部分(disk、deviceおよびmeta-disk)をまとめて記述できるのは、DRBD 8.2系から。RPM package drbd82-xenではなくdrbd-xenをインストールしている場合は、これらの設定は、on ノード名節の中でそれぞれ記述する。


その0・概要』『その1・Xen環境の準備』『その2・DRBD設定前の確認』『その3・drbd.confの設定』『その4・DRBDの初期化』『その5・初期同期』『その6・ベンチマーク

Xen DomU上でDRBDを使う・その2・DRBD設定前の確認

各DomU dc[23]上には、OSイメージが格納されている/dev/xvdaの他に、/dev/xvdbが見えている。
[root@dc2 ~]# ls -l /dev/xvd*
brw-r----- 1 root disk 202,  0 Jul 24 21:41 /dev/xvda
brw-r----- 1 root disk 202,  1 Jul 24 21:41 /dev/xvda1
brw-r----- 1 root disk 202,  2 Jul 24 21:41 /dev/xvda2
brw-r----- 1 root disk 202, 16 Jul 24 21:41 /dev/xvdb
[root@dc2 ~]#
OSインストール直後は、DRBDの設定が行われていないため、/proc/drbdにはリソースが何も表示されない。
[root@dc2 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-bui
ld, 2008-06-26 16:40:54
[root@dc2 ~]#
この状態で、/dev/xvdbに対する書き込み速度を計測する。
[root@dc2 ~]# dd bs=64M if=/dev/zero of=/dev/xvdb
dd: writing `/dev/xvdb': No space left on device
65+0 records in
64+0 records out
4294967296 bytes (4.3 GB) copied, 107.757 seconds, 39.9 MB/s
[root@dc2 ~]#
[root@dc3 ~]# dd bs=64M if=/dev/zero of=/dev/xvdb
dd: writing `/dev/xvdb': No space left on device
65+0 records in
64+0 records out
4294967296 bytes (4.3 GB) copied, 107.6 seconds, 39.9 MB/s
[root@dc3 ~]#
ほぼ40Mbyte/秒の速度が出ている。単位がMbpsではないことに注意。


その0・概要』『その1・Xen環境の準備』『その2・DRBD設定前の確認』『その3・drbd.confの設定』『その4・DRBDの初期化』『その5・初期同期』『その6・ベンチマーク

Xen DomU上でDRBDを使う・その1・Xen環境の準備

Xen環境構築の詳細については、『Red Hat Cluster: CentOS 5.1上でRHCSを使ってみる』を参照。ここでは、DomUのKickstart設定ファイルを紹介する。以下の点に注意して欲しい。
  • RPMパッケージdrbd82およびkmod-drbd82-xenをインストールする。
  • ファイアウォール設定で、DRBDの通信、TCPポート7788~7799を許可する。

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$NG4SU1bL$I8FOJo.81cUrO6Xj4dau41
firewall --enabled --ssh --port=snmp:udp
authconfig --enableshadow --enablemd5
selinux --permissive
timezone Asia/Tokyo
bootloader --location=mbr --driveorder=xvda --append="console=xvc0"

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

clearpart --all --drives=xvda --initlabel
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
kernel-xen
kmod-gfs-xen
-kernel
-kmod-gfs
-kmod-gnbd
-NetworkManager
-bluez-utils
device-mapper-multipath
-irda-utils
-pcmciautils
net-snmp-utils
net-snmp-libs
net-snmp
iscsi-initiator-utils
-apmd
-acpid
drbd82
kmod-drbd82-xen
-kmod-drbd82

%post --log=/mnt/sysimage/root/install-post.log
### network
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

/bin/egrep -v '^#' /etc/sysconfig/network-scripts/ifcfg-eth0 | /bin/sed 's/eth0/eth1/' > /etc/sysconfig/network-scripts/ifcfg-eth1
/bin/egrep -v '^#' /etc/sysconfig/network-scripts/ifcfg-eth0 | /bin/sed 's/eth0/eth2/' > /etc/sysconfig/network-scripts/ifcfg-eth2
/sbin/restorecon /etc/sysconfig/network-scripts/ifcfg-eth[12]

### logrotate
/bin/cat > /etc/logrotate.d/00local.conf <<EOL
rotate 20
compress
start 100
EOL
/sbin/restorecon /etc/logrotate.d/00local.conf

### 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/cluster/fence_xvm.key
/usr/bin/base64 -di > /etc/cluster/fence_xvm.key <<EOL
Atf+JoYSVwnPqBR8vnbG68EaY/Y4sr570YywcWXUcsZD6BwQAMA0x62YIMSlHArX60JzvNeh95x7
<<略>>
EN00EFaiso4dDtVaX2RYJf30RExW4E312yu+XwoXjrES0uLIK33p0HToOXUX3RjsCqYuM7ulE5iD
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 -p tcp -m tcp --dport 7788:7799 -i eth1 -s 192.168.56.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 7788:7799 -i eth2 -s 192.168.57.0/24 -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<<略>>
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
/bin/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

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

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

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

### cron
/bin/cp -p /etc/crontab /etc/crontab.dist
/bin/sed 's/^\(..\) 4 /\1 5 /' < /etc/crontab.dist > /etc/crontab

### grub
/bin/cp -p /boot/grub/grub.conf /boot/grub/grub.conf.dist
/bin/sed 's/ rhgb quiet//' < /boot/grub/grub.conf.dist > /boot/grub/grub.conf

### /etc/bashrc
/bin/cp -p /etc/bashrc /etc/bashrc.dist
/bin/sed 's/xterm\*)/xterm*|vt100*)/' < /etc/bashrc.dist > /etc/bashrc
この設定を元に、Xen DomU dc0を作成する。
# virt-install --name=dc0 --ram=256 --file=/dev/VolGroupXX/LogVolDc0 --mac='00:16:3e:1d:91:00' --bridge=br4000 --nographics --location='http://Repository.LocalDomain/centos/5/os/i386' --extra-args='ks=http://Repository.LocalDomain/centos/conf/DomU-DRBD-ks.cfg'
DomU dc0のインストールが完了したら、LV(logical volume, 論理ボリューム) /dev/VolGroupXX/LogVolDc0を元にDomU dc[23]用のLVをスナップショットLVとして作成する(『XenとLVM・その3・スナップショットLVの利用』参照)
# lvcreate --snapshot --size=1G --name=LogVolDc2 /dev/VolGroupXX/LogVolDc0
Logical volume "LogVolDc2" created
# lvcreate --snapshot --size=1G --name=LogVolDc3 /dev/VolGroupXX/LogVolDc0
Logical volume "LogVolDc3" created
#
続いて、dc[23]に/dev/xvdbとしてエクスポートするためのLVを作成する。
# lvcreate --size=4G --name=LogVolR0-2 /dev/VolGroupXX
Logical volume "LogVolR0-2" created
# lvcreate --size=4G --name=LogVolR0-3 /dev/VolGroupXX
Logical volume "LogVolR0-3" created
#
DomU dc2の設定ファイル/etc/xen/dc2は以下の通り。
name = "dc2"
uuid = "3cc1d59c-b2b1-42a6-b31a-35be18db188d"
maxmem = 512
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [  ]
disk = [ "phy:/dev/VolGroupXX/LogVolDc2,xvda,w",
"phy:/dev/VolGroupXX/LogVolR0-2,xvdb,w" ]
vif = [ "mac=00:16:3e:1d:91:02,bridge=br4000",
"mac=00:16:3e:1d:92:02,bridge=br4001",
"mac=00:16:3e:1d:93:02,bridge=br4002" ]
DomU dc2を起動する。
# xm create -c dc2
<<略>>
INIT: version 2.86 booting
Welcome to  CentOS release 5.2 (Final)
Press 'I' to enter interactive startup.
<<略>>
Starting DRBD resources:    no resources defined!
no resources defined!
[ ]no resources defined!
.
no resources defined!
no resources defined!
[  OK  ]
<<略>>

CentOS release 5.2 (Final)
Kernel 2.6.18-92.1.6.el5xen on an i686

dc2.LocalDomain login:
DRBDの設定を行っていないため、その旨警告メッセージが表示されている。DomU dc3についても同様に作業する。


その0・概要』『その1・Xen環境の準備』『その2・DRBD設定前の確認』『その3・drbd.confの設定』『その4・DRBDの初期化』『その5・初期同期』『その6・ベンチマーク

2008/07/23

Xen DomU上でDRBDを使う・その0・概要

DRBDは、ネットワーク越しにディスクのミラーリング(RAID1)を実現するソフトウェア。Xen DomU上でこの動作検証を行う。以下は今回検証環境の概念図。

今回は、『The DRBD User's Guide』の『Chapter 5. Configuring DRBD』を実行・検証する。
CentOSのRPMパッケージには、drbd 8.0系であるdrbdおよびkmod-drbd-xenと、8.2系であるdrbd82およびkmod-drbd82がある。今回は、8.2系を使用する。
検証内容は以下の通り。
  • Xen Dom0 fs1上にDomU dc[23]を作成する。
  • DomU dc[23]に対して、それぞれDom0 fs1上のLV(logical volume, 論理ボリューム) LogVolR0-[23]を/dev/xvdbとして与える。
  • DomU dc[23]上で、/dev/xvdbを低レベルデバイスとするDRBD /dev/drbd0を作成する。
  • /dev/xvdbおよび/dev/xvdbに対する書き込み速度を比較する。
なお、CentOS5では、DRBDはextra扱いであり、実用システムに適用すべきではないかもしれない。


その0・概要』『その1・Xen環境の準備』『その2・DRBD設定前の確認』『その3・drbd.confの設定』『その4・DRBDの初期化』『その5・初期同期』『その6・ベンチマーク

2008/07/21

To Do

Google Codeの中におもしろそうなものを発見→Ganeti

ずっと前から口だけ大将になっているCobbler & Koan。Extra Packages for Enterprise Linux (EPEL)にRPMが準備されているので、簡単なんだけど…

2008/07/15

Ruby on Rails 2.1 on CentOS 5.2・その3・Gemパッケージのインストール

RoRをインストールする。RoRはGemパッケージとして提供されている。インストールには、gemコマンドを使用する。
# gem install rails --include-dependencies
INFO:  `gem install -y` is now default and will be removed
INFO:  use --ignore-dependencies to install only the gems you list
Successfully installed rake-0.8.1
Successfully installed activesupport-2.1.0
Successfully installed activerecord-2.1.0
Successfully installed actionpack-2.1.0
Successfully installed actionmailer-2.1.0
Successfully installed activeresource-2.1.0
Successfully installed rails-2.1.0
7 gems installed
Installing ri documentation for rake-0.8.1...
Installing ri documentation for activesupport-2.1.0...
Installing ri documentation for activerecord-2.1.0...
Installing ri documentation for actionpack-2.1.0...
Installing ri documentation for actionmailer-2.1.0...
Installing ri documentation for activeresource-2.1.0...
Installing RDoc documentation for rake-0.8.1...
Installing RDoc documentation for activesupport-2.1.0...
Installing RDoc documentation for activerecord-2.1.0...
Installing RDoc documentation for actionpack-2.1.0...
Installing RDoc documentation for actionmailer-2.1.0...
Installing RDoc documentation for activeresource-2.1.0...
#
RoR 2.1では、標準のデータベースとして、SQLite3を使用するので、Gemパッケージsqlite3-rubyも併せてインストールした方が良い。
# gem install sqlite3-ruby
Building native extensions.  This could take a while...
Successfully installed sqlite3-ruby-1.2.2
1 gem installed
Installing ri documentation for sqlite3-ruby-1.2.2...
Installing RDoc documentation for sqlite3-ruby-1.2.2...
#
これでインストールは終了のはずなのだが、このままだとRoRが正しく動作しない。例えば、『チュートリアルステップ6』でhttp://RAILS/friends/viewを表示させると、ブラウザにエラー画面が表示される。


次のエラーメッセージが表示されている。
no such file to load -- sqlite3/database
これは、Gemパッケージsqlite3-rubyのパーミッションが間違っているためだ。確認し、修正する。
# cd /usr/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.2
# find . -perm 0662
./doc/faq/faq.rb
./ext/sqlite3_api/extconf.rb
./ext/sqlite3_api/sqlite3_api.i
./lib/sqlite3/database.rb
./lib/sqlite3/translator.rb
./test/tc_errors.rb
./test/tc_integration.rb
# ls -l lib/sqlite3/
total 116
-rw-r--r-- 1 root root  1745 Jul 15 17:38 constants.rb
-rw-rw--w- 1 root root 24774 Jul 15 17:38 database.rb
drwxr-xr-x 4 root root  4096 Jul 15 17:38 driver
-rw-r--r-- 1 root root  2307 Jul 15 17:38 errors.rb
-rw-r--r-- 1 root root  7480 Jul 15 17:38 pragmas.rb
-rw-r--r-- 1 root root  4690 Jul 15 17:38 resultset.rb
-rw-r--r-- 1 root root  6843 Jul 15 17:38 statement.rb
-rw-rw--w- 1 root root  3738 Jul 15 17:38 translator.rb
-rw-r--r-- 1 root root  1057 Jul 15 17:38 value.rb
-rw-r--r-- 1 root root   153 Jul 15 17:38 version.rb
# chmod 644 `find . -perm 0662`
#

その0・概要
その1・RubyのRPMパッケージのビルドとインストール
その2・RubyGemsのインストール
その3・Gemパッケージのインストール

Ruby on Rails 2.1 on CentOS 5.2・その2・RubyGemsのインストール

RubyGemsをダウンロードする。
$ mkdir -p Src/Ruby
$ cd Src/Ruby
$ wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
--23:47:10--  http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
Resolving rubyforge.org... 205.234.109.19
Connecting to rubyforge.org|205.234.109.19|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://rubyforge-files.ruby-forum.com/rubygems/rubygems-1.2.0.tgz [following]
--23:47:11--  http://rubyforge-files.ruby-forum.com/rubygems/rubygems-1.2.0.tgz
Resolving rubyforge-files.ruby-forum.com... 88.198.17.227
Connecting to rubyforge-files.ruby-forum.com|88.198.17.227|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 246920 (241K) [application/x-gtar]
Saving to: `rubygems-1.2.0.tgz'

100%[=======================================>] 246,920     75.3K/s   in 3.2s

23:47:15 (75.3 KB/s) - `rubygems-1.2.0.tgz' saved [246920/246920]

$
展開する。
$ tar xvzf rubygems-1.2.0.tgz
rubygems-1.2.0/
rubygems-1.2.0/.document
rubygems-1.2.0/bin/
<<略>>
rubygems-1.2.0/test/test_gem_version_option.rb
rubygems-1.2.0/test/test_kernel.rb
rubygems-1.2.0/TODO
$
インストールする。
# cd /home/kenetsu/Src/Ruby/rubygems-1.2.0
# ruby setup.rb
mkdir -p /usr/lib/ruby/site_ruby/1.8
mkdir -p /usr/bin
install -c -m 0644 rubygems.rb /usr/lib/ruby/site_ruby/1.8/rubygems.rb
<<略>>
RubyGems installed the following executables:
/usr/bin/gem

If `gem` was installed by a previous RubyGems installation, you may need
to remove it by hand.

#

その0・概要
その1・RubyのRPMパッケージのビルドとインストール
その2・RubyGemsのインストール
その3・Gemパッケージのインストール

Ruby on Rails 2.1 on CentOS 5.2・その1・RubyのRPMパッケージのビルドとインストール

Ruby on Rails (RoR)には、Rubyが必要。RoR 2.1の場合、Ruby 1.8.6が推奨バージョン。1.8.[542]でも動くが、1.8.[37]では動かない(『Get Ruby on Rails in no time』)。一方、CentOS 5.2の標準RPMパッケージでは、
$ rpm -q ruby
ruby-1.8.5-5.el5_1.1
$
とある通り、1.8.5。従って、CentOS 5.2標準のままでも、RoR 2.1は動作する。しかし今回は、1.8.6のRPMを準備した。RPMのビルド環境の準備に関しては、『RHL9用のbind-9.2.8.*.rpmを作る』を参照。
$ mkdir -p RPM/BUILD RPM/RPMS/i386 RPM/SOURCES RPM/SRPMS RPM/SPECS
$ echo %_topdir $PWD/RPM > ~/.rpmmacros
$
SRPMパッケージは、Fedora 9のものを使用する。『Fedora Public Active Mirrors』から適切なサイトを選び、最新のSRPMをダウンロードする。
$ cd RPM/SRPMS
$ wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/updates/9/SRPMS/ruby-1.8.6.230-4.fc9.src.rpm
--23:32:32--  http://ftp.jaist.ac.jp/pub/Linux/Fedora/updates/9/SRPMS/ruby-1.8.6.230-4.fc9.src.rpm
Resolving ftp.jaist.ac.jp... 150.65.7.130
Connecting to ftp.jaist.ac.jp|150.65.7.130|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5057508 (4.8M) [application/x-wais-source]
Saving to: `ruby-1.8.6.230-4.fc9.src.rpm'

100%[=======================================>] 5,057,508   81.5K/s   in 59s

23:33:34 (83.6 KB/s) - `ruby-1.8.6.230-4.fc9.src.rpm' saved [5057508/5057508]

$
ビルドする。
$ rpmbuild --rebuild ruby-1.8.6.230-4.fc9.src.rpm
Installing ruby-1.8.6.230-4.fc9.src.rpm
warning: InstallSourcePackage: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
warning: user mockbuild does not exist - using root
<<略>>
+ cd /home/kenetsu/RPM/BUILD
+ rm -rf ruby-1.8.6.230
+ exit 0
$
できたRPMをインストールする。
# cd /home/kenetsu/RPM/RPMS/i386
# rpm -Uvh *.rpm
Preparing...                ########################################### [100%]
1:ruby-libs              ########################################### [ 10%]
2:ruby                   ########################################### [ 20%]
3:ruby-irb               ########################################### [ 30%]
4:ruby-rdoc              ########################################### [ 40%]
5:ruby-debuginfo         ########################################### [ 50%]
6:ruby-devel             ########################################### [ 60%]
7:ruby-docs              ########################################### [ 70%]
8:ruby-mode              ########################################### [ 80%]
9:ruby-ri                ########################################### [ 90%]
10:ruby-tcltk             ########################################### [100%]
#


その0・概要
その1・RubyのRPMパッケージのビルドとインストール
その2・RubyGemsのインストール
その3・Gemパッケージのインストール

Ruby on Rails 2.1 on CentOS 5.2・その0・概要

CentOS 5.2上でRuby on Rails(RoR) version 2.1を試してみる。このシリーズでは、『Ruby on Rail チュートリアル』が動くことを目標とする。

まずはインストール。次の作業を行う。
  1. RubyのRPMパッケージのビルドとインストール
  2. RubyGemsのインストール
  3. Gemパッケージのインストール
RubyのRPMパッケージについては、必須ではない。CentOS標準のRPMパッケージでもRoRは動くはずだ。
Gemパッケージのインストールでは、『Get Ruby on Rails in no time』にある手順に加え、Gemパッケージsqlite3-rubyをインストールする。ただし、現行バージョンには問題があるため、インストール後に手当てが必要。

以下、それぞれについて解説する。

その0・概要
その1・RubyのRPMパッケージのビルドとインストール
その2・RubyGemsのインストール
その3・Gemパッケージのインストール

2008/07/09

Xen DomUのKickstartインストール時、すべてのパッケージのインストールを指定する方法

CentOSやFecora、Red Hat Enterprise Linux (RHEL)などは、Anaconda Kickstartで自動インストールすることができる。このとき、(ほとんど)すべてのRPMパッケージをインストールしたいとする。非Xenのバニラカーネルなら、%packageセクションで
%packages
@everything
とだけ書けば問題ない。

しかし、Xen DomUの場合はこれではエラーになる。理由は、@everythingのみを指定すると、Xen DomUが必要とするカーネルRPMパッケージ・kernel-xenだけでなく、kernelやkernel-PAEもインストールされ、OS起動時にkernelやkernel-PAEが選択されることがあるからだ。

これを避けるために、%packagesセクションに以下の様に記述する。
%packages
@everything
-kernel
-kernel-PAE
-kmod-gfs
-kmod-gfs-PAE
-kmod-gfs2
-kmod-gfs2-PAE
-kmod-gnbd
-kmod-gnbd-PAE
-libvirt
-xen
-gnome-applet-vm
-libvirt-devel
-libvirt-python
-python-virtinst
-virt-manager
-virt-viewer
Xen DomUをKickstartインストールする方法については、『Red Hat Cluster: CentOS 5.1上でRHCSを使ってみる・その3・DomU dcXのインストール』等を参照。

2008/07/08

CentOS 5.2でanaconda kickstartのバグが修正

CentOS5.2では、CentOS5.1までに存在した、ある不具合が修正された。

例えば、Xen環境では、RPMパッケージkernel-xenをインストールするので、RPMパッケージkernelは不要。そこで、kernelがインストールされないよう、Anaconda Kickstart設定ファイル(『Red Hat Cluster: CentOS 5.1上でRHCSを使ってみる・その4・DomU bs1のインストール』等を参照)の%packagesセクションに
%packages
kernel-xen
-kernel
と書く。しかし、CentOS 5.1では、このように記述しても、kernelがインストールされる。この不具合を回避するため、%postセクションに
%post
yum -y remove kernel
と書く必要があった。

逆に、CentOS 5.2では、Kickstart設定ファイルを上の様に記述すると、別の不具合が発生する。元々RPMパッケージkernelがインストールされないため、代わりにRPMパッケージkernel-xenが削除される。結果として、正常に起動しなくなる。例えば、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.
virDomainCreate() failed POST operation failed: (xend.err "Error creating domain: Boot loader didn't return any data!")
Domain installation may not have been
successful. If it was, you can restart your domain
by running 'virsh start dc1'; otherwise, please
restart your installation.
Tue, 08 Jul 2008 11:25:06 ERROR virDomainCreate() failed POST operation failed: (xend.err "Error creating domain: Boot loader didn't return any data!")
Traceback (most recent call last):
File "/usr/sbin/virt-install", line 502, in ?
main()
File "/usr/sbin/virt-install", line 488, in main
dom.create()
File "/usr/lib/python2.4/site-packages/libvirt.py", line 228, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: virDomainCreate() failed POST operation failed: (xend.err "Error creating domain: Boot loader didn't return any data!")
#

2008/07/07

CentOS 5.1からCentOS 5.2へアップグレードする

CentOS5.1からCentOS5.2へアップグレードを行ってみた。前回の『CentOS 5.0からCentOS 5.1へアップグレードする』もどうぞ。

手順はごく単純。基本的には、CentOS 5.1が動いているマシン上で、yum upgradeコマンドを実行するだけ。
ただし、インターネットへHTTPでの接続性が確保されている必要がある。無理ならば、ローカルミラーリポジトリを作って作業する。『ローカルミラーレポジトリ』参照(最近の流行はcobblerらしいが、まだ試していない)

以下詳細。

まず、更新されるRPMパッケージを確認する。
# yum check-update
Loading "dellsysidplugin" plugin
Loading "installonlyn" plugin
Setting up repositories
fwupdate 100% |=========================| 1.9 kB 00:00
dell-software 100% |=========================| 1.9 kB 00:00
dell-hardware-auto 100% |=========================| 951 B 00:00
base 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
addons 100% |=========================| 951 B 00:00
dell-hardware-main 100% |=========================| 951 B 00:00
extras 100% |=========================| 951 B 00:00
Reading repository metadata in from local files
primary.xml.gz 100% |=========================| 856 kB 00:00
################################################## 2458/2458
primary.xml.gz 100% |=========================| 91 kB 00:00
################################################## 165/165
primary.xml.gz 100% |=========================| 194 B 00:00
primary.xml.gz 100% |=========================| 74 kB 00:00
################################################## 244/244

Deployment_Guide-en-US.noarch 5.2-9.el5.centos base
Deployment_Guide-ja-JP.noarch 5.2-9.el5.centos base
<<略>>
yum.noarch 3.2.8-9.el5.centos.2.1 updates
yum-metadata-parser.i386 1.1.2-2.el5 base
yum-updatesd.noarch 1:0.9-2.el5 base
#
パッケージ一覧が表示されることを確認する。

アップグレードを行う。
# yum -y upgrade
Loading "dellsysidplugin" plugin
Loading "installonlyn" plugin
Setting up Upgrade Process
Setting up repositories
Reading repository metadata in from local files
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for chkconfig to pack into transaction set.
chkconfig-1.3.30.1-2.i386 100% |=========================| 24 kB 00:00
---> Package chkconfig.i386 0:1.3.30.1-2 set to be updated
---> Downloading header for gnome-screensaver to pack into transaction set.
gnome-screensaver-2.16.1- 100% |=========================| 27 kB 00:00
---> Package gnome-screensaver.i386 0:2.16.1-8.el5 set to be updated
<<略>>
---> Downloading header for crypto-utils to pack into transaction set.
crypto-utils-2.3-2.el5.i3 100% |=========================| 7.8 kB 00:00
---> Package crypto-utils.i386 0:2.3-2.el5 set to be updated
--> Running transaction check
--> Processing Dependency: gtk-vnc-python for package: virt-manager
--> Processing Dependency: gecko-libs = 1.9 for package: yelp
--> Processing Dependency: python-imaging for package: luci
<<略>>
--> Processing Dependency: setroubleshoot-server = 2.0.5-3.el5 for package: setroubleshoot
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for device-mapper-event to pack into transaction set.
device-mapper-event-1.02. 100% |=========================| 7.6 kB 00:00
---> Package device-mapper-event.i386 0:1.02.24-1.el5 set to be updated
---> Downloading header for gtk-vnc-python to pack into transaction set.
gtk-vnc-python-0.3.2-3.el 100% |=========================| 2.9 kB 00:00
---> Package gtk-vnc-python.i386 0:0.3.2-3.el5 set to be updated
<<略>>
ヘッダがダウンロードと依存関係が繰り返される。
続けて、パッケージ一覧が表示される。
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
dhcpv6-client i386 1.0.10-4.el5_2.2 updates 121 k
replacing dhcpv6_client.i386 0.10-33.el5

kernel-xen i686 2.6.18-92.1.6.el5 updates 15 M
kmod-gfs-xen i686 0.1.23-5.el5 base 138 k
libhugetlbfs i386 1.2-5.el5 base 14 k
replacing libhugetlbfs-lib.i386 1.0.1-1.el5

Updating:
Deployment_Guide-en-US noarch 5.2-9.el5.centos base 7.0 M
Deployment_Guide-ja-JP noarch 5.2-9.el5.centos base 7.1 M
NetworkManager i386 1:0.6.4-8.el5 base 400 k
<<略>>
virt-viewer i386 0.0.2-2.el5 base 24 k
xulrunner i386 1.9-0.beta5.6.el5 base 9.9 M
yum-fastestmirror noarch 1.1.10-9.el5.centos base 13 k

Transaction Summary
=============================================================================
Install 20 Package(s)
Update 244 Package(s)
Remove 0 Package(s)
20パッケージが新たにインストールされ、244パッケージが更新されることが解る。当然環境によってこの辺りの数値は変わる。
続けて、RPMパッケージのダウンロードが行われる。
Total download size: 354 M
Downloading Packages:
(1/264): chkconfig-1.3.30 100% |=========================| 159 kB 00:00
(2/264): gnome-screensave 100% |=========================| 1.8 MB 00:00
(3/264): device-mapper-ev 100% |=========================| 19 kB 00:00
<<略>>
ダウンロードが終了すると、新規インストールもしくは更新が行われる。
(262/264): microcode_ctl- 100% |=========================| 449 kB    00:00
(263/264): ntsysv-1.3.30. 100% |=========================| 24 kB 00:00
(264/264): crypto-utils-2 100% |=========================| 35 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : libgcc ##################### [ 1/511]
Updating : glibc-common ##################### [ 2/511]
Updating : glibc ##################### [ 3/511]
<<略>>
この作業中、いくつか警告が表示される。以下にその警告の一覧を示す。
  Updating  : pam                                                [ 25/511]warning: /etc/pam.d/system-auth created as /etc/pam.d/system-auth.rpmnew
<<略>>
Updating : lvm2 [136/511]warning: /etc/lvm/lvm.conf created as /etc/lvm/lvm.conf.rpmnew
<<略>>
Installing: perl-XML-LibXML ##################### [139/511]
could not find ParserDetails.ini in /usr/lib/perl5/vendor_perl/5.8.8/XML/SAX
<<略>>
Updating : xen [148/511]warning: /etc/xen/xend-config.sxp created as /etc/xen/xend-config.sxp.rpmnew
<<略>>
Updating : bind [236/511]warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew
<<略>>
この内、bindについては、RPMパッケージbind-chrootをインストールしているため、xenは、VLAN設定のため、設定ファイルを変更しているために警告されている。残りのlvm2およびpamに関しては、システムに変更を加えていなければ、.rpmnewファイルで元ファイルを上書きした方がよいだろう。
この他に、SELinuxの設定を変更するスクリプトが動くため、以下の様なメッセージも大量に発生する。
<<略>>
Updating : selinux-policy-targeted ##################### [248/511]
/sbin/restorecon reset /bin/alsaunmute context system_u:object_r:bin_t:s0->system_u:object_r:alsa_exec_t:s0
/sbin/restorecon reset /etc/rc.d/init.d/auditd context system_u:object_r:initrc_exec_t:s0->system_u:object_r:auditd_script_exec_t:s0
/sbin/restorecon reset /etc/rc.d/init.d/httpd context system_u:object_r:initrc_exec_t:s0->system_u:object_r:httpd_script_exec_t:s0
<<略>>
最後に、インストール・更新されたパッケージの一覧が表示される。
  Cleanup   : microcode_ctl                ##################### [509/511]
Cleanup : ntsysv ##################### [510/511]
Cleanup : crypto-utils ##################### [511/511]

Installed: dhcpv6-client.i386 0:1.0.10-4.el5_2.2 kernel-xen.i686 0:2.6.18-92.1.6.el5 kmod-gfs-xen.i686 0:0.1.23-5.el5 libhugetlbfs.i386 0:1.2-5.el5
Dependency Installed: device-mapper-event.i386 0:1.02.24-1.el5 <<略>> yum-fastestmirror.noarch 0:1.1.10-9.el5.centos
Updated: Deployment_Guide-en-US.noarch 0:5.2-9.el5.centos Deployment_Guide-ja-JP.noarch 0:5.2-9.el5.centos <<略>> make.i386 1:3.81-3.el5
Replaced: dhcpv6_client.i386 0:0.10-33.el5 libhugetlbfs-lib.i386 0:1.0.1-1.el5
Complete!
#
再起動する。
# shutdown -r now

Broadcast message from root (pts/2) (Sun Jul 6 20:55:59 2008):

The system is going down for reboot NOW!
#
起動中に表示されるバージョン番号を確認する。
unmounting old /dev
unmounting old /proc
unmounting old /sys
audit(1215345577.104:2): policy loaded auid=4294967295 ses=4294967295
INIT: version 2.86 booting
Welcome to CentOS release 5.2 (Final)
Press 'I' to enter interactive startup.
Starting udev: (utc): Sun Jul 6 20:59:39 JST 2008 [ OK ]
起動後、ログを確認し、正常起動出来たかをチェックする。

2008/07/01

How do I migrate a system from RHEL 3 to CentOS 3?

CentOSのFAQに『How do I migrate a system from WBEL-3 (White Box Enterprise Linux) to CentOS 3?』という記事がある。この方法は、RHEL (Red Hat Enterprise Linux)にも適用可能とあるので、実際に検証してみた。

CentOS 3用RPMパッケージの署名鍵(sign key)をインストールする。
# rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-3
#

RPMパッケージredhat-releaseをcentos-releaseに置き換える。
# rpm -q redhat-release
redhat-release-3ES-1
# rpm -Uvh http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/centos-release-3-9.1.i386.rpm
http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/centos-release-3-9.1.i386.rpm を取得しています
Preparing... ########################################### [100%]
1:centos-release ########################################### [100%]
# rpm -q redhat-release
パッケージ redhat-release はインストールされていません
#
RPMパッケージcentos-releaseで更新すれば、redhat-releaseと置き換えられる。
ここでは、バージョン3-9.1をインストールしているが、これは実際にhttp://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/をブラウジングして、最新のバージョン番号で置き換える必要があるかもしれない。

CentOSリポジトリは、yumで管理するが、当然だが、RHEL3の状態では、yumはインストールされていない。
# which yum
/usr/bin/which: no yum in (/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin)
#
Yum関連のRPMパッケージをインストールする。
# rpm -Uvh http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/yum-2.0.8-2.cen
tos3.noarch.rpm
http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/yum-2.0.8-2.centos3.noarch.rpm を取得しています
Preparing... ########################################### [100%]
1:yum ########################################### [100%]
# rpm -Uvh http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/centos-yumconf-1-11.noarch.rpm
http://mirror.centos.org/centos/3/os/i386/RedHat/RPMS/centos-yumconf-1-11.noarch.rpm を取得しています
Preparing... ########################################### [100%]
1:centos-yumconf ########################################### [100%]
# which yum
/usr/bin/yum
#
この作業についても、実際にリポジトリを覗き見して、適宜最新のバージョン番号に変える。

実際にアップグレードする前に、更新されるRPMパッケージを確認する(しなくてもよい)
# yum list update
Gathering header information file(s) from server(s)
Server: CentOS-3 - Addons
Server: CentOS-3 - Base
Server: CentOS-3 - Extras
Server: CentOS-3 - Updates
Finding updated packages
Downloading needed headers
emacs-0-21.3-4.10.i386.hd 100% |=========================| 49 kB 00:00
pango-0-1.2.5-5.i386.hdr 100% |=========================| 6.4 kB 00:00
lockdev-0-1.0.1-5.1.i386. 100% |=========================| 2.5 kB 00:00
<<略>>
gtk+-devel-1-1.2.10-31.i3 100% |=========================| 13 kB 00:00
freetype-devel-0-2.1.4-10 100% |=========================| 7.9 kB 00:00
Looking in Available Packages:
Name Arch Version Repo
--------------------------------------------------------------------------------

Looking in Installed Packages:
Name Arch Version Repo
--------------------------------------------------------------------------------

#

アップグレードする。
# yum update
Gathering header information file(s) from server(s)
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: kernel-smp 2.4.21-57.EL.i686]
[install: kernel 2.4.21-57.EL.i686]
[update: emacs 21.3-4.10.i386]
<<略>>
[deps: bind-libs 20:9.2.4-21.el3.i386]
[deps: elfutils-libelf-devel 0.94.1-2.i386]
Is this ok [y/N]: y
Downloading Packages
Getting emacs-21.3-4.10.i386.rpm
emacs-21.3-4.10.i386.rpm 100% |=========================| 12 MB 02:26
Getting pango-1.2.5-5.i386.rpm
pango-1.2.5-5.i386.rpm 100% |=========================| 337 kB 00:04
Getting lockdev-1.0.1-5.1.i386.rpm
lockdev-1.0.1-5.1.i386.rp 100% |=========================| 12 kB 00:00
<<略>>
Getting man-1.5k-13.rhel3.i386.rpm
man-1.5k-13.rhel3.i386.rp 100% |=========================| 90 kB 00:00
Running test transaction:
Test transaction complete, Success!
hwdata 100 % done 1/854
filesystem 100 % done 2/854
redhat-logos 100 % done 3/854
<<略>>
XFree86-twm 100 % done 432/854
gdm 100 % done 433/854
Completing update for emacs - 434/854
Completing update for pango - 435/854
Completing update for lockdev - 436/854
<<略>>
0.33.7.1-25.3.rhel3.i386 net-snmp-libs 5.0.9-2.30E.24.i386 gdk-pixbuf 1:0.22.0-13.el3.3.i386 jaf 20030319-1.
i386 javamail 20031006-1.i386 FreeWnn-libs 1.11-36.3.i386 bind-libs 20:9.2.4-21.el3.i386 elfutils-libelf-dev
el 0.94.1-2.i386
Transaction(s) Complete
#
ところどころエラーが出るが、無視した。
再起動する。
# shutdown -r now

カーネルのバージョンを確認する。
# uname -a
Linux ホスト名 2.4.21-4.ELsmp #1 SMP Fri Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux
#
カーネルが古いままになっている。おそらく、grubの設定ファイルが書き換わっていないのだろう。
# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda
default=2
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title CentOS (2.4.21-57.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.4.21-57.ELsmp ro root=LABEL=/
initrd /initrd-2.4.21-57.ELsmp.img
title CentOS (2.4.21-57.EL)
root (hd0,0)
kernel /vmlinuz-2.4.21-57.EL ro root=LABEL=/
initrd /initrd-2.4.21-57.EL.img
title Red Hat Enterprise Linux ES (2.4.21-4.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.4.21-4.ELsmp ro root=LABEL=/
initrd /initrd-2.4.21-4.ELsmp.img
title Red Hat Enterprise Linux ES-up (2.4.21-4.EL)
root (hd0,0)
kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/
initrd /initrd-2.4.21-4.EL.img
#
default=2」となっているため、2+1=3番目のエントリ、「title Red Hat Enterprise Linux ES (2.4.21-4.ELsmp)」に対応するものが起動されている。これを、「default=0」に書き換える。
# cp -p /boot/grub/grub.conf /boot/grub/grub.conf.orig
# sed 's/^default=2/default=0/' < /boot/grub/grub.conf.orig > /boot/grub/grub.conf
再起動する。
# shutdown -r now
<<略>>
INIT: version 2.85 bootingiver loaded
Setting default font (lat0-sun16): [ OK ]

Welcome to CentOS
Press 'I' to enter interactive startup.
Configuring kernel parameters: [ OK ]
Setting clock (localtime): 2008 7dered data mode. OK ]
<<略>>
# uname -a
Linux ホスト名 2.4.21-57.ELsmp #1 SMP Wed May 7 06:10:55 EDT 2008 i686 i686 i386 GNU/Linux
#
カーネルのバージョンが新しくなっていることを確認できた。