4.3. TFTP ネットブート用ファイルの準備

インストール対象のマシンが LAN に接続されている場合、TFTP を用いると、そのマシンをネットワーク越しに他のマシンから起動できます。インストールシステムを別のマシンから起動するには、その「別のマシン」の特定の場所に起動ファイルを置き、またインストール対象のマシンの起動をサポートするよう設定しなければなりません。

TFTP サーバをセットアップする必要があり、そして多くのマシンでは DHCP サーバ、または RARP サーバ、または BOOTP サーバのセットアップも必要です。

Reverse Address Resolution Protocol (RARP) は、 どの IP を用いるべきかをクライアントに伝える方法のひとつです。 同種の方法には BOOTP プロトコルがあります。 BOOTP は IP プロトコルのひとつです。 クライアントに対して、使うべき IP アドレスと、 ブートイメージをネットワークのどこから取得するかを伝えます。 DHCP (Dynamic Host Configuration Protocol) は、 BOOTP との後方互換性を保ちつつ、より柔軟に拡張させたものです。 システムによっては DHCP でしか設定できないこともあります。

Trivial File Transfer Protocol (TFTP) は、 ブートイメージをクライアントに提供するために用います。 理論的には、どんなサーバでも、どんなプラットフォームでも、 これらのプロトコルを実装してさえいれば利用できます。 この節では、SunOS 4.x, SunOS 5.x (Solaris), GNU/Linux での例を示します。

4.3.1. RARP サーバの設定

RARP を設定するには、クライアントコンピュータにインストールしているイーサネットのアドレス (MAC アドレス) を調べておく必要があります。この情報がわからなければ、OpenPROM の初期ブートメッセージに現われるものをメモするか、OpenBoot .enet-addr コマンドを使うか、(例えば rescue フロッピーなどで) 「Rescue」 モードを起動して ip addr show dev eth0 コマンドを使ってください。

Linux 2.4 カーネルないし 2.6 カーネルの RARP サーバシステムや、 Solaris/SunOS では、rarpd を使用します。 クライアントのイーサネットハードウェアアドレスを 「ethers」 データベースと 「hosts」 データベースに リストしておく必要があります (これらのデータベースは /etc/(ethers,hosts) ファイルか NIS/NIS+ のマップにします)。 次に RARP デーモンを起動します。 ほとんどの Linux システムと SunOS 5 (Solaris 2)では、 /usr/sbin/rarpd -a を、 いくつか他の Linux システムでは /usr/sbin/in.rarpd -aを、 SunOS 4 (Solaris 1) では /usr/etc/rarpd -a を (ルート権限で) 実行してください。

4.3.2. DHCP サーバの設定

フリーソフトウェアの DHCP サーバのひとつに、 ISC の dhcpd があります。 Debian GNU/Linux では、dhcp3-server パッケージをお勧めします。 以下に、設定ファイルの例を示します。 (/etc/dhcpd.conf を参照)

option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB;
  fixed-address 192.168.1.90;
}

この例では、servername というサーバがひとつあり、 DHCP サーバ, TFTP サーバ, ネットワークゲートウェイの仕事をすべて行っています。 domain-name オプション、サーバ名、クライアントのハードウェアアドレスは、 必ず変更する必要があります。 filename オプションは TFTP 経由で取得するファイルの名前です。

dhcpd の設定ファイルの編集を終えたら、 /etc/init.d/dhcp3-server restartdhcpd を再起動してください。

4.3.3. BOOTP サーバの設定

GNU/Linux で使える BOOTP サーバは 2 つあります。 ひとつは CMU の bootpd です。 もう 1 つは実際は DHCP サーバですが、ISC の dhcpd です。 Debian GNU/Linux では、 bootp パッケージと dhcp3-server パッケージにそれぞれ入っています。

CMU bootpd を使う場合は、まず /etc/inetd.conf ファイルの 該当行をアンコメント (または追加) する必要があります。 Debian GNU/Linux では update-inetd --enable bootps を実行し、 続いて /etc/init.d/inetd reload とすれば OK です。 BOOTP サーバが Debian で動かない場合は、以下のようにします。

bootps  dgram  udp  wait  root  /usr/sbin/bootpd  bootpd -i -t 120

ここで次に /etc/bootptab を作成します。 このファイルの書式は、 printcap, termcap, disktab ファイルなどでお馴染みの、 例のわかりにくい形式になっています。 詳細は bootptab マニュアルページを見てください。 CMU bootpd では、 クライアントのハードウェア (MAC) アドレスを知っておかなければなりません。 /etc/bootptab の例を示します。

client:\
  hd=/tftpboot:\
  bf=tftpboot.img:\
  ip=192.168.1.90:\
  sm=255.255.255.0:\
  sa=192.168.1.1:\
  ha=0123456789AB:

少なくともクライアントのハードウェアアドレスを指定している 「ha」 オプションは変更する必要があるでしょう。 「bf」 オプションはクライアントが TFTP で取得するファイルを指定しています。 詳細は 項4.3.5. 「TFTP イメージを適切な場所に配置する」 を参照してください。

対照的に、ISC dhcpd を使っての BOOTP の設定は実に簡単です。dhcpd では、BOOTP クライアントは やや特殊な DHCP クライアントとして取り扱われます。アーキテクチャによっては、BOOTP によるクライアントの起動には複雑な設定が必要になります。これに該当してしまったら、項4.3.2. 「DHCP サーバの設定」 の節をお読みください。そうでなければ、おそらく /etc/dhcp3/dhcpd.conf にある、クライアントの含まれるサブネットの設定ブロックに、allow bootp というディレクティブを追加し、 /etc/init.d/dhcp3-server restartdhcpd を再起動するだけです。

4.3.4. TFTP サーバの立ち上げ

TFTP サーバの準備をする際に、まず、tftpd が有効であることを確認してください。

tftpd-hpa の場合には、サービスを走らせるのに 2 種類の方法があります。システムの inetd デーモンにより必要に応じて起動する方法と、独立したサーバとして起動する方法です。どちらにするかは、パッケージのインストール時や再設定時に選択できます。

注意

歴史的に TFTP サーバは、 イメージを提供するディレクトリに /tftpboot を使用します。 しかし Debian GNU/Linux のパッケージでは、 Filesystem Hierarchy Standard を満たす別のディレクトリを使用する可能性があります。 例えば、tftpd-hpa では /srv/tftp をデフォルトで使用します。 必要に応じて、本節の設定例を調整してください。

Debian で利用できる in.tftpd の代替はすべて、デフォルトで TFTP リクエストをシステムログに出力します。いくつかは、出力を冗長にする -v 引数をサポートしています。ブート時に問題がある場合、エラーの原因を診断する出発点として、ログメッセージをチェックすることをお勧めします。

4.3.5. TFTP イメージを適切な場所に配置する

次に行うことは、 項4.2.1. 「どこでインストールイメージを探すか」 の記述にある、必要な TFTP ブートイメージを、 tftpd のブートイメージディレクトリに置く作業です。 tftpd が特定のクライアントの起動に用いるファイルへのリンクを、 ここに作成してください。 残念ながら、ファイルの名前は TFTP クライアントによって決まり、 強制力のある標準は存在しません。

4.3.5.1. SPARC TFTP ブート

SPARC アーキテクチャでは、 「SUN4M」 や 「SUN4C」 のような サブアーキテクチャの名前をファイル名に追加します。 例えば、システムのサブアーキテクチャが SUN4C で IP アドレスが 192.168.1.3 の場合、 ファイル名は C0A80103.SUN4C となります。 しかし、クライアントが探すファイルが client-ip-in-hex となるサブアーキテクチャもあります。 IP アドレスの 16 進表記を簡単に得るには、 以下のコマンドをシェルに入力してください。 (想定している IP アドレスは 10.0.0.4 です)

$ printf '%.2x%.2x%.2x%.2x\n' 10 0 0 4

正しいファイル名を取得するには、文字をすべて大文字に変更し、 (必要なら) サブアーキテクチャ名を追加しなければなりません。

すべて正しく行うと、 OpenPROM から boot net コマンドを与えて、 イメージをロードできます。 イメージが見つからない場合、tftp サーバのログをチェックし、 どのような名前のイメージを要求されているかを確認してください。

OpenPROM の boot コマンドの末尾にファイル名を追加して、 sparc システムにその名前のファイルを探すよう指定することもできます (boot net my-sparc.image のようになります)。 ただしこのファイルを置くのは、いずれにしても TFTP サーバが見るディレクトリの内部でなければいけません。