こんにちは。@jedipunkz です。
最近、自動化は正義だと最近思うのですが、その手助けをしてくれるツール Cobbler を試してみました。Cobbler と複数 OS, ディストリビューションを CLI, GUI で管理出 来るツールです。PXE, TFTP, DHCPを組分せれば OS の自動構築が出来るのは古くから ありますが、TFTP サーバに配置するカーネルイメージやマックアドレスの管理を一元 して管理してくれるのがこの Cobbler です。
今回は Cobbler の構築方法をお伝えします。本当は Chef Cookbooks で構築したかっ たのですが Opscode Community にある Cookbooks はイマイチだったので、今回は手動 で。
前提環境
- OS は CentOSを。Ubuntu を利用すると DHCP のコンフィギュレーションを自動で出 来ません
- 利用するネットワークの DHCP はオフにします
構築手順
SELINUX を無効にします。石◯さん、ごめんなさい。
# ${EDITOR} /etc/sysconfig/selinux
SELINUX=disabled
# setenforce 0
EPEL のレポジトリを追加します。
# rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
cobbler をインストールします。またその他必要なパッケージもここでインストールし ます。
# yum install cobbler debmirror pykickstart
自分の設定したいパスワードを生成して /etc/cobbler/settings 内の default_password_crypted: に設定します。パスワードの生成は下記のように openssl コマンドを利用します。
% openssl passwd -1
/etc/cobbler/settings 内の下記のパラメータについて設定します。manage_dhcp: は 1 にしておくと、Cobbler が自動で ISC DHCP の設定も書き換えてくれるので、ほぼ必 須の設定です。
server: <自ホストの IP>
next_server: <自ホストの IP>
manage_dhcp: 1
/etc/cobbler/dhcp.template を設定します。自分のネットワーク環境に合わせて設定 します。
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.254;
option domain-name-servers 8.8.8.8,8.8.4.4;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.1.120 192.168.1.150;
default-lease-time 21600;
max-lease-time 43200;
next-server $next_server;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
if option pxe-system-type = 00:02 {
filename "ia64/elilo.efi";
} else if option pxe-system-type = 00:06 {
filename "grub/grub-x86.efi";
} else if option pxe-system-type = 00:07 {
filename "grub/grub-x86_64.efi";
} else {
filename "pxelinux.0";
}
}
}
/etc/xinetd.d/rsync の disable = yes を no に設定します。
# ${EDITOR} /etc/xinetd.d/rsync
<snip>
disable = no
<snip>
サービスを起動します。
# service cobbler start
# service dhcpd start
# service httpd start
# service xinetd start
OS 起動時に各サービスが起動するよう設定します。
# chkconfig cobbler on
# chkconfig dhcpd on
# chkconfig httpd on
# chkconfig xinetd on
iptables をオフにします。
# service iptables stop
# chkconfig iptables off
構築は完了です。
ディストリビューションのインポート
ここではテストで Ubuntu Server 12.04 amd64 をインポートしてみます。
ダウンロードしてきたインストール ISO をマウントします。
# mount -t iso9660 -o loop,ro /path/to/Image.iso /mnt
インポートします。
# cobbler import --name=ubuntu1204 --arch=x86_64 --path=/mnt
Debian 系の Ubuntu は x86_64 ではなく通常 amd64 と記しますが、Cobbler が CentOS, RHEL を前提に開発されているので x86_64 と記します。注意してください。
インポートされたか確認します。
# cobbler distro list
# cobbler profile list
ここでは自分の作成した preseed.cfg を使いたいのでその設定を行います。この操作 は行わなくても構いませんが、preseed.cfg 内で自分の環境に合わせて色々したいと思 うので、行なっておくと便利です。予め preseed.cfg は作成する必要ありますが。
# cp /path/to/preseed.cfg /var/lib/cobbler/kickstarts/ubuntu1204-preseed.cfg
# cobbler profile edit --name=ubuntu1204-x86_64 \
--kickstart=/var/lib/cobbler/kickstarts/ubuntu1204-preseed.cfg \
--kopts="priority=critical locale=en_US"
インストールターゲットマシンの登録
インストールターゲットのマシンを登録します。予め NIC の Mac アドレスを用意して ください。
# cobbler system add --name=foo --profile=ubuntu1204-x86_64
# cobbler system edit --name=foo --interface=eth0 \
--mac=00:1c:25:72:1f:79 --ip-address=192.168.1.120 --netmask \
255.255.255.0 --static=0
# cobbler system edit --name=foo -gateway=192.168.1.254 --hostname=foo
こちらもネットワーク環境に合わせて gateway や netmask の情報を記してください。
ターゲットマシンのインストール
PXE ブートするだけです。
まとめ
‘cobbler-web’ の設定は今回は説明しませんでした、慣れている人なら CLI のほうがい いと思うので ‘cobbler’ パッケージだけでも十分だと思います。
Cobbler は CentOS, RHEL を中心に考えられたツールなので Debian 系への対応がイマ イチでした。あと、import する時にコケることがあります。コケる理由がエラーメッ セージとして表示されないものもあるので、ちょっと苦労します。
ただ管理する・新しいターゲット・ディストリビューションの登録を容易にしてくれる ツールとしてはとても有用です。今、この辺りの操作であれば Chef で出来ないかな? と考えている最中です。と言うか既に Cookbooks を用意し始めています。Chef でシン プルな PXE インストール環境を作った方が多くのディストリビューションに対応出来 そうですし、やる意味あるかな?と思っています。