I ♥ WordPress

サーバの構築を簡単にするためのステップ (その6:Cobber編 Part2 )
2007/09/05 12:42 posted by kunkichi

ということで前回のエントリからまたもやえらく経ってしまったのだけど引き続き Cobbler の設定。

前回まででインストールと基本設定はできているので、いよいよここから実際のネットワークインストールサーバの運用に絡んだお話。逆に言うと前回の手順で行った1〜3の作業については(大幅な設定変更とかしない限り)もう意識する必要はなくなる。

4. 運用に必要な設定の登録

前回の最後で、登録する必要があると言った項目は以下。

これで Cobbler の基本設定は一通りできたのだけれど、実はまだ登録しないといけない以下の情報がある。

  • どのOSをインストールする?
  • どんな設定でOSをインストールする?
  • どのサーバにOSをインストールする?

Cobbler では上記の各項目をそれぞれ

  • ディストリビューション(distro)
  • プロファイル(profile)
  • システム(system)

と呼んでおり、これらをそれぞれ登録して組み合わせることで、ネットワークインストールサーバとしての管理・運用を行う。で上記の3項目の関係は階層構造というかリレーショナルになっているみたいで、今回の前提条件を踏まえて図で表すとこんな感じになるっぽい。

Cobbler

というわけでこれに基づいて考えると、各項目の登録手順は以下となる。

  1. ディストリビューションを登録。
  2. 登録したディストリビューションにひもづいたプロファイルを登録。
  3. 登録したプロファイルにひもづいたシステムを登録。

で本来はこの手順に従って進めるのが普通なのだけど、Cobbler 公式サイトの 『A Quickstart Guide on Using “import”』 を見てみると、cobbler import コマンドを使ったやり方の方が新規にcobblerサーバを構築する場合は手数が減るみたいなのでこっちで進めてみる。

・ディストリビューションのインポート

上に書いたように、cobbler ではディストリビューション、プロファイル、システムをそれぞれ登録していくのだけど、
実はこれ以外にもやらないといけないことがある。

  • ディストリビューションの登録とそれに伴うインストーライメージの配置。
  • ディストリビューションにヒモづいたプロファイルの登録とそれに伴うキックスタートファイルの作成。
  • インストールCD/DVDのミラー化

を一つづつやっていかないと行けないのだけど、cobbler import コマンドを使うと、これらを一括でやってくれる。# cobbler import  --mirror=インストールツリーのパス --name=ディストリビューション名--name には ディストリビューションを識別する為の一意の名前を指定する。--mirror には、インストールCD/DVDのツリー構造のパスをセットする。CD/DVDをマウントしてそのパスをセットすればOK。

CentOS5 で試してみる。登録には結構時間がかかるので注意。
# mount /dev/cdrom /mnt/cdrom ※CentOS5 のインストールCD/DVDをセットしておくこと。
# cobbler import  --mirror=/mnt/cdrom --name=centos5
# umount /mnt/cdrom
登録ができたら、cobbler report コマンドで登録内容を確認することが出来る。distro          : centos5-i386
kernel          : /var/www/cobbler/ks_mirror/centos5/images/pxeboot/vmlinuz
initrd          : /var/www/cobbler/ks_mirror/centos5/images/pxeboot/initrd.img
kernel options  : {}
architecture    : x86
ks metadata     : {'tree': 'http://192.168.0.254/cblr/links/centos5-i386'}
breed           : redhat
 
distro          : centos5-xen-i386
kernel          : /var/www/cobbler/ks_mirror/centos5/images/xen/vmlinuz
initrd          : /var/www/cobbler/ks_mirror/centos5/images/xen/initrd.img
kernel options  : {}
architecture    : x86
ks metadata     : {'tree': 'http://192.168.0.254/cblr/links/centos5-xen-i386'}
breed           : redhat
 
profile         : centos5-i386
distro          : centos5-i386
kickstart       : /etc/cobbler/kickstart_fc6.ks
kernel options  : {}
ks metadata     : {}
virt file size  : 5
virt ram        : 512
repos           : []
 
profile         : centos5-xen-i386
distro          : centos5-xen-i386
kickstart       : /etc/cobbler/kickstart_fc6.ks
kernel options  : {}
ks metadata     : {}
virt file size  : 5
virt ram        : 512
repos           : []
最初の二つのブロックがディストリビューションで残り二つがプロファイル。それぞれ二つずつ登録されている。個別に見てみよう。

