netatalkをCJKパッチ付きでインストール

HATさんに当サイトへトラックバックしていただいた「Netatalk 2.0.3 with SSL and CJK on Debian 4.0」を実践してみました。
理由はDebian上のファイルをAFP経由Macからでファイルの一覧は正常に取得できるのに特定のファイルが開こうとマウスで選択した瞬間Finderから消失するという現象があったので、CJKパッチを当てたら直るかなぁという希望があったのです。(同じファイルでもファイル名を変更すると正常にAFP経由でも開けるので。)

こちらのページでは大変丁寧に順番が記載されているので簡単にインストールすることができました。

<font color="#0000FF">~/</font>$ cd /tmp/
<font color="#0000FF">/tmp</font>$ mkdir netatalkbuild
<font color="#0000FF">/tmp</font>$ cd netatalkbuild/
<font color="#0000FF">/tmp/netatalkbuild</font>$ export LANG=ja_JP.UTF-8
<font color="#0000FF">/tmp/netatalkbuild</font>$ echo $LANG
ja_JP.UTF-8
<font color="#0000FF">/tmp/netatalkbuild</font>$ sudo apt-get install fakeroot
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
fakeroot はすでに最新バージョンです。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 71 個。
<font color="#0000FF">/tmp/netatalkbuild</font>$ sudo apt-get install libssl-dev cracklib2-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
libssl-dev はすでに最新バージョンです。
cracklib2-dev はすでに最新バージョンです。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 71 個。
<font color="#0000FF">/tmp/netatalkbuild</font>$ apt-get source netatalk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
1947kB のソースアーカイブを取得する必要があります。
取得:1 http://ftp.jp.debian.org etch/main netatalk 2.0.3-4 (dsc) [802B]
取得:2 http://ftp.jp.debian.org etch/main netatalk 2.0.3-4 (tar) [1921kB]
取得:3 http://ftp.jp.debian.org etch/main netatalk 2.0.3-4 (diff) [26.1kB]
1947kB を 1s で取得しました (1492kB/s)
gpg: Signature made 2006年01月14日 17時30分38秒 JST using DSA key ID 496A1827
gpg: Can't check signature: public key not found
dpkg-source: extracting netatalk in netatalk-2.0.3
dpkg-source: unpacking netatalk_2.0.3.orig.tar.gz
dpkg-source: applying ./netatalk_2.0.3-4.diff.gz
<font color="#0000FF">/tmp/netatalkbuild</font>$ sudo apt-get build-dep netatalk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 71 個。
<font color="#0000FF">/tmp/netatalkbuild</font>$ wget http://www003.upp.so-net.ne.jp/hat/files/netatalk-2.0.3-cjk-4.patch.gz
--22:54:47--  http://www003.upp.so-net.ne.jp/hat/files/netatalk-2.0.3-cjk-4.patch.gz
           =&gt; `netatalk-2.0.3-cjk-4.patch.gz'
www003.upp.so-net.ne.jp をDNSに問いあわせています... 210.132.253.3
www003.upp.so-net.ne.jp|210.132.253.3|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 32,916 (32K) 

100%[====================================&gt;] 32,916        --.--K/s

22:54:47 (1.00 MB/s) - `netatalk-2.0.3-cjk-4.patch.gz' を保存しました [32916/32916]

<font color="#0000FF">/tmp/netatalkbuild</font>$ zcat netatalk-2.0.3-cjk-4.patch.gz &gt; netatalk-2.0.3/debian/patches/999-netatalk-2.0.3-cjk-4.diff
<font color="#0000FF">/tmp/netatalkbuild</font>$ DEB_BUILD_OPTIONS="ssl debuild"
<font color="#0000FF">/tmp/netatalkbuild</font>$ export DEB_BUILD_OPTIONS
ssl debuild
<font color="#0000FF">/tmp/netatalkbuild</font>$ cd netatalk-2.0.3
<font color="#0000FF">/tmp/netatalkbuild/netatalk-2.0.3</font>$ dpkg-buildpackage -rfakeroot

コンパイル中......

<font color="#0000FF">/tmp/netatalkbuild/netatalk-2.0.3</font>$ sudo dpkg -r netatalk
(データベースを読み込んでいます ... 現在 105050 個のファイルとディレクトリがインストールされています。)
netatalk を削除しています ...
Stopping AppleTalk Daemons: afpd papd timelord atalkd cnid_metad.
<font color="#0000FF">/tmp/netatalkbuild/netatalk-2.0.3</font>$ cd ../
<font color="#0000FF">/tmp/netatalkbuild</font>$ sudo dpkg -i netatalk_2.0.3-4_i386.deb
未選択パッケージ netatalk を選択しています。
(データベースを読み込んでいます ... 現在 104899 個のファイルとディレクトリがインストールされています。)
(netatalk_2.0.3-4_i386.deb から) netatalk を展開しています...
netatalk (2.0.3-4) を設定しています ...

