PXEの使い方
PXE(Preboot eXecution Environment)は、Intelの作成した、ネットワークブートの為の規格であり、サーバおよびクライアントが従うべきプロトコルなどが規定されている。PXE準拠のNIC(Network Interface Card)は、これに準拠したソフトウエアを、そのROM上にもっており、PXEサーバが用意されたネットワーク環境において、ネットワークブートが可能となる。サーバとして、PXEサーバ(ProxyDHCP、(M)TFTPサーバ)と、DHCP(またはBOOTPサーバ)を動作させる必要がある。規格の詳細については最後のリファレンスを参照されたい。
| 配布元 www.isc.org | |||||||||||||||||||||||||
| Install: (SoftwareDesign誌によると、2.0pl15を使用し3は使わない方が無難とのこと) # configure; make; make instal
| |||||||||||||||||||||||||
| /etc/dhcpd.conf の設定 例 (詳しくはマニアルを参照)
|
| PXE 0_1-20 が、RedHat 7 にある。RedHat6.2 にはそれより古いバージョン 0_1-14 がある。内容の違いはしらない。 | |||||||||
PXEは、それ単体では動作せず(動いても良さそうだが)、DHCPまたは、Bootp とともに動作させる必要がある。その場合、DHCPとPXE serverに
2-1. DHCP を使用する場合
2-2. Bootp を使用する場合
|
| 注1) Preboot Execution Environment(PXE) Specification (from intel homepage) Version2.1 の 2.2.3 Proxy DHCP に、DHCPOFFER (クライアントからのブロードキャスト問い合わせに対する)DHCP または Bootp
サーバからの返答に、RFC1084(2132) Option60 = “PXEClient”があって、かつ Option43(encapsulated option)が無い場合には、以降クライアントは
port=4011に対して DHCPREQUESTを出すとある。Proxy DHCPサーバはport=4011を使用するように設定が可能である(pxe.conf)ため、DHCP/bootpサーバと
ProxyDHCP(PXEサーバ)を同じホストに用意することができる。 さらに、高度な技として、Option43 のTag6 PXE_DISCOVERY_CONTROL を使用する方法がある。 |
|
| 注2) 基本的な仕組みとして、PXEは最初に DHCPにより自機の IPアドレス等を得た後(DHCPDISCOVER step)、bootserverの情報を得るために再度 DHCPプロトコルを使用する(BootServerRequest step)。DHCPではサーバが過程により流す情報を変化させるようにはできていないので、2番目のステップはProxy DHCP(PXE サーバによる)で行うことになる。これら2つのサーバ(DHCPとDHCP Proxy)が同じポートを使用できないので、注意1が必要となる。 一般に、DHCPサーバが担うのは、Client IPの解決などだけで、あとは DHCP-proxy(PXE)サーバにまかせるが、DHCPからの情報に、bootserver,file情報(linux.0,1,2を供給する PXEのブートサーバとは別)bootserverPXE_TAGの TAG=6,7,8,9,10を含むことが可能である。 dhcpd.confの例をここに示す。ただし、この場合、BootServerRequest step bootサーバがこれらの情報を再びクライアントに告げないことが必要である。 参考:いくつかのセッションの tcpdump 出力 1 2 (MS-word format) |
|
| 注3) DHCPからの応答に、PXE encapsulated-option を不完全に含めると、PXE client からTAG XXX が足りないと言われる。 |
/etc/pxe.conf の例
|
/etc/services にPXEの設定を入れる。
|
3.TFTPの設定
次に一般的な (M)TFTPの設定が必要である。 /etc/servicesにtftp、mtftp
を加える。
| ||
|
/etc/inetd.conf に tftpまたは mtftp を加える。inetdのHUP killを忘れないように。
|
| (M)TFTPにより、クライアントがブートのためダウンロードするファイルイメージを用意する。 |
/tftpboot/X86PC/UNDI/linux-install/linux.0 ← PXEサーバパッケージに添付されている。
linux.1 ← Linux kernel イメージ、普通に
make bzImageで作成されるもの。
linux2 ← RAMdiskをrootにするなら、initrdイメージ
/tftpboot/X86PC/UNDI/Bstrap/bstrap.0 ← PXEサーバパッケージに添付されている。
(現在は不要?)
次に dhcpd.conf での応用例を挙げる。ここでは、DHCPサーバで DHCP-proxyサーバの役割を行うという技を使っている。
例1
|
上の例では、PXEサーバの((M)TFTPの)bootserverを見つけるのに、Multicast を使用する。クライアント画面 にLocal Boot, kick start, network boot と出力し、それぞれServer_type を 0,13,14とする。pxe.confにも[Service_Types]、[X86PC/UNDI/linux-install/ImageFile_Name]等に対応するところを書くこと。vendor-encapsulatedで bootserver discovery にmulticastを指定するようにしているので、DHCP のnext-server option をNFSサーバの指定などに使うことができるようになる。
例2
|
この例では、bootserverを探すのに、unicast を使用するTAG=8 を使用している。multicastを抑止するため、TAG=6に3(broadcast,multicastの抑止)を指定している。
| カーネルの再コンパイル root file system を NFSにし、NFSサーバ名と root file system のパス名をbootp(またはDHCP)から得る(3)には、kernelの再コンパイルが必要である。また、network driver はmoduleでなく、静的リンクしておく必要がある(1)。 再コンパイル手順(/usr/src/linux で make xconfig 必ず以下の順序で)
|
例:
| /raid/md0 130.87.57.225(rw) 192.168.197.0/255.255.255.0(rw,no_root_squash) |
この後、exportfs -auv; exportfs -av とやるわけだが、exportfs -vできちんと出来ているかチェックすること。
/etc/fstab は例えば
| dcpf001:/raid/md0/bt/rl / nfs defaults
0 0 /proc /proc proc defaults 0 0 |
| dhcpd.tab の
root_path に書けるのはなぜか16文字未満のようである。それ以上にすると、なぜか
/tftpboot/host_name をマウントしようとする。 |
6.Bpbatchと Intel PXE server との比較
| Bpbathはバイナリーしかない、PXEサーバはソースがある。 | |
| Bpbatchは、kernel にオプション引数を渡すことができるが、PXEでは渡せない。single
user modeで立ち上げるにはどうすればいいんだ! その後、RedHat 7.3に含まれている pxe-0.1に付属している pxe-linux/nbp.linux/linux.0 (linux.0についてはここ)では、立ち上がり時にクライアントで kernel option を聞いてくるようになった。しかし、クライアント側のコンソールで人間がタイプインする必要があるので、あまりうれしくない。 | |
| Bpbatch.comによると、PXEは不安定らしい。(とくにMTFTPが) |