Cuturnの適当日記

徒然なるままに適当に駄文を吐き出しております

Tiny Core Linux PXE用のTFTPサーバで躓く

引き続きTiny Core LinuxでPXEサーバを作ろうとしていたが、TFTP周りで失敗。 解決の流れを記載する。

BusyboxのtftpdではPXEブートできない

BusyboxのtftpdでPXEブートしようとしたところ、VMware PlayerのBIOSが以下のエラーを出力した。

Trying to load: pxelinux.cfg/...
...
TFTP server does not support the tsize option

どうも、TCL inetutilsのtftpdではPXEブートに必要な拡張オプションを処理できないようだ。ubuntuも同様らしい。 RFC2349に対応していないということになるだろうか。

atftpd、あるいはtftpd-hpaが必要だが、Tiny Core Linuxの考え方にはまるようにインストールできるだろうか…。段々苦労の割に得るものが少なくなってきたぞ。lubuntuとか、あるいは普通にCentOS5とかで妥協した方がいいかもしれない。でもやった。

まずはコンパイルの準備

下記のページを参考に、gccやmakeといったコンパイルのためのパッケージをインストールする。

Building your own TCL Extension · puppetlabs/Razor-Microkernel Wiki · GitHub

$ tce-load -iw compiletc.tcz
$ tce-load -iw squashfs-tools.tcz
$ tce-load -iw glibc_apps.tcz
$ tce-load -iw glib2-dev.tcz
$ tce-load -iw fuse.tcz
$ tce-load -iw procps.tcz
$ tce-load -iw readline-dev.tcz
$ tce-load -iw pcre-dev.tcz

なお、readline-devとpcre-devはmake時のエラーメッセージから必要と判断した。

tftp.c:37:31: fatal error: readline/readline.h: No such file or directory
tftpd_pcre.h:23:18: fatal error: pcre.h: No such file or directory

atftpdのコンパイル

別のtftpデーモンとしてはatftp(Advanced TFTP Server)を利用する。 以下のSourceforgeからダウンロード。

atftp download | SourceForge.net

対象サーバにatftp-0.7.1.tar.gzを転送したあと、下記の通り作業を行う。

$ tar zxvf atftp-0.7.1.tar.gz
$ cd atftp-0.7.1
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
$ make
make  all-recursive
...

コンパイルが完了したので、出来たバイナリをパッケージングする。

$ make DESTDIR=/tmp/atftp install-strip
if test -z ''; then \
  make  INSTALL_PROGRAM="/bin/sh /home/tc/atftp-0.7.1/install-sh -c -s" \
...
$ cd /tmp
$ mksquashfs atftp atftp.tcz
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on atftp.tcz, block size 4096.
[=====================================================================================|] 32/32 100%
...

あとは、出来たパッケージをインストールする。

$ tce-load -i atftp.tcz

…あれ?再起動するとインストール消えるな…何故だ。/mnt/sda1/tce/optionalに入れても勝手にロードされないし…。んー。わからん。bootlocal.shにtce-loadを書くしかないか…?

起動の設定

普通に起動するには下記コマンドにて実行する。

sudo atftpd --pidfile /tmp/atftpd.pid --daemon --user root --port 69 /mnt/sda1/tftpd

自動起動しないので、/opt/bootlocal.shにatftpdの起動を追記。

#!/bin/sh
# put other system startup commands here
/opt/eth1.sh
sleep 2

/usr/local/etc/init.d/openssh start
udhcpd /etc/udhcpd.conf
#udpsvd -vE 0.0.0.0 69 tftpd /mnt/sda1/tftpd > /dev/null 2>&1 &
apachectl start
atftpd --pidfile /tmp/atftpd.pid --daemon --user root --port 69 /mnt/sda1/tftpd

上記設定を反映する。

$ sudo filetool.sh -b