Netatalk のセットアップ

AFP ファイルサーバーのセットアップ

Netatalk の afpd デーモンは AFP クライアントに対してファイルサービスを提供する。AFP ファイルサービスデーモンは通常、netatalk コントローラーデーモンを通じて起動する。コントローラーデーモンは、Zeroconf サービス登録を含む AFP ファイルサービスデーモンのライフサイクル管理、および特定の CNID バックエンドと Spotlight (Finder 検索) インデックスのハウスキーピングを管理する。

デーモン両方と AFP ボリュームの設定は、ini スタイルの構文を使用する afp.conf ファイルを通じて管理される。

afp.conf

afp.conf は、AFP ファイルサーバー及び提供する AFP ボリュームの挙動と設定を 決定するために afpd が使用する設定ファイルである。

afp.conf は複数のサーバーセクションに分割できる。すなわち:

[Global]

グローバルセクションで基本的なサーバーオプションを定義する。

[Homes]

ホームセクションでユーザーのホームボリュームを定義する。

Global とも Homes、とも呼ばれないセクションは単なる一つの AFP ボリュームであると解釈される

【注記】 ネストされたボリューム(あるボリュームのパスが別のボリュームのサブディレクトリである場合)は許可されない。 Netatalk がネストされたボリューム構成を検出すると、ネストされたボリュームをスキップし、警告をログに記録する。 これは、ネストされたボリュームが CNID データベースの不整合を引き起こし、クラッシュやデータの破損につながるためである。 親ディレクトリとサブディレクトリの両方を共有する必要がある場合は、 Homes セクションの path オプションを使用してホームボリュームをサブディレクトリに制限するか、 ボリュームパスが他のボリューム内に含まれないように共有を再構成することを検討すると良い。

Homes を定義してユーザーのホームディレクトリを共有するために、 basedir regex オプションを明記しなければならない。 これは全てのユーザーのホームの親ディレクトリのパスあるいは正規表現からなる単純な文字列でよい。

例:

[Homes]
basedir regex = /home

AFP サーバーにログインできるユーザーはそれぞれ /home/(ユーザー名) というパス名でのユーザーボリュームを使用できる。

より複雑なセットアップで、例えば二つの異なったファイルシステムにわたって分割された、 大量のユーザーホームディレクトリーのあるサーバーなら:

以下の設定が必要である:

[Homes]
basedir regex = /RAID./.*homes

もし、basedir regex にシンボリックリンクが含まれる場合、 正規化された絶対パスを指定すべきである。つまり、パス /home から /usr/home にシンボリックリンクがはられていた場合:

[Homes]
basedir regex = /usr/home

他の使用できるオプションの詳細な解説については afp.conf の man page を参照いただきたい。

バックアップボリューム

Netatalk は AFP を介して macOS Time Machine のリモートバックアップ機能を提供する。ボリュームを Time Machine のターゲットにするには、オプション time machine = yes を使う。

Zeroconf と組み合わせて使用すると、バックアップボリュームはサーバーが稼働しているときに Bonjour を介して自動的に宣伝され、macOS クライアントが Time Machine バックアップの宛先としてそれを発見し選択できるようになる。

シンボリックリンク

デフォルトでは、シンボリックリンクはサーバー側で追跡されず、クライアントに解決のために渡されるため、クライアントのファイルシステムビューのどこかを指すリンクになる。これは歴史的な Mac OS X AFP サーバーと同じ挙動である。

サーバー側のシンボリックリンクの追跡は、follow symlinks = yes でボリュームごとに有効にできる。有効にすると、AFP を介して作成されたシンボリックリンクのターゲットは検証される:絶対パス、.. を含むパス、ボリュームルートの外部に解決されるターゲット、異なるファイルシステムデバイス上のターゲットは拒否される。AFP 以外で作成された既存のシンボリックリンクはこの検証の対象にならないことに注意。

サーバー側のシンボリックリンクの追跡を有効にすると、注意して使用しないとセキュリティ上の問題につながる可能性があることに注意。

他のネットワークファイルシステムとの相互運用性

Netatalk と Samba は同じボリュームを共有し、拡張属性メタデータを相互互換のある形式で保存できるため、AFP または SMB 経由でのアクセスが可能になる。

【警告】 ea = samba と ea = sys (Netatalk デフォルト) の メタデータ形式は互換性がない。 現時点では、両形式の間で自動的に変換する方法はない。 デフォルト設定を使用している既存の Netatalk ボリュームに Samba 共有を追加したい場合は、 AFP クライアントを使用してファイルを別のボリュームにコピーすることが推奨の移行方法である。

ロック

AFP と SMB クライアントは、両方のサーバーが共有ファイルに対して実際の POSIX バイト範囲ロックを配置する場合にのみ、お互いのロックを尊重する。これを実現するには、2 つの設定が必要である:

Samba の fruit:locking = netatalk モジュールオプション(Samba ではデフォルトでオフ)は、さらに SMB のオープンおよび拒否モードを、Netatalk が AFP の拒否モードに使用するのと同じオンディスクの規約にマッピングするため、プロトコル間で競合するオープンが拒否され、拒否モードが有効な場合、オープンされた AFP フォークを持つファイルは SMB 経由での削除から保護される。

SMB クライアント側のキャッシュ(oplocks および leases)は AFP のアクティビティを認識しない:Samba のデフォルトでは、SMB クライアントは古いデータをキャッシュし、AFP 側の変更を上書きする可能性がある。両方のサーバーで共有されるボリュームでは、smb.conf で無効にする(oplocks = no、level2 oplocks = no、smb2 leases = no)か、Linux では代わりに kernel oplocks = yes を設定する(Netatalk のファイルアクセスが壊す実際のカーネルリース;これにより SMB2 リースと耐久ハンドルが無効になる)。

【警告】 Time Machine 共有を両方のプロトコルでエクスポートしないでください。 Samba の fruit:time machine = yes プリセットは posix locking と kernel oplocks を無効にし、ここで説明されているすべてのプロトコル間の安全性を削除します。 Time Machine 共有は、1 つのプロトコルのみで提供する必要があります。

設定の比較

各行は、同じ目的を果たす afp.conf と smb.conf の設定をペアにしている。空のセルは、その行に対してその側に設定が必要ないことを意味する — 挙動が組み込まれているか、または他方のサーバーがこの側の 1 つの設定に一致するために複数の設定を必要とする。default とマークされた設定は、変更しないように知っておくためにリストされている。

Netatalk (afp.conf) Samba (smb.conf) その機能
ea = samba vfs objects = catia fruit streams_xattr Apple メタデータ (Finder 情報、リソースフォーク) を両方のサーバーが読み書きできる形式で保存する。
fruit:metadata = netatalk (Samba デフォルト) Finder メタデータを Netatalk が使用するのと同じ拡張属性に保存する。
fruit:resource = file (Samba デフォルト) リソースフォークを Netatalk が使用するのと同じ ._ AppleDouble ファイルに保存する。
fruit:encoding = native Windows では違法な文字のオンディスク名を同じにする。
streams_xattr:prefix = user. AFP 拡張属性と SMB 代替データストリームが同じオブジェクトになる。Netatalk 側で ea = samba が必要(その末尾バイト形式が一致する)。
streams_xattr:store_stream_type = no 上の行の後半 — :$DATA 接尾辞を削除して名前を一致させる。
multi protocol = yes Samba もボリュームを変更することを宣言する。これにより、この表のすべての Netatalk コヒーレンシー設定のデフォルトが変更される。
strict locking = yes (multi protocol = yes の場合のデフォルト) strict locking = yes すべての読み取りと書き込みが、他方のサーバーのバイト範囲ロックと照合される。Samba のデフォルト Auto は、リースされたファイルのチェックをスキップする — yes を明示的に設定する。
posix locking = yes (Samba デフォルト — そのまま) Samba はロックをカーネルにミラーリングし、Netatalk がそれを認識できるようにする。これをオフにすると、どちらのサーバーも相手のロックをまったく認識できなくなる。
(組み込み — 常にオン) fruit:locking = netatalk AFP と SMB のオープン/拒否モードがプロトコル間で競合する:一方の側の拒否モードオープンは、他方の側の競合するオープンを拒否する。
dircache validation freq = 1 (multi protocol = yes の場合のデフォルト) Netatalk は Samba が作成、名前変更、削除したファイルを認識する。
(multi protocol = yes の場合の組み込み) ボリュームのリソースフォークは afpd メモリにキャッシュされないため、Samba 側の変更は常に再読み込みされる。
kernel change notify = yes (Samba デフォルト — そのまま) Samba は Netatalk が変更したファイルを認識し、SMB クライアントに通知する。
oplocks = no SMB クライアントは、Netatalk も提供するボリューム上でファイルデータをキャッシュしてはならない — キャッシュされた書き込みは AFP 側の変更を上書きする可能性がある。
level2 oplocks = no 上の行の後半。
smb2 leases = no 上の行の後半。Linux では、kernel oplocks = yes が 3 つすべての代わりになる場合がある(Netatalk のファイルアクセスが壊す実際のカーネルリース)。
solaris share reservations = yes (デフォルト; Solaris/illumos のみ) F_SHARE 予約 — fruit:locking なしで illumos 上の Samba が認識できる唯一の拒否モード層。
umask = 0002 create mask = 0664 新しいファイルは、どのプロトコルで作成されたかに関係なく、同じアクセス権を取得する。
directory mask = 0775 同じく、ディレクトリの場合。
map archive = no Samba がすべての新しいファイルに対して、幻の実行ビットを設定するのを防ぐ(DOS アーカイブフラグをモードビットにマッピングする)。

