Network Users' Group ``wheel'' / Dai ISHIJIMA's Page /
ハードディスク消去ツール / PXEブート
#はじめに | #ネットワークブートとは | #「wipe-out」のマウント | #DHCPサーバの設定 | #TFTPサーバの設定 | #NFSサーバの設定 | #iPXEによるネットワークブート

初版: 2022-12-24
最終更新日: 2022-12-24


PXEブート 〜 ネットワーク経由で「wipe-out」を起動させる


◆はじめに

通常、パソコンはハードディスクから起動するだけでなく、 光学ドライブやネットワークなどからブートすることが可能になっています。 機種にもよりますが、起動時にどれからブートするかを選択する メニューを表示することができるでしょう。 メニューはおおよそ以下のようなものです。
-------------------------------
   Please select boot device:
-------------------------------
 Hard Disk: WDC WD5000AAKX
 Optical:   HL-DT-ST DVDRAM
 USB HDD:   PQI FlashDrive
 Network:   Realtek PXE B02
 Removable: MATSHITA CF-VFDU03
-------------------------------
           BIOS Setup
     Run System Diagnostics
-------------------------------
  ↑ and ↓ to move selection
  ENTER to select boot device
-------------------------------
このメニューでは、 ハードディスク、光学ドライブ、USBメモリ、ネットワーク、フロッピー のいずれかから起動することが可能となっています。

ハードディスク消去ツール「wipe-out」は、 このようなさまざまな起動方法に対応しており、 その一つが「PXEブート(ネットワークブート)」です。


◆ネットワークブートとは

「PXEブート」、あるいは「ネットワークブート」とは、 起動に必要なブートストラップコードやOSをネットワーク経由で ダウンロードして起動する方法です。

「wipe-out」が利用しているFreeBSDでは、 最初のブートストラップコード(pxeboot)をTFTPというプロトコルで ダウンロードし、 それより高次のブートコード(たとえば「loader.lua」)と カーネルなどをNFSでダウンロードします。 「wipe-out」もこの方法に対応しており、 適切にサーバ(DHCP・TFTP・NFSサーバ)を設定しておくと、 ネットワーク経由でサーバから必要なファイルをダウンロードして 起動することが可能となっています。

逆に言えば、ネットワークブートを利用するには、 サーバ(DHCP・TFTP・NFSサーバ)を適切に設定しておく必要があります。


◆「wipe-out」のマウント

各種サーバの設定に先立ち、「wipe-out」のイメージを サーバでマウントしておく必要があります。 物理的にCD-Rなどのメディアに書き込んだものを使用する場合は 光学ドライブに入れてマウントします。

このページでは、「wipe-out」のマウントポイントを 「/cdrom」と仮定します。 マウントするには、たとえば

# mount /cdrom
とします。

物理メディアではなくISOイメージ(wpoout.iso)をマウントするには

# mdconfig -a -t vnode -f wpout.iso
# mount_cd9660 /dev/md0
とします。

※お使いの環境に合わせてアレンジしてください。 マウント後は関連するサーバ(mountdなど)を再起動させてください。


◆DHCPサーバの設定

DHCPサーバは、クライアント設定するIPアドレスなどの 情報を提供するサーバです。 この情報に従って、クライアントは自身のIPアドレスなどの ネットワーク接続に必要な設定を行います。

FreeBSDでよく用いられるISC DHCPサーバの設定は、 /usr/local/etc/ に置いてある dhcpd.conf で行います。 たとえば、192.168.1.0/24というネットワークで、 各種のサーバが192.168.1.1という場合は、 dhcpd.confに以下のような設定を行います。

option domain-name		"example.jp";
option domain-name-servers      192.168.1.1;
option ntp-servers		192.168.1.1;
default-lease-time		3600;
max-lease-time			7200;
ddns-update-style		none;
subnet 192.168.1.0 netmask 255.255.255.0 {
	range	192.168.1.2 192.168.1.100;
}
PXEブートを利用するには、 最初にダウンロードするブートストラップコードのファイル名と NFSで利用するサーバのマウントポイントを指定します。 たとえば前者は「/boot/pxeboot」で、 後者は「192.168.1.1:/cdrom」です。

これらを加えた dhcpd.conf は以下のようになります。

option domain-name		"example.jp";
option domain-name-servers      192.168.1.1;
option ntp-servers		192.168.1.1;
default-lease-time		3600;
max-lease-time			7200;
ddns-update-style		none;
subnet 192.168.1.0 netmask 255.255.255.0 {
	range			192.168.1.2 192.168.1.100;
	filename        	"boot/pxeboot";
        option root-path	"192.168.1.1:/cdrom";
}
設定ファイルを書き込んだら、dhcpdを起動(あるいは再起動)しておきます。


