ついで?なので,CentOS のインストールも PXE ブートでやってしまおうと。
インストーラ用のカーネルと initrd は,インストール DVD の images/pxeboot/ フォルダ以下に収められているので*1,それを TFTP 用フォルダにコピー。
$ cp DISKIMAGE/images/pxeboot/vmlinuz /tftpboot/vmlinuz-cent53-inst $ cp DISKIMAGE/images/pxeboot/initrd.img /tftpboot/initrd-cent53-inst
あとはそれを使うように PXELINUX 用の設定ファイルを書く。
default menu.c32 timeout 50 ontimeout cent53inst label cent53inst menu label CentOS 5.3 Install kernel vmlinuz-cent53-inst append initrd=initrd-cent53-inst.img
今回からキャラクタベースのメニュー(menu.c32)を利用している。PXEでメニューを表示する。 - adsaria mood と Menu - Syslinux Wiki が非常に参考になった。
あとは,ネットワークインストールに慣れてる人ならいつもと同じ手順。
kickstart でインストール
んで,せっかくなので kickstart もやってみた。
label cent53ks menu label CentOS 5.3 Kickstart Install kernel vmlinuz-cent53-inst append initrd=initrd-cent53-inst.img ks=http://SERVERNAME/pub/linux/centos/ks.cfg
kickstart 用のファイルを手近な(手元の CentOS base のミラー)Web サーバに置き,それを ks= オプションで指定している。
ks= で指定できる(リモートの)ロケーションは,いまあげた HTTP と FTP と NFS だけ。TFTP はない(残念)。きょうび FTP サーバを上げるより HTTP サーバをあげるほうが数段楽(で利便性も高い)ため,今回は HTTP を使った。
kickstart 用のファイルは,インストールされたマシンの /root/anaconda-ks.cfg を参考にすれば簡単につくれる。たとえば以下のような感じ。
install url --url http://SERVERNAME/pub/linux/centos/5.3/os/i386 lang en_US.UTF-8 keyboard us network --device eth0 --bootproto dhcp rootpw --iscrypted ******** firewall --enabled --port=22:tcp authconfig --enableshadow --enablemd5 selinux --disabled timezone Asia/Tokyo bootloader --location=mbr --driveorder=sda,sdb %packages @core @base
ディスクパーティションの設定をまったくしていないが,この場合 Anaconda はディスクパーティションの切り方だけ指示を求めて,あとは自動インストールしてくれる。
パーティションの切り方だけ設定するためにわざわざターゲットマシンのコンソールを操作するのかよ,という人は,きちんと kickstart を書けばいい。それか,さきほどの PXELINUX の設定に書いたブートパラメータに,vnc vncpassword=12345678 などを追加すると((vncpassword を指定しないと VNC は動いてくれない。しかもパスワードも短すぎるとだめ。)),リモートから VNC で Anaconda を操作できる。
便利だとは聞いていたけど,じっさい kickstart やってみると超便利。
わりとミニマムなインストールを試みる
んで,kickstart だと,インストールするパッケージをより細かくカスタマイズすることが可能なので,わりあいミニマムに近い CentOS (5.3)のパッケージ選別をしてみた。
%packages @core @base -NetworkManager -aspell -aspell-en -bluez-utils -ccid -coolkey -firstboot-tui -gpm -irda-utils -numactl -pcmciautils -pinfo -rdate -rdist -rsh -man-pages -redhat-lsb gettext m4 patch
これでインストール後のイメージが 700MB 弱くらいだったかな(i386 の場合)。
もともと @base グループに基礎的なパッケージが収められていて(デフォルトでインストールされる),それでもパッケージ多すぎだろって思う人は @base をインストールしないようにして自力でパッケージを列挙していた。RHEL 5 から @base グループの中でもさらに基本的なパッケージ群が @core グループに分離したので,もし本当にミニマムなインストールをしたいのなら,
%packages --nobase @core
のようにすればよい。@base グループのパッケージをインストールしない場合は %packages に --nobase というオプションをつける必要がある(らしい)。
(@core を含まない)@base グループに含まれるパッケージをつらつらとみていたら((どのグループにどのパッケージが存在するのかといった点は,yum-utils に含まれる repoquery を使うのがいいと思う。たとえば repoquery -gl --grouppkgs=mandatory base とか。)),結構いらねーってものは少なかったので,上記私家版では --nobase はせずに @base グループからいくつかのパッケージを削除する内容になっている。
んで,わたしの場合,
-redhat-lsb gettext m4 patch
のようにしているのがちとかわってるかも。
redhat-lsb というのは LSB に沿うように RedHat が選定したパッケージリスト(依存パッケージを列挙したメタパッケージみたいになってる)なんだけど,ここには /usr/bin/lpr が依存ファイルとして記述されている。
で,現状 RHEL で /usr/bin/lpr 等を提供するのは cups だけ。cups をいれてもいいんだけど,これいれると pango や cairo に依存しているので,インストールされるファイルがどばっと増えてしまう。サーバに freetype とか普通いらんだろと思って調べたらそういうことになってた。ので,redhat-lsb を対象パッケージから削除し,そのかわり redhat-lsb に含まれるパッケージであったらいいなと思うもの(gettext など)を手で追加してる((その他 awk や grep なども redhat-lsb で依存ファイルとして指定されてるけど,そんへんの必須アイテムは他のパッケージの依存関係で自動的に入るのでわざわざ指定しなくてもいいのだ。))。
あと,TipsAndTricks/KickStart - CentOS Wiki を読むと
%packages --excludedocs
とするとドキュメント系ファイルがインストールされないように書いてあるんだけど,(少なくとも)RHEL 5 の anaconda ではうまく動かなかった。もし,ドキュメントを削除して容量を減らすのなら,%post のとこで
%post rpm -qad| xargs rm -f
みたいにして削除すればいいと思う。
でもドキュメント削除してもそんなに容量は小さくならない。ロケールまわりが意外に食っている。どうしても小さくしたいのなら C, en, ja 以外のロケールを削除するのも手かも。
*1:もちろん CentOS の mirror たとえば http://ftp.iij.ad.jp/pub/linux/centos/5.3/os/i386/images/pxeboot/ などからもってきてもいい。