QNAP TS412のnetatalkを置き換えようとして挫折した話

2016年5月21日NAS,netatalk,パソコン・インターネット

前、QNAPのNAS(TS-412)を持っていました。やった事を、次のページにまとめています。

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

これ以外でも、機能を拡張しようと奮闘していましたが、諦めた事があります。

先日、需要はないと思いつつ、過去の事を思い出しながら記事を書きました。

実は、書いていない事はもう一つあって、それはnetatalkのインストールです。QNAPの基本機能としてAFPサーバ機能があり、netatalkがインストールされています。ですが、インストールされているnetatalkのバージョンが古いです。そのため、(当時の)最新のnetatalkをインストールしようとしました。

インストールは、やはりパッケージを作ってインストールする方が管理が楽です。

以下、当時のインストール状況です。インストールできて、単体での動作はしました。ですが、QNAPのnetatalk環境と共存しようとして(netatalkバイナリだけを置き換えて、QNAPが持っていたnetatalkの環境を利用しようとした)、できなくて諦めました。

一応、以下の方法でインストールはできましたが、実用的ではありませんでした。こんな無駄な事はしないで、メーカが用意しているnetatalk環境で我慢して使うというのが正解だと思います。良い子は真似しちゃダメです。

必要ライブラリのインストール

Netatalkをインストールするためには、幾つかの必須ライブラリがあります。QNAP OSで調査した所、Berkley DBとlibpam以外は、既存のipkgでなんとかなったはずです。たぶん。

Berkeley DB 5.2のインストール

Berkeley DB自体はQNAPにインストールされているのですが、netatalkをビルドするための環境が足りません。そのため、Berkeley DBのipkファイルを作ってインストールしました。

まずは、次のところからソースをダウンロードします。ダウンロードするためには、ユーザー登録が必要です。

ダウンロードし終わったら、QNAPにコピーします。

# cd /opt
# mkdir work
# cd work
# mkdir BerkeleyDB
# cd BerkeleyDB
# mkdir libdb52-dev
(何らかの方法で、tarファイルをコピーしてくる)
# tar xvzf db-5.2.42.tar.gz
# cd db-5.2.42/build_unix
# ../dist/configure --with-uniquename --prefix=/opt
# make (かなり時間がかかります)
# make DESTDIR=/opt/work/BerkeleyDB/libdb52-dev install
# rm -rf /opt/work/BerkeleyDB/libdb52-dev/opt/docs
# cd ../..

途中で、"doc"を消しているのは、ファイルサイズが大きい(90MB以上)のと、参照するつもりが無いからです。必要だと思う方は、消さずに残しておいて下さい。

次に、パッケージファイルを作るための"control"ファイルを作ります。

# mkdir CONTROL
# vi control

次の内容を記載します。

Package: libdb52-dev
Architecture: arm
Priority: optional
Section: util
Version: 5.2.42
Maintainer: Oichinokata <webmaster@oichinote.com>
Source: http://www.oracle.com/technetwork/products/berkeleydb/downloads/index-082944.html
Description: Oracle Berkeley DB 11g provides a collection of well-proven building-block technologies
Depends:
Conflicts:

“Maintainer:"の行は、あなたのお名前に変更しておいて下さい。

# ../ipkg-build.sh libdb52-deb (結構時間がかかります)

これで、ipkファイル"libdb52-dev_5.2.42-1_arm.ipk"ができているはずです。

次に、インストールします。

# ipkg install libdb52-dev_5.2.42-1_arm.ipk

これで終了です。

libpamインストール

認証のために必要です。これもパッケージ化してインストールしてます。ですが、当時のメモに残していたのは、ダウンロードする所までしか書いていませんでした。

手順は次の通りです。

# wget http://www.linux-pam.org/library/Linux-PAM-1.1.6.tar.bz2
# tar xjvf Linux-PAM-1.1.6.tar.bz2 
# ./configure --prefix=/opt --enable-db=no
# ipkg install flex

netalkのビルドの準備

必要とされるパッケージは、次の通りです。ipkgコマンドでインストールします。

# ipkg install libdb52
# ipkg install gconv-modules
# ipkg install openssl-dev
# ipkg install coreutils
# ipkg install findutils

libdb52をインストールしてますが、なんでだろう? 先に、BerkleyDBをインストールしてるのに?

ACLのincludeファイルだけ取り出してコピーします。ACLを有効化する為に必要です。

# mkdir /opt/work
# mkdir /opt/work/acl
# cd /opt/work/acl/
# wget http://mirrors.zerg.biz/nongnu/acl/acl-2.2.51.src.tar.gz
# tar xvzf acl-2.2.51.src.tar.gz
# cd acl-2.2.51/include
# cp -av acl.h /opt/include/sys

netatalkのビルド

その当時は、netatalk 3.0.4が最新でした。

アーカイブの取得と展開

# mkdir /opt/work
# mkdir /opt/work/netatalk
# cd /opt/work/netatalk
# wget http://sourceforge.net/projects/netatalk/files/netatalk/3.0.4/netatalk-3.0.4.tar.bz2
# tar xvjf netatalk-3.0.4.tar.bz2
# cd netatalk-3.0.4

Configureの実行

# ./configure --prefix=/opt --with-bdb=/opt

QNAPは、独自構成のLinuxなので、–with-init-styleは使えません。

Configure結果の確認

Using libraries:
    LIBS           = -ldl 
    CFLAGS         = -I$(top_srcdir)/include -I$(top_builddir)/include -D_U_="__attribute__((unused))" -g -O2
    PTHREADS:
        LIBS   = 
        CFLAGS = -pthread
    SSL:
        LIBS   =  -L/opt/lib -L/opt -lcrypto
        CFLAGS =  -I/opt/include -I/opt/include/openssl
    LIBGCRYPT:
        LIBS   = -L/opt/lib -lgcrypt -lgpg-error
        CFLAGS = -I/opt/include -I/home/slug/optware/cs08q1armel/staging/opt/include
    BDB:
        LIBS   =  -L/opt/lib -ldb-5.2
        CFLAGS =  -I/opt/include/db5
    LDAP:
        LIBS   =  -lldap
        CFLAGS = 
    LIBEVENT:
        bundled
Configure summary:
    INIT STYLE:
         none
    AFP:
         Extended Attributes: ad | sys
         ACL support: yes
    CNID:
         backends:  dbd last tdb
    UAMS:
         DHX     ( SHADOW)
         DHX2    ( SHADOW)
         RANDNUM (afppasswd)
         clrtxt  ( SHADOW)
         guest
    Options:
         Zeroconf support:        no
         tcp wrapper support:     no
         quota support:           no
         admin group support:     yes
         valid shell check:       yes
         cracklib support:        no
         ACL support:             yes
         Kerberos support:        auto
         LDAP support:            yes
         dbus support:            no
         dtrace probes:           no
    Paths:
         Netatalk lockfile:       /var/lock/netatalk
    Documentation:
         Docbook:                 no

う〜ん、PAMの事が載ってないな。

コンパイル

# make

ipkファイルの作成

次の記事を参考にして下さい。

ipkg作成ディレクトリに仮インストール

# mkdir /opt/work/netatalk/netatalk_3.0.4-1
# make DESTDIR=/opt/work/netatalk/netatalk_3.0.4-1 install

controlファイルの作成

# cd /opt/work/netatalk/netatalk_3.0.4-1
# mkdir CONTORL
# vi control

controlファイルの中身の例は、次の通りです。

ackage: netatalk3
Architecture: arm
Priority: optional
Section: util
Version: 3.0.4-1
Maintainer: Oichinokata <webmaster@oichinote.com>
Source: http://sourceforge.net/projects/netatalk/files/netatalk/3.0.4/netatalk-3.0.4.tar.bz2
Depends: libdb52 gconv-modules openssl libgcrypt openldap-libs
Conflicts: netatalk
Description: Netatalk is a freely-available Open Source AFP fileserver.

Maintainerを、ご自身のお名前に変更して下さい。

afp.confファイルの作成

# cd /opt/work/netatalk/netatalk_3.0.4-1/opt/etc
# vi afp.conf

次の内容に書き換えます。

[Global]
    mac charset = MAC_JAPANESE
    afpstats = yes
    vol preset = my default values

[my default values]
    file perm = 0400
    directory perm = 0700

[Multimedia]
    path = /share/MD0_DATA/Multimedia

[Download]
    path = /share/MD0_DATA/Download

[Recordings]
    path = /share/MD0_DATA/Recordings

[Web]
    path = /share/MD0_DATA/Web

[Usb]
    path = /share/MD0_DATA/Usb

[Public]
    path = /share/MD0_DATA/Public
    file perm = 0777
    directory perm = 0777

[username]
    path = /share/MD0_DATA/username

ipkファイルの作成

ipkg-utilsに含まれている、ipkg-buildがPATHに含まれている事が前提です。

# cd /opt/work/netatalk
# ipkg-build netatalk_3.0.4-1

インストールと確認

インストール

# ipkg install netatalk3_3.0.4-1_arm.ipk 
Installing netatalk3 (3.0.4-1) to root...
Configuring netatalk3
Successfully terminated.

確認

# /opt/sbin/afpd -V    
afpd 3.0.4 - 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:

          AFP versions:	2.2 3.0 3.1 3.2 3.3 
         CNID backends:	dbd last tdb 
      Zeroconf support:	No
  TCP wrappers support:	No
         Quota support:	No
   Admin group support:	Yes
    Valid shell checks:	Yes
      cracklib support:	No
            EA support:	ad | sys
           ACL support:	Yes
          LDAP support:	Yes
         D-Bus support:	No
         DTrace probes:	No

              afp.conf:	/opt/etc/afp.conf
           extmap.conf:	/opt/etc/extmap.conf
       state directory:	/opt/var/netatalk/
    afp_signature.conf:	/opt/var/netatalk/afp_signature.conf
      afp_voluuid.conf:	/opt/var/netatalk/afp_voluuid.conf
       UAM search path:	/opt/lib/netatalk//
  Server messages path:	/opt/var/netatalk/msg/

サービスの起動と停止

QNAPのAFPDの停止

管理画面から、AFPを停止して下さい。

インストールしたnetatalkの起動

# /opt/sbin/netatalk

インストールしたnetatalkの停止

# ps aux | grep netatalk 
10855 admin       924 S   /opt/sbin/netatalk 
11447 admin       568 S   grep netatalk 
# kill 10855

メモ

結構はまったこと。makeの途中で、次のエラーで落ちていました。

libtool: link: object name conflicts in archive: .libs/libcnid.lax/libcnid_dbd.a//opt/work/netatalk/netatalk-3.0.2/libatalk/cnid/dbd/.libs/libcnid_dbd.a

libutilと言うスクリプトが、’sort -uc’を使っていました。元々QNAPに入っているsortはbusyboxの物で、必要とされるオプションが足りません。

他にも、findもbusyboxの物だったので、必要とされるオプションが足りません。

それぞれ、corutilsとfindutilをインストールする事で、解決しました。

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

Posted by お市のかた