PXEを使ってPCもディスクレスにしよう

YAMAMORI Takenori ●yamamori

●DHCPサーバのインストールと設定

PXEのブートプログラムが発するDHCPに応答するためのサーバプログラムとして dhcpdを用意しましょう. dhcpdには,ISC(Internet Software Consortium)版(http://www.isc.org/) を用います.

ここではISC版 dhcp-2.0 系を使うことにします. ISC版dhcp-3.0系を使う場合は dhcpd.conf の書き方が少々異なるため, 別途マニュアルなどを参照して下さい. なお,PXE のブートコードのバージョンによっては dhcp-2.0 との間で問題が発生することがあります. もしPXEでうまくブートできない場合は コラム「dhcp-2.0系のソースの修正」を参照して下さい.

dhcp-2.0xは,「./configure; make」方式でソースからインストールできます. (ただし,configureスクリプトはGNU autoconfではありません) GNU makeなら, make DEBUG='-O2' のようにして,コンパイラの最適化オプションを与えてもよいでしょう.

ここで,dhcpのバージョンや環境によっては, BPF(Berkeley Packet Filter)関係でエラーが出てmakeが通らないことが あるかも知れません. その場合,ソースツリーのincludes/site.hの中の「#define USE_SOCKETS」 を有効にして,BPFを使わず socket() を使うように変更するという方法があります.

dhcpをmakeすると,dhcpd以外にもいくつかのコマンドが作成されますが, 必要なコマンドは,serverディレクトリの下に作られるdhcpdのみです. 最低限,dhcpdだけをインストールしても構いません.


○PXE用dhcpd.confの設定

dhcpdがインストールできたら,PXE用のdhcpd.confを記述します. /etc/dhcpd.confの記述例を下のリストに示します. ここでは,クライアントのIPアドレスは, NICのMAC(イーサネットアドレス)を判断して固定的に割り当て, DHCPというよりBOOTP風の動作をさせています.

ここで,"PXEClient"01:04:00:00:00:00という記述が重要で, これはNIC上のPXEのブートプログラムに対して, 適切なPXE対応のDHCPサーバであると認識させるために必要です. (ただし,PXEのブートコードによっては,この記述がなくてもブートできる場合があります)

option-135 "-i"はBpBatchに対するオプションで, これによりBpBatchが対話モードで動作します. BpBatchの設定が完了したら, "-i"の代わりにBpBatchのコマンドが記述されたスクリプトのファイル名を指定して, 自動的にネットワークブートを行なうこともできます. (その場合は、スクリプトのファイル名の拡張子を .bpb とし、.bpb を覗いたファイル名を option-135 で指定します)

option root-pathのところには, ブートするディスクレスクライアント用のNFS rootの位置を記述します.

●リスト /etc/dhcpd.confの記述例(BpBatchの場合)
server-identifier server; ← DHCPに応答するインターフェイスに付けられたホスト名
server-name "server";     ← クライアントに通知されるサーバ名 " "で囲む

option domain-name "localdomain";  ← DNSドメイン名 " "で囲む
option domain-name-servers server; ← DNSサーバのIPアドレスに対応するホスト名
option routers server;             ← ルータのIPアドレスに対応するホスト名

subnet 192.168.1.0 netmask 255.255.255.0 {  ← subnetの定義が一応必要
}

host client {                     ← クライアントのホスト名
  hardware ethernet 00:d0:b7:XX:XX:XX; ← クライアントのNICのMACアドレス
  fixed-address client;           ← クライアントのIPアドレスに対応するホスト名
  option dhcp-class-identifier "PXEClient";              ← PXEのため必要
  option vendor-encapsulated-options 01:04:00:00:00:00;  ← PXEのため必要
  filename "bpbatch";                  ← ブートファイルのファイル名 " "で囲む
  option option-135 "-i";              ← bpbatchに与えるオプション " "で囲む
  option root-path "/diskless/linux";  ← NFS rootを指定 " "で囲む(あとで使用)
}



●リスト /etc/dhcpd.confの記述例(FreeBSDのpxebootの場合)
server-identifier server; ← DHCPに応答するインターフェイスに付けられたホスト名
server-name "server";     ← クライアントに通知されるサーバ名 " "で囲む

option domain-name "localdomain";  ← DNSドメイン名 " "で囲む
option domain-name-servers server; ← DNSサーバのIPアドレスに対応するホスト名
option routers server;             ← ルータのIPアドレスに対応するホスト名

subnet 192.168.1.0 netmask 255.255.255.0 {  ← subnetの定義が一応必要
}

host freebsd {                    ← クライアントのホスト名
  hardware ethernet 00:d0:b7:XX:XX:XX; ← クライアントのNICのMACアドレス
  fixed-address freebsd;          ← クライアントのIPアドレスに対応するホスト名
  option dhcp-class-identifier "PXEClient";              ← PXEのため必要
  option vendor-encapsulated-options 01:04:00:00:00:00;  ← PXEのため必要
  filename "pxeboot";                   ← ブートファイルのファイル名 " "で囲む
  option root-path "/diskless/freebsd"; ← NFS rootを指定 " "で囲む
}

なお,初めてdhcpdを起動する際には, あらかじめサイズゼロのdhcpd.leasesファイルを touchコマンドなどで作成しておく必要があります. dhcpd.leasesの場所はOSやdhcpのバージョンによって異なりますが, とりあえずdhcpdを起動してみればその場所がエラーメッセージで表示されるため, それにしたがえばよいでしょう.

あとdhcpdは,dhcpd.confファイルの更新後, “kill -HUP”でシグナルを送っても再読み込みさせることはできず, いったんdhcpdをkillしてから起動しなおす必要があります. そこで,dhcpd.confの設定およびディスクレスでのブートテストを行なう際には, “dhcpd -d”とデバッグオプションを付けて起動し, デバッグメッセージを表示させるとともに dhcpdをフォアグラウンドで実行させた方がやりやすいでしょう.


To『PXEを使ってPCもディスクレスにしよう』[index]


このページは、技術評論社 「パワーアップFreeBSD」および SoftwareDesign 2000年10月号、11月号『PXEによるネットワークブート設定術』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori