PXEサーバーをDebianやUbuntuで構築するのを調べるとtftpd-hpaを使う例がひっかかりますが、Jessieではどうやっても動かず、ウェブの情報によるとTrustyでも動かないようなのでXinetDとTFTPDをつかってTFTPサーバーを構築し、PXEブートを実現したいと思います。
isc-dhcp-serverがインストールされており、インターネットに接続できるのが前提です。動作確認したのはDHCPサーバーのバージョン4.3.1-6です。ホストOSはDebian Jessie(Version 8)、PXEブートするのはUbuntu Trustyという変態構成ですが、書いたのは私なので許してください。
他のOSもインストール時に選択できるようにする方法はそのうちまた書きます。
書きました...が、今見ている記事の手順を構築しているのが前提なので、まずは最後までご覧頂いてサーバーを構築してください。
ちなみにこの手順も動かなくなる日がいずれ来ると思います。動かなかったらゴメンなさい。
1.まずDHCPDにPXE配信に必要な設定を追記します。
192.168.1.6はDHCPサーバーが動いているサーバーのIPアドレスです。
192.168.1.150から192.168.1.239はDHCPクライン後がIPアドレスを要求したときにDHCPサーバーが配信するIPアドレスの範囲です。PXEブート時にこの範囲のIPアドレスが自動的に設定されてメディアレスインストールを実現します。
# vi /etc/dhcp/dhcpd.conf
allow booting;
allow bootp;
(設定の頭の方に追記)
...
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.150 192.168.1.239;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name "local.tooyama.org";
option domain-name-servers 192.168.1.6;
option ntp-servers 192.168.1.6;
next-server 192.168.1.6; #TFTPDが動くサーバー
filename "pxelinux.0"; #PXEのファイル
default-lease-time 21600;
max-lease-time 43200;
}
(PXE,TFTPDの設定をDHCPで配るIPアドレス情報に追記)
2.DHCPDを再起動します。
3.TFTPD、XinetDをインストールします。
参考にした情報:
# apt-get install xinetd tftpd tftp
4.inetdにTFTPDの設定を追記します。
参考にした情報:
# vi /etc/inetd.conf
#:OTHER: Other services
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
(最終行に追記)
5.XinetDのTFTPD向け設定を新しく作成します。
# vi /etc/xinetd.d/tftp
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = -v -s /var/lib/tftpboot #カレンドディレクトリーを設定
disable = noflags = IPv4
}
6.TFTPDのカレントディレクトリーを作成します。
# mkdir -p /var/lib/tftpboot
# chmod -R 777 /var/lib/tftpboot
# chown -R nobody /var/lib/tftpboot
7.XinetDを再起動することでTFTPDが有効になります。
# systemctl restart xinetd
8.UbuntuのPXEイメージをダウンロードしてTFTPDのカレントディレクトリーに展開します。
# cd /var/lib/tftpboot/
# wget http://ja.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/netboot.tar.gz
# tar zvxf netboot.tar.gz
こんな構成で展開します。
# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── pxelinux.0 -> ubuntu-installer/amd64/pxelinux.0
├── pxelinux.cfg -> ubuntu-installer/amd64/pxelinux.cfg
├── ubuntu-installer
│ └── amd64
│ ├── boot-screens
│ │ ├── adtxt.cfg
│ │ ├── exithelp.cfg
│ │ ├── f1.txt
│ │ ├── f10.txt
│ │ ├── f2.txt
│ │ ├── f3.txt
│ │ ├── f4.txt
│ │ ├── f5.txt
│ │ ├── f6.txt
│ │ ├── f7.txt
│ │ ├── f8.txt
│ │ ├── f9.txt
│ │ ├── menu.cfg
│ │ ├── prompt.cfg
│ │ ├── rqtxt.cfg
│ │ ├── splash.png
│ │ ├── stdmenu.cfg
│ │ ├── syslinux.cfg
│ │ ├── txt.cfg
│ │ └── vesamenu.c32
│ ├── initrd.gz
│ ├── linux
│ ├── pxelinux.0
│ └── pxelinux.cfg
│ └── default -> ../boot-screens/syslinux.cfg
└── version.info5 directories, 26 files
9.tftpクライアントで接続してみます
先ほど展開したファイルのなかからversion.infoをTFTPクライアントでダウンロードしてみましょう。
# ls /var/lib/tftpboot
pxelinux.0 pxelinux.cfg ubuntu-installer version.info
TFTPDが待ち受けしているIPアドレス(本例では192.168.1.6)にアクセスします。
$ tftp 192.168.1.6
tftp> get version.info
Received 60 bytes in 0.0 seconds
tftp>
準備が整ったのでクライアントを同じネットワーク内に接続して、起動してみましょう。
Installを選択すると少々待ち時間が発生しますが、ちょっと待つとインストーラーが起動します。あとは引き続き、Ubuntuをインストールするだけです。手順は簡単だけどトラップがありまくりですね。
[2/8/2016追記]
ただ、このままだとOSを追加したり削除したりするときにシンボリックリンクがなくなると動かなくなるので、次のように実行したほうがいいです。
# rm -rf /var/lib/tftpboot/pxelinux.cfg
(シンボリックリンクを削除)
# mkdir -p /var/lib/tftpboot/pxelinux.cfg(ディレクトリーを作成)
# nano /var/lib/tftpboot/pxelinux.cfg/default
(以下の内容を記述)
# D-I config version 2.0
include ubuntu-installer/amd64/boot-screens/menu.cfg
default ubuntu-installer/amd64/boot-screens/vesamenu.c32
prompt 0
timeout 0# cd /var/lib/tftpboot/
# rm pxelinux.0(ブードローダーファイルのシンボリックリンクを削除)
# cp ubuntu-installer/amd64/pxelinux.0 ./pxelinux.0(ブードローダーファイルの実体をTFTPDのカレントにコピー)
これでTrustyを削除して別のOS(例えば次のLTS)に切り替えるときも安心です。