GeekFactory

int128.hatenablog.com

Proxy DHCPによるネットワークブート

一切のストレージを積んでいないPCでOSを起動させる方法。それがネットワークブートです。起動時にHDDやCD-ROMからOSを読み込む代わりに、ネットワークからOSをダウンロードします。最近のPCであればたいていPXEという方式に対応しています。Intel Boot Managerという文字を見たことがある人も多いと思います。

広く知られているPXEブートの方法は、ネットワーク上のDHCPサーバを細工してやることでした。DHCPIPアドレスを払い出すときに特殊なレスポンスを返すようにします。これの欠点は特殊な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
[*] Provide NFSv3 client support
[*] Root file system on NFS

http://www.gentoo.org/doc/ja/altinstall.xml

以下のパッケージが必要なので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サーバのルートから見たパスです。

クライアントPC

ネットワークから起動するようにBIOSを設定します。Boot from LANとか書いてあるはず。あとは成功を祈って再起動するのみです。

Good luck!