tftpd-hpa の設定について

ハマった場所をメモ。
環境: Ubuntu で tftp-hpa を起動(させているつもり)
症状: tftp-hpa の設定が反映されない


普通に使うなら

/etc/default/tftpd-hpa

を編集して

# /etc/init.d/tftpd-hpa start

で良いはず。

ところが、inetdでtftpのサービスが動いていると上の方法では上手くいかない。

というのも、inetdがすでにポートを握っているので、後からtftpd-hpaを起動しようとしてもポートがバインドできず起動に失敗する。

実際に

/var/log/syslog

を見れば

(前略)in.tftpd[0000]: cannot bind to local socket: Address already in use

とかでている。*1

で、何が問題の原因かというと

/etc/inetd.conf

のなかにある

tftp dgram udp wait 云々

という一行。*2

こいつが inetd に tftpd のポート (UDP port 69) をリッスンさせてしまうためにデーモンがバインドできなくなってしまう。

確認方法としては

# netstat -lnp|grep 69

なんてのがある。

これをやって、

udp 0 0 0.0.0.0:69 0.0.0.0:* XXXX/inetd

と出ていたらアウト。*3

対処法は明確

/etc/inetd.conf

の該当行をコメントアウトして inetd を再起動。

今回はイライラしていたので

pkill inetd

で殺してしまった。*4

*1:ただ、コンソール上はそれが見えないから始末が悪い。(つながらなくて初めて気づく)

*2:ちなみに 云々 の部分にある設定でtftpが動作するので、運良く(悪く?)同じ設定になっていたら気づかない

*3:XXXXはプロセスid

*4:いいかどうかはさておきとりあえず動きはした。