Fedora/Red Hatでnetboot。
pxelinuxとdhcpd、tftpの設定、ファイルのコピー等は適当にやる。あとはいくつかの処置が必要になる。1台が上がるようにすることと、複数台が同時に上がるようにするのが必要。
まずetc/sysconfig/network-script/ifcfg-eth0では、dhcpとか余計なことは書かない。ONBOOTとDEVICEだけを残してコメントアウトする。じゃないとifupとかifdownが走ろうとしてしまう。一瞬でも見えなくなりそうだったらダメ。同様に落ちるときのためにetc/rc.d/rc?.d/K??networkとか怪しそうなものがあったらどんどん消しておく。NFSを/にしてるんだからsyncしたらハードリセットするだけでいい。だからetc/inittabのctrl+alt+delもshutdownじゃなくて、/sbin/reboot -f
とかにしておく。余計な処理(NFSでマウントしてるのにifdownしちゃうとか)が走ると、RPCでclnt_callに失敗したとか言って無限ループに入ってshutdownがおかしなことになる。
/usr以下のファイルも起動のはじめのほうで(NFSマウントの前に)必要になる場合があるから、適当に必要っぽいファイルをコピーしておく。/usr/bin/headとか/usr/bin/idとか。まあどうせトラブったときのためにいくつか置いとくでしょ。そのへんは普通の/と同じだ。
ここからは複数台向けの話。var/lock/subsysとvar/run、etc/mtabが共有できない問題をどうにかする必要がある。これをやっとかないと同時に複数のクライアントをブートさせたときに上がらないノードが出る。
etc/mtabについては/proc/mountsへのシンボリックリンクにして、起動スクリプトのmount/umountコマンドに片っ端から-nオプションをつけていく。mtabを消す処理はコメントアウト。これでmtab問題は消える。/のエントリが2つになったりするのは無視。
var/lock/subsysとvar/runについては、/tmp/subsys、/tmp/runへのシンボリックリンクにするのが一番楽だと思った。/tmpをtmpfsにして、/tmpをマウント直後に/tmp/subsysと/tmp/runを作る。/tmp/runはさらに下にディレクトリがありパーミッションもいろいろなので、適当にtarを展開するとかそういう処理をetc/rc.d/rc.sysinitに書いていくといい。
ちゃんと設定したら親のブートサーバとまで/が共存できちゃったりするのかな。
インストーラをPXEで上げる場合は、kickstartファイルはNFSで見えるところに置き、ks=nfs:(IPアドレス):(パス)
のように書く。kickstartを使わない場合は特に何もすることがない。最初tftpで持ってってくれるのかと思ってカーネルやinitrdイメージと同じディレクトリに置いてks=ファイル名
とかってやってたけど、読んでくれなかった。nfs:
という書き方ということは、ftp://
とかhttp://
なんて書いちゃってもいいのだろうか。
あと、kickstartのファイルには余計なものがついているとインストールが続かなくなることがあるようなので、不安があるところはコメントアウトしていく。NICが3枚見えるマシンにインストールしたときのkickstartファイルをベースにしていたら、networkの行が3つあってダメだったりした。こういうのは単に後ろの2つをコメントアウトして1つにする。内容が矛盾したりすると安全策で不可になったりするのかな。kickstartはけっこう便利なので作っておいて損はないだろう。
(追記) 2003-12-09 18:38
あとあれだ、カーネルにnfsroot対応のものを使う(たぶんコンパイルすることになる)、ホスト名のfixはhost $(hostname -i|head -n 1) | cut -f 5 -d ' '| cut -f 1 -d .
とかでどうにかする。hostname -iでIPアドレスが得られなさそうならifconfig | grep inet | head -n 1 | cut -f 2 -d : | cut -f 1 -d ' '
とかで、てきとうに取る。ただhostコマンドで逆引きできない環境だとダメだけど。