プラスα空間

ブログ in お市 のーと

Ubuntu 10.04にnetatalk 2.1.3インストール[追記・訂正あり]

(追記 2010-11-13 01:28 この記事では、/etc/netatalk/afp_signature.confの置く位置を変更していますが、/etcがread only mountになっているシステムで使う事を想定してです。普通は、この必要はありません。)

新規に、PowerMac G4/MDDにUbuntu 10.04インストール[追記あり]したので、netatalkも新規インストールになります。タイミング良く、netatalk 2.1.3がリリースされましたので、ちょうど良かったです。

Ubuntu 9.10にnetatalk 2.1.2インストール[追記・訂正あり]していますので、そこで得た反省と知見を取り込んでいます。

今回は、次の方針にしました。

インストールには、次のページを参考にしています。ありがとうございます。

まずは、必要パッケージのインストールからです。

$ sudo apt-get install libdb4.8-dev (CNIDの管理のために必要)
$ sudo apt-get install libssl-dev (uams_dhx.soを使う時に必要)
$ sudo apt-get install libgcrypt11-dev (uams_dhx2.soを使う時に必要)
$ sudo apt-get install libslp-dev (SLPのために必要)

netatalkのソースをダウンロードして、展開します。

$ cd
$ mkdir work
$ cd work
$ mkdir netatalk
$ cd netatalk
$ wget http://sourceforge.net/projects/netatalk/files/netatalk/2.1.3/netatalk-2.1.3.tar.gz/download
$ tar xvzf netatalk-2.1.3.tar.gz

configureします。

$ cd
$ cd work/netatalk/netatalk-2.1.3
$ ./configure --enable-debian \ (UbuntuはDebian系なので)
> --enable-srvloc \ (SLPのために必要)
> --prefix=/usr \ (できたファイルは/usr以下に置く)
> --with-pkgconfdir=/etc/netatalk \ (設定ファイル置き場)
> --with-uams-path=/usr/lib/netatalk (ユーザ認証ライブラリ置き場)

–with-message-dirを指定していないので、Server messages pathは[PKGCONF/msg](/etc/netatalk/msg)になります。

Server messages pathが何に使われるか、私はわかっていません。

configureの結果です。

Using libraries:
    LIBS =  -L$(top_srcdir)/libatalk
    CFLAGS = -I$(top_srcdir)/include -D_U_="__attribute__((unused))" -g -O2 -I$(top_srcdir)/sys
    SSL:
        LIBS   =  -lcrypto
        CFLAGS =  -I/usr/include/openssl
    LIBGCRYPT:
        LIBS   = -lgcrypt
        CFLAGS =
    BDB:
        LIBS   =  -ldb-4.8
        CFLAGS =
    SRVLOC:
        LIBS   =  -lslp
        CFLAGS =
Configure summary:
    Install style:
         debian
    AFP:
         AFP 3.x calls activated: yes
         Large file support (>2GB) for AFP3: yes
         Extended Attributes: ad | sys
         DDP enabled: yes
    CNID:
         backends:  dbd last tdb
    UAMS:
         DHX     ( SHADOW)
         DHX2    ( SHADOW)
         RANDNUM ( SHADOW)
         passwd  ( SHADOW)
         guest
    Options:
         CUPS support:           no
         SLP support:            yes
         tcp wrapper support:    no
         quota support:          yes
         admin group support:    yes
         valid shell check:      yes
         cracklib support:       no
         dropbox kludge:         no
         force volume uid/gid:   no
         Apple 2 boot support:   no
         ACL support:            no

このままでは、afpd実行中に、/etc/netatalkの下に、afp_signature.confと言うファイルが作られてしまいます。設定ファイルを置くディレクトリの中に、(訂正 2010-07-24 00:25 動的)知らない間にファイルが作られてしまうのは気持ちが悪いので変更します。etc/afpd/Makefileを、直接直してしまいます。

変更前。

         -D_PATH_AFPDSIGCONF=\"$(pkgconfdir)/afp_signature.conf\" \

変更後。

         -D_PATH_AFPDSIGCONF=\"/var/lib/netatalk/afp_signature.conf\" \

次のページを見ると、動的に作られるファイルは、/var/libに置くのが良さそうなのですが、どうなのでしょうか?

(追記 2010-07-24 00:25 FHSに従うのが良さそうです。Filesystem Hierarchy Standard)

この直し方だと、ファイルが作られるディレクトリが変更になるだけで、manの文章中の記述が直りません。manは、私の環境では、私しか見ないので、良いことにします。

この様な懸念がある事を、開発者の方に連絡を取った方が良いのでしょうか? Netatalk
and Samba
には、バグを見つけたら報告してほしいと書かれていますが、今回の件は、バグとは言えないし…。

