Ubuntu 10.04にnetatalk 2.2alpha4インストール(ACL対応でコンパイル)

2017年5月9日netatalk,パソコン・インターネット

netatalk 2.2では、LDAP運用している場合はACLが動作するとの事なので、ACL対応を試してみたくて、Ubuntu 10.04にLDAPとACLを設定しました。

この状態で、netatalk 2.2alpha4をインストールしてみました。

でも、できたのはUbuntu側へのインストールまでです。Snow Leopard側で、ACLを有効にできていません。多分、まだ設定が足りないのだと思います。マニュアルを見ると、次の様に書かれています。

  • you need an Open Directory Server or an LDAP server where you store UUIDs in some attribute
  • your clients must be configured to use this server
  • your server should be configured to use this server via nsswitch and PAM
  • configure Netatalk via afp_ldap.conf so that Netatalk is able to retrieve the UUID for users and groups via LDAP search queries

Chapter 3. Setting up Netatalkより

簡易的には、この4点ともクリアしていると思うのですが、私の設定が不完全なのだと思います。

  • LDAPサーバの設定はできました
    LDAPアカウント(john)を追加しています
  • Snow Leopard側で、LDAPアカウント(john)にsuできるようになりました
    システム環境設定→アカウントで、ネットワークアカウントサーバが認識されています
    でも、ログインウィンドウからは、ログインできません
  • Ubuntu側でPAM認証できるようになっています
    johnでログインできます
  • /etc/netatalk/afp_ldap.confを作り、"afpldaptest -u john"も動いている様です

「簡易的」にしかLDAPの設定をできていないのが、原因だと思います。

解決するには、もう一踏ん張り必要ですが、とりあえず、記事をアップロードします。

インストール自体は、今までの手順と同じです。ほとんど、前回までの記事をそのまま載せています。

インストールは、次の記事を参考にしています。HATさん、ありがとうございます。

大まかな、インストール手順は、次の通りです。他のパッケージを、ソースからビルドするのと、同じ手順です。

  1. 関連ツールインストール
  2. インストール済みのNetatalkを削除
  3. Netatalk本体インストール
    1. パッケージダウンロード&展開
    2. configure
    3. make
    4. sudo make install
  4. Netatalk設定
  5. 動作確認

前回と同じパターンです。次の記事を参考にして下さい。

工程1で、新たなパッケージが追加となります。

必要パッケージのインストールからです。すでにインストールしてあるなら、この作業は不要です。

$ 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のために必要)
$ sudo apt-get install uuid-dev (TimeMachineのために必要)
$ sudo apt-get install libavahi-client-dev (Zeroconfのために必要)

LDAP/ACLサポートのために、追加で必要になるパッケージもインストールします。

$ sudo apt-get install libldap2-dev (LDAPのために必要)
$ sudo apt-get install libacl1-dev (ACLのために必要)

工程2は、上記の記事と同じですので省略します。

設定ファイルは、あらかじめmvで退避しておきます。アンインストールの前に、sudo service netatalk stopで、サービスを停止しておいて下さい。

$ cd /etc/default
$ sudo mv netatalk .netatalk.old
$ cd /etc
$ sudo mv netatalk netatalk.old

工程3に入ります。工程3-1も、上記の記事を参考にしてください。ダウンロードするパッケージは、2.2alpha4 (gzip)です。お好みに応じて、(bzip2)をお使い下さい。

パッケージは、~/work/netatalkで展開しています。なお、前回コンパイルしたデータは、ディレクトリ名を変更して、取っておいてあります。

工程3-2です。configureします。

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

"–with-ldap", "–with-acls"を指定しなくても、自動認識されます。

conigureの結果は、次の通りです。

Using libraries:
    LIBS = -luuid -lpthread  -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
    CNID:
         backends:  dbd last tdb
    UAMS:
         DHX     ( SHADOW)
         DHX2    ( SHADOW)
         RANDNUM ( SHADOW)
         passwd  ( SHADOW)
         guest
    Options:
         DDP (AppleTalk) support: no
         CUPS support:            no
         SLP support:             yes
         Zeroconf 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:             yes

ACL supportがyesになっています。

次の工程3-3は、コンパイルです。

$ cd
$ cd work/netatalk/netatalk-2.2alpha4
$ make

コンパイルされた結果を確認します。

$ cd
$ cd work/netatalk/netatalk-2.2alpha4
$ ./etc/afpd/afpd -V
afpd 2.2alpha4 - 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
        TCP/IP Support:	Yes
