たぶん、サーバのカーネルに RARP のサポートを入れたおいたほうがよいでしょう。 カーネルパラメータを使わずにブートするならば、RARP のサポートが必要です。 ただし、クライアントがサーバと同じサブネットになければ RARP は役に立ちません。
ディスクレスマシン用のカーネルには、最低限次の機能をコンパイル時に組み込んでおく必要があります。
ディスクレスマシンをカーネルパラメータなしにブートしようとする場合、
ルートデバイスを 0:255 にセットする必要もあります。
mknod /dev/nfsroot b 0 255
によってダミーのデバイスファイルを作成して、
これをセットします。このようなデバイスファイルを作成すると、
rdev <カーネルイメージファイル名> /dev/nfsroot
によってカーネルイメージのルートデバイスをセットできます。
クライアントのためのルートツリーをサーバ上のどこに置くか決めた後で、例えば、
mkdir -p <ディレクトリ名>
して tar cClf / - . | tar xpCf <ディレクトリ名> -
でルートツリーを生成してください。
LILO を使わずにカーネルをブートする場合、
ルートディレクトリは/tftpboot/<IPアドレス>
でなければなりません。
もしそれが嫌なら、カーネルのソースの一番上にある Makefile で変更できます。
NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\""
みたいな行を探してください。
ここを変更した場合、カーネルを再コンパイルしなければいけません。
さて、不必要なファイルを取り除いて、 ディスクレスマシンの /etc/rc.d スクリプトをチェックしましょう。 重要な点がいくつかあります。
サーバ上のディスクレスマシン用ルートディレクトリをエクスポートします。
exports(5)
のマニュアルを参照してください。
たいていの場合、このファイルを変更した後、 nfsd/mountd を再スタートしなければなりません。
ネット上のどこかで RARP を起ち上げます。 もし nfsroot パラメータなしにブートするなら、RARP サーバが NFS サーバでなければいけません。 普通は、RARP サーバが NFS サーバでしょう。 こうするためには、カーネルを RARP のサポート付きで走らせる必要があります。
RARP の設定をするためには、次のスクリプトを実行してください
(そしてサーバの/etc/rc.d
のどこかにこのスクリプトをインストールしておきましょう!)
/sbin/rarp -s <ip-addr> <hardware-addr>
ここで
iはディスクレスマシンのIPアドレス
はディスクレスマシンのネットワークカードの イーサネットアドレス(MAC アドレス)
例: /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12
IPアドレスのかわりに名前を使うこともできます。サーバがIPアドレスを (/etc/hosts や DNS を検索して)みつけることができれば、ですが。
ハードウェアアドレスなんて知りません!どうすればみつかるんですか?
/sbin/arp -a
を実行して ARP キャッシュのなかをみます。