Proxy DHCPによるネットワークブート
一切のストレージを積んでいないPCでOSを起動させる方法。それがネットワークブートです。起動時にHDDやCD-ROMからOSを読み込む代わりに、ネットワークからOSをダウンロードします。最近のPCであればたいていPXEという方式に対応しています。Intel Boot Managerという文字を見たことがある人も多いと思います。
広く知られているPXEブートの方法は、ネットワーク上のDHCPサーバを細工してやることでした。DHCPがIPアドレスを払い出すときに特殊なレスポンスを返すようにします。これの欠点は特殊なDHCPサーバが必要なこと。市販のルータでは対応できません。
既存のDHCPサーバを変更することなくPXEブートできないものか。調べて行き着いた方法がProxy DHCPサーバです。この実装としてpxe-pdhcpがあります。
pxe-pdhcpはProxy DHCPサーバーの実装です。Proxy DHCPはPreboot Execution Environment (PXE)というネットワークブートの標準規格を使ってディスクレスコンピュータをネットワークブートする際に使います。
http://d.hatena.ne.jp/viver/20080720/p2
Gentoo Linuxでの設定手順を説明します。
前提条件
- ネットワーク上に既にDHCPサーバがある。市販のルータなど。
- /mnt/nfsgentoo にネットワークブート用のGentoo Linuxが入っている。
- /mnt/nfsgentoo/boot/vmlinuz にネットワークブート用のカーネルイメージがある。このカーネルは以下のオプションが有効になっている必要がある:
- "Networking options" 以下:
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
- "File systems --> Network File Systems" 以下:
<*> NFS file system support
http://www.gentoo.org/doc/ja/altinstall.xml
[*] Provide NFSv3 client support
[*] Root file system on NFS
以下のパッケージが必要なのでemergeします:
- tftp-hpa
- syslinux
pxe-pdhcp
pxe-pdhcpはmakeして /usr/local/bin にコピーします。
svn co http://svn.coderepos.org/share/lang/c/pxe-pdhcp cd pxe-pdhcp make install -m 755 pxe-pdhcp /usr/local/bin
サービスを実行します。私の環境では -i eth0 では正しく動作してくれませんでした。
pxe-pdhcp -l 0.0.0.0 -b 255.255.255.255 -t サーバのIPアドレス pxelinux.0
tftp-hpa
/etc/conf.d/in.tftpdに以下を追記します。
INTFTPD_PATH="/mnt/nfsgentoo/boot/" INTFTPD_USER="nobody"
サービスを起動します。
/etc/init.d/in.tftpd start
syslinux
ブートローダをコピーします。
cp -a /usr/share/syslinux/pxelinux.0 /mnt/nfsgentoo/boot mkdir /mnt/nfsgentoo/boot/pxelinux.cfg
設定ファイルを作成します:/mnt/nfsgentoo/boot/pxelinux.cfg/default
default gentoo label gentoo kernel vmlinuz append ip=dhcp root=/dev/nfs nfsroot=サーバのIPアドレス:/mnt/usbgentoo
kernel行はカーネルイメージを指定します。TFTPサーバのルートから見たパスです。