DDP(AppleTalk) Support:	No
         CNID backends:	dbd last tdb
           SLP support:	Yes
      Zeroconf 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
           ACL support:	Yes
            EA support:	ad | sys
          LDAP support:	Yes
             afpd.conf:	/etc/netatalk/afpd.conf
    afp_signature.conf:	/etc/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/

ACLとLDAPがYesになっています。

工程3-4は、インストールです。

$ cd
$ cd work/netatalk/netatalk-2.2alpha4
$ sudo make install

インストールされたバージョンを確認します。

$ /usr/sbin/afpd -V
afpd 2.2alpha4 - 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
        TCP/IP Support:	Yes
DDP(AppleTalk) Support:	No
         CNID backends:	dbd last tdb
           SLP support:	Yes
      Zeroconf 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
           ACL support:	Yes
            EA support:	ad | sys
          LDAP support:	Yes
             afpd.conf:	/etc/netatalk/afpd.conf
    afp_signature.conf:	/etc/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/

ACLとLDAPがYesになっています。

工程4です。各種設定をします。新しくインストールされた設定ファイルと、前回の設定ファイルとを比較して、違いを確認しておいた方が良いと思います。

$ cd /etc/default
$ diff .netatalk.old netatalk
$ sudo cp -p .netatalk.old netatalk
$ cd /etc/netatalk
$ diff ../netatalk.old/AppleVolumes.default AppleVolumes.default
$ diff ../netatalk.old/AppleVolumes.system AppleVolumes.system
$ diff ../netatalk.old/afpd.conf afpd.conf
$ sudo cp -p ../netatalk.old/* .

/etc/default/netatalk, /etc/netatalk/afpd.conf, /etc/netatalk/AppleVolumes.defaultの設定は、次の記事をご覧下さい。

今回、/etc/netatalk/AppleVolumes.defaultに、LDAPで設定したID(john)のディスクを追加しました。

/home/john "john" allow:john deny:admin

いよいよ、工程5に移ります。設定が終わったら、netatalkを起動します。

$ sudo service netatalk start
Starting Netatalk services (this will take a while):  cnid_metad afpd.

次に、Snow Leopard側で確認しました。

一応、Snow Leopard側で見えているのですが、ACLが有効になりませんでした。

SnowLeopard$ cd /Volumes/john
SnowLeopard$ echo "aaa" > acl.txt
SnowLeopard$ chmod +a "everyone deny delete" acl.txt
chmod: Failed to set ACL on file 'acl.txt': Operation not supported

もうちょっと、問題解決を頑張ってみます。でも、今年中は、無理かも…。

それとは別に、今回のコンパイルでハマった事です。

LDAPの開発用ライブラリ(libldap2-dev)だけインストールして、ACL関係の開発用ライブラリ(libacl1-dev)をインストールしない状態でcofigure/makeすると、configureは正常終了し、makeの途中で落ちます。

"–with-acls"をつけてconfigureすると、configureは通る(通ってしまう)のですが、makeでエラーになります。

$ ./configure (略) --with-acls
(中略)
checking for LDAP (necessary for client-side ACL visibility)...
checking ldap.h usability... yes
checking ldap.h presence... yes
checking for ldap.h... yes
checking for ldap_init in -lldap... yes
checking whether to support ACLs... yes
configure: checking whether ACL support is available:
checking for acl_get_file in -lacl... no
checking for getxattr in -lattr... yes
checking for POSIX ACL support... no
(中略)
    Options:
         DDP (AppleTalk) support: no
         CUPS support:            no
         SLP support:             yes
         Zeroconf 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

ACL supportはnoになっています。この状態で、makeすると、次のエラーになります。(表示のために、折り返しています)

$ make
(中略)
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -I../../include
"-D_U_=__attribute__((unused))" -g -O2 -I../../sys -MT ldap.lo
-MD -MP -MF .deps/ldap.Tpo -c ldap.c  -fPIC -DPIC -o .libs/ldap.o
ldap.c:56: error: array type has incomplete element type
ldap.c:72: error: array type has incomplete element type
make[3]: *** [ldap.lo] エラー 1
make[3]: ディレクトリ `/home/user/work/netatalk/netatalk-2.2alpha4/libatalk/acl' から出ます
(後略)

この原因(libacl1-devをインストールしてなかった、私のミス)を突き止めるのに、しばらく時間がかかりました。

configureの結果を、注意深く見ていれば、わかることでした。

【関連記事】

[amazonjs asin="4861906075" locale="JP"]

Posted by お市のかた