NetatalkとSambaとの共存はもう一息

2016年5月21日Mac,NAS,netatalk,パソコン・インターネット

以前のバージョンのNetatalkとSambaは、ファイル名や拡張属性などに違いがあり、接続するプロトコルをAFPとSMBとを切り替えて使うような事は出来ませんでした。ですが、両者が歩み寄る事に、共存が可能になります。

「Netatalk/Sambaの共存」とは、次の通りです。

  • ファイル名の取り扱いが同じ
  • 拡張属性名の取り扱いが同じ
  • 拡張属性の中身の取り扱いが同じ
  • FinderInfoの取り扱いが同じ
  • ResourceForkの取り扱いが同じ
  • AFP Infoの取り扱いが同じ
  • ファイルロックの取り扱いが同じ

NetatalkとSambaの共存の最新状況については、HATさんがまとめてくださっています。ありがとうございます。

FreeBSDでも最新のNetatalk3.1.8とSamba4.3.3をインストールすれば、共存できるハズと、HATさんから連絡がありました。私が使っているFreeBSD10.0確認したところ、以下のように、パッケージが準備されていました。

root@freebsd:~ # pkg search netatalk3
netatalk3-3.1.8,1
root@freebsd:~ # pkg search samba4
samba4-4.0.26_3
samba41-4.1.22
samba42-4.2.7
samba43-4.3.3

早速インストールして設定してみました。最初、それまでインストールしてあったsamba41を消すのを忘れており、ハマりました…。pkg remove samba41で削除してから、pkg install samba43をしました。

いきなり全ディスクを切り替えるのは怖いので、/export/aを新たに設定して、実験する事にしました。ZFSを使っているので、ファイルシステムを作るのは簡単です。

# zfs create upool/export/a
# chmod 777 /export/a

/export/aに対して、/usr/local/etc/afp.confと/usr/local/etc/smb4.confを設定します。

/usr/local/etc/afp.confは次の通りです。[a]セクションに、"ea = samba"を追加しています。

;
; Netatalk 3.x configuration file
;

[Global]
    mac charset = MAC_JAPANESE
    afpstats = yes
    log file = /var/log/netatalk.log
    vol dbpath = /export/netatalk/CNID
    vol preset = my_default_values

[my_default_values]
    file perm = 0660
    directory perm = 0770

[Homes]
    basedir regex = /usr/home
    spotlight = yes

[a]
    path = /export/a
    spotlight = yes
    ea = samba

spotlightは、FreeBSDにインストールされているNetatalkだと使えないのですが、設定だけはしておきます。

次に、/usr/local/etc/smb4.confです。

[global]
   workgroup = WORKGROUP
   server string = Freebsd SMB3 Server
   max protocol = SMB3
   load printers = no
   printing = bsd
   guest account = nobody
   map to guest = Bad User
   log file = /var/log/samba/log.%m
   max log size = 50
   passdb backend = tdbsam
   wins support = yes
   dns proxy = no
   unix charset = UTF-8
   dos charset = CP932
   store dos attributes = yes
   map hidden = no
   map system = no
   map archive = no
   nt acl support = yes
   inherit acls = no
   map acl inherit = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = * %n\n * %n\n *
   kernel oplocks = yes
   unix extensions = no
   ea support = Yes
   oplocks = No
   level2 oplocks = No
   vfs objects = streams_xattr

[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   public = no
   printable = no
   oplocks = no

[a]
   comment = a
   path = /export/a
   guest ok = yes
   writable = yes
   printable = no
   vfs objects = catia fruit streams_xattr
   fruit:locking = netatalk
   fruit:encoding = native
   streams_xattr:prefix =
   streams_xattr:store_stream_type = no
   ea support = yes

この内、[a]セクションの、次の部分がNetatalkとの共存にために追加した部分です。

   vfs objects = catia fruit streams_xattr
   fruit:locking = netatalk
   fruit:encoding = native
   streams_xattr:prefix =
   streams_xattr:store_stream_type = no
   ea support = yes

streams_xattr:prefixは、Linuxの場合、"user."を設定します。FreeBSDは拡張属性名にuser.が付かないので、空欄にするとの事です。

設定が終わったら、NetatalkとSambaを起動します。

# /usr/local/etc/rc.d/netatalk start
# /usr/local/etc/rc.d/samba_server start

この後、OS X 10.10.5 Yosemiteに、準備したファイルシステムをマウントして、調べてみました。実験には、HATさんが長年使っていると言うファイルを使わせていただきました。拡張属性やリソースフォーク付きです。

AFPとSMBでつないで、ファイルをコピーしました。そして、拡張属性を調べました。

root@freebsd:/export/a # lsextattr user *by*
ICONandEA by AFP.txt	com.apple.metadata:kMDItemFinderComment	org.netatalk.Metadata	com.apple.TextEncoding	com.apple.quarantine
ICONandEA by SMB.txt	apple.TextEncoding	DOSATTRIB	apple.quarantine	netatalk.Metadata	apple.metadata:kMDItemFinderComment

AFPとSMBでつないだ場合で、拡張属性名が違っています。AFPだと正しく"org.netatalk.Metadata"となっていますが、SMBだと"org."が欠落して、"netatalk.Metadata"になっています。このため、AFPで接続するとSMB接続時にコピーしたファイルのカスタムアイコンが見えず、逆にSMBで接続するとAFP接続時にコピーしたファイルのカスタムアイコンが見えません。

まずは、AFPでつないだ状態です。

AFP接続時

次に、SMBでつないだ状態です。

SMB接続時

HATさんが調査して、Sambaのvfs_fruit.cのバグである事がわかりました。さすがです。

それと、SMBで接続している時にファイルを削除しようとしても、消せません。これもバグだそうです。

使用中

ファイル名は、共通になっているようでした。OS XでUNIXの特殊文字"/"を使ったファイル名は、AFP接続時でもSMB接続時でも、正しく":"に置き換えられていました。

[amazonjs asin="B00LUKIFKG" locale="JP"]

Posted by お市のかた