戦場のプログラマー

名前は誰も知らない。

Raspberry PiをTFTPサーバーにする

最近TFTPを触り始めたのですが、こんなの当たり前すぎてみんな誰も記事にしてないんですかねー・・・。
今回はRaspberry PiをTFTPサーバーにしてみました。

f:id:wnoguchi0727:20140317083245j:plain

以下のコマンドでインストール。

sudo apt-get -y update
sudo apt-get -y install tftpd-hpa

でOKの、はずが

(snip)

Setting up tftpd-hpa (5.2-4) ...
tftpd user (tftp) already exists, doing nothing.

tftpd-hpa directory (/srv/tftp) already exists, doing nothing.
insserv: warning: script 'mathkernel' missing LSB tags and overrides
[....] Starting HPA's tftpd: in.tftpdinvoke-rc.d: initscript tftpd-hpa, action "start" failed.
dpkg: error processing tftpd-hpa (--configure):
 subprocess installed post-installation script returned error exit status 71
Errors were encountered while processing:
 tftpd-hpa
E: Sub-process /usr/bin/dpkg returned an error code (1)

エラーになった。。。

Oh yes, there's this Debian bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544089
OpenMediaVault • View topic - OpenMediaVault on the Home Media CE

そのままだとipv6で見に行こうとするのでだめらしい。
--ipv4TFTP_OPTIONS に渡してあげないといけないようです。 というか、元記事にも書いてありましたね・・・。よく読まないと。

pi@raspberrypi ~ $ grep TFTP_OPTIONS /etc/default/tftpd-hpa
TFTP_OPTIONS="--secure"

たしかに --ipv4 オプションがない。
/etc/default/tftpd-hpa を編集。

TFTP_OPTIONS="--secure"
↓
TFTP_OPTIONS="--secure --ipv4"

ワンライナーは以下。

sudo sed -i -e 's/TFTP_OPTIONS="--secure"/TFTP_OPTIONS="--secure --ipv4"/g' /etc/default/tftpd-hpa

そしてぶっ壊れを修正してあげる。

pi@raspberrypi ~ $ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up tftpd-hpa (5.2-4) ...
tftpd user (tftp) already exists, doing nothing.

tftpd-hpa directory (/srv/tftp) already exists, doing nothing.
insserv: warning: script 'mathkernel' missing LSB tags and overrides
[ ok ] Starting HPA's tftpd: in.tftpd.

立ち上がった。

デフォルトでは /srv/tftp/ がTFTPサーバーのルートになります。 所有権を変えておく。

sudo chown pi. /srv/tftp/

テストとして、WS-C3550のスイッチ設定ファイルをTFTPサーバーと化したRaspberry Pi(192.168.11.7)に送り込んでみる。

まずはTFTPサーバー側に空ファイルを用意しておく。こうしないとnot foundエラーになる。

pi@raspberrypi /srv/tftp $ touch switch-confg && chmod 666 switch-confg

Telnetでスイッチ(192.168.11.50)に接続。

% telnet 192.168.11.50
Trying 192.168.11.50...
Connected to 192.168.11.50.
Escape character is '^]'.


User Access Verification

Password: Kerberos: No default realm defined for Kerberos!

Password: 
Switch>enable
Password: 
Switch#copy run
Switch#copy running-config tftp
Address or name of remote host []? 192.168.11.7
Destination filename [switch-confg]? 
!!
2635 bytes copied in 7.320 secs (376 bytes/sec)

送れたっぽいですね。
Raspberry Pi側で確認。

pi@raspberrypi /srv/tftp $ cat switch-confg | head

!
version 12.1
no service pad
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname Switch
!

見れました。
こういう省電力で静音なマシンにわざわざ大層なサーバーをこしらえるまでもない、ちょっとしたユーティリティ的な仕事させるのっていいですね。

参考文献