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