Netatalk 3.0をdebian化してUbuntu 10.04にdpkgでインストール[追記あり]
Netatalk 3.0がリリースされました。
Netatalk 2.xからの変更点は、次のwebページをご覧下さい。
次のステップで、netatalk 3.0をdebianパッケージ化して、Ubuntu 10.04にインストールしました。
- Netatalk 3.0のDebian化 (.debパッケージを作る)
- ビルド
- インストール
私は、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パッケージを作る)
- Debianパッケージをビルドする為のパッケージをインストールする
- Netatalkのソースをダウンロードして展開する
- Netatalk 2.2.2のDebianパッケージをダウンロードして展開する
- Debianパッケージを作る
- パッケージ中のファイルを修正する
- 関係するパッケージをインストールする
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パッケージを作る
このステップが、この記事の肝心な部分です。
- dh_makeで、"debian"ディレクトリを作る
- 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 パッケージ中のファイルを修正する
このステップが最重要です。
- [pkg dir]/debian/rulesの修正(configureオプション)
- [pkg dir]/debian/shlibs.localの修正(ライブラリ依存定義)
- [pkg dir]/debian/rulesの修正(ずるっこ)
- [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~)"を満足できません。
この問題を解決するには、方法が二つあります。
- アンオフィシャルUbuntu PPAを使う
- この要求を無視する
もし、後者を選んだなら、(“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"のパッチアフィルを作りましたので、ダウンロードして下さい。
- debian-rules-3.0_20121004.patch_.gz (updated 2012-10-04 21:07)
[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を削除していた部分を修正しました。
問題を見つけていただいたのは、次の記事です。ありがとうございます。
【参考にした所】
- Netatalk and Samba
- Howto build a trivial Debian package with dh_make « I Might Be Wrong (英語)
- Chapter 4. Required files under the debian directory (英語)
- Debian Source Packaging Recipe (英語)
- ThinkPad X100e で動画再生支援 « chocokanpan BLOG
- useful dh_shlibdeps arguments — matt vs world (英語)
【シリーズ記事】
(追記 2014-08-13 00:09)
この記事の方法では、Netatalk 3.1.3のビルドができなかった様なので、更新しました。
ディスカッション
その説明はちょっとおかしい。
AppleDoubleフォーマットであるところのuser.org.netatalk.Metadataの中にcom.apple.FinderInfoが含まれています。
HATさんへ、いつもコメントありがとうございます。
修正してみました。いかがでしょうか?
今、ハワイですか! きっとまだお休みの時間ですね。
細かい話になりますが、
「このコマンドは、AppleSingle/AppleDoubleフォーマットファイルをダンプします。」
「It dumps AppleSingle/AppleDouble format file.」
これらはnetatalk 2.xのmanpageの引用じゃないでしょうか。
netatalk 3では拡張属性もdumpするので、manpageを修正しています。
「このコマンドは、AppleSingle/AppleDoubleフォーマットデータをダンプします。」
「It dumps AppleSingle/AppleDouble format data.」
HATさんへ、いつもコメントありがとうございます。
ご指摘ありがとうございます。修正しておきました。
libcups2-devは必要ないですね。印刷機能はもうありません。
HATさんへ、いつもコメントありがとうございます。
なるほど。
週末にでも直しておきます。
http://notes.vanu.jp/post/32196965319/netatalk3
ここにインストール記事があるんですが、いっぱい間違っている。
コメント記入の方法がわからない。こまった。
Disqusに登録しないと書き込めないんだろうか。そんなことする気ないし。
HATさんへ、いつもコメントありがとうございます。
私の宿題は確認済なのですが、更新が間に合っていません。ごめんなさい。
Discusのリンクをクリックすると、コメント投稿フォームらしき物はでますね。
このブログを書かれている方は、twitterをされているので、そちら経由で指摘されてはいかがでしょうか?
ここのページの通りにやると、/var/netatalk/CNIDディレクトリが作られないという話になっていますが、何か心当たりはあるでしょうか。
たぶんdebパッケージ特有の問題ではないかと。
HATさんへ、再びコメントありがとうございます。
twitter IDを作られたのですね。会話は見させていただきました。
確認したところ、確かに/var/netatalk/CNIDが作られないようです。この状態だと、OS Xから接続した時に、次のエラーが出ます。
Something wrong with the volume’s CNID DB, using temporary CNID DB instead.Check server messages for details. Switching to read-only mode.
今まで、すでにnetatalkを通常の方法でインストールした事があったので、/var/netatalk/CNIDが残っていたようです。その為、debでインストールしても問題なかったようです。
/var/netatalk/CNIDは、通常のmake installの時に作られると言う事ですが、debのパッケージ作成に使われるディレクトリを見ても、確かに/var/netatalk/CNIDはありません。
かなり真剣に確認しないと原因は掴めないと思います。
HATさんへ、
なんだか、原因らしき部分を見つけました。今、buildしています。
make install後の/varディレクトリを消す設定になっていたのが、原因だと思います。
…
BIngoでした!
帰宅してから記事をupdateします。