プラスα空間

ブログ in お市 のーと

NetatalkとSambaが共存出来る様になるようです

HATさんによると、SambaがNetatalkの実装方式に歩み寄る事によって、簡単にNetatalkとSambaを共存出来る様になった様です。

素晴らしいです!!

昨年7月に、Netatalk3.1.xとSamba3.6.xを共存させようとして苦労していました。HATさんからもtwitterで色々とご助言を戴きました。

ですが、「NetatalkとSambaの共存の続編の続編の続編の続編」を書いている途中で力つきました。そのまま時間が過ぎて行き、今回のお知らせです。

現時点で、FreeBSD10.0に移植(port)されているsamba(4系)は、次のバージョンです。pkg search samba4で確認しました。

もうすぐ、samba42と言うパッケージが出来るのでしょう。リリースされたら、即、インストールする予定です。

NetatalkとSambaが共存出来る様になるようです”に“22”個のコメント
  • そろそろSamba 4.2.4/4.3.0の検証をしたいですね。
    私は手がまわってないんですけど…

    • HATさんへ、いつもコメントありがとうございます。
      FreeBSD10のパッケージだと、まだsamba42-4.2.3が最新のようです。4.2.4がリリースされたら、試してみたいと思います。

  • HAT より:

    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と設定をしてみます。結果は、ブログに書きたいと思います。

      • HAT より:

        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です。新しいバージョンのパッケージの方が古いなんて、考えにくいですね。

  • HAT より:

    FreeBSD 10.2では、どう頑張っても古いバージョンしか出てこないので諦めかけたんですが、
    よく見たらFreeBSD 10.0もインストールしてました。
    いつ、どうやってインストールしたのか覚えてませんが。

    で、10.0だとnetatalkもsambaも最新になっていました。
    こっちで試そうと思います。

    • HATさんへ、いつもコメントありがとうございます。
      最新のFreeBSDの方が、古いパッケージしかないって事があるのですね。知りませんでした。

      • nsby より:

        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ドライブですが…。

        • HAT より:

          情報ありがとうございました。
          netatalkもsambaも最新になっていました。
          今、環境を10.2に移しました。

  • HAT より:

    昨日Twitterで話した件をFreeBSD 10.0で確認しました。
    同じ現象が発生しました。
    バグですね。

    拡張属性の実装は、Linux/BSD/Solarisでそれぞれ全く別なので、
    それぞれ別の動作をしても不思議ではないですね。

  • HAT より:

    ソースコード解析しました。

    ★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の中に、

        --- ./source3/modules/vfs_fruit.c.orig	2015-10-20 19:40:54.000000000 +0900
        +++ ./source3/modules/vfs_fruit.c	2016-01-07 04:51:19.921694432 +0900
        @@ -104,13 +104,8 @@
          * REVIEW:
          * This is hokey, but what else can we do?
          */
        -#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
         
         enum apple_fork {APPLE_FORK_DATA, APPLE_FORK_RSRC};
         
        

        を書けば良いと思います。

コメントを残す