FreeBSD 9.1のnetatalkを3.0.5から3.1.0にバージョンアップする[追記あり]

2014年1月14日NAS,netatalk

FreeBSDのパッケージ管理が面倒になってきました。

なので、次世代パッケージ管理システムに移行しようと思っているのですが、まだ手を付けていません。

この記事では、旧来のやり方での、netatalk 3.0.5から3.1.0へのバージョンアップ方法について記載しています。

最初は、当時の最新版のnetatalk 3.0.4をインストールしました。

その後、netatalk 3.0.5にバージョンアップしたのですが、その時はやり方を記録するのを忘れていました。

今回は、忘れない内に、記事として投稿しようと思います。

やり方は簡単で、次の通りです。

# cd /usr/ports
# portsnap fetch
# portsnap extract
# cd /usr/ports/net/netatalk3
# make config-recursive
# make deinstall
# make reinstall clean

パッケージ管理は面倒ですが、単体でバージョンアップするのは簡単です。makeするだけって、どんなに楽な事か!

make config-recuresiveの時に、netatalk 3.0.6, 3.1.0で搭載された新機能もイネーブルにしています。

netatalk3.1.0のconfiguration

以下、補足説明です。

  1. FreeBSDのZFSファイルシステムでのACLサポート(3.0.6)
  2. CNIDのバックエンドとしてのMySQLのサポート(3.1.0)

1. FreeBSDのZFSファイルシステムでのACLサポート(3.0.6)

netatalk 3.0.6から、FreeBSDのZFSでも、ACLがサポートされる様になりました。

試しに、FreeBSDでファイルを作ります。getfaclで見ると、ACL属性は付いていません。

$ touch file1
$ ls -l file1  
-rw-r--r--  1 oichi  staff  0 Jan 12 13:51 file1
$ getfacl file1
# file: file1
# owner: oichi
# group: staff
            owner@:rw-p--aARWcCos:------:allow
            group@:r-----a-R-c--s:------:allow
         everyone@:r-----a-R-c--s:------:allow

このファイルに対して、OS XのFinderのファイル情報を見るで、アクセス権を割り付けます。

当たり前なのですが、アクセス権をつけるユーザは、FreeBSDでアカウントを持っているユーザです。

とりあえず、rootにアクセス権減を与えてみました。FreeBSDのgetfaclで見ると、確かにACL属性が付いています。

$ ls -l file1
-rw-r--r--+ 1 oichi  staff  0 Jan 12 13:51 file1
$ getfacl file1
# file: file1
# owner: oichi
# group: staff
         user:root:rw-p--aARWc---:------:allow
            owner@:rw-p--aARWcCos:------:allow
            group@:r-----a-R-c--s:------:allow
         everyone@:r-----a-R-c--s:------:allow

netatalkでACLが使える様になった時、LDAPも有効でなければならなかったと記憶しています。この理由はFreeBSD(AFPサーバ)とOS X側でLDAPを使って同じユーザアカウントが必要だからだと思います。

今は、LDAP運用していなくても、ACLだけ有効にする事ができるみたいです。

アカウントについては、手動で、FreeBSD(AFPサーバ)とOS X側とを、そろえておけば大丈夫だと思うのですが、未検証です。

2. CNIDのバックエンドとしてのMySQLのサポート(3.1.0)

netatalk 3.1.0から、CNIDのバックエンドとして、MySQLがサポートされる様になりました。大規模システム用だそうです。

“Clustering/HA"となっているので、クラスタ化やHA(高可用性)のためみたいですね。

それ以外に、CNIDが実際にどのような値に割り付けられているか、phpMyAdminなどで、視覚的に確認できるのも利点だと思います。まあ、確認できるからと言って、どうと言う事は無いのですけれど。

afp.confの設定方法は、次のページで解説されていました。ありがとうございます。

MySQLのサーバを指定して、対象となるボリュームに、"cnid scheme = mysql"を書くだけです。

ボリュームを開いた瞬間に、MySQLのデータベースに、CNIDが作られます。もちろん、dbdコマンドで作成する事もできます。

ただ、難点があります。

afp.confに平文でMySQLのパスワードを書く必要があります。そして、afp.confは、一般ユーザ権限で読めないと、AFP接続に失敗します。つまり、一般ユーザが、平文のMySQLのパスワードを読めちゃうと言う事です。セキュリティ上、良くないですね。

この対処のために、afp.confのパーミッションが600のままで、AFP接続ができる様になるパッチを書きました。一応、うまく動いています。

(追記 2014-01-14 21:57)

“afpd -V"の結果を載せておきます。

# afpd -V
afpd 3.1.0 - Apple Filing Protocol (AFP) daemon of Netatalk

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version. Please see the file COPYING for further information and details.

afpd has been compiled with support for these features:

          AFP versions:	2.2 3.0 3.1 3.2 3.3 
         CNID backends:	dbd last tdb mysql 
      Zeroconf support:	Avahi
  TCP wrappers support:	Yes
         Quota support:	No
   Admin group support:	Yes
    Valid shell checks:	Yes
      cracklib support:	No
            EA support:	ad | sys
           ACL support:	Yes
          LDAP support:	No
         D-Bus support:	Yes
         DTrace probes:	No

              afp.conf:	/usr/local/etc/afp.conf
           extmap.conf:	/usr/local/etc/extmap.conf
       state directory:	/var/netatalk/
    afp_signature.conf:	/var/netatalk/afp_signature.conf
      afp_voluuid.conf:	/var/netatalk/afp_voluuid.conf
       UAM search path:	/usr/local/libexec/netatalk-uams//
  Server messages path:	/var/netatalk/msg/

Posted by お市のかた