FreeBSDにMacのファイル共有プロトコルAFPを喋らす。(追記あり)

Pocket

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からインストール

苦難の設定

すごく大変だった。

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

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

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

http://netatalk.sourceforge.net/2.2/htmldocs/configuration.html#id1590298

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

変えたのは以下の二点。

/usr/local/etc/afpd.conf

変更なし。

/usr/local/etc/AppleVolumes.default

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

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

~はホームディレクトリだな。

なお、以下にオプションが山ほど。

http://netatalk.sourceforge.net/2.2/htmldocs/AppleVolumes.default.5.html

書式は以下の通り。

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

オプションでめぼしいものは以下の二つくらいかな。

複数指定する場合にはたとえば(実際にはtmとroを一緒に使うことはないが)以下のようにカンマ(,)でつなぐ。

そうしたら、/etc/rc.confに以下を追加する。

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

なお運用中に設定を変更した場合にはこれらサービスをすべて再起動したほうがいいようだ。

で、再起動するか、/usr/local/etc/rc.dで上から順番に起動させればOK。

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

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

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

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

何が悪いのだろう?

No tags for this post.

3 comments

  1. AppleTalkは生きてません。Snow Leopardで死にました。

    設定に苦労したのは、マニュアルが悪いというよりも設定ファイルが複数あって理解しにくいのが原因なのだと思います。
    この点は次期netatalk 3.0にて1つのファイルafp.confに統一する方向で開発が進んでいます。
    これはsmb.confのようなiniフォーマットになるので、かなり設定が楽になると思います。
    ただし、optionsにてカンマで区切る書式は変更がありません。
    afp.confにおいては、次のような書式になります。
    [Global]
    vol preset = default
    [default]
    options = upriv,usedots
    [homes]
    ;
    [itunes]
    path = /export/itunes
    [share]
    path = /dir/path
    vol options = tm,ro

    私の意見では、このoptionsってのは、相変わらず分かりにくいと思うのですが、どうでしょうか。
    私の意見では、
    time machine = yes
    read only = yes
    というのがわかりやすいと思うのですが、これを提案したところ却下されました。
    納得いかないので、再び提案するつもりです。

    NetatalkのtarballはNetBSDの起動スクリプトが入ってますが、FreeBSDのスクリプトは入っていません。
    つまり、起動スクリプトで何のメッセージも出ないのは、netatalk側の問題ではありません。FreeBSDのportsで用意しているスクリプトが不親切ということになるので、FreeBSD側に報告してください。

    DSI関係で不可解なログが出るのはbugかもしれません。FreeBSDのportsはnetatalk 2.2.1でありちょっと古いです。2.2.2ではかなり沢山のbug fixがあります。

  2. ご丁寧な解説感謝します。
    起動スクリプトは、ご指摘の通りFreeBSDのportsが不親切なだけです。確かにオリジナルの書き方ですとNetatalkのせいと取れますので修正します。
    portsのNetatalkのバージョンが古い点、起動スクリプトが不親切な点は、FreeBSDにおけるNetatalkへの注目度が低いことを示しているように思います。言い換えればFreeBSDでのNetatalkの動作はあまり信頼できないのではないかという印象を持ちます。
    (自分で改善できればよいのですが)

  3. FreeBSD, NetBSD, Fedoraあたりはいつも対応が早いです。
    遅れてるのは担当者の手がまわらないか、何か問題あるからでしょう。

    2.2.2において、
    * UPD: afpd: Use sendfile() on Solaris and FreeBSD for sending data
    というのがあり、
    次に出る予定の2.2.3では、
    * FIX: afpd: sendfile() on FreeBSD was broken, courtesy of Denis Ahrens
    というのがあります。

    2.2.2はバグがあるから見送るのかも。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください