2019/11/7 追記
netatalk3.1.12&FreeBSD12.0では、3番目以降のEAが「読めたり、読めなかったり」します。ワケワカラン…。
プレビューやらXcodeやらのApple謹製アプリで上書き保存がエラーになる件、ea=auto|sys|sambaだとやっぱりnetatalk壊れてました。
FreeBSD/zfsにおける、netatalkのea=auto|sys|sambaについてまとめると…、
- Apple謹製アプリの保存時、3つのEAが付けられる。
- Netatalkは自身が扱うmeta情報としてFinderinfo?をorg.netatalk.MetadataとしてEAに保存する。
- macOSからの書込みだと全てのEAはきちんと保存(FreeBSD内で確認)される。
- macOSで読み出す時に「3番目以降のEA」が読めない。
- EAにはファイルシステムとして格納順があるが、netatalkが保存するとランダム?な順で保存される。
- 1番目/2番目にどのEAが格納されるかによって、上書き保存がエラーになったりならなかったりする。
- ea=adでは問題無く全てのEAが読める。(finderinfoだけは、なぜかorg.netatalk.Metadataとして勝手にEAに保存される。)
元ファイルのEA
com.apple.lastuseddate#PS 16 com.apple.metadata:_kMDItemUserTags 42 com.apple.metadata:kMDLabel_m7fhm3f5avipv53sr4adlox73i 89
↑をnetatalkへコピーしたファイルのEA(FreeBSD内からlsextattr)↓
com.apple.lastuseddate#PS org.netatalk.Metadata com.apple.metadata:_kMDItemUserTags com.apple.metadata:kMDLabel_m7fhm3f5avipv53sr4adlox73i
↑をnetatalk経由でmacOSから見えるEA(ls -l@)↓
com.apple.lastuseddate#PS 16 com.apple.metadata:_kMDItemUserTags 42 com.apple.metadata:kMDLabe -1 _m7fhm3f5avipv53sr4adlox73i -1
他のOSやUFSは知らんけど、FreeBSD/zfsでnetatalkでマトモにEA扱うには._ファイルばらまきながらea=adで運用するしかないっぽい。
ただ制限として、dbdコマンドが使えなくなります。afp.confの内容見ずに、FilesystemがEA対応なら問答無用にAppleDoubleをEAに変換してぶち込んでしまいます。
ea=adとしても、org.netatalk.Metadataが勝手にEAに保存される件といい、EA対応のFilesystem上でのea=adのテストが十分に行われていないっぽい感じ。一方でFreeBSD/zfs側は、EAのon/offを制御出来ないというね…。
2017/12/20追記:
ea=adで使ってると,logに下記のようなエラーが大量に…。どないせーっちゅうねん。
afpd[xxx] {ad_open.c:547} (warn:ad): ad_valid_header_osx("/hoge/._hoge::EA::com.apple.quarantine"): not an adouble:osx file