DISKLESS(8)

名称
diskless - ネットワークを介してシステムをブートする

解説
ネットワークを介してマシンをブートする能力は、 diskless もしくは dataless マシンのためや、ローカルのファイルシステムの再インストールまたは 修復中に一時的に利用するために有用です。 このファイルは、クライアントがネットワークを介してブートする時に、 クライアントとサーバとの間で行われる通信の一般的な解説を提供します。 一般的な解説の後に、ディスクレスの Sun クライアントのためのサーバ設定 を行うための詳細な指示を説明します。

操作
ネットワークを介してシステムをブートする時に、 クライアントとサーバの間で3フェーズのやりとりがあります:

1.  PROM (もしくはステージ 1 のブートストラップ) がブートプログラムを 読み込みます。
2.  ブートプログラムがカーネルを読み込みます。
3.  カーネルがルートを NFS マウントします。

これかの各フェーズについて、以降で詳しく記述します。

フェーズ 1 では、 PROM がブートプログラムを読み込みます。 PROM の設計の種類はたくさんありますので、 このフェーズは本質的にマシンに依存しています。 Sun のマシンは クライアントの IP アドレスを決定するために RARP を利用し、その後 RARP リプライを送ったところからブートプログラムをダウンロードするために TFTP を使います。 HP 300 シリーズのマシンでは、ブートプログラムをダウンロードするために HP リモートメンテナンスプロトコル を利用します。 典型的なパーソナルコンピュータはネットワークブートプログラムを ディスケットもしくはネットワークカードの特別な PROM をつかって読み込むかも しれません。

フェーズ 2 では、ブートプログラムがカーネルを読み込みます。 このフェーズの操作はブートプログラムの設計に依存します。 (ここで記述する設計は Sun と NetBSD/hp300 で使われているものです。) ブートプログラムは以下を行います:

2.1 RARP を使ってクライアントの IP アドレスを入手します。
2.2 RPC / BOOTPARAMS / WHOAMI 要求をクライアントの IP アドレスとともにブロードキャストして、 クライアント名とサーバの IP アドレスを入手します。
2.3 RPC / BOOTPARAMS / GETFILE 要求をクライアント名とともに使うことで、 クライアントのルートのサーバにおけるパスを入手します。
2.4 クライアントのルートに対するサーバのパスを指定して mountd(8) を呼ぶことで、ルートファイルハンドルを入手します。
2.5 ルートファイルハンドル上で NFS ルックアップを呼ぶことで、カーネルのファイルハンドルを入手します。
2.6 カーネルファイルハンドルに対して NFS 読み出しをつかって、カーネルを読み込みます。
2.7 カーネルのエントリポイントに制御を移します。

フェーズ 3 では、カーネルはルートを NFS マウントします。 カーネルは、ブートプログラムによって行われた多くの作業を繰り返します。 なぜなら、ブートプログラムが集めた情報をカーネルに受け渡す 標準的な方法が無いからです。 カーネルで利用される工程は以下のようなものです:

3.1 カーネルは、上記の 2.1 と 2.2 で記述されたのと同じ工程を使うことで、 ブートサーバを見付けます。
3.2 カーネルは、上記の 2.3 から 2.5 で記述されたのと同じ工程を使うことで ルートのための NFS ファイルハンドルを入手します。
3.3 カーネルは、ルートディレクトリが最後に更新された時間を入手するために NFS 属性入手機能 (getattr function) を呼び出し、システム時計を調べるために これを使います。

設定
クライアントがネットワークを介してブートするためには、 サーバは正しく設定されていなければなりません。 この例では、 どのように Sun クライアントが設定されれば良いかを示します。 他のクライアントの設定も似たようなものです。

クライアントのホスト名 (hostname) を "myclient" と仮定します。

1.  /etc/ethers に適切なクライアントのイーサネットアドレスのエントリを追加します:
        8:0:20:7:c5:c7          myclient

    これは、 rarpd(8) が使用します。

2.  /etc/hosts もしくは DNS データベースに myclient のための IP アドレスを割り当てます:
        192.197.96.12           myclient

3.  Sun のマシンをブートする場合、 /tftpboot ディレクトリで tftpd(8) を実行するために /etc/inetd.conf が設定されているようにします。

    HP 300 シリーズのマシンをブートする場合、 ブートプログラムがクライアントに転送されるように /etc/rbootd.conf が正しく設定されているようにします。 エントリは以下のようになるでしょう:
        08:00:09:01:23:E6	SYS_UBOOT	# myclient

    さらなる情報は、 rbootd(8) を参照して下さい。

4.  SPARC マシンをブートする場合、 ( /usr/mdec/boot のような) 適当なディスクレスブートローダのコピーを /tftpboot ディレクトリにインストールします。 ブートプログラムが、16 進のクライアントの IP アドレスとドットと アーキテクチャ名からなるファイル名 (全て英語の大文字) で アクセスできるようにリンクを作成します。 例えば以下のようになります:
        # cd /tftpboot
        # ln -s boot C0C5600C.SUN4

    Sun3 のマシンに対しては、この名前は C0C5600C となるようにします (Sun3 の PROM はアーキテクチャ名を付加しません)。 使われる名前はアーキテクチャに依存します。 これは、単純にブートクライアントの PROM が何を望んでいるかに 一致させます。 クライアントの PROM が期待されるファイルを読み込むことに 失敗する場合には、 クライアントがどんなファイル名を読み込もうとしているのかを知るために tcpdump(8) を使うことができます。

    HP 300 シリーズのマシンをブートする場合、 ネットワークブートプログラム SYS_UBOOT (これは、インストール前に uboot.lif から呼び出されます ) がディレクトリ /usr/mdec/rbootd にインストールされているようにします。
5.  myclient をブートパラメータデータベース /etc/bootparams に追加します:
        myclient  root=server:/export/myclient/root

6.  myclient のためのスワップファイルを作成します:
        # mkdir /export/myclient
        # cd /export/myclient
        # dd if=/dev/zero of=swap bs=16k count=1024

    ここでは、16 メガバイトのスワップファイルを作成しました。

7.  myclient の / ファイルシステムをサーバ上に作成します。 これがどのように行われるかはクライアントのアーキテクチャと NetBSD ディストリビューションのバージョンに依存します。 サーバのルートファイルシステムをコピーし変更するように 単純であるか、おそらく標準バイナリディストリビューションから これらのファイルを入手する必要があるかも知れません

    SunOS とはちがって、クライアントのスワップのためにマウントポイントを 作成する必要があることに注意が必要です:
        # mkdir /export/myclient/root/swap

8.  /etc/exports にある必要とされるファイルシステムを公開します:
        /usr -ro myclient
        # for SunOS:
        # /export/myclient -rw=myclient,root=myclient
        # for NetBSD:
        /export/myclient -maproot=root -alldirs myclient

    サーバとクライアントが同じアーキテクチャである場合、 クライアントはサーバの /usr を共有することができます (これは上記のように実現します)。 そうでない場合、クライアントのための /usr パーティションを別の場所に正しく作成する必要があります。

    もしサーバが sparc の場合でクライアントが sun3 の場合、 /export/usr.sun3 を作成し中身も作り、その後以下の /etc/exports 行を作成します:
        /export/usr.sun3 -ro myclient
        /export/myclient -rw=myclient,root=myclient

9.  最低限、 /export/myclient/root にある以下のファイルをコピーしカスタマイズします:
        # cd /export/myclient/root/etc
        # cp fstab.nfs fstab
        # cp /etc/hosts hosts
        # echo myclient > myname
        # echo 192.197.96.12 > hostname.le0

    上記の "le0" はクライアントがブートのために使う ネットワークインタフェース名に置き換えなければなりません。

10. クライアントの /etc/fstab (これはつまり /export/myclient/root/etc/fstab です) にあるクリティカルなマウントポイントとスワップファイルを 正しく設定します。 つまり以下のようにします:
        myserver:/export/myclient/root / nfs rw 0 0
        myserver:/usr /usr nfs rw 0 0
        myserver:/export/myclient/swap none swap sw,nfsmntpt=/swap

    /etc/fstab にスワップファイルを指定しなければならないことに注意してください。 指定しないとスワップが使用されません。

関連ファイル
/etc/ethers
    わかっているクライアントのイーサネットアドレス
/etc/bootparams
    クライアントのルートパス名
/etc/exports
    公開された NFS マウントポイント
/etc/rbootd.conf
    HP リモートブートデーモンのための設定ファイル
/tftpboot
    Sun PROM によって読み込まれるブートプログラムの場所
/usr/mdec/rbootd
    HP ブート ROM によって読み込まれるブートプログラムの場所

関連項目
bootparams(5), ethers(5), exports(5), bootparamd(8), mountd(8), nfsd(8), rarpd(8), rbootd(8), reboot(8), tftpd(8)