netbootメモ

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コマンドで逆引きできない環境だとダメだけど。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です