Debian Lennyでpxebootを設定、AMD64対応のSqueezeをインストール

amd64用の起動ディスクの作成を省く目的で行ないました。
dhcpサーバとtftpサーバが動作するOSであればWin/Linux/Macを問いません。

今回は、Debian Lennyを使用した方法です。

■必要なパッケージの確認とインストール。

※tftpクライアントも用意します。

$ echo dhcp3-server atftpd tftp | apt-cache show `xargs` | less

※dhcp-3serverインストール時に下記のエラーが出ますが、
設定していないからですので問題ありません。

Starting DHCP server: dhcpd3 failed to start - check syslog for diagnostics.
invoke-rc.d: initscript dhcp3-server, action "start" failed. 

# echo dhcp3-server atftpd tftp | apt-get install `xargs`

■必要な起動イメージをダウンロード、圧縮ファイルを展開します。

$ wget ftp://ftp.riken.jp/11/debian/debian/dists/squeeze/main/installer-amd64/20110106+squeeze1/images/netboot/netboot.tar.gz

$ cd /var/lib/tftpboot && sudo tar zxvf ~/netboot.tar.gz

■「dhcpd.conf」の設定

インストール時にエラーが出る通り、初期設定では使えません。
構文は最後に「;」が必要ですので忘れないようにします。

「/etc/dhcp3-server」で再起動時に構文チェックがあるので、問題があればはじかれます。
vim で修正しますので、修正箇所を示します。

☆「option domain-name」で始まる2行はコメントアウトします。

# grep "^option domain" /etc/dhcp3/dhcpd.conf
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

☆「authoritative」のコメントアウトを外します。
# grep "^#authoritative" /etc/dhcp3/dhcpd.conf

☆subnetを設定します。ネットワーク情報は「ifconfig」コマンド等で確認、
自身の環境に合わせて下さい。

※正しいMACアドレスを確認して下さい。
 ダミーのMACアドレスの場合、構文チェックは通るように
 下記のように16進数で先にMACアドレスを指定しておきます。

subnet 192.168.1.0 netmask 255.255.255.0{
option routers 192.168.1.10;
option broadcast-address 192.168.1.255;
}
host clienthoge {
hardware ethernet 00:ff:ff:ff:ff:ff;
fixed-address 192.168.1.100;
filename "pxelinux.0";
}

☆dhcpサービスを再起動します。

# /etc/init.d/dhcp3-server start

☆トラブルシュートは?

# grep dhcp /var/log/syslog | tail -f

☆設定ファイルの構文は?

# man dhcpd

■tftpサーバの設定

「/etc/default/atftpd」が設定ファイルです。
「inetd」経由の起動は行ないません。

☆inetdの使用停止「USE_INETD=true ⇒ USE_INETD=false」に変更

USE_INETD=false

☆デーモンとして起動する「--daemon」オプションを追加、他はそのまま。

OPTIONS="--daemon --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 
--mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 
/var/lib/tftpboot"

☆tftpサーバのサービスを再起動する

# /etc/init.d/atftpd start

■tftpサービスの動作を確認する

下記のようにすれば分かるはず。。。

# ps -ef | grep tftp
# touch /var/lib/tftpboot/test.txt
# tftp localhost
tftp> ?
tftp> status
tftp> verbose
tftp> get test.txt
tftp> quit


■DHCPサーバのサービスを確認する

# LANG=C
# ps -ef | grep dhcp
# grep "hardware ethernet" /etc/dhcp3/dhcpd.conf
# arp -a
# ip addr | grep ether
# /sbin/ifconfig -a | grep HWaddr

☆DHCPサーバのポートを監視する。
 詳細パケットでMACアドレス等を確認出来る。

○DHCPリクエストの受信

# sudo tcpdump -X -vvv src port 67
23:03:53.378066 IP (tos 0x0, ttl 32, id 51499, offset 0, flags [DF], proto UDP (17), length 576) 
192.168.0.1.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 548, xid 0x18f927cc, Flags [Broadcast] (0x8000)


○DHCPリクエストに応答

# sudo tcpdump -X -vvv src port 68

○atftpdとの通信

# sudo tcpdump -X -vvv src port 1758

■Debian Squeeze AMD64版のインストール
 起動時に「DHCP...」表示の後、インストーラのメニュー画面が出れば正常。
 私の環境ではインストール中のミラーサイトの設定画面で、
 プロキシを設定しないと外に出れなかった。

 ネットワークから起動イメージを持ってくる方法だと、若干時間がかかるかも知れない。
 疎通確認手段を別に持って、気長に待つと良い。
 最小インストールとsshをインストールすると、後はリモートで作業が出来るのが嬉しい。

■後片付け
 一時的なDHCPネットワーク割り当てをいつまでも残してはならない。
 atftpdは、危険性を排除する設定を自身で行なえないなら、即座に無効にしなくてはならない。
 また、インストール後に確実にインストールしたHDDから起動出来るようにする為にも、
 不要なサービス停止処理は必須。

☆DHCPサーバ、TFTPサーバをを停止する。
 他に類似の利用していないサービスがないかも併せて確認する。
 ランレベルは「update-rc.d」なり、RH系(Debianにもある)の「chkconfig」なりで動作しないようにする。

# /etc/init.d/dhcp3-server stop
# /etc/init.d/atftpd stop

# ps -ef | grep "ftp\|dhcp"
# chkconfig --list | grep atftp
# chkconfig -s atftpd off
# chkconfig --list | grep dhcp
# chkconfig -s dhcp3-server off

サーバとして、AMD64を載せているシステムは最近はあまり見かけませんが、
まったりと遊べそうですね。。。