まず、ディストリビューションなんだけど、名前(distro)から推測すると、通常のi386用とxenの仮想OS環境におけるi386用のものがそれぞれ登録されている。仮想OS環境は cobbler でも公式にサポートされているし、これからサーバの分野でも重要になってくるとは思うけど、とりあえずスルー。cobbler import コマンドでディストリビューションが登録される場合はこういう風に登録されるということだけ覚えておくとする。ということで実際に使うのは i386用の方だけ。

で、さらにディストリビューションに登録されている情報を見てみると、“kernel”“initrd”“ks metadata” という項目があり、それぞれ、ネットブートに必要なカーネルイメージ、initrdイメージのパス、インストールツリーのミラーへのパスが設定済みになっている。もちろん、そのパスには実際のファイルがインストールCD/DVDから所定の位置にコピーされているというわけ。もしかすると気づいた人もいるかもしれないけど、インストールツリーがhttpで配布されるのはいいとして、カーネルイメージとinitrdイメージがこのパスで良いのか?という疑問がある。普通 pxeboot の場合、これらのイメージファイルはtftpで配布されるはず。/var/www って普通 apache の公開ディレクトリだし。でも心配無用。ちゃんと /tftpboot 配下にもイメージはコピーされます。

次にプロファイル。プロファイルはディストリビューションにヒモづけられるものなので、登録された二つのディストリビューションにそれぞれのプロファイルが一つづつ、合計二つ登録されるというわけ。ただし、ディストリビューションのうち一つは xen用 なのでこちらもスルー。

こちらも登録されている情報を見てみると、“distro” で ヒモづけられたディストリビューションが指定され、“kickstart” で プロファイルにヒモづけられたキックスタートファイルへのパスが設定されている。もちろん、キックスタートファイルも ちゃんと用意されている。ファイル名から推測するに CentOS 5 の場合は Fedora Core 6 用のものが指定される。元々 CentOS5 は RHEL 5がベースで、RHEL5 は Fedora Core 6 がベースなのでこの辺は納得。

ちょっと補足すると、本来プロファイルを登録する場合は 予めキックスタートファイルを自分で用意した上で cobbler profile add コマンドを実行するのだけど、cobbler では既にディストリビューションごとにある程度キックスタートファイルのテンプレートが用意されているみたいで、cobbler import コマンドを使った場合はそれが自動的に設定される。やっぱり1から作るよりは既にあるものを使うほうが便利だよね。

で肝心の中身はこんな感じ。#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth  --useshadow  --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
text
# Firewall configuration
firewall --enabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Use network installation
url --url=$tree
# If any cobbler repo definitions were referenced in the kickstart profile, include them here.
$yum_repo_stanza
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# Reboot after installation
reboot
 
#Root password
rootpw --iscrypted \$1\$mF86/UHC\$WvcIcX2t6crBz2onWxyac.
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone  America/New_York
# Install OS instead of upgrade
install
# Clear the Master Boot Record
zerombr
# Magically figure out how to partition this thing
%include /tmp/partinfo
 
%pre
# Determine how many drives we have
set \$(list-harddrives)
let numd=\$#/2
d1=\$1
d2=\$3
 
cat << EOF >> /tmp/partinfo
part / --fstype ext3 --size=1024 --grow --ondisk=\$d1 --asprimary
part swap --size=1024 --ondisk=\$d1 --asprimary
#EOF
 
%packages
 
%post
$yum_config_stanza
$kickstart_done
%preセクションはちょっと無視して、ところどころに”$〜”のような変数っぽい表記がある。これがテンプレート変数的なもので、登録した内容によって自動的に置き換えられる。例えば、
# Use network installation
url --url=$tree
のところの $tree 。キックスタートファイル上の “url” という項目はネットワークインストール時のインストールツリーを提供するNFSやHTTPのパスが入るところなんだけど、さっきディストリビューションの登録情報を説明した時に “ks metadata” でインストールツリーが指定されていると言ったのを思い出してほしい。
ks metadata     : {'tree': 'http://192.168.0.254/cblr/links/centos5-i386'}つまりここがテンプレート変数の指定なわけで、”tree” というキーに “http://〜…” という値が指定されている意味になり、実際のインストール時にキックスタートファイルが配布される時は、
# Use network installation
url --url=http://192.168.0.254/cblr/links/centos5-i386
という風に展開されるというわけ。で、この “ks metadata” は、ディストリビューション、プロファイル、システムのそれぞれに指定することが出来るので、それぞれを登録する際に固有となる情報を指定して、うまく使うのがミソということになる。この辺ちょっと言葉では説明がしにくいので、これを念頭において、先に進むこととします。