◆TFTPサーバの設定

TFTPは、inetd経由で利用します。 /etc/inetd.confのtftpの行を有効にします。
tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /cdrom/
ファイルを書き換えたら、inetdを起動(あるいは再起動)しておきます。


◆NFSサーバの設定

NFSの設定は /etc/exports で行います。
/cdrom  -network 192.168.1.0 -mask 255.255.255.0
ファイルを書き換えたら、nfsdを起動(あるいは再起動)しておきます。 nfsdを動かすためには、mountdとrpcbind(portmapper)も 起動(あるいは再起動)しておきます。


◆設定完了

サーバの設定は以上です。 パソコンの起動デバイスをネットワーク(PXE)に指定して 起動してください。


◆iPXEによるネットワークブート

iPXEは、必要なファイルのダウンロードにHTTPなど、 より高次のプロトコルを用いることのできるファームウェアです。 これを使うと、「wipe-out」のISOイメージを用意することなく 「wipe-out」を利用することが可能となります。

iPXEを利用するためには iPXEのウェブサイトから undionly.kpxeを あらかじめダウンロードしておき、適当な場所に配置する必要があります。 また、DHCPの設定を書き換える必要があります。

DHCPの設定は、例えば以下のようになります。

option domain-name		"example.jp";
option domain-name-servers      192.168.1.1;
option ntp-servers		192.168.1.1;
default-lease-time		3600;
max-lease-time			7200;
ddns-update-style		none;
subnet 192.168.1.0 netmask 255.255.255.0 {
	range			192.168.1.2 192.168.1.100;
        option root-path	"/path/to/undionly";
        if exists user-class and option user-class = "iPXE" {
               filename "http://www.wheel.gr.jp/boot/wpout-current.txt";
        }
        else {
               filename "undionly.kpxe";
        }
}

また、tftpの設定では、「undionly.kpxe」を置いた場所を指定します。

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /path/to/undionly/

iPXEを用いたブートは2段階になります。

  1. まず、DHCPでブートストラップとして 「undionly.kpxe」をTFTPで受け取ります。
  2. 次に、「undionly.kpxe」がHTTPを使って「wipe-out」を起動する 手順を受け取り、それを実行します。
この手順が「dhcpd.conf」の「if文」の分岐に相当します。

「http://www.wheel.gr.jp/boot/wpout-current.txt」には、

#!ipxe

kernel http://www.wheel.gr.jp/pub/syslinux-6.03/bios/memdisk/memdisk iso raw
initrd http://www.wheel.gr.jp/~dai/software/wipe-out/wpout-current.iso
boot
が書かれています。 先頭行の「#!ipxe」はiPXEのスクリプトであることを示しており、 スクリプトでは 「kernel …」や「initrd …」を実行してから起動することを指示しています。 HTTPで「wpout-current.iso」がダウンロードされてブートします。


◆iPXEによるPXEブート

iPXEを使って 通常の(サーバで「wipe-out」をマウントしておく)PXEブートをするには、 DHCPの設定を、例えば以下のようになります。
option domain-name		"example.jp";
option domain-name-servers      192.168.1.1;
option ntp-servers		192.168.1.1;
default-lease-time		3600;
max-lease-time			7200;
ddns-update-style		none;
subnet 192.168.1.0 netmask 255.255.255.0 {
	range			192.168.1.2 192.168.1.100;
	option root-path	"192.168.1.1:/cdrom";
        if exists user-class and option user-class = "iPXE" {
               filename "tftp://192.168.1.1/boot/pxeboot";
        }
        else {
               filename "undionly.kpxe";
        }
}

inetd.confの設定は以下のようにします。

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /cdrom/


◆トラブルシューティング

「pxeboot」をダウンロードできない場合は
% tftp 192.168.1.1
tftp> get /boot/pxeboot
Received 387073 bytes during 0.2 seconds in 760 blocks
tftp> ^D
として、「pxeboot」をTFTPでダウンロードできるか確認してください。

「cannot open /boot/lua/loader.lua: no such file or directory」 などのメッセージが出て 「loader.lua」などをダウンロードできない場合は NFSの設定を確認したり、

# mount_nfs 192.168.1.1:/cdrom /mnt
などでNFSマウントが可能であることを確認してださい。

よくあるミスは、設定ファイルを書き換えた後で 関連するサーバ(dhcpd・inetd・nfsd・mountd・rpcbind, etc)の 再起動を忘れているというパターンです。 設定ファイルを書き換えたら、関連するサーバを忘れずに(再)起動して 設定を反映させましょう。


◆関連リンク