設定ファイル `/etc/default/netatalk'
 ==&gt; これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==&gt; パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : この処理をバックグラウンドにし、状況を確認する
 デフォルトでは現在使っている自分のバージョンを残します。
*** netatalk (Y/I/N/O/D/Z) [デフォルト=N] ? <font color="#ff0000">Y</font>
設定ファイル /etc/default/netatalk を新規にインストールしています ...
設定ファイル /etc/pam.d/netatalk を新規にインストールしています ...
Starting AppleTalk services (this will take a while):  atalkd papd afpd cnid_metad.

インストールは以上です。以下は設定ファイルの変更。

「/etc/default/netatalk」の

export ATALK_MAC_CHARSET
export ATALK_UNIX_CHARSET</code>

export ATALK_MAC_CHARSET<font color="#ff0000">='MAC_JAPANESE'</font>
export ATALK_UNIX_CHARSET<font color="#ff0000">='UTF8'</font></code>

に変更。(UTF8は付け加えました。)

「/etc/netatalk/afpd.conf」の最後の行に

- -uamlist uams_dhx.so,uams_clrtxt.so -maccodepage MAC_JAPANESE</code>

を追記。

「/etc/netatalk/AppleVolumes.default」のコメント群の最後

# By default all users have access to their home directories.</code>

の下に

:DEFAULT: options:upriv,usedots cnidscheme:dbd maccharset:MAC_JAPANESE</code>

を追加。

念のためavahi-daemonの確認。
「/etc/avahi/services/afpd.service」を以下の内容で作成。

&lt;?xml version="1.0" standalone='no'?&gt;
&lt;!DOCTYPE service-group SYSTEM "avahi-service.dtd"&gt;
&lt;service-group&gt;
        &lt;name replace-wildcards="yes"&gt;%h&lt;/name&gt;
        &lt;service&gt;
                &lt;type&gt;_afpovertcp._tcp&lt;/type&gt;
                &lt;port&gt;548&lt;/port&gt;
        &lt;/service&gt;
&lt;/service-group&gt;</code>

でavahi-daemonの再起動。

$ sudo /etc/init.d/avahi-daemon restart</code>

さて、最後に緊張のCJKパッチの確認とSSLが有効になっているかの確認をコマンドを2つ実行して行います。
赤字の部分が確認事項です。
/tmp/netatalkbuild$ /usr/sbin/afpd -V
afpd 2.0.3+cjk4 – 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:

AFP3.1 support: Yes
Transport layers: TCP/IP DDP
CNID backends: cdb dbd last
SLP support: Yes
TCP wrappers support: Yes
Quota support: Yes
Admin group support: Yes
Valid shell checks: Yes
cracklib support: Yes
Dropbox kludge: No
Force volume uid/gid: No

afpd.conf: /etc/netatalk/afpd.conf
AppleVolumes.system: /etc/netatalk/AppleVolumes.system
AppleVolumes.default: /etc/netatalk/AppleVolumes.default
UAM search path: /usr/lib/netatalk/

/tmp/netatalkbuild$ /usr/bin/asip-status.pl localhost
AFP reply from localhost:548
Flags: 1 Cmd: 3 ID: 57005
Reply: DSIGetStatus
Request ID: 57005
Machine type: Netatalk
AFP versions: AFPVersion 1.1,AFPVersion 2.0,AFPVersion 2.1,AFP2.2,AFPX03,AFP3.1
UAMs: Cleartxt Passwrd,DHCAST128
Flags: SupportsCopyFile,SupportsServerMessages,SupportsServerSignature,SupportsTCP/IP,SupportsSrvrNotifications,SupportsOpenDirectory,SupportsUTF8Servername,SupportsSuperClient
Server name: Debian-Server
Signature:
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** …………….

Network address: ***.***.*.** (TCP/IP address)
Network address: *****.*** (ddp address)
UTF8 Servername: Debian-Server

これでOKです。Leopardからも接続確認できました。
しかし、残念ながら最初に書いたような現象は改善されず。
rsync経由でMacからSSHで送ったファイルの一部が駄目なようです。
iTunesのバックアップをSSH経由でやっているのですが今度SSHではなくAFPでマウントして同期してみようと思います。

2 Comments

  1. HAT より:

    それはたぶんcomposeの問題でしょう。
    iTunesのデータということは、曲名がそのままファイル名になっているでしょうから、non-ASCIIの文字を含んでいるんじゃないですか?
    ファイル名に濁点、半濁点、アクセント付きアルファベット、ハングルとかが含まれていて、そういうファイルだけで問題が出ていませんか。
    MacOSXでのdecompose/precomposeの変換はCoreFoundationなるレイヤが行なっています。GUI系ソフトを使った場合はこのCoreFoundationを使うので大抵正常に変換が行なわれます。UNIX系のソフトの場合はCoreFoundationを使わないので、特にcomposeを意識したソースになっていなければ、decompose/composeの変換が行なわれません。
    たぶんrsync+sshでは変換が行なわれていないので、UNIX側にdecomposed UTF8のままファイル名が保存されているのだと思います。
    パッチなしnetatalk2.0.3の場合、composeの変換が中途半端ながら実装されており、「が」のような文字は変換されるので、UNIX側でprecomposed UTF8になります。このような文字がdecomposed UTF8で保存されていると、netatalk経由で正常に扱えないことになります。パッチありnetatalk2.0.3だとcomposeの変換がほぼ完全になるのでハングルとかギリシャ拡張文字等でも正常に扱えます。
    rsyncをafp経由で使う場合、パッチなしnetatalk2.0.3で問題が出るのは私のページに書いてある通りです。パッチありなら問題なく使える筈です。

  2. HAT より:

    ついでに書くと、NFSなんかもcomposeの変換が行なわれないので問題が出ます。

コメントを残す

メールアドレスが公開されることはありません。

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen

*