====== Macのファイル共有をNetatalk 3.1.11からSamba 4.8.2に移行する ======
家のメインのMacをようやくMavericks (10.9)からHigh Sierra (10.13)にしたのに合わせ、家鯖のMac用ファイル共有サービスをNetatalk 3からSamba 4.8に移行した。
===== 試した環境 =====
* クライアント
* macOS High Sierra 10.13.6
* サーバ
* FreeBSD 11.1-RELEASE-p4
* Netatalk 3.1.11
* Samba 4.8.2
===== 移行方針 =====
* Netatalkで提供していたファイル共有サービスから必要なものを移植する。
* Netatalkのメタデータを引き継ぐ。
* Netatalkによるファイル共有サービスは停止する。
なお、Sambaのインストールはportsなりpackagesなりでふつーに入れるだけなので割愛。
===== 移行 =====
SambaでMac向け共有フォルダサービスを行うにはvfs_fruitモジュールを使う。
ポイントとしては以下の2点。
* 各共有の vfs objects に catia fruit streams_xattr を加える。
* Time Machine用の共有には、上記に加え fruit:time machine = yes を追加する。
実際はfruitを使わずとも共有自体はできてしまうのだが、Mac固有の情報を上手く扱えないので注意が必要である。(かといって即座に問題になる事も稀だと思われるのが厄介なところ。)この場合、Netatalk側で生成したメタデータ(ファイルのカラーラベル情報など)も引き継がれなくなる。
また、fruit指定がある共有とない共有を混在させる場合は、Macから接続する共有フォルダの順番が重要になる。Samba (CIFS)の共有フォルダに接続する際、macOSは接続先がmacOS固有の情報を扱えるかどうかを確認し、扱えないと判断した場合はそのサーバ全ての共有で固有情報を使わないようにするらしい。よってfruitは必ず指定した方が無用な混乱は避けられるだろう。ちなみに、接続先の能力判定はCIFSのtree connection (tcon)のフェーズで行われる模様。
fruitの詳細は[[https://hatx.blog.so-net.ne.jp/netatalk_samba_merge|HATさんの解説]]や[[https://www.samba.org/samba/docs/current/man-html/vfs_fruit.8.html|公式ドキュメント]]に譲るが、各種設定値はデフォルトのままで殆ど問題なさそうだ。
==== 移行前の設定ファイル ====
移行するNetatalkの設定は↓こんな感じ。ちょいちょいゴミが混じってるが、ユーザーのホームディレクトリ/その他共有フォルダ2つ/Time Machine用の計4共有の、何の変哲もない設定である。
;
; Netatalk 3.x configuration file
;
[Global]
; Global server settings
afpstats = yes
vol preset = DEFAULT
log file = /var/log/netatalk.log
;log level = default:debug
[DEFAULT]
file perm = 0600
directory perm = 0700
[Homes]
home name = $u
basedir regex = /usr/home
[Data]
path = /Volumes/Data
[PUBLIC]
path = /usr/home/PUBLIC
file perm = 0777
directory perm = 0777
[Time Machine]
;path = /zdata/NFC/backup/TimeMachine/
path = /zbackup/R/NFC/TimeMachine/
time machine = yes
;[Time Machine 2]
;path = /zdata/NFC/backup/TimeMachine/2
;time machine = yes
現状のSambaの設定。こっちも色々ゴミがあるが、Netatalkと共通の共有はホームディレクトリとDataフォルダである。この2つの設定をどうするかが今回のキモかも?
[global]
workgroup = WORKGROUP
server string = Samba Server
security = user
map to guest = Bad User
invalid users = root
load printers = no
# add the uid to the log
debug uid = yes
# add microsecond resolution to timestamp
debug hires timestamp = yes
ea support = yes
acl check permissions = yes
inherit acls = yes
csc policy = disable
store dos attributes = yes
dos filemode = no
map read only = no
# added to allow asynchronous I/O (make sure to load the kernel module aio)
aio read size = 16384
aio write size = 16384
# added to enhance the network performance of samba
socket options = TCP_NODELAY SO_SNDBUF=131072 SO_RCVBUF=131072
[homes]
browseable = no
writable = yes
public = no
vfs objects = zfsacl shadow_copy2
shadow: snapdir = .zfs/snapshot
shadow: sort = desc
shadow: format = %Y-%m-%d-%H%M
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes
[Data]
path = /Volumes/Data
writable = yes
vfs objects = zfsacl shadow_copy2
shadow: snapdir = .zfs/snapshot
shadow: sort = desc
shadow: format = %Y-%m-%d-%H%M
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes
[VNTApp]
path = /Volumes/VNTApp
writable = yes
vfs objects = zfsacl shadow_copy2
shadow: snapdir = .zfs/snapshot
shadow: sort = desc
shadow: format = %Y-%m-%d-%H%M
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes
===== 移行後のsmb4.confファイル =====
Mac用のファイル共有設定を加えたsmb4.confは↓こんな感じ。ついでにゴミ掃除も。
[global]
workgroup = WORKGROUP
server string = Freyja
security = user
map to guest = Bad User
invalid users = root
load printers = no
[homes]
browseable = no
writable = yes
public = no
vfs objects = zfsacl shadow_copy2 catia fruit streams_xattr
shadow:snapdir = .zfs/snapshot
shadow:sort = desc
shadow:format = %Y-%m-%d-%H%M
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes
[Data]
path = /Volumes/Data
writable = yes
vfs objects = zfsacl shadow_copy2 catia fruit streams_xattr
shadow:snapdir = .zfs/snapshot
shadow:sort = desc
shadow:format = %Y-%m-%d-%H%M
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes
[VNTApp]
path = /Volumes/VNTApp
writable = yes
vfs objects = zfsacl shadow_copy2 catia fruit streams_xattr
shadow:snapdir = .zfs/snapshot
shadow:sort = desc
shadow:format = %Y-%m-%d-%H%M
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes
[Time Machine]
path = /zbackup/R/NFC/TimeMachine/
browseable = no
writable = yes
public = no
vfs objects = catia fruit streams_xattr
fruit:time machine = yes
===== 参考サイト =====
* [[https://hatx.blog.so-net.ne.jp/netatalk_samba_merge|NetatalkとSambaの統合:HAT blog]]
* [[https://www.samba.org/samba/docs/current/man-html/vfs_fruit.8.html|vfs_fruit — Enhanced OS X and Netatalk interoperability]]
* [[http://raptor-falcon.hatenablog.com/entry/2017/09/04/053929|第42回「ネットワークパケットを読む会(仮)」 - 元パチ屋店員NWエンジニアの技術ブログ]]
~~DISCUSSION~~