根本修正のためには、configureとMakefile.in、およびマニュアルのテンプレートを直す必要があると思います。修正は難しくなさそうですが、オプションや変数の名前を決めるのが、面倒な気がします。単純に、signaturedirとすれば良いでしょうか?

コンパイル&インストールです。

$ make
$ sudo make install

afpdのバージョンを確認します。本当は、makeが終わった直後に(インストールする前に)、etc/afpd/afpd -Vで調べておいた方が良いと思います。

$ /usr/sbin/afpd -V
afpd 2.1.3 - 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:
        AFP3.x support:	Yes
      Transport layers:	TCP/IP DDP
         CNID backends:	dbd last tdb
           SLP support:	Yes
  TCP wrappers support:	No
         Quota support:	Yes
   Admin group support:	Yes
    Valid shell checks:	Yes
      cracklib support:	No
        Dropbox kludge:	No
  Force volume uid/gid:	No
             afpd.conf:	/etc/netatalk/afpd.conf
    afp_signature.conf:	/var/lib/netatalk/afp_signature.conf
   AppleVolumes.system:	/etc/netatalk/AppleVolumes.system
  AppleVolumes.default:	/etc/netatalk/AppleVolumes.default
       UAM search path:	/usr/lib/netatalk/
  Server messages path:	/etc/netatalk/msg/

正しくできている様です。

各種設定をします。

$ cd /etc/netatalk
$ sudo vi afpd.conf
$ sudo mv netatalk.conf /etc/default/netatalk
$ sudo vi /etc/default/netatalk
$ sudo vi AppleVolumes.default

/etc/netatalk/afpd.confには、次の内容を設定しました。今回は、ログファイルを残すようにしました。

- -tcp -noddp -uamlist uams_guest.so,.so,uams_dhx.so,uams_dhx2.so \
-maccodepage MAC_JAPANESE -unixcodepage UTF8 \
-slp \
-setuplog "Default LOG_INFO /var/log/netatalk/default.log" \
-setuplog "Core LOG_INFO /var/log/netatalk/core.log" \
-setuplog "Logger LOG_INFO /var/log/logger.log" \
-setuplog "CNID LOG_INFO /var/log/netatalk/cnid.log" \
-setuplog "AFPDaemon LOG_INFO /var/log/netatalk/afp.log"

/etc/default/netatalkには、次の内容を設定しました。変更点のみ、列挙します。

ATALK_NAME=`/bin/hostname --short`
ATALK_MAC_CHARSET='MAC_JAPANESE'
ATALK_UNIX_CHARSET='UTF8'
AFPD_UAMLIST="-U uams_guest.so,uams_dhx.so,uams_dhx2.so"

/etc/netatalk/AppleVolumes.defaultには、次の内容を設定しました。

:DEFAULT: options:upriv,usedots cnidscheme:dbd maccharset:MAC_JAPANESE
volcharset:UTF8 dperm:0700 fperm:0600 ea:sys (実際には1行)
/home/username "username" allow:@username deny:admin
/home/u_capsule "Ubuntu Capsule" options:tm volsizelimit:5000

元々設定されていた"~"は、コメントアウトします。

/home/usernameは、ログインディレクトリです。

/home/u_capsuleは、Time Machineのバックアップ用です。volsizelimit:5000は、5GiBと言う事です。実態に合わせて変更してください。

$ sudo mkdir /home/u_capsule
$ sudo chown nobody:nogroup /home/u_capsule
$ sudo chmod 775 /home/u_capsule

ログファイルを置くディレクトリを作ります。

$ sudo mkdir /var/log/netatalk

afp_signature.confを置くディレクトリを作ります。

$ sudo mkdir /var/lib/netatalk

起動します。

$ sudo service netatalk start

avahi-daemonの設定をします。Ubuntu 10.04には、最初からavahi-daemonが入っていて、起動されています。

$ cd /etc/avahi/services
$ sudo vi afpd.service
$ sudo vi adisk.service

afpd.serviceの中身は、次の様に設定します。

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_afpovertcp._tcp</type>
    <port>548</port>
  </service>
</service-group>

adisk.serviceの中身は、次の様に設定します。

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_adisk._tcp</type>
    <port>9</port>
    <txt-record>sys=adVF=0x100</txt-record>
    <txt-record>dk0=adVN=Ubuntu Capsule,adVF=0x81</txt-record>
  </service>
</service-group>

これで、Mac OS Xから見えるはずです。avahi-daemonは、設定ファイルを置くだけで良く、再起動の必要は無さそうです。

Mac OS X 10.5.8 Leopardで試しました。Bonjourホストとして見えます。マウントしてみました。そうしたら、CNID関係のエラーで、リードオンリーでマウントされるというダイアログが出てきました(ダイアログをキャプチャするのを忘れました)。