で、既にプロファイルの登録は済んでいるわけだけど、用意されたキックスタートファイルの内容を見ると以下のような点が個人的には気になった。

  • 言語・キーボード・タイムゾーンが US ベースになっている。日本語にしたい。
  • ネットワーク設定が DHCP になっている。ネットワーク設定はローカルに固定で設定して持たせておきたい。
  • root のパスワードが指定されているけど crypted なので何が指定されているのかわからない。
  • ファイアウォールが有効になっている。とりあえず無効にしておきたい(インストール後に設定すれば良い。)
  • ディスクの構成(本数とサイズ)をチェックして、その結果に基づいてパーティション構成を組むようだけど、ここはある程度決めうちしたい。

ということで、既存のプロファイルは触らずにこの辺をちょこっと修正したキックスタートファイルを用意して新たなプロファイルを登録する。まず CentOS5 のWebサーバ 用キックスタートファイル。
# vi /etc/cobbler/kickstart_centos5_www.ksinstall
url --url=$tree
lang ja_JP.UTF-8
keyboard jp106
network --device eth0 --bootproto static --ip $ipaddress --netmask $netmask --gateway $gateway --nameserver $nameserver --hostname $hostname
rootpw password
firewall --enabled
auth --useshadow  --enablemd5
selinux --disabled
firstboot --disable
timezone Asia/Tokyo
bootloader --location=mbr
zerombr
clearpart --all --initlabel
part /boot --fstype ext3 --size=100 --asprimary
part swap --size=1000
part / --fstype ext3 --size=100 --grow
text
skipx
$yum_repo_stanza
 
%pre
 
%packages
@base
@core
@development-libs
@development-tools
@japanese-support
kernel-devel
lm_sensors
net-snmp-libs
net-snmp
ntp
httpd
php
php-mbstring
php-mysql
mysql
 
%post
$yum_config_stanza
$kickstart_done
内容をちょこっと説明すると、ホスト名やIPアドレスは「システム固有の情報」なので、変数化しておいてシステム登録時に “ks metadata” で指定する。あと、Webサーバということで パッケージ構成に apache、php、mysql あたりを追加しておいた。

次に CentOS5 のDBサーバ 用キックスタートファイル。こちらも基本的な設定は同じで、DBサーバとしてのパッケージ構成だけちょこっと変えてみた。# vi /etc/cobbler/kickstart_centos5_db.ks・・・
%packages
@base
@core
@development-libs
@development-tools
@japanese-support
kernel-devel
lm_sensors
net-snmp-libs
net-snmp
ntp
mysql-server
・・・
ではプロファイルを登録する。プロファイルの登録には、cobbler profile add コマンドを使う。
# cobbler profile add --name=プロファイル名 --distro=ヒモづけるディストリビューション名 --kickstart=キックスタートファイルへのパスということで、今回の例だと以下のようになる。# cobbler profile add --name=centos5_www --distro=centos5-i386 --kickstart=/etc/cobbler/kickstart_centos5_www.ks
# cobbler profile add --name=centos5_db --distro=centos5-i386 --kickstart=/etc/cobbler/kickstart_centos5_db.ks
cobbler report コマンドで確認。profile         : centos5_db
distro          : centos5-i386
kickstart       : /etc/cobbler/kickstart_centos5_db.ks
kernel options  : {}
ks metadata     : {}
virt file size  : 5
virt ram        : 512
repos           : []
 
profile         : centos5_www
distro          : centos5-i386
kickstart       : /etc/cobbler/kickstart_centos5_www.ks
kernel options  : {}
ks metadata     : {}
virt file size  : 5
virt ram        : 512
repos           : []
これでオーケー。

・システムの登録

さ、いよいよシステムの登録。プロファイルの登録で作成したキックスタート中に “ks metadata” を使ってネットワーク設定を行っている箇所があるのでその点に注意して cobbler add system コマンドを登録する。# cobbler system add --name=システム名(通常はホストのMACアドレス) --profile=ヒモづけるプロファイル名 --ksmeta="テンプレート変数=値 テンプレート変数=値 ・・・"今回の例だとこうなる。
# cobbler system add --name=XX:XX:XX:XX:XX:01 --profile="centos5_www" --ksmeta="ipaddress=192.168.0.101 netmask=255.255.255.0 gateway=192.168.0.1 nameserver=192.168.0.254 hostname=web.example.com"
# cobbler system add --name=XX:XX:XX:XX:XX:02 --profile="centos5_db" --ksmeta="ipaddress=192.168.0.102 netmask=255.255.255.0 gateway=192.168.0.1 nameserver=192.168.0.254 hostname=db.example.com"
登録後はもちろん cobbler report コマンドで確認。system           : XX:XX:XX:XX:XX:01
profile          : centos5_www
kernel options   : {}
ks metadata      : {'nameserver': '192.168.0.254', 'hostname': 'web.example.com', 'ipaddress': '192.168.0.101', 'gateway': '192.168.0.1', 'netmask': '255.255.255.0'}
ip address       : None
mac address      : XX:XX:XX:XX:XX:01
hostname         :
pxe info set?    : True
config id        : xx-xx-xx-xx-xx-01
netboot enabled? : 1
kickstart        : <<inherit>>
 
