PXEブートによるインストール

文章



PXE対応ネットワークカードの用意

まずはPXE対応のNICを用意しましょう. PXE対応のNICとして,筆者としては「Intel PRO/100+マネージメント・アダプタ」(82559チップ使用,以下PRO/100+と略記)をお勧めします.これは,後述のRTL8139搭載のNICや,そのほか一般に安価に出回っているNICより割高ですが, PRO/100+に搭載のフラッシュROMには購入時点ですでにPXEのブートコードが書き込まれており,これによってハードウェアレベルの雑事に悩まされることなく,スムーズにネットワークブート環境を整えられます.

なお,NICによってはEP-ROMを挿すためのDIPのソケットが付いているものもありますが,それよりもフラッシュROMが載ったNICを用いる方が,オンボードでのブートコードの書き込みができて便利です.

また,Intel 8255x系のチップを使ったフラッシュROM搭載のNICで,最初から書き込まれているブートコードが古い場合, PXEのブートコード を入手し,その書き込みユーティリティを用いてブートコードを書き込めば, PXE対応のNICとして使えるようになります.



PXE対応NICの設定

ここではPRO/100+を使用するものとします. PRO/100+をPCに挿すと,マシンの起動時に

“Press Ctrl+S to enter the Setup Menu..”  

というメッセージが現われます.そこで[Ctrl]+[S]を押すと,ネットワークブートの設定画面になります.(ブートROMのバージョンによっては,設定画面が呼び出せないものもあります)

設定画面の中には,ブートROMのバージョンによって表示が多少違うと思いますが, “Try network first, then local drives” あるいは“Default Boot Network” というような選択肢があるはずですので,これを選んでおきます. PXEかRPLかの選択肢がある場合はもちろんPXEを選択します.これでマシンの起動時にDHCPのパケットが送出さるようになり,ネットワークブートが可能になります.なお,DHCPでサーバからの応答待ちになっている間に [Ctrl]+[C]を押してネットワークブートをキャンセルすることもでき,その場合はローカルディスクからのブートになります.

また,マザーボードのBIOSによって異なると思いますが, Award BIOS 6.0(Phoenix BIOS風の画面)の場合は,ブートROM付きのNICを挿したことにより, BIOS設定画面の「Boot」→「Other Boot Device」のメニューの中に, “INT18 Device (Network)”とは別に “Intel(R) Boot Agent Version 3.0.” のような項目が現われます.(下図)(ただし筆者環境ではこの画面でのブート設定に関係なく,ネットワークブートが行なえました)
なお,ブートROMイメージのバージョンによって,マザーボード側のBIOSのブートの設定よりも優先して NIC側の設定によってネットワークブートが可能になるタイプと,マザーボード側のBIOSのブート設定でネットワークブートを選択しないと NIC側のブートコードが有効にならないタイプがあります.これらについてはさまざまなケースが考えると思いますので,実際のハードウェア環境で確認して下さい.




BpBatchについて

PXE対応のNICがTFTPで読み込むブートローダには, 前述の通り BpBatchを使います. BpBatch は Linux や DOS などの OS をネットワークブートすることができます.なお,FreeBSD をディスクレスクライアントにする場合は,BpBatch ではなく,FreeBSD に付属の /boot/pxeboot を使います.

BpBatchは,

  http://www.bpbatch.org/  

より,bpb-exe.tar.gz または bpb-exe.zip として入手できます.同サイトには BpBatch の詳しいドキュメントもあるため,一通り目を通しておくとよいでしょう.

ところで,このBpBatchは,本来はディスクレスブートを目的としたものではありません. BpBatchでは,ネットワークブート時にサーバからディスクイメージをダウンロードし,それをクライアントマシンのローカルディスクに書き込んでOSを起動するという方式を主目的としています.

しかしながら,後述の CacheNever という BpBatch の環境変数を設定することにより,ローカルディスクを一切使用しないようにすることができ, BpBatch を使って完全ディスクレス環境を実現することができます.



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をフォアグラウンドで実行させた方がやりやすいでしょう.



TFTPサーバの設定

TFTPで転送されるブートローダとして必要なファイルは, BpBatchの場合はbpb-exeのアーカイブに含まれる,

  bpbatch.P, bpbatch.ovl, bpbatch.hlp     

の3つです.
ただし,この中のbpbatch.Pについては,うしろの「.P」を取り除いたbpbatchというファイル名にリネームしておく必要があります. (これは,TFTPサーバとして通常のtftpdを使用するための一種のハックで,.P を付けたままの場合はバッファサイズを大きくした特殊な TFTPサーバが使われるようになります)

一方,FreeBSD で pxeboot を使う場合は,FreeBSDがインストールされたマシンの /boot 以下に存在する pxeboot というファイルを使います.

これらのファイルはブートサーバ上の /tftpboot ディレクトリ以下に配置し, nobody権限でも読めるパーミッションにしておきます.

TFTPサーバの tftpd は inetd モードで起動されますが, /etc/inetd.conf の中の tftp の記述は,デフォルトでは '#' でコメントアウトされているはずです.そこで,このコメントアウトを解除してから inetd に HUPシグナルを送って設定を反映します.

TFTPサーバの設定ができたら, TFTPクライアントの,tftp コマンドを使用して,同じサーバマシン上で試しに bpbatch や pxeboot ファイルを取得してみて,TFTPサーバの動作を確認するとよいでしょう.

以上の設定・確認をFreeBSD上で行なった場合の実行例を,下に示します.


●TFTPの設定と確認(pxeboot を使う場合)
$ su  Password:  
# umask 22  
# mkdir /tftpboot  
# cp -p /boot/pxeboot /tftpboot       ← pxebootを配置
# chmod 444 /tftpboot/pxeboot         ← nobody権限でも読めるように  
# vi /etc/inetd.conf                  ← tftpのコメントアウトを外す(下参照)  
# kill -HUP `cat /var/run/inetd.pid`  ← inetdに設定を反映させる  
# exit  
$ cd /tmp  
$ tftp                                ← TFTPクライアントコマンドを起動  
tftp> connect localhost  
tftp> get pxeboot                     ← 試しにpxebootファイルを取得  
Received 166473 bytes in 0.1 seconds  
tftp> quit    
$ cmp pxeboot /tftpboot/pxeboot       ← ファイル比較して一致することを確認

●/etc/inetd.conf の中のtftpの記述(FreeBSDでの例)
  tftp   dgram   udp     wait    nobody  /usr/libexec/tftpd      tftpd /tftpboot  


BpBatch/pxebootの起動テスト

サーバ側のDHCPTFTPの設定が終ったら,ここでクライアントマシンの電源を入れ,BpBatchを動作させてみましょう.下図のようなBpBatchのプロンプトが出る状態になればOKです.

●BpBatchが対話モードで起動したところ
bpbatch.gif


FreeBSD の pxeboot についても同様に起動テストを行なうことができます.ただし,ここではまだNFSサーバの設定を行なっていないため, pxebootはNFS rootをマウントしようとして失敗する状態になるはずです.この時点ではこれでOKです.






パートナー



ニュースリリース | 会社概要 | プライバシーポリシー | リンク | ©2002-2008 Integrated Systems Co. Ltd. All Rights Reserved.