インストール対象のマシンが LAN に接続されている場合、 TFTP を用いると、そのマシンをネットワーク越しに他のマシンから起動できます。 インストールシステムを別のマシンから起動するには、 その「別のマシン」の特定の場所に起動ファイルを置き、 またインストール対象のマシンの起動をサポートするよう 設定しなければなりません。
TFTP サーバをセットアップする必要があります。 また多くのマシンでは DHCP サーバ、 または 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 での例を示します。
TFTP ブートで Pre-boot Execution Environment (PXE) 法を使用するには、 tsize
をサポートする TFTP サーバが必要になります。 Debian GNU/Linux サーバでは、atftpd
と tftpd-hpa
がその資格があります。 tftpd-hpa
をお奨めします。
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.5.4. 「TFTP イメージを適切な場所に配置する」 を参照してください。
対照的に、ISC dhcpd を使っての BOOTP の設定は実に簡単です。 dhcpd では、BOOTP クライアントは やや特殊な DHCP クライアントとして取り扱われます。 アーキテクチャによっては、BOOTP によるクライアントの起動には 複雑な設定が必要になります。 これに該当してしまったら、項4.5.2. 「DHCP サーバの設定」 の節を読んでください。 この場合、クライアントの含まれるサブネットの設定ブロックに allow bootp
というディレクティブを追加し、 /etc/init.d/dhcpd3-server restart
で dhcpd を再起動するだけです。
フリーソフトウェアの 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/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/dhcpd3-server restart
で dhcpd を再起動してください。
ここでは TFTP の Pre-boot Execution Environment (PXE) 法を用いた、 dhcp.conf
の例を示します。
option domain-name "example.com"; default-lease-time 600; max-lease-time 7200; allow booting; allow bootp; # The next paragraph needs to be modified to fit your case subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.200 192.168.1.253; option broadcast-address 192.168.1.255; # the gateway address which can be different # (access to the internet for instance) option routers 192.168.1.1; # indicate the dns you want to use option domain-name-servers 192.168.1.3; } group { next-server 192.168.1.3; host tftpclient { # tftp client hardware address hardware ethernet 00:10:DC:27:6C:15; filename "pxelinux.0"; } }
PXE ブートでは、クライアントのファイル名はカーネルイメージではなく、 ブートローダであることに注意してください。 (以下 項4.5.4. 「TFTP イメージを適切な場所に配置する」 参照)
TFTP サーバを立ち上げるには、 まず tftpd が有効になっているか確認します。 /etc/inetd.conf
に次のような行があればおそらく大丈夫です。
tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot
Debian パッケージは一般的にインストールする際、 デフォルトで正しくセットアップできます。
歴史的に TFTP サーバは、 イメージを提供するディレクトリに /tftpboot
を使用します。 しかし Debian GNU/Linux のパッケージでは、 Filesystem Hierarchy Standard を満たす別のディレクトリを使用する可能性があります。 例えば、tftpd-hpa
では /var/lib/tftpboot
をデフォルトで使用します。 必要に応じて、本節の設定例を調整してください。
/etc/inetd.conf
を見て、in.tftpd の引数に与えられているディレクトリを覚えておいてください[7]。後でこのディレクトリを使います。 /etc/inetd.conf
を変更したら、 変更したことを inetd に伝えなければなりません。 Debian マシンでは /etc/init.d/inetd reload
を実行します。 他のマシンでは、inetd のプロセス ID を見つけて、 kill -HUP
を実行します。 inetd-pid
次に行うことは、 項4.2.1. 「どこでインストールイメージを探すか」 の記述にある、必要な TFTP ブートイメージを、 tftpd のブートイメージディレクトリに置く作業です。 tftpd が特定のクライアントの起動に用いるファイルへのリンクを、 ここに作成してください。 残念ながら、ファイルの名前は TFTP クライアントによって決まり、 強制力のある標準は存在しません。
PXE 起動では、必要なことがすべて netboot/netboot.tar.gz
tarball の中にセットアップされています。 単にこの tarball を、 tftpd ブートイメージディレクトリに展開してください。 pxelinux.0
を、 起動するファイル名として tftpd へ渡すよう、 dhcp サーバが設定されていることを確認してください。
[7] Debian で利用できる in.tftpd の代替では、デフォルトで TFTP リクエストをシステムログに記録します。いくつかは詳細情報を出力するのに -v
引数をサポートしています。起動時に問題がある場合、エラーの原因を診断する出発点として、こういったログメッセージをチェックすることをお勧めします。