Last Update 2009-02-28

Cobbler

Linuxのプロビジョニング環境構築ツール。
PXEブート・インストールの環境を容易に構築できたり、yumレポジトリを管理したりできる。
RedHat/Fedora系(RPM)だけでなく、Debian(apt)系にも対応しているらしい。
何台もインストールする必要があったり、壊れたら同じ設定で再インストールしてあげたりしないといけないシステム管理者のツール。
現在の最新は1.4系。


リンク


ダウンロード


インストール

環境はRedHat EL5.2 Server(x86)のCDから構築した。

まず、CDからpython-devel, createrepo, yum-utils, dhcpを追加でインストール。
その後、前述のダウンロードのEPELサイトからpython-cheetah, cobblerをインストール。
httpdも必要であるが、最初のOSインストールで既に入っていた。

cobblerのGitのtagsを見るとv1.2.x系の最終リリースがv1.2.9で、v1.3.x系はテストリリースしかされておらず、v1.4.x系はv.1.4.2が最新のようである。(2009/2現在)

cobblerのバージョンは今回1.2.91.4.2を採用。
最新は1.4.x系だが、1.4.0を試してみるとCDからimportした後、profile等が作成されずエラーになったりしたため諦めた。→1.4.2でこの問題が出ないことを確認できた。(2009/2/24)

基本設定

今回、次のような環境とすべく設定を行っていく。
  • PXEブートでインストール作業ができるようにする
  • DHCPDは自前で立ち上げる
  • DNSはとりあえず無し
クローズのネットワーク環境でまず評価するためこんな感じとしている。

設定の第一歩

設定ファイルを編集したりする前に、とりあえず、
% cobbler check
すると、cobblerがOSの設定含めてチェックして修正点を指摘してくれる。
何か設定を変更した後はいつでも気軽に cobbler check が良いだろう。
今回行ったのは以下。
  1. /etc/cobbler/settingsのnext_serverとserverをこのサーバーのアドレスにする
  2. % setsebool -P httpd_can_network_connect true
  3. /etc/xinetd.d/tftpのdisableをnoに変更
  4. httpdを起動(% chkconfig httpd on の後に % service httpd start)
  5. cobblerdを起動(% chkconfig cobblerd on の後に % service cobblerd start)
これらを行っても、kickstartファイルのrootのパスワードがcobblerになっている、というメッセージが残ったりするが、とりあえず放置する。→1.4.2ではこのメッセージは出なくなっていることを確認済。(2009/2/24)
そして、これらの変更を行ったら、
% cobbler sync
行った変更を反映させる。こちらも何か変更を行ったら cobbler sync する習慣をつけるべし。

DHCP設定

続いてDHCPの設定を行う。
今回はDHCPDをこのサーバーで立てる。
このため、以下の設定を行った。
  1. /etc/dhcpd.confを念のためバックアップしておく(syncで上書きされるため、一応)
  2. /etc/cobbler/settingsのmanage_dhcpを1に変更する
  3. /etc/cobbler/dhcp.templateを編集
  4. % cobbler sync により、/etc/dhcpd.confが更新されたことを確認
  5. dhcpdを起動(% chkconfig dhcpd on の後に % service dhcpd start)

ちなみに別のサーバーでDHCPDが動いている場合、そのサーバーの管理者にDHCPDの設定の変更をお願いして、next_server を cobbler のサーバーのアドレスにしておいてもらう。
こうしておくと、PXEブートが始まってDHCPでIPアドレスを取得した後、DHCPDがcobblerサーバーのアドレスをクライアントに通知してくれるようになる。
クライアントはこのアドレスのcobblerサーバーにtftpでブートイメージを要求する訳である。

ここまででcobblerの基本設定は完了。

ディストリビューションDVDのimport

cobblerにディストリビューションをimportする。
RedHat EL5.2 Client(x86)のDVDからimportした。
CDからだと一旦ディスクに5枚分のCDの内容をコピーして一つのディレクトリツリーにしたりしないといけないのでDVDが楽である。
% cobbler import --name=rhel52c --path=/media/RHEL_5.2\ i386\ DVD/ --arch=x86
マシンスペックによるが20~30分かかる。
cobblerはDVDの内容を/var/www/cobbler/ks_mirror/以下にコピーしつつ、ブートイメージを/tftpbootにコピーしたりとインストールサーバーとしての準備を行ってくれる。
1.4.2だとrescue用のprofileも合わせて作成してくれる。
importが終わったらsyncしておくこと。そして、
% cobbler report
とすると、cobblerはimportした内容をレポートしてくれる。
今回の場合、通常のインストール用のdistroが1つとそれに対応するprofileが二つ(通常用とrescue用)、Xen用のdistroとそれに対応するprofileが一つ、合計5つの情報が参照できるはずである。
ちなみに、
% cobbler list
とするとdistroとprofileの名前だけが表示される。
名前だけ参照したい時はこのコマンドが便利である。

