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="YES"
avahi_daemon_enable="YES"
avahi_dnsconfd_enable="YES"
netatalk_enable="YES"
cnid_metad_enable="YES"
afpd_enable="YES"
で、再起動するか、/usr/local/etc/rc.dで上から順番に起動させればOK。
FreeBSDのnetatalk関連の起動スクリプトは、startさせても何のメッセージも出ないのが不親切だと思う。
macからはafp://<ホスト>の書式でアクセスできる。
運用。安定していないのか?
320GBほどのデータをAFP経由でコピーしたのだが、以下のメッセージが表示されてなかなか終わらない。
何が悪いのだろう?
Mar 6 06:35:22 isis afpd[3237]: afp_disconnect: trying primary reconnect
Mar 6 06:35:22 isis afpd[1695]: Reconnect: transfering session to child[1697]
Mar 6 06:35:22 isis afpd[1695]: Reconnect: killing new session child[3237] after transfer
Mar 6 06:35:22 isis afpd[1697]: afp_dsi_transfer_session: succesfull primary reconnect
Mar 6 06:35:29 isis afpd[3237]: afp_disconnect: primary reconnect succeeded
Mar 6 06:38:18 isis afpd[1697]: read: Operation timed out
Mar 6 06:38:18 isis afpd[1697]: dsi_stream_read: len:-1, Operation timed out
Mar 6 06:38:18 isis afpd[1697]: dsi_stream_send: Broken pipe
Mar 6 06:38:18 isis afpd[1697]: dsi_wrtreply: Broken pipe
Mar 6 06:38:18 isis afpd[1697]: dsi_disconnect: entering disconnected state
Mar 6 06:38:18 isis afpd[1697]: dsi_disconnect: entering disconnected state