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

netatalk,パソコン・インターネット

(追記 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インストール[追記・訂正あり]していますので、そこで得た反省と知見を取り込んでいます。

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

  • netatalk 2.1.3を新規インストールする
  • 設定はモダンな物にする(SLP対応は残す)
  • 設定ファイルの場所は、Ubuntuの流儀になるべく合わせる
  • netatalkの動作で気になる所があったので、暫定的に対応する

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

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

$ 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の書き方を修正しました。

Posted by お市のかた