PXEブートでインストールしてみる

ここまでで、cobbler側のとりあえずの準備はできた。
いよいよ、PXEブートからのインストールを行ってみる。

が、その前にRedHat EL5.2の場合のSELinuxの注意点。
SELinuxをenforceで設定しているとtftpでvmlinuzなどをアクセスしに来た時にブロックされてしまうようである。
サーバー側のSELinuxは以下のメッセージを出力する。
SELinux is preventing in.tftpd (tftpd_t) "read" to ./vmlinuz (httpd_sys_content_t)
クライアント側はvmlinuzがダウンロードできないというエラーが延々出るはずである。
とりあえず SELinux を permissive にすることで回避できる。
selinux-policyのバージョンの問題と思われるが未確認。
selinux-policy-2.6.4-40でこの問題が修正されていると思われる。
RedHat EL5.2 でインストールするとselinux-policy-2.4.6-137である。

cobblerサーバー側で端末を開いて tail -f /var/log/messages して様子を見ておく。
RedHatをインストールするPCのBIOS設定でPXEブートをEnableにしネットワークに接続して起動してみる。
クライアントがDHCPでアドレス要求すると、cobblerサーバー側の/var/log/messagesにアドレスを割り当てる様子が出力される。
その後クライアント側ではインストーラが起動されインストールが始まるはずである。

distro、profile、system、repo

cobblerの中では以下のような概念になっている。
  • distro:ブートイメージを含むディストリビューション。
  • profile:distroにひもついて、どのようにインストールするかを定義。
  • system:profileにひもつく、個別のコンピュータを定義。
  • repo:独立したyumレポジトリ。
図示するとこんな感じになるだろうか。
distro rhel52c
         L--- profile rhel52c-fileserver
         L--- profile rhel52c-webserver
         L--- profile rhel52c-userdesktop
                 L--- system 00:11:22:33:44:55
                 L--- system AA:BB:CC:DD:EE:FF
                 L--- system default
 
 distro fedora
         L--- profile fedora-userdesktop
 
 repo local-rhel52-repo
 
 repo local-fedora-repo
 
キックスタートファイルはprofileにひもつく。
なので、同じrhel52cのdistroからインストールする場合でも、fileserver用の構成、webserver用の構成、userdesktop用の構成と、それぞれのキックスタートファイルを定義できる。

WEBインターフェース

WEBのインターフェースが用意されており、
  • cobblerの設定内容を参照
  • distoro、profile、system、repo の 参照/更新/削除/追加
が可能である。
まず/etc/cobbler/modules.confを編集し、
[authentication]
module = authn_configfile
としてダイジェスト認証とする。(他にもオプションがあるがこれがお手軽でセキュリティ的にもよさそう)
更にWEBインターフェース用ユーザーのユーザー登録を
% htdigest /etc/cobbler/users.digest "Cobbler" cobbleradm
としてcobbleradmユーザーを作成しパスワードを設定する。
% service cobblerd restart で再起動した後、
http://cobblerサーバー/cobbler/web/
のURLからアクセスできるようになる。

キックスタートファイルのカスタマイズ


キックスタートではcobbler内部で定義されている変数が使える。
どんな変数が使えるかはdumpvarsコマンドで参照できる。
% cobbler profile dumpvars --name=profile名
% cobbler system dumpvars --name=system名

で、ちゃんと変数が置き換わってるか?というのを確認するにはブラウザで参照するのが早い。
# あるprofileで使われるキックスタートファイルの参照例
http://cobbler-server/cblr/svc/op/ks/profile/(profile名)
# あるserviceで使われるキックスタートファイルの参照例
http://cobbler-server/cblr/svc/op/ks/service/(service名)
このURLはどこから見つけてきたのかというと、/tftpboot/pxelinux.cfg/以下にあるPXEブート用のメニューファイルの中である。

キックスタートの中で、コメントを書きたい時、ついシェルスクリプト等の癖で # を使ってしまうが、## が無難そう。

PXEブートのカスタマイズ