system           : XX:XX:XX:XX:XX:02
profile          : centos5_db
kernel options   : {}
ks metadata      : {'nameserver': '192.168.0.254', 'hostname': 'db.example.com', 'ipaddress': '192.168.0.102', 'gateway': '192.168.0.1', 'netmask': '255.255.255.0'}
ip address       : None
mac address      : XX:XX:XX:XX:XX:02
hostname         :
pxe info set?    : True
config id        : xx-xx-xx-xx-xx-02
netboot enabled? : 1
kickstart        : <<inherit>>
ちゃんと登録されているね。

最後に、登録した情報を全ての設定ファイルに反映させる為に、cobbler syncコマンドを実行する。# cobbler sync
sync distro: centos5-xen-i386
sync distro: centos5-i386
sync profile: centos5-xen-i386
sync profile: centos5_db
sync profile: centos5_www
sync profile: centos5-i386
sync system: XX:XX:XX:XX:XX:01
sync system: XX:XX:XX:XX:XX:02
dhcpd を停止中:                                            [  OK  ]
dhcpd を起動中:                                            [  OK  ]

これで登録作業は一通り完了。ついでだからこれらの登録情報に基づいて各設定ファイルがどういう風になっているのかを見ておこう。まず /etc/dhcpd.conf。# cat /etc/dhcpd.conf・・・
host label1 {
    hardware ethernet XX:XX:XX:XX:XX:01;
    next-server 192.168.0.254;
}
 
host label2 {
    hardware ethernet XX:XX:XX:XX:XX:02;
    next-server 192.168.0.254;
}
・・・
システムで登録されたMACアドレスのエントリが二つある。次に、tftpboot配下。
# ls /tftpboot/pxelinux.cfg/
xx-xx-xx-xx-xx-01  xx-xx-xx-xx-xx-02  default
tftpで配布されるディレクトリのpxelinux.cfg 配下のファイル名はMACアドレスで指定すると、該当のMACアドレスから接続された場合に一致するファイルを取得するようになっている(なければ default が読み込まれる) ので、これでオーケー。中身をちょっと確認してみると、# cat /tftpboot/pxelinux.cfg/xx-xx-xx-xx-xx-01default linux
prompt 0
timeout 1
label linux
        kernel /images/centos5-i386/vmlinuz
        append append ksdevice=eth0 lang=  text syslog=192.168.0.254:25150  initrd=/images/centos5-i386/initrd.img ks=http://192.168.0.254/cblr/kickstarts_sys/XX:XX:XX:XX:XX:01/ks.cfg
上記のように、これまでの設定に基づいた、カーネルイメージ、initrdイメージ、キックスタートファイルを取得するようになっている。最後にキックスタートファイルの中身をちょびっとだけ見てみる。# cat /var/www/cobbler/kickstarts_sys/XX\:XX\:XX\:XX\:XX\:01/ks.cfg・・・
network --device eth0 --bootproto static --ip 192.168.0.101 --netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 192.168.0.254 --hostname web.example.com
・・・
ちゃんと “ks metadata” で指定したテンプレート変数が展開されているというわけ。

ということで、このように簡単なコマンドを使って登録していくだけで、ネットワークインストールに必要な全てのファイルをちゃんと準備してくれるというわけ。あとはサーバをネットワークブートするようにして起動すればインストールが自動で始まる。これはラクチン。

なるべく、手数を減らしたいということで、cobbler importコマンドを使ったやり方を今回紹介したのだけど、一旦構築した後は、運用の中で本来の手順に載っているコマンドを使うことも多々あるので、Stray Penguin - Linux Memo - PXEネットワークインストール(Cobbler) とか Cobbler 公式サイト の詳しい説明を見ておいたほうがいいです。

さて次はpuppetかな。

コメント&トラックバック

トラックバックURL





このページの先頭へ