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

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

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

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 する

まずは 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 をインストールした時と同じで。