戦場のプログラマー

名前は誰も知らない。

Mac OS XでTFTPサーバーを起動する

Mavericksです。

初めにサービスの設定ファイルを見てみる。

% cat /System/Library/LaunchDaemons/tftp.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>com.apple.tftpd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/libexec/tftpd</string>
        <string>-i</string>
        <string>/private/tftpboot</string>
    </array>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <true/>
    </dict>
    <key>InitGroups</key>
    <true/>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <key>SockServiceName</key>
            <string>tftp</string>
            <key>SockType</key>
            <string>dgram</string>
        </dict>
    </dict>
</dict>
</plist>

まずはサンプルのファイルを用意。

% cat <<EOF | >/private/tftpboot/hello.txt
Hello, and
GoodBye.
EOF

まずはつないでみる。

% tftp localhost
tftp> status
Connected to localhost.
Mode: netascii Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> quit

Connected って出ておっ、つながったかなっておもうじゃないですか。

% tftp localhost
tftp> get hello.txt
Transfer timed out.

tftp> quit

つながったと思った?残念、つながってませんでした!

% sudo lsof -i:69

空っぽなのです。

サービスを立ち上げます。

% sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
% sudo lsof -i:69                                                (git)-[master]
COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd   1 root  108u  IPv6 0x4b902fe356b26297      0t0  UDP *:tftp
launchd   1 root  110u  IPv4 0x4b902fe35704aec7      0t0  UDP *:tftp

今度こそ立ち上がったっぽいです。

% tftp localhost
tftp> get hello.txt
Received 26 bytes in 0.0 seconds
tftp> quit

中身を確認。

% pwd           
/Users/noguchiwataru/
% cat hello.txt
Hello, and
GoodBye.

用が済んだらサービスを停止する。

% sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
% sudo lsof -i:69

参考文献