キャッシュ

Samba、NFS、ローカルアプリケーションなど他のプロセスとボリュームを共有する場合は、multi protocol = yes を設定し、dircache validation freq のデフォルトを 1 にすることで、Netatalk がすべてのアクセスで外部の変更を検出できるようにする。Netatalk がボリューム上の 唯一の プロセスである場合(デフォルトの姿勢)、dircache validation freq のデフォルトは最大パフォーマンスのために 100 になる。

Netatalk の設定

ボリューム Samba も提供する場合は、multi protocol = yes を設定する。これにより、安全な同時アクセスに必要な設定のデフォルトが変更される:strict locking のデフォルトは yes、dircache validation freq のデフォルトは 1 になり、ボリュームはリソースフォークデータキャッシュから除外される。明示的な設定が常に優先される — コヒーレンシーを弱める明示的な値は尊重され、詳細な警告とともにログに記録される。拡張属性を Samba 互換形式で保存するには、ea = samba と組み合わせて使用する。例では、意図した構成が一目でわかるように、デフォルト設定を明示的にリストしている。

[Global]
    multi protocol = yes
    ea = samba
    umask = 0002
    strict locking = yes            ; the default when multi protocol = yes
    dircache validation freq = 1    ; the default when multi protocol = yes
    solaris share reservations = yes ; already the default (Solaris/illumos only)

[Homes]
    basedir regex = /home

[Test Volume]
    path = /export/test1

[My Time Machine Volume]
    path = /export/timemachine
    time machine = yes
    ; Time Machine over AFP only -- do not also export this path via SMB

Samba の設定

Samba の catia、fruit、streams_xattr VFS モジュールは、Apple SMB クライアントとの互換性および Netatalk との相互運用性を提供する。veto files ではなく hide files を使用して、Netatalk の不可視ファイルを Windows クライアントから隠す。

[global]
    ea support = yes
    vfs objects = catia fruit streams_xattr

    fruit:encoding = native
    fruit:locking = netatalk
    streams_xattr:prefix = user.
    streams_xattr:store_stream_type = no

    strict locking = yes
    ; posix locking = yes is the Samba default; do not disable it

    ; no SMB client caching on a volume Netatalk also serves
    oplocks = no
    level2 oplocks = no
    smb2 leases = no

    ; same permissions from both protocols
    create mask = 0664
    directory mask = 0775
    map archive = no

    hide files = /.DS_Store/Network Trash Folder/TheFindByContentFolder/TheVolumeSettingsFolder/Temporary Items/.TemporaryItems/.VolumeIcon.icns/Icon?/.FBCIndex/.FBCLockFolder/

    read only = no

[homes]

[Test Volume]
    path = /export/test1