ブログトップ 記事一覧 ログイン 無料ブログ開設

Debian GNU/Linux 3.1 on PowerMac G4 このページをアンテナに追加 RSSフィード Twitter

2011-09-12 CentOS 5.6に netatalk 2.2.1を入れるのが大変だった…

netatalk のバージョンが 2.2.1 になっていた。

大量のバグフィックスってあるし、せっかくだからまだ netatalk 2.2.0 を入れていなかった古い(CentOS 5.6)サーバーに入れてみようと思った。

そしたらちょこっとハマったのでメモ。

[][]netatalk 2.2.1 のダウンロードと準備 23:04 netatalk 2.2.1 のダウンロードと準備を含むブックマーク netatalk 2.2.1 のダウンロードと準備のブックマークコメント

まずは前に netatalk 2.2.0 をインストールした時のメモを見て準備。

このサーバーには avahi-devel が入っていなかったのでインストールした。

[paraches@raphael myTest]$ yum list installed | grep avahi
avahi.i386                               0.6.16-10.el5_6               installed
avahi.x86_64                             0.6.16-10.el5_6               installed
avahi-compat-libdns_sd.x86_64            0.6.16-10.el5_6               installed
avahi-glib.i386                          0.6.16-10.el5_6               installed
avahi-glib.x86_64                        0.6.16-10.el5_6               installed
[paraches@raphael myTest]$ sudo yum install avahi-devel
<省略>
Installed:
  avahi-devel.i386 0:0.6.16-10.el5_6    avahi-devel.x86_64 0:0.6.16-10.el5_6   

Complete!
[paraches@raphael myTest]$ 

netatalk 2.2.1 はココからダウンロードしてきて展開する。

[paraches@raphael myTest]$ wget http://sourceforge.net/projects/netatalk/files/netatalk/2.2.1/netatalk-2.2.1.tar.gz/download
[paraches@raphael myTest]$ tar zxvf netatalk-2.2.1.tar.gz 
[paraches@raphael myTest]$ cd netatalk-2.2.1 

[][]configure して make & make install する 23:04 configure して make & make install するを含むブックマーク configure して make & make install するのブックマークコメント

まずは configure

[paraches@raphael netatalk-2.2.1]$ ./configure --enable-redhat --with-bdb=/usr/local/BerkeleyDB.5.1/
<省略>
ERROR: --enable-redhat is obsoleted. Use --enable-redhat-sysv or --enable-redhat-systemd.
exit 1
[paraches@raphael netatalk-2.2.1]$ 

あ! エラー!

でも、これはココに書いてあったのをさっき読んだばかりだった…。

というわけで、再度トライ!

[paraches@raphael netatalk-2.2.1]$ ./configure --enable-redhat-sysv --with-bdb=/usr/local/BerkeleyDB.5.1/
<省略>
Using libraries:
    LIBS = -lpthread  -L$(top_srcdir)/libatalk
    CFLAGS = -I$(top_srcdir)/include -D_U_="__attribute__((unused))" -g -O2 -I$(top_srcdir)/sys
    SSL:
        LIBS   =  -L/usr/lib64 -lcrypto
        CFLAGS =  -I/usr/include/openssl
    LIBGCRYPT:
        LIBS   = -lgcrypt -ldl -lgpg-error
        CFLAGS = 
    BDB:
        LIBS   =  -L/usr/local/BerkeleyDB.5.1//lib -ldb-5.1
        CFLAGS =  -I/usr/local/BerkeleyDB.5.1//include/
Configure summary:
    Install style:
         redhat-sysv
    AFP:
         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
         SLP support:             no
         Zeroconf support:        yes
         tcp wrapper support:     yes
         quota support:           yes
         admin group support:     yes
         valid shell check:       yes
         cracklib support:        no
         dropbox kludge:          no
         force volume uid/gid:    no
         ACL support:             no
         LDAP support:            yes
[paraches@raphael netatalk-2.2.1]$ 

無事終了!


で、さっくり make & make install!

[paraches@raphael netatalk-2.2.1]$ make
<省略>
/bin/sh ../../libtool --tag=CC   --mode=compile 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 -o ldap.lo ldap.c
 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: 配列の型が不完全要素型を持っています