/var/log/netatalk/default.logを見ると、次のエラーが記録されていました。

Jul 17 19:20:32.548734 afpd[3892] {cnid_dbd.c:314} (E:CNID): dbd_rpc:
Error reading header from fd (db_dir /home/u_capsule): Connection reset by peer
(表示の関係で、折り返しています)

DB関係のエラーの様に見えます。今回、Berkeley DBを4.8に切り替えたからでしょうか? 前回は、Berkeley DB 4.6でした。Ubuntu側で.AppleDBを消して、Mac OS Xから再接続してみたら直りました。

【関連記事】

(訂正 2011-03-06 00:15)afpd.confの書き方を修正しました。

Ubuntu 10.04にnetatalk 2.1.3インストール[追記・訂正あり]”に“9”個のコメント
  • HAT より:

    おかしいですね。netatalk 2.1.xはBDBのバージョンを上げても自動的に修復する筈なんですけどね。前に入れていたnetatalkが2.0だとダメですが。
    CNIDデータベースの調子が悪いときはまずbdbコマンドを試してみてください。

  • HAT より:

    netatalk 2.1.3 リリース

    netatalk 2.1.3が出てます。 netatalk | Get netatalk at SourceForge.net Snow Leopardのバグにより、netatalk 2.0.xに接続すると問題が発生するので、2.1.3をおすすめします。 インストール手順や設定については、以下のページをご覧ください。 Netatalk and Samba netatalk 2.1.xのインストール実例は結構あります。 Ubuntu 10.04にnetatalk 2.1.3インストール: プラ…

  • お市 より:

    HATさんへ、いつもコメントありがとうございます。
    2.1.2/BDB4.6→2.1.3/BDB4.8と言う組み合わせです。
    bdbコマンドを探した(/usr, /bin, /sbin)のですが、見つけられませんでした。

  • HAT より:

    まちがえた。
    dbdコマンドです。

  • お市 より:

    HATさんへ、再びコメントありがとうございます。
    本日、色々試してみました。次の手順で確認しました。
    1. .AppleDB削除
    2. 2.1.2/BDB4.6に接続 → エラー無し
    3. 2.1.3/BDB4.8に接続 → エラー発生
    4. dbd -rで、修復
    5. 2.1.3/BDB4.8に再接続 → エラー無し
    このような結果になりました。
    dbd -rで修復できました。
    他、調べる事がありましたら、お知らせ下さい。

  • HAT より:

    ありゃ、そうですか。
    2.1-beta1の変更点で、
    * NEW: support BerkeleyDB upgrade. Starting with the next release after 2.1 in case of BerkeleyDB library updates, Netatalk will be able to upgrade the CNID databases.
    というのがあるので、てっきり自動でアップグレードするのかと思ってましたが、
    自分でdbdを使えという意味なのかもしれません。

  • お市 より:

    HATさんへ、再びコメントありがとうございます。
    変更点を読むと、「アップグレード可能」とは書かれていますが、「自動で」と言う事は書かれていませんね。確かに、自分でと言う事なのかもしれませんね。
    dbd -uと言うコマンドも試してみたのですが、うまく行きませんでした。
    本文中にも書いたのですが、設定ディレクトリ[PKGCONF]の中に、"afp_signature.conf"が勝手に作られてしまうのは、気持ち悪くありませんか? /var/lib 等に作った方が良いと思います。
    MLに参加して、報告するべきなのでしょうか?
    よろしくお願いします。

  • HAT より:

    [PKGCONF]に入るように実装したのは、私です。
    FHSによる/var/lib/の要件は、アプリケーションやシステムの状態を保存するということであり、ユーザが設定のために修正してはならないとされています。
    一方、/etc/は設定ファイルを置く場所であり、静的です。ユーザが設定を行ないます。
    afp_signature.confはsignatureを設定するための設定ファイルです。これは初回起動時に自動設定されるだけであり、その後は永久に値がかわりません。netatalkの状態によって値がかわることはありません。すなわち静的です。ユーザが自分で設定することも可能です。
    むしろ、atalkd.confの方が疑問です。ネットワーク上に同一のDDPアドレスを持つホストがあった場合、netatalkはatalkd.confを書き換えます。しかしながら、他のパラメータはユーザが書く必要があるので、/var/lib/に置くわけにはいかないでしょう。
    疑問がある場合は、こういう場所でなくMLにpostしてください。

  • お市 より:

    HATさんへ、コメントありがとうございます。
    色々、お手間を取らせてしまって、申し訳ありません。
    大変良くわかりました。
    MLがあるのは知っていたのですが、ついついHATさんに甘えてしまいました。ごめんなさい。

コメントを残す