「令和の!」って言ってみたかったけど、検索キー汚すだけなんでやめました。確認したのはFreeBSD 14.3&Samba 4.22.6とmacOS 26.2
わっかんないよ!
Web記事で言ってることはひとつもわかんないよ!
Web記事でいいって言ってるもの、何がいいのかわかんないよ!
わかんない! 私にはわかんないの!
いやまじで。
FreeBSDとLinuxじゃ事情が違うんだよ。みんな安易にFinderから読み書きできて「これでOK」なんて言うけど、特定アプリからアクセスしたら不具合いっぱいとかあるんだよ。macOSをガチで使ってるユーザー少ないから、Sambaのアップデートでfruit周りにエンバグ出ても誰も気づいてくれないんだよ。
マジでもうわっかんないんだよ(ぉ。
まぁそんな感じなんですが、Appleが公式にafp捨てるって言い出したんで、そろそろまじめにSambaでmacOS向けのファイル共有に取り組もうかと。
そんな感じで現状の設定がこちら。なんとなく動いてる気がするけど、あってるかどうかもうよくわかんない。「FreeBSD&ZFS&netatalkのmetadata/resouceを引き継ぐ」って組み合わせのサンプルが少なすぎて…。
[global]
dos filetimes = Yes
dos filemode = Yes
inherit permissions = Yes
inherit acls = Yes
map acl inherit = Yes
acl group control = Yes
ea support = yes #4.9以降はdefault yes
vfs object = zfsacl catia fruit streams_xattr
fruit:encoding = native #default: private
fruit:metadata = netatalk #default
fruit:resource = file #default
fruit:veto_appledouble = no #default: yes
streams_xattr:prefix = user.
streams_xattr:store_stream_type = no
nfs4:mode = simple
nfs4:acedup = merge
nfs4:chown = yes
ZFSACLまわりの設定は、このあたりをよくみてください。基本的にACLはldapとかでユーザー同期してないと意味ないんで「とりあず不都合ないように」程度の設定です。
MetadataとResource forkの保存場所
近頃Linux向けにはfruit:resource=streamの設定が出回っていますが、FreeBSDではダメ絶対。
macOS向けファイルサーバーの面倒なところは、メインのファイルストリームの他に、属性情報のためのMetadataとmacOS独特のリソースフォークという情報があることです。
Sambaのデフォルトでは、metadataはUNIXの拡張属性に、リソースフォークは”._”で始まる隠しファイルに保存されます。
Linuxのファイルシステムの場合、拡張属性についてはサイズの制限はありません(確かNTFSも)。なんで”._”で始まる隠しファイル(通称ゴミファイル)を作るよりも、同じく拡張属性に保存した方がスマートなのはその通り。
一方でFreeBSDの拡張属性には制限があって、ぶっちゃけリソースフォークを保存すると条件によって破綻します。というのも、まずUFSだと拡張属性が64kB以上扱えません。Metadataくらいなら問題ありませんが、リソースフォークに緻密なカスタムアイコンかいたりするとぶっ壊れます。一方でZFSの場合は容量制限は無いのですが、サイズが増える(数十kB以上から)と加速度的にアクセス速度が落ちる(数秒〜数十秒単位で)という特性があります。そういう仕様らしいです。1ファイルあたり秒単位でアクセス時間かかってたらいろんなところでタイムアウト起こして、様々な不具合を引き起こします。SSDとかNVMeにすればいいってもんでもなく、そう言う仕様。
なので、FreeBSDではディレクトリに”._”で始まるリソースフォークファイルがばら撒かれる設定が必須です。一度、streamに設定してみたことあるんですが、ファイルコピーが成功したり失敗したり、よくわからない不安定な振る舞いになりました。
“fruit:veto_appledouble = no”について
これは、”._”で始まるリソースフォークファイルを、クライアントから直にファイルシステムとして見えるのを隠すかどうかのフラグで、デフォルトはYes。
以前はそれでなんの問題もなかったのですが、冒頭のバージョンの組み合わせだと、”no”に設定しないとクライアントからリソースフォークが見えませんでした。つまりはカスタムアイコンがまったく見えない。
Samba側かmacOS側か、どっちが悪いのかわからないけれどバグっぽいです。いつからそうなったとか検証するの、もう疲れたよ⚪︎トラッシュ・・・。
SambaのGlobalと各共有セクションの記述について
vfsオブジェクトを追加するとき、globalセクションで追加してオプション設定してても、各共有セクションでvfsのロード指定したら、globalセクションで指定したvfsのためのオプションはクリアされるらしい…という記述を見つける。
つまり、globalセクションであらかたオプション設定して、各共有セクションで追加でオプション変更するような記述するとき、各共有セクションでvfs objectを指定したらあかんらしい…。
時々不可解な振る舞いになってたのは、このせいか…。