ldap.c:72: error: 配列の型が不完全要素型を持っています
make[3]: *** [ldap.lo] エラー 1
make[3]: ディレクトリ `/home/paraches/myTest/netatalk-2.2.0/libatalk/acl' から出ます
make[2]: *** [all-recursive] エラー 1
make[2]: ディレクトリ `/home/paraches/myTest/netatalk-2.2.0/libatalk' から出ます
make[1]: *** [all-recursive] エラー 1
make[1]: ディレクトリ `/home/paraches/myTest/netatalk-2.2.0' から出ます
make: *** [all] エラー 2
[paraches@raphael netatalk-2.2.1]$ 

はい、エラー!

「配列の型が不完全要素型を持っています」って何?

とりあえず、ソースを見てみる。

struct ldap_pref ldap_prefs[] = {
    {&ldap_server,     "ldap_server",      0, 0, -1},
    {&ldap_auth_method,"ldap_auth_method", 1, 1, -1},
    {&ldap_auth_dn,    "ldap_auth_dn",     0, 0,  0},
    {&ldap_auth_pw,    "ldap_auth_pw",     0, 0,  0},
    {&ldap_userbase,   "ldap_userbase",    0, 0, -1},
    {&ldap_userscope,  "ldap_userscope",   1 ,1, -1},
    {&ldap_groupbase,  "ldap_groupbase",   0, 0, -1},
    {&ldap_groupscope, "ldap_groupscope",  1 ,1, -1},
    {&ldap_uuid_attr,  "ldap_uuid_attr",   0, 0, -1},
    {&ldap_name_attr,  "ldap_name_attr",   0, 0, -1},
    {&ldap_group_attr, "ldap_group_attr",  0, 0, -1},
    {&ldap_uid_attr,   "ldap_uid_attr",    0, 0,  0},
    {NULL,             NULL,               0, 0, -1}
};

struct pref_array prefs_array[] = {
    {"ldap_auth_method", "none",   LDAP_AUTH_NONE},
    {"ldap_auth_method", "simple", LDAP_AUTH_SIMPLE},
    {"ldap_auth_method", "sasl",   LDAP_AUTH_SASL},
    {"ldap_userscope",   "base",   LDAP_SCOPE_BASE},
    {"ldap_userscope",   "one",    LDAP_SCOPE_ONELEVEL},
    {"ldap_userscope",   "sub",    LDAP_SCOPE_SUBTREE},
    {"ldap_groupscope",  "base",   LDAP_SCOPE_BASE},
    {"ldap_groupscope",  "one",    LDAP_SCOPE_ONELEVEL},
    {"ldap_groupscope",  "sub",    LDAP_SCOPE_SUBTREE},
    {NULL,               NULL,     0}
};

ダメ! 不完全要素型ってなに???

ググっても「要素の数が決まってないとダメなのかな〜?」程度にしか理解できない…。

もちろん、配列の要素数を 13 と 10 にしてやってみてもダメ!


どうしたもんだろう?と思って色々とググっていたら、こんなページを見つけた!

configure の結果のところで、ACL Support が no だと同じエラーが出るらしい。(英語だと「array type has incomplete element type」みたい。こっちで調べたらサックリ情報が見つかったかも…)


で、ACL Support を yes にするには、libacl1-dev をインストールしろと。

これは Ubuntu の話で、CentOS だと libacl-devel になる。


早速インストール。

[paraches@raphael netatalk-2.2.1]$ sudo yum install libacl-devel
<省略>
Installed:
  libacl-devel.i386 0:2.2.39-6.el5      libacl-devel.x86_64 0:2.2.39-6.el5     

Dependency Installed:
  libattr-devel.x86_64 0:2.4.32-1.1                                             

Complete!
[paraches@raphael netatalk-2.2.1]$ 

これでいけるはず。


configure をやり直してみる。

[paraches@raphael netatalk-2.2.1]$ ./configure --enable-redhat-sysv --with-bdb=/usr/local/BerkeleyDB.5.1/
<省略>
Using libraries:
    LIBS = -lpthread  -L$(top_srcdir)/libatalk
    CFLAGS = -I$(top_srcdir)/include -D_U_="__attribute__((unused))" -g -O2 -I$(top_srcdir)/sys
    SSL:
        LIBS   =  -L/usr/lib64 -lcrypto
        CFLAGS =  -I/usr/include/openssl
    LIBGCRYPT:
        LIBS   = -lgcrypt -ldl -lgpg-error
        CFLAGS = 
    BDB:
        LIBS   =  -L/usr/local/BerkeleyDB.5.1//lib -ldb-5.1
        CFLAGS =  -I/usr/local/BerkeleyDB.5.1//include/
Configure summary:
    Install style:
         redhat-sysv
    AFP:
         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
         SLP support:             no
         Zeroconf support:        yes
         tcp wrapper support:     yes
         quota support:           yes
         admin group support:     yes
         valid shell check:       yes
         cracklib support:        no
         dropbox kludge:          no
         force volume uid/gid:    no
         ACL support:             yes
         LDAP support:            yes
[paraches@raphael netatalk-2.2.1]$ make clean

ACL support が yes になったので、make clean して再度 make してみる。

[paraches@raphael netatalk-2.2.1]$ make clean
[paraches@raphael netatalk-2.2.1]$ make
[paraches@raphael netatalk-2.2.1]$ 

エラー出なかった!


後は make install でインストール。

[paraches@raphael netatalk-2.2.1]$ sudo make install
[paraches@raphael netatalk-2.2.1]$ 

さっくりインストール終了!


設定は前に netatalk 2.2.0 をインストールした時と同じで。

HATHAT 2011/09/12 23:49 これってつまり、
LDAP Support:YesなのにACL Support:Noの場合は、
configure scriptが警告を出して止まるようにすべきということか?

parachesparaches 2011/09/14 01:15 コメント、ありがとうございます。

もうちょっと調べてみてわかったのは
「ldap.c の中で HAVE_LDAP が true の時、<atalk/ldapconfig.h> を読み込んでその中で ldap_pref の定義がされるのだけど、<atalk/ldapconfig.h> の中で HAVE_ACLS が true でない場合は結局 ldap_pref の定義がされない」という事です。

configure で ACL Support が必要だとメッセージが出ると親切だと思います。

HATHAT 2011/09/15 01:39 この問題は4月に報告されていましたが、忘れ去られていたようです。
再び問題提起しておきました。
http://sourceforge.net/mailarchive/message.php?msg_id=28087872

HATHAT 2011/09/15 19:29 gitで修正されました。
http://netatalk.git.sourceforge.net/git/gitweb.cgi?p=netatalk/netatalk;a=blobdiff;f=include/atalk/ldapconfig.h;h=5a5b657061ff467c5a52c8b0d819927588460243;hp=70f9f628c7c61c0c0fe7018b91bfceb884865f43;hb=04bb047d46a87e09a3e5e95ddc3e093c019c4bd8;hpb=cbc8c6f7a5de52fc01395241ef1faaac96c8bca3

parachesparaches 2011/09/15 22:19 リンク先を確認しました。
あっという間に修正されるものなんですね。
驚きました。

ありがとうございました。

K-HATK-HAT 2012/01/17 01:28 2.2.2が出たので、このバグは直ってます。