PXE ブートで CentOS をインストール

ついで?なので,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 moodMenu - 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 と FTPNFS だけ。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 など)を手で追加してる((その他 awkgrep なども 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/ などからもってきてもいい。