NetatalkとSambaが共存出来る様になるようです
HATさんによると、SambaがNetatalkの実装方式に歩み寄る事によって、簡単にNetatalkとSambaを共存出来る様になった様です。
素晴らしいです!!
昨年7月に、Netatalk3.1.xとSamba3.6.xを共存させようとして苦労していました。HATさんからもtwitterで色々とご助言を戴きました。
- NetatalkとSambaの共存[追記あり] : プラスα空間 (2014年7月9日)
- NetatalkとSambaの共存の続編 : プラスα空間 (2014年7月11日)
- NetatalkとSambaの共存の続編の続編 : プラスα空間 (2014年7月11日)
- NetatalkとSambaの共存の続編の続編の続編[追記あり] : プラスα空間 (2014年7月16日)
ですが、「NetatalkとSambaの共存の続編の続編の続編の続編」を書いている途中で力つきました。そのまま時間が過ぎて行き、今回のお知らせです。
現時点で、FreeBSD10.0に移植(port)されているsamba(4系)は、次のバージョンです。pkg search samba4で確認しました。
- samba4-4.0.25
- samba41-4.1.17
もうすぐ、samba42と言うパッケージが出来るのでしょう。リリースされたら、即、インストールする予定です。
ディスカッション
そろそろSamba 4.2.4/4.3.0の検証をしたいですね。
私は手がまわってないんですけど…
HATさんへ、いつもコメントありがとうございます。
FreeBSD10のパッケージだと、まだsamba42-4.2.3が最新のようです。4.2.4がリリースされたら、試してみたいと思います。
FreeBSDのnetatalkが3.1.8で、sambaが4.3.3なのでどちらも最新です。
これなら共存できると思います。
Linuxの場合は、
netatalk側:
ea = samba
samba側:
vfs objects = catia fruit streams_xattr
fruit:locking = netatalk
fruit:encoding = native
streams_xattr:prefix = user.
streams_xattr:store_stream_type = no
ea support = yes
で共存出来ます。
ただし、fruit:locking = netatalkを設定しているとOS Xからファイルが削除できないバグがあるので、この行はコメントにしています。
FreeBSDの場合は、拡張属性名にuser.が付かないので、
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のところを空欄にする必要があると思います(未確認)。
HATさんへ、いつもコメントありがとうございます。
日本語版のマニュアル作成、お疲れ様でした。
FreeBSD10のパッケージのバージョンを確認しました。
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
これから、upgradeと設定をしてみます。結果は、ブログに書きたいと思います。
Parallels DesktopにFreeBSD 10.2 amd64をインストールして、
pkg upgrade -fしたあと確認したのですが…
root@pfbsd102:~ # pkg search netatalk3
netatalk3-3.1.7_2,1 File server for Mac OS X
root@pfbsd102:~ # pkg search samba4
samba4-4.0.26 Free SMB/CIFS and AD/DC server and client for Unix
samba41-4.1.22 Free SMB/CIFS and AD/DC server and client for Unix
samba42-4.2.7 Free SMB/CIFS and AD/DC server and client for Unix
何故か古いです…
HATさんへ、いつもコメントありがとうございます。
私はFreeBSD10.0のamd64です。新しいバージョンのパッケージの方が古いなんて、考えにくいですね。
FreeBSD 10.2では、どう頑張っても古いバージョンしか出てこないので諦めかけたんですが、
よく見たらFreeBSD 10.0もインストールしてました。
いつ、どうやってインストールしたのか覚えてませんが。
で、10.0だとnetatalkもsambaも最新になっていました。
こっちで試そうと思います。
HATさんへ、いつもコメントありがとうございます。
最新のFreeBSDの方が、古いパッケージしかないって事があるのですね。知りませんでした。
sambaのパッケージが古いのは10.2からpkgコマンドの設定が変わって安定志向になったからです。
“freebsd pkg latest quarterly” でググってみてください
具体的には /etc/pkg/FreeBSD.confの中のurlが
10.1まで
url: “pkg+http://pkg.FreeBSD.org/${ABI}/latest”
10.2から
url: “pkg+http://pkg.FreeBSD.org/${ABI}/quarterly”
と変わってます
実際になにが入るかは
http://pkg.FreeBSD.org/
を漁ると見れますよ
どうも、今日見ると更新されているようなので10.2でもsambaが43になるみたいです(^^)
pkg update; pkg upgrade
nsbyさんへ、いつもコメントありがとうございます。
おぉ! FreeBSD10.2で、そんなポリシー変更があったとは!
FreeBSD10.0からアップグレードしたいと思いつつ、危険防止のためにバックアップしてからかなぁと思っています。バックアップが面倒で、手をつけていません。3TBのHDD買ったから、そちらにバックアップしようかな? 悪名高き、Seagateの3TBドライブですが…。
情報ありがとうございました。
netatalkもsambaも最新になっていました。
今、環境を10.2に移しました。
昨日Twitterで話した件をFreeBSD 10.0で確認しました。
同じ現象が発生しました。
バグですね。
拡張属性の実装は、Linux/BSD/Solarisでそれぞれ全く別なので、
それぞれ別の動作をしても不思議ではないですね。
HATさんへ、再びコメントありがとうございます。
バグですか! あの後、Mac/FreeBSDを再起動しましたが、同じ現象でした。
ソースコード解析しました。
★vfs_streams_xattrの方の定義
source3/include/smb.h:
/* Prefix for DosStreams in the vfs_streams_xattr module */
#define SAMBA_XATTR_DOSSTREAM_PREFIX “user.DosStream.”
頭に「user.」が付いた状態で定義されています。
vfs_streams_xattrは、Linuxの場合はこのまま使いますが、FreeBSDの場合は頭を削除してから使うと思われます。
★vfs_fruitの方の定義
source3/modules/vfs_fruit.c:
#if defined(HAVE_ATTROPEN) || defined(FREEBSD)
#define AFPINFO_EA_NETATALK “org.netatalk.Metadata”
#define AFPRESOURCE_EA_NETATALK “org.netatalk.ResourceFork”
#else
#define AFPINFO_EA_NETATALK “user.org.netatalk.Metadata”
#define AFPRESOURCE_EA_NETATALK “user.org.netatalk.ResourceFork”
#endif
HAVE_ATTROPENはSolarisを検出するものであり、FREEBSDはFreeBSDを検出するものです。この場合、頭に「user.」を付けずに定義しています。
それ以外の場合、すなわちLinuxの場合は「user.」を付けています。
vfs_streams_xattrは、Linuxじゃなかったら頭を削る動作をするのに、
vfs_fruitの方は、最初から頭を削っているので、おかしくなっていると推測します。
なので、このような場合分けを行わず、単純に
#define AFPINFO_EA_NETATALK “user.org.netatalk.Metadata”
#define AFPRESOURCE_EA_NETATALK “user.org.netatalk.ResourceFork”
と定義すればいいと思われます。
なので、FreeBSDでそういうパッチを当てて実験したいのですが、
具体的にはどうやればいいでしょうか。
/usr/ports以下のディレクトリでmakeするんだと思いますが、個人的なパッチを追加してmakeする方法はあるでしょうか。
HATさんへ、再びコメントありがとうございます。
早い…。もうバグの原因を突き止めたのですか…。
FreeBSDでパッチを当ててビルドするには、/usr/ports内のパッケージに適切な場所にパッチをおけば、自動的にパッチが当たってmakeされます。
具体的には、/usr/ports/net/samba43/filesの下に、patch-で始まる名前でパッチファイルを置きます。makeすれば、自動的にパッチがあたります。
次のウェブページの4.4です。
これでうまく行くハズなんですが、自分ではやった事がないのでわかりません。
portを最新にするには、次のコマンドでできます。
# portsnap fetch
# portsnap extract
HATさんへ、
パッチファイルは、
/usr/ports/net/samba43/files/patch-source3__modules__vfs_fruit.cの中に、
を書けば良いと思います。
packageのバグは確認したので、今からportに移行するのですが、その前に
# pkg delete samba43
をした方がいいでしょうか。
あと、
http://www.pochi.cc/~sasaki/chalow/2005-06-03-2.html
によりますと、/usr/ports/distfiles にパッチを置いて、
Makefile.localを用意すればいいみたいです。
nsbyさんへ、いつもコメントありがとうございます。
おぉ! FreeBSD10.2で、そんなポリシー変更があったとは!
FreeBSD10.0からアップグレードしたいと思いつつ、危険防止のためにバックアップしてからかなぁと思っています。バックアップが面倒で、手をつけていません。3TBのHDD買ったから、そちらにバックアップしようかな? 悪名高き、Seagateの3TBドライブですが…。
HATさんへ、再びコメントありがとうございます。
そうですね、pkg deleteした方が良いと思います。smb4.confは消されずに残るはずです。
patchの当て方、ありがとうございます。この方が、オリジナルパッケージに影響を与えずにすむのですね。
https://lists.samba.org/archive/samba/2016-January/197129.html
https://lists.samba.org/archive/samba/2016-January/197130.html
HATさんへ、いつもコメントありがとうございます。
バグ報告、ありがとうございます。
[…] http://oichinote.com/plus/2015/03/netatalk-and-samba-can-be-collaborate.html […]