Linux下做pxe,需要安装tftpd-hpa或atftpd,但是都可能遇到一件郁闷的事情——服务无法启动。使用ps aux |grep tftp看不到atftpd或者tfypd-hpa,但是netstate -l |grep udp却可以看到tftp服务已经启动,并正在udp69端口上等待着。这个时候如果启动服务/etc/init.d/atftpd start或/etc/init.d/tftpd-hpa start,在/var/log/syslog里面会报告port can't bind 69/udp already in used,或者类似的意思。
原因是Linux默认的tftpd服务使用/etc/inetd.conf,只要将里面的配置语句注销接可以了:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftp boot
变成
#tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftp boot
另外,如果使用atftd,注意/etc/init.d/atftpd中开头定义了"USE_INETD=true" 而后面又有if [USE_INETD=true] exit 0,这里明显不对,需要把这个true改成false。
之所以不用tftpd,因为它不支持tsize传输模式。