AFP(Apple Filing Protocol)。



Macのファイル共有はOSXからSMB/CIFSになったと勝手に思いこんでたから驚いた。AppleTalkが今に生きてるとは。



ただ、AFPは下位レイヤにAppletalkじゃなくTCPを使うことができるそうなので納得。



追記:コメントで教えていただきましたが、さいきんAppletalkは死んでしもうたそうです。R.I.P.



UNIX系でAppleTalk互換ソフトウェアといえばNetatalk。



Macでファイル共有するなら正直SMB/CIFSでいいかなとも思ったが、どうもNetatalkの方が軽いと聞いたので、試しに使ってみる。



iTunesのライブラリも置いてみたいのだ。



netatalkには、AFPデーモンのafpd、CNID管理のcnid_metad、appletalkを動かすatalkd、リモートプリントサービスのpapd、Mac向けタイムサーバのtimelordが含まれる。



AFP over TCPで要るのは、afpd, cnid_metadと理解した。



Macのファイル共有で面白いのは各ファイル、フォルダに固有のIDを付けて管理するという点。パスを使わないのだ。これは大昔からaliasという考え方があったせいか。



そして、ホストのファイル、ディレクトリとID(CNID, Catalog Node ID)のくくりつけを管理するのがcnd_metadということらしい。(metaという名前だけに、DBは別にあるのだが)






net/netatalkからインストール
# cd /usr/ports/net/netatalk
# make config
Apple Talkを外す。
# make install clean
苦難の設定



すごく大変だった。



なんかマニュアルがすごく分かりにくく感じる。



共有フォルダ設定はAppleVolumes.defaultを使い、それ以外はnetatalk.conf, afpd.confを使うようだ。



以下を見ながら試行錯誤。



[http://netatalk.sourceforge.net/2.2/htmldocs/configuration.html#id1590298](http://netatalk.sourceforge.net/2.2/htmldocs/configuration.html#id1590298)



/usr/local/etc/netatalk.confで全般の設定。



変えたのは以下の二点。
#### machine's AFPserver/AppleTalk name.
ATALK_NAME=sylph_osx
#### Set which daemons to run.
#### If you use AFP file server, run both cnid_metad and afpd.
CNID_METAD_RUN=yes
AFPD_RUN=yes
/usr/local/etc/afpd.conf



変更なし。






/usr/local/etc/AppleVolumes.default



ここで共有フォルダの設定。下記において最初の二行はデフォルト。



最後の一行のみ追加した。



~はホームディレクトリだな。
:DEFAULT: options:upriv,usedots
~
/export/itunes itunes
なお、以下にオプションが山ほど。



[http://netatalk.sourceforge.net/2.2/htmldocs/AppleVolumes.default.5.html](http://netatalk.sourceforge.net/2.2/htmldocs/AppleVolumes.default.5.html)



書式は以下の通り。



<共有フォルダ実パス> <外部への共有フォルダ名> [<オプション>]



オプションでめぼしいものは以下の二つくらいかな。
tm OSXのタイムマシンサポートを有効に。
ro 読み取り専用
複数指定する場合にはたとえば(実際にはtmとroを一緒に使うことはないが)以下のようにカンマ(,)でつなぐ。
/dir/path share options:tm,ro
そうしたら、/etc/rc.confに以下を追加する。



netatalkを動かすにはavahi_daemonが必要で、avahiを動かすにはdbusが必要だからこんな感じ。



なお運用中に設定を変更した場合にはこれらサービスをすべて再起動したほうがいいようだ。
#AFP
dbus_enable=&#34;YES&#34;
avahi_daemon_enable=&#34;YES&#34;
avahi_dnsconfd_enable=&#34;YES&#34;
netatalk_enable=&#34;YES&#34;
cnid_metad_enable=&#34;YES&#34;
afpd_enable=&#34;YES&#34;
で、再起動するか、/usr/local/etc/rc.dで上から順番に起動させればOK。



FreeBSDのnetatalk関連の起動スクリプトは、startさせても何のメッセージも出ないのが不親切だと思う。



macからはafp://<ホスト>の書式でアクセスできる。



運用。安定していないのか?



320GBほどのデータをAFP経由でコピーしたのだが、以下のメッセージが表示されてなかなか終わらない。



何が悪いのだろう?
Mar  6 06:35:22 isis afpd&#91;3237]: afp_disconnect: trying primary reconnect
Mar  6 06:35:22 isis afpd&#91;1695]: Reconnect: transfering session to child&#91;1697]
Mar  6 06:35:22 isis afpd&#91;1695]: Reconnect: killing new session child&#91;3237] after transfer
Mar  6 06:35:22 isis afpd&#91;1697]: afp_dsi_transfer_session: succesfull primary reconnect
Mar  6 06:35:29 isis afpd&#91;3237]: afp_disconnect: primary reconnect succeeded
Mar  6 06:38:18 isis afpd&#91;1697]: read: Operation timed out
Mar  6 06:38:18 isis afpd&#91;1697]: dsi_stream_read: len:-1, Operation timed out
Mar  6 06:38:18 isis afpd&#91;1697]: dsi_stream_send: Broken pipe
Mar  6 06:38:18 isis afpd&#91;1697]: dsi_wrtreply: Broken pipe
Mar  6 06:38:18 isis afpd&#91;1697]: dsi_disconnect: entering disconnected state
Mar  6 06:38:18 isis afpd&#91;1697]: dsi_disconnect: entering disconnected state