/etc/cobbler/pxe/にpxe*.templateというファイルがいくつかある。
cobblerはこのファイルをテンプレートとして、PXEブート時にクライアント側に表示されるメニューを/tftpboot/pxelinux.cfg/以下に作成するようになっている。

/etc/cobbler/pxe/pxe*.templateを編集してsyncすると、/tftpboot/pxelinux.cfg/ 以下のファイルが変更されることを確認できる。

デフォルトのpxe*.templateは次のように設定されている。
  • importした時に作成されるprofileはPXEブートメニューに現れる
  • systemをaddした時に出来るPXEブートメニューはLOCALブートの選択が含まれない
このため、間違えてBIOS設定をPXEブートにしてしまっている場合、有無を言わさずインストールが始まってしまうという危険性があるように思われる。
これを回避するためには以下のような変更を行う。
  • pxeprofile.templateは中身を全て消す
  • pxesystem.templateはpxedefalut.templateを参考にLocalブートを追加して、Localブート優先としておく
# /etc/cobbler/pxe/pxesystem.templateの変更例
DEFAULT menu
PROMPT 0
MENU TITLE Linux installation menu
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT local
 
LABEL local
        MENU LABEL (local)
        MENU DEFAULT
        LOCALBOOT 0
 
LABEL install linux
        kernel $kernel_path
        $append_line
 
MENU end
こうしておくことで、importしただけではPXEブートのメニューに現れないし、systemを登録したとしてもPXEブートしてきたクライアントに表示されるメニューの優先はLocalブートとなり、意識してインストールを選択しないとインストールが始まらない。

systemの登録

profileにひもつけて、特定のコンピュータを示す設定をcobblerではsystemと呼んでいる。
個人的にはsystemはMACアドレス名でのみ登録するのが良いように思う。
% cobbler system add --name=00:11:22:33:44:55 --profile=rhel52c-userdesktop
MACアドレスで登録されたsystemはそのMACアドレスのPXEブートに無条件で適用される。
cobblerは/tftpboot/pxelinux.cfg/以下にMACアドレスのメニューファイルを作成する。

またdefalut(全てのコンピュータに適合するワイルドカードのようなsystem名)は設定しないようにしたほうがよいと思う。理由はPXEブートが自動で始まってしまうからである。

repoの登録(ローカル・レポジトリ)


標準のCDに含まれていないrpmとか自前で作成したrpmを管理するレポジトリが欲しい。
% mkdir /root/rhel52c-local/
% cobbler repo add --name=rhel52c-local --mirror=/root/rhel52c-local
/root/rhel52c-local/以下にrpmを置いて cobbler reposync すると、
cobblerの管理下(/var/www/cobbler/repo_mirror/rhel52c-local/)にrpmがコピーされ、
レポジトリの情報ファイルが更新される。

ただこの方法だと、/root/rhel52c-local/と/var/www/cobbler/repo_mirror/rhel52c-local/に
二重にrpmが保持されてしまう。
ちなみにミラー元の/root/rhel52c-local/を削除してしまうと、reposyncした時に
/var/www/cobbler/repo_mirror/rhel52c-local/以下もキレイに削除されてしまう。
何か良い方法がないか検討中。

repoの登録(RHNのミラー)

RedHat Networkに管理しているLinuxが個々に接続するのもいかがなものか、
ということでローカルにRHNのミラーができないか、ということでcobblerにやらせてみる。
% cobbler repo add --name=rhel-i386-server-5 --mirror=rhn://rhel-i386-server-5
rhn://の後の文字列はチャネルのLabelを指定すれば良いようである。
この後、cobbler reposync するとRHNからファイルをコピーし始める。

ネットワークインストール用CDイメージの作成

PXEブート環境を構築するのが便利だがネットワーク管理上の問題などでDHCPを設置できなかったりDHCPサーバーのnext_serverにcobblerサーバーのIPアドレスを設定してもらえなかったりすることがある。
この場合、ローカルのCDドライブからブートしてキックスタートファイルとインストールパッケージはcobblerサーバーに置かれているものを使うという方法が効率が良い。
このためのCDイメージをbuildisoコマンドで作成することができる。
% cobbler buildiso 
/var/www/cobbler/以下にkickstart.isoファイルができるのでこれをCDに焼けばよい。
  • --profilesオプションで特定のプロファイル名のみを指定できる
  • --systemsオプションで特定のシステム名のみを指定できる
最終更新:2009年02月28日 10:54