Netatalk 3.0をdebian化してUbuntu 10.04にdpkgでインストール[追記あり]

2014年8月13日netatalk

Netatalk 3.0がリリースされました。

Netatalk 2.xからの変更点は、次のwebページをご覧下さい。

次のステップで、netatalk 3.0をdebianパッケージ化して、Ubuntu 10.04にインストールしました。

  1. Netatalk 3.0のDebian化 (.debパッケージを作る)
  2. ビルド
  3. インストール

私は、Debianの開発者ではないので、Debian化の行程は正確ではないかも知れません。でも、.debパッケージはうまく動いている様です。何かコメントがあれば、ご記入をお願いします。

この記事を書くにあたり、次の様にプロンプトを記載しています。プロンプトの指定が無い場合、どこで作業しても問題ありません。

  • [work dir]$ … “~/work/netatalk/netatalk_3.0-dpkg"の様な、作業ディレクトリ
  • [pkg dir]$ … netatalk packageのソースディレクトリ。ここでは"~/work/netatalk/netatalk_3.0-dpkg/netatalk-3.0″

私は、次の環境で試しています。

  • サーバー
    • PowerMac G4/MDD
    • Ubuntu 10.04 (EA, ACL, LDAPインストール済み)
  • クライアントA
    • iMac (mid 2007)
    • OS X 10.6.8 Snow Leopard (LDAP設定済み)
  • クライアントB
    • Macbook Pro (early 2011)
    • OS X 10.7.4 Lion

0. 準備

もし、古いnetatalkをインストールしていたら、あらかじめ消しておきます。古いバージョンのnetatalkが入っていると、トラブルの元になります。

Netatalkをアンインストールするには、どのようにしてnetatalkをインストールしたかにより、いくつかの方法があります。

Synapicパッケージマネージャーやapt-getを使ってインストールした時は、次の方法をとれます。

  • Synaptic package manager
  • apt-get remove / purge

オリジナルソースからビルドした場合は、次のコマンドでアンインストールして下さい。

$ cd ~/src/netatalk-*/
$ sudo make uninstall

1. Netatalk 3.0のDebian化 (.debパッケージを作る)

  1. Debianパッケージをビルドする為のパッケージをインストールする
  2. Netatalkのソースをダウンロードして展開する
  3. Netatalk 2.2.2のDebianパッケージをダウンロードして展開する
  4. Debianパッケージを作る
  5. パッケージ中のファイルを修正する
  6. 関係するパッケージをインストールする

1.1 Debianパッケージをビルドする為のパッケージをインストールする

Debianパッケージを作る為に、次のパッケージをインストールします。

  • dpkg-dev
  • fakeroot
  • dh-make
$ sudo apt-get install dpkg-dev fakeroot
$ sudo apt-get install build-essential
$ sudo apt-get install dh-make

1.2 Netatalkのソースをダウンロードして展開する

オリジナルのnetatalkソースを次の所からダウンロードします。

[work dir]$ wget http://sourceforge.net/projects/netatalk/files/netatalk/3.0/netatalk-3.0.tar.bz2
[work dir]$ tar xvjf netatalk-3.0.tar.bz2

1.3 Netatalk 2.2.2のDebianパッケージをダウンロードして展開する

2.2.2-1の三角マークをクリックしnetatalk_2.2.2-1.debian.tar.gzをダウンロードして下さい。

[work dir]$ wget https://launchpad.net/ubuntu/+archive/primary/+files/netatalk_2.2.2-1.debian.tar.gz
[work dir]$ tar xvzf netatalk_2.2.2-1.debian.tar.gz

1.4 Debianパッケージを作る

このステップが、この記事の肝心な部分です。

  1. dh_makeで、"debian"ディレクトリを作る
  2. 2.2.2-1のファイルで上書きする
1.4.1  dh_makeで"debian"ディレクトリを作る
[work dir]$ ls
debian  netatalk-3.0  netatalk-3.0.tar.bz2  netatalk_2.2.2-1.debian.tar.gz
[work dir]$ cd netatalk-3.0
[pkg dir]$ dh_make --createorig --single
ldap_sasl_interactive_bind_s: Local error (-2)
    additional info: SASL(0): successful result: 
Maintainer name : Foo Bar
Email-Address   : foo@example.com 
Date            : Mon, 09 Jul 2012 21:54:11 +0900
Package Name    : netatalk
Version         : 3.0
License         : blank
Using dpatch    : no
Using quilt     : no
Type of Package : Single
Hit <enter> to confirm: 
Done. Please edit the files in the debian/ subdirectory now. netatalk
uses a configure script, so you probably don't have to edit the Makefiles.
1.4.2 2.2.2-1のファイルで上書きする
[pkg dir]$ cp -p ../debian/rules debian/rules
[pkg dir]$ cp -p ../debian/control debian/control

1.5 パッケージ中のファイルを修正する

このステップが最重要です。

  1. [pkg dir]/debian/rulesの修正(configureオプション)
  2. [pkg dir]/debian/shlibs.localの修正(ライブラリ依存定義)
  3. [pkg dir]/debian/rulesの修正(ずるっこ)
  4. [pkg dir]/debian/rulesの修正(その他)
1.5.1 [pkg dir]/debian/rulesの修正(configureオプション)

Netatalk 3.0で、configureオプションが変更されています。その為、rules中のconfigureオプションを変更します。

DEB_CONFIGURE_EXTRA_FLAGS := \
        --with-shadow --enable-fhs              \
        --enable-overwrite      \
        --enable-krbV-uam       \
        --with-libgcrypt-dir                    \
        --with-cracklib=/var/cache/cracklib/cracklib_dict       \
        --enable-zeroconf       \
        --with-init-style=debian
1.5.2 [pkg dir]/debian/shlibs.localの修正(ライブラリ依存定義)

このファイルには、ライブラリの依存関係が書かれています。もし、このファイルが無い場合、次のエラーが出るとお思います。

dpkg-shlibdeps: error: no dependency information found for /usr/lib/libatalk.so.0 (used by debian/netatalk/usr/sbin/cnid_dbd).

これを解決する為に、次の記述を"debian/shlibs.local"に追加しました。

libatalk 0 libdb-dev

これは、完全な依存関係を定義していませんが、debianパッケージを作るのには十分でした。

1.5.3 [pkg dir]/debian/rulesの修正(ずるっこ)

Ubuntu 10.04標準環境では、"debian/control"で定義されている"cdbs (>= 0.4.72~)"を満足できません。

この問題を解決するには、方法が二つあります。

もし、後者を選んだなら、(“debian/control"ではなく)"debian/rules"の一部を"#"でコメントアウトします。

#include /usr/share/cdbs/1/rules/upstream-tarball.mk

この修正の後、buildします。この記事では、後者の方法を選んでいます。

1.5.4 [pkg dir]/debian/rulesの修正(その他)

ほか、netatalk 3.0になって、不要なファイルの整理がされた様で、修正が必要になりました。

“debian/rules"のパッチアフィルを作りましたので、ダウンロードして下さい。

[pkg dir]$ gzip -dc debian-rules-3.0_20121004.patch_.gz | patch debian/rules

1.6 関係するパッケージをインストールする

“debian/control"に記載されている、関係するパッケージをインストールします。

$ sudo apt-get install\
cdbs\
autotools-dev\
devscripts\
debhelper\
dh-buildinfo\
libdb-dev\
libwrap0-dev\
libpam0g-dev\
libcups2-dev\
libkrb5-dev\
libltdl3-dev\
libgcrypt11-dev\
libcrack2-dev\
libavahi-client-dev\
d-shlibs\
hardening-includes

2. ビルド

これで、ビルドを開始できます。

[pkg dir]$ dpkg-buildpackage -us -uc -rfakeroot -d

これには少し時間がかかります。

-us -uc" オプションは、no signです。なので、出来上がったパッケージを、アップロードする事は禁止となります。

“-d"オプションは、依存関係の無視です。

これが終わると、[work dir]に、.debパッケージを見つけられると思います。

[work dir]$ ls
netatalk-3.0                    netatalk_3.0-1.dsc
netatalk-3.0.tar.bz2            netatalk_3.0-1_powerpc.changes
netatalk_2.2.2-1.debian.tar.gz  netatalk_3.0-1_powerpc.deb
netatalk_3.0-1.diff.gz          netatalk_3.0.orig.tar.gz

3. インストール

まず、avahi-daemonが動いていないようだったら、起動して下さい。

$ sudo service avahi-daemon start
avahi-daemon start/running, process 17177

遂に、netatalk 3.0をインストールできます。そして、設定内容をチェックします。

[work dir]$ sudo dpkg -i netatalk_3.0-1_powerpc.deb
$ sudo service netatalk stop
$ /sbin/afpd -V
afpd 3.0 - 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:    Avahi
  TCP wrappers support:    Yes
         Quota support:    Yes
   Admin group support:    Yes
    Valid shell checks:    Yes
      cracklib support:    Yes
            EA support:    ad | sys
           ACL support:    Yes
          LDAP support:    Yes

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

そして、"/etc/afp.conf"を、次の例の様に修正します。

;
; Netatalk 3.x configuration file
;

[Global]
    vol preset = default_for_all_volumes
    log file = /var/log/netatalk.log

[default_for_all_volumes]
    file perm = 0600
    directory perm = 0700

[Homes]
    basedir regex = /home

[MY_TIMEMACHINE]
    path = /afp/time_capsule
    time machine = yes
    vol size limit = 1024

[Shared]
    path = /afp/shared
    file perm = 0666
    directory perm = 0777

これで、netatalkサービスを起動できます。

$ sudo service netatalk start
Starting Netatalk services:  netatalk.

Netatalkの動作を

Mac OS X 10.6.8 OS X 10.7.4
サーバーを見つけられるか? OK OK
フォルダを作れるか? OK OK
MacからUbuntuにコピーできるか? OK OK
UbuntuからMacにコピーできるか? OK OK
コピーされたファイルのパーミッションはどうか? OK OK
コピーされたファイルのタイムスタンプはどうか? OK OK
ファイルの拡張属性はどうか? OK OK
“:"の様な特殊文字はどうか? OK OK
長いファイル名はどうか? OK OK
TimeMachineでバックアップできるか? OK OK

ファイル拡張属性の名前は、MacとUbuntu (netatalk)で違う物があります。

Mac

$ xattr ScreenShot.png
com.apple.FinderInfo
com.apple.metadata:kMDItemIsScreenCapture
com.apple.metadata:kMDItemScreenCaptureType

Ubuntu

$ getfattr ScreenShot.png
# file: Screen Shot 2012-06-02 at 0.46.46.png
user.com.apple.metadata:kMDItemIsScreenCapture
user.com.apple.metadata:kMDItemScreenCaptureType
user.org.netatalk.Metadata

名前は違っていますが、中身は同じだそうです。

HATさんにコメントで教えていただいた所、次の対応になっています。

OS X netatalk
ファイル拡張属性 com.apple.FinderInfo user.org.netatalk.Metadata

“user.org.netatalk.Metadata"は"com.apple.FinderInfo"のコピーです。“user.org.netatalk.Metadata"の中に"com.apple.FinderInfo"がAppleDoubleフォーマットで納められています。これは、netatalk 3.0になってからの実装です。

“com.apple.FinderInfo"は、netatalk 2.xまでは、".AppleDouble/FILE"に納められていました。

“user.org.netatalk.Metadata"の内容は、netatalkに含まれる"apple_dump"コマンドで確認できます。このコマンドは、AppleSingle/AppleDoubleフォーマットデータをダンプします。

ちなみに、Debian化した後でインストールした物を消す時には、次のコマンドが使えます。

$ sudo dpkg --purge netatalk

このコマンドは、設定ファイルを含めて消去するので、必要に応じて、/etc/afp.confをバックアップするのを忘れないで下さい。

(追記 2012-09-26 22:42)

パッケージの作成方法に誤りがある事がわかりました。この状態だと、新規にnetatalkをインストールする場合と、netatalkを削除する時に失敗します。

問題の解決方法はわかりましたが、記事を更新するのに少し時間がかかります。申し訳ありません。

必要な作業は次の通りとなります。

  • debian/rules修正
  • debian/control修正
  • debian/postrm追加

(追記 2012-10-04 21:07)

HATさんから寄せられた情報にしたがい、最低限の修正だけ加えたpatchをuploadしました。debian/rulesのみ修正しています。

debパッケージを作る時に、/var/netatalkを削除していた部分を修正しました。

問題を見つけていただいたのは、次の記事です。ありがとうございます。

【参考にした所】

【シリーズ記事】

(追記 2014-08-13 00:09)

この記事の方法では、Netatalk 3.1.3のビルドができなかった様なので、更新しました。

 

Posted by お市のかた