Netatalk 2.0.5 and Samba

2010.04.26

このページはnetatalk 2.0.5の時代のものなので既に古いです。2.0.5は安定していますがEA未対応であるため、Snow Leopardのバグによって問題が発生します。
最近の情報については、Netatalk and Sambaのページを御覧ください。


UNIX系OSにnetatalkとsambaの両方をインストールしておけば、Mac/Winの両方からアクセス出来るファイルサーバとして使えます。
Mac OS XはsambaやNFSにもアクセス出来ますが、netatalkをお薦めします。
理由は、

などがあります。

このページはnetatalk 2.0.5および2.1beta2について説明しています。
現行安定版の2.0.5は非常に安定していますが拡張属性(EA)未対応のため、Mac OS 10.6 Snow Leopardから接続した場合に問題が発生します(Mac側のバグ)。
2.1系列はEA対応であるため問題は発生しません。開発版2.1beta2の利用をお奨めします。

古いバージョンの情報は以下のページをどうぞ。
netatalk 2.0.4 and samba - 安定しているがちょっとセキュリティ問題あり。Time Machine対応なし。


変更点

netatalk 2.0.4

netatalk 2.0.5

netatalk 2.1beta1

netatalk 2.1beta2

先送り

先送りになっている件については、誰かパッチを書いて下さい。大変喜ばれます。


インストール手順

netatalk本体をインストールする前に、ライブラリ関係をインストールしておきます。

SLPやBonjourのためデーモンのインストール

クライアントであるMacからサーバが見えるようにするには、SLPデーモン(Mac OS X 10.4迄)やZeroconfデーモン(Mac OS X 10.2以降)をインストールする必要があります。

netatalkの構築より先にslpdをインストールし、起動もnetatalkのafpdより先にしておけば、afpdの起動/停止に合わせて動的に宣伝するようになります。
フリーのslpdには、OpenSLPがあります。

OpenSLPのホームページ: OpenSLP Home Page
OpenSLPのありか: Browsing Download Server: /openslp/

起動スクリプトはソースアーカイブのetcディレクトリにあるファイルが参考になります。設定ファイルslp.confは、特に理由がなければデフォルトのままで問題ないと思います。
netatalkがSLP未対応でコンパイルされている場合は、静的に宣伝させる事も出来ます。afpdの起動/停止に無関係に宣伝しっぱなしになりますが、大きな問題ではないでしょう。設定ファイルslp.regに次のように書きます。192.168.1.1の部分はサーバのIPアドレスに読み替えて下さい。

afp://192.168.1.1/?NAME=サーバ名&ZONE=,en,65535

なお、Solaris標準の/usr/lib/inet/slpd (SUNWslpr, SUNWslpu)もnetatalkで使えます。

Bonjour (旧称Rendezvous)ではZeroconf (Howl, Avahi)が使えます。Howlは既に開発停止なので、これからインストールするならAvahiでしょう。

AppleのBonjourのページ: Networking - Bonjour
Howlのホームページ: Porchdog Software (リンク切れ)
Avahiのホームページ: Avahi

これらはafpdの起動/停止に連動しないので、インストールはnetatalkの前でも後でも結構です。設定ファイルを書く必要があります。

HowlのmDNSResponder.confの例

"サーバ名"    _afpovertcp._tcp  local. 548

Avahiのafp.serviceの例

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

動的登録が出来るようにするパッチも昔から存在しますが、開発者のDidierが猛烈に反対しているので採用されません。彼はAvahiのライブラリを使うのではなく、Avahiのコマンド呼び出す方法を考えていますが、実際の動きはありません。誰かパッチを書いて送ってやってください。

OpenSSLやLibgcryptのインストール

下の「netatalkのユーザ認証」のところで説明するように、暗号化パスワードを使う為にはOpenSSLやlibgcryptをインストールしておく必要があります。
特にクライアントがMac OS X 10.5 Leopard以降である場合はインストールしておいた方がいいです。

OpenSSLのホームページ: OpenSSL: The Open Source toolkit for SSL/TLS
Libgcryptのホームページ: Libgcrypt - Free Software Directory - Free Software Foundation

Berkeley DBのインストール

netatalk 2.0.xはBerkeley DB 4.1.25以降を必要とします。netatalk 2.1beta1以降は4.6以上を必要とします。
バージョンが適切でないとconfigureの途中にエラーが出て止まるので、適切なバージョンのBerkeley DBをインストールしてください。デフォルトでインストールすると、/usr/local/BerkeleyDB.4.7/というようなバージョン番号付きのディレクトリに入るので、別のバージョンと共存出来ます。

Berkeley DBのありか: Berkeley DB | Oracle Embedded Database

参考: Netatalk 2.0 Manual - Chapter 2. Installation

netatalkのインストール

やっとnetatalkのインストールです。

オリジナルソースを入手する。

Browse netatalk Files on SourceForge.net

オリジナルソースを展開。

$ tar zxvf netatalk-XXX.tar.gz
または
$ tar jxvf netatalk-XXX.tar.bz2

では、configureしましょ。(CVS版の場合はconfigureがないのでbootstrapです。)

$ cd netatalk-XXX/
$ ./configure \
    --enable-redhat

オプションは古いバージョンとは結構違います。$ ./configure --helpで確認してください。
--enable-redhatはRedHat、Fedora、CentOS等の場合の起動スクリプトをインストールするオプションです。他に--enable-suse--enable-gentoo--enable-cobalt--enable-netbsd--enable-debianがあります。Solarisでは何も指定しなくてもSYSV用がインストールされました。

あと、ライブラリをうまく認識しない場合は、--enable-srvloc--with-libiconv--with-libgcrypt-dir--with-ssl-dir--with-bdb--with-gssapi等を設定してください。

以下のオプションは太古のものです。現在のnetatalk 2.xのconfigureにはありません。

×  --with-tags
×  --with-nls-dir
×  --with-did
×  --with-cdb
×  --with-mangling
×  --with-flock-locks

以下のオプションはnetatalk 2.1beta2のconfigureにはありません。

×  --with-logfile (ログファイルは設定ファイルで設定可能だから)
×  --with-cnid-dbd-txn (これがデフォルトだから)
×  --with-cnid-db3-backend (廃止)
×  --with-cnid-hash-backend (廃止)
×  --enable-sendfile (Linuxだとデフォルトで有効だから)

めでたくconfigureが終わったら、構築してインストール。

$ make
$ sudo mv /etc/netatalk /etc/netatalk.old
$ sudo make install

samba 3.xのインストール

うーん、ここで説明しなくても資料は沢山あるでしょう。
libiconvを使う人は、--with-libiconvオプションをnetatalkと同一にします。


netatalk 2.xとsamba 3.xの設定はどうすべきか

各OSが使っている文字コードは、次の様になります。

コード名備考
Mac OS XUTF8-MAC (NFD, decomposed UTF-8)Unicodeベース
Mac OS 9迄MacJapanese (CP10001)Shift_JISの拡張
Windows NT/2000/XP/Vista/7UTF-16 (NFC, precomposed UTF-16)Unicodeベース
Windows 3.1/95/98/MECP932 (Windows-31J)Shift_JISの拡張

古いOSはShift_JIS拡張でサーバと会話しますが、新しいOSはUnicodeベースで喋っています。だからUnicodeで統一する方向で考えます。
サーバ側のファイル名をUTF-8にする事で最大限の文字が使えるようになります。

Mac OS X - netatalk 2.xnetatalk 2.x側がUTF8-MACとUTF8の変換を行なう
Mac OS 9迄 - netatalk 2.xnetatalk 2.x側がMacJapaneseとUTF8の変換を行なう
Windows NT/2000/XP/Vista/7 - samba 3.xsamba 3.x側がUTF-16とUTF-8の変換を行なう
Windows 3.1/95/98/ME - samba 3.xsamba 3.x側がCP932とUTF-8の変換を行なう

netatalk 2.x の設定

3つの設定ファイルに文字コードの設定箇所があります。日本語環境の場合はMAC_JAPANESEという設定が出来ます。

AppleVolumesの設定例

AppleVolumesファイル群はマウントするボリュームの設定や拡張子とType/Creatorの関連付けを行います。
各ユーザ別の設定は~/AppleVolumes~/.AppleVolumesで行ない、そのデフォルトはAppleVolumes.defaultで設定します。
全ユーザ共通の設定はAppleVolumes.systemで行ないます。
予め用意されている設定ファイルでは、AppleVolumes.defaultでボリューム設定のみ、AppleVolumes.systemで拡張子の関連付けのみを行なっています。

:DEFAULT: options:usedots,upriv maccharset:MAC_JAPANESE volcharset:UTF8 dperm:0700 fperm:0600 cnidscheme:dbd

netatalk 2.1beta2で:DEFAULTS:となっているのはバグです。:DEFAULT:に書き直してください。

maccharset:はMac OS 9側のファイル名の文字コードです。Mac OS Xからの接続はこの設定に左右されず、UTF8-MACに固定です。
volcharset:はUNIX側のファイル名の文字コードであり、UTF8に設定することでMac OS Xから最大限の文字が使えるようになります。デフォルト値はUTF8なので省略可能です。古い環境だとEUC-JP等を指定する必要があるかもしれません。

また、デフォルトのnetatalkはドットで始まるファイル名があった場合、最初のドットを:2eに置き換えて保存します。例えば「.abc」は「:2eabc」になります。これは、netatalkが予約しているファイル名との衝突を避ける為です。options:usedotsの設定を行なうとこの機能を抑制出来るので、samba側からみたときも同じ「.abc」に見えるようになります。ただしこの設定を行なうと、「.Apple」で始まるファイル名及び「.Parent」がMac OS側から作成出来なくなります。

options:uprivはUNIX風のパーミッションを有効にするオプションであり、dpermfpermはそれぞれディレクトリとファイルのパーミッションとORを取って保存するものです。Mac OS X 10.5以降はパーミッションが「000」になってしまう場合があるという、というとんでもない問題があるので、この設定を行ないます。この設定例だと、少なくともファイル所有者は確実に読み書き出来ます。また、このオプションにはSnow Leopardからnetatalk 2.0.xにEA付きファイルをコピーしたときにエラーになる問題を回避する効能もあります。

cnidscheme:dbdを指定するとnetatalkの信頼性が高まります。netatalk 2.1ではこれがデフォルトです。詳しくは下の「CNIDの管理」を読んでください。

拡張子とType/Creatorの対応付けはお好み次第でしょう。
ただし、全てのType/Creatorの設定を削除(あるいはコメントアウト)すべきだと、私は考えます。
何故なら、元々Type/Creatorのないファイルがあった場合、これをnetatalkサーバにコピーした時点で設定に従ったType/Creatorが付いてしまうからです。リストアしたときにもこのType/Creatorが付いたままになります。これは完全な復元ではありません。改変です。Mac OS XはTypeの他に拡張子も考慮します。Snow LeopardはCreatorを無視します。本当に対応付けが必要になるのは、クライアントがMac OS 9以前の場合のみです。
なお、2.1beta1以降では全ての行がコメントアウトされています。

参考: Netatalk 2.0 Manual - AppleVolumes.default
参考: Netatalk 2.0 Manual - afpd

afpd.confの設定例

- -maccodepage MAC_JAPANESE -unixcodepage UTF8

afpdが扱う文字コードの指定です。ボリューム名、サーバメッセージ、認証あたりで日本語を使うときに重要になります。
-maccodepageはMac OS 9側の文字コードです。Mac OS Xからの接続はこの設定に左右されず、UTF8-MACに固定です。
-unixcodepageはUNIX側の設定ファイルで使う文字コードです。ボリューム名、サーバメッセージ、認証あたりが日本語のときに重要になります。UTF8がデフォルト値なので省略可能です。古い環境だとEUC-JP等を指定する必要があるかもしれません。

参考: Netatalk 2.0 Manual - afpd.conf

netatalk.confの設定例

netatalk.confは、環境によっては参照されず、代わりに別のファイルが使われる事があります。詳しくは下の「netatalkの起動」をみてください。

ATALK_MAC_CHARSET='MAC_JAPANESE'
ATALK_UNIX_CHARSET='UTF8'

atalkdとpapdが扱う文字コードの指定です。サーバ名、ゾーン名、プリンタ名あたりで日本語を使うときに重要になります。afpd.confでの設定とあわせておくといいでしょう。
ATALK_MAC_CHARSET=はMac OS 9側の文字コードです。Mac OS Xからの接続はこの設定に左右されず、UTF8-MACに固定です。
ATALK_UNIX_CHARSET=はUNIX側の設定ファイルで使う文字コードです。デフォルトではLOCALEになっており、ロケールを元に自動設定されます。最近の環境だと自動的にUTF8になるでしょう。古い環境で自動設定されない場合はEUC-JP等を設定する必要があるかもしれません。

参考: Netatalk 2.0 Manual - netatalk.conf

samba 3.x の設定

smb.confの設定例

[global]
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8

dos charsetはDOS/Windows 3.1/95/98/MEからアクセスしたときのファイル名の文字コードです。Windows NT系 (NT/2000/XP/Vista/7)からの接続はこの設定に左右されず、UTF-16に固定です。
unix charsetはUNIX側のファイル名の文字コードです。samba.gr.jpにある文書によれば、LOCALEが日本語EUCになっているようなシステムではUTF-8ではなくEUCJP-MSというパラメータ値を設定することになっています。
display charsetはsmbclientコマンド等が使う文字コードです。古い環境ではEUCJP-MS等を設定する必要があるかもしれません。

参考: Samba 3.0で日本語を利用できるようにしたパッケージ集

また、SMB (CIFS)にはファイルをロックする機能(oplock)というのがあります。SMBクライアント側でファイルをキャッシュして転送量を減らすものです。システム自身がoplockに対応していないとロック中のファイルをUNIX側(netatalk経由も含む)から編集したときにファイルが壊れる可能性があるので、これをを無効にする必要があります。

oplocks = No

Linuxのようにkernel自身がoplockに対応している場合はoplockが問題なく使えるので次のようにします。

kernel oplocks = Yes
oplocks = Yes

oplockの動作状況はswatのstatus画面やsmbstatusコマンドで確認出来ます。samba経由で一度ロックしておき、UNIX側またはnetatalk側から同じファイルをいじったときにロックが外れる事を確認することをお勧めします。

しかし、Windowsから代替データストリームを使う為にstreams_xattrを使っている場合、kernel oplocksと共存出来ないので次のようにします。

kernel oplocks = No
oplocks = No
 
vfs objects = streams_xattr

ややこしい...

また、netatalk/Mac OS 9/Mac OS Xが作る隠しファイルをsamba経由で見えないようにする事が出来ます。

veto files = /.AppleDB/.AppleDouble/.AppleDesktop/Network Trash Folder/TheFindByContentFolder/TheVolumeSettingsFolder/Temporary Items/.TemporaryItems/.DS_Store/.VolumeIcon.icns/Icon?/.FBCIndex/.FBCLockFolder/

この設定を行なうと、samba経由でフォルダを削除しようとしたときにエラーになる事があります。フォルダ内にveto filesで設定したファイルが隠れているからです。そこで次のように設定します。隠したファイルをまとめて削除してくれるようになります。

delete veto files = Yes

sambaのvfsモジュールにnetatalkというのがあります。

vfs objects = netatalk

これを使うと、samba経由でファイルを操作したときに孤立(orphan)してしまう.AppleDoubleディレクトリ内のファイルを自動で消してくれます。が、UNIX側から直接rmした場合等は結局残ってしまうわけですから完璧な対処法とは言えないでしょう。 しかも、このモジュールはほとんどメンテされていないので、まともに動くかどうかわかりません。.AppleDoubleの整理はnetatalkに付属するcleanappledouble.plスクリプト(2.1beta1以降ではdbd -r)をcronで定期的に実行するのが良いと思います。

参考: Chapter 20. スタッカブルVFSモジュール

UTF8とUTF-8の違いは?

sambaの設定では、samba 2.xの頃はUTF8、samba 3.xではUTF-8です。
一方、netatalkの設定ファイルのサンプルにはUTF8と書かれています。マニュアルには、iconv()が対応している文字コードは全部使えると書かれていますから、$ iconv -lで表示されるものは全部使えるわけです。UTF8以外だとログにワーニングが出る事がありますが、エラーではありません。

設定のバリエーション

以上はUNIX側のファイル名文字コードをUTF-8に設定した場合を想定して説明しているわけですが、古い環境だとUTF-8じゃない場合もあるでしょう。

netatalk 2.0.4以降 samba 3.x
maccharset: volcharset: dos charset = unix charset = vfs objects =
MAC_JAPANESE UTF8 CP932 UTF-8 <none>
netatalk 2.0.4以降 samba 3.x
maccharset: volcharset: dos charset = unix charset = vfs objects =
MAC_JAPANESE Shift_JIS CP932 CP932 <none>
MAC_JAPANESE EUC-JP CP932 EUCJP-MS <none>
netatalk 2.0.4以降 samba 3.x
maccharset: volcharset: dos charset = unix charset = vfs objects =
MAC_JAPANESE MAC_JAPANESE CP932 CP932 <none>
netatalk 2.0.4以降 samba 3.x
maccharset: volcharset: dos charset = unix charset = vfs objects =
MAC_JAPANESE CP932 CP932 CP932 <none>
MAC_JAPANESE EUCJP-MS CP932 EUCJP-MS <none>
netatalk 2.0.4以降 samba 3.x
maccharset: volcharset: dos charset = unix charset = vfs objects =
MAC_JAPANESE Shift_JIS CP932 Shift_JIS <none>
MAC_JAPANESE EUC-JP CP932 EUC-JP <none>
netatalk 2.0.4以降 samba 3.x
maccharset: volcharset: dos charset = unix charset = vfs objects =
MAC_JAPANESE ASCII CP932 CP932 cap
MAC_JAPANESE ASCII CP932 CP932 hex

AppleTalkは不必要

Mac OSのクライアント機能

Mac OSがバージョンアップするにしたがってAppleTalkの機能は縮小し、Mac OS X 10.6 Snow Leopardで完全廃止になっています。
つまり、恐ろしく古いMacを持っていない限り、atalkdを起動する意味はありません。レトロな趣味の方はatalkdを御活用ください。最近でもSystem 6から接続している人がいます。


拡張属性 (EA) 対応問題

拡張属性 (EA)って何? と思う方は以下のページを参照してください。Tiger以降でサポートされており、Snow Leopardでは極めて重要です

参考: 拡張ファイル属性 - Wikipedia

netatalk 2.0.xはAFP 3.1迄をサポートします。このバージョンはEA未対応です。
netatalk 2.1beta1以降ではAFP 3.2をサポートします。このバージョンはEA対応です。

Leopard迄は、EA未対応サーバにEA付きファイルをコピーしたとき、EAが消えてなくなりました。
Snow Leopardでは動作が変更になりました。例えば、EA付きのabc.txtというファイルをEA未対応netatalkにコピーすると次のような4つのファイルがサーバ上に作成されます。

abc.txt
._abc.txt
.AppleDouble/abc.txt
.AppleDouble/._abc.txt

1つめは、ファイル本体。
2つめは、EAを保存するために、Snow Leopardが勝手に作りやがったAppleDoubleフォーマットのファイル。
3つめは、abc.txtに対応するリソースフォークとかタイムスタンプを保存するために、netatalkが作成したAppleDoubleフォーマットのファイル。
4つめは、._abc.txtに対応するnetatalkが作成したAppleDoubleフォーマットのファイル。

つまり、EA付きファイルを1つ作ると、それに付随するAppleDoubleファイルが3つ出来ます
しかもこの動作のとき、Snow Leopardはパーミッションの設定を間違えるため以下のエラーが出るケースが非常に多いです。

一部の項目へのアクセス権がないため、操作は完了できません。

Snow Leopardは._abc.txtを作成した直後に、それのパーミッションを000に設定します。当然アクセス権がありません。明らかにSnow Leopardのバグです。この問題を回避するには、fperm: 600を設定してください。

netatalk 2.1beta1以降は既にEAに対応しているので._abc.txtといった妙なファイルは作られません。


Time Machine対応

netatalk 2.0.4迄のバージョンは、Time Machine未対応であり、無理矢理使うためには面倒な作業が伴いました。以下のページを参照してください。

参考: Time Machine with Netatalk その1

netatalk 2.0.5以降はTime Machine対応になっており、ラクチンです。不具合は全く聞いたことがないです。手順は以下のとおり。

  1. ボリュームのオプションにtmを追加。
  2. そのボリュームをMac OS Xでマウントした状態だと、バックアップ先として選べる
  3. 初回バックアップを開始すると、ボリューム内に勝手にイメージバンドルが作られ、勝手にバックアップされる
  4. 2回目以降は勝手にマウントされ、勝手にバックアップされる

なぜマウントしなければバックアップ先として選べないかというと、ちゃんと理由があります。クライアントがマウントするとき、「ボリュームの情報をよこせ」と問いかけ、その返答に「Time Machine対応です」というのがあるからです。

マウントしなくてもTime Machine対応であることを知らせる方法もあります。Bonjourにて「Time Machine対応ボリュームがここにあるよ」と、予め宣伝しておく方法です。この手法に関しては、いまだ研究の余地があります。詳しくは以下のページを参照してください。

参考: Time Machine with Netatalk その2


CNIDの管理

MacOSの為に作られたHFS+というファイルシステムでは、ファイルやフォルダにCNID (Catalog Node ID)と呼ばれる番号を付けて管理しています。ファイルのCNIDをFile ID、ディレクトリのCNIDをDirectory IDと呼ぶ場合もあります。これはAFPの場合も同様です。
netatalkでは、Berkeley DBを使って .AppleDB/というディレクトリでCNIDのデータベースを管理しています。 これに関する設定はAppleVolumesファイルで設定します。netatalk 2.0でdbdを使うとかなり安定しますが、2.1beta2では大幅変更があり更に安定しています。

netatalk 2.0.xのCNID管理

何らかの理由で.AppleDB/の中のファイルが壊れたり、Berkeley DBのバージョンが合わないと、クライアントからうまく接続出来ないといったトラブルが発生します
CNIDの管理方法は何種類かあり、AppleVolumesファイルで設定出来ます。デフォルトでconfigureしたnetatalkの場合は3種類です。

cnidscheme:cdb
ぼちぼち安定している。afpdが直接データベースを書き換える。複数afpdが動いている場合、どれかのafpdがクラッシュするとデータベースが壊れる。
cnidscheme:dbd
かなり安定している。cnid_metadデーモンがデータベースを一括管理する。各afpdはcnid_metadと通信するだけ。
cnidscheme:last
まともに管理していない。プロセス毎にその場限りの管理をする。大昔のnetatalkにファイルを大量コピーするとエラーになったのはこれが原因です。通常は使いません。リードオンリーのファイルシステム(CD-ROMとか)のときに使います。

netatalk 2.0.xのデフォルトはcdbになっていますが、リードオンリーである場合を除き、dbdを使う事を強くお勧めします。cnid_metadの起動を忘れないで下さい。起動してないとうまく接続出来ません。dbdの場合は実質的にデータベースは壊れません。壊れているかどうかは自動的にチェックされます。
データベースが壊れた場合、修復するツールとしてcnid_maintが付属していますが、これは自分の環境に合わせて書き換えないと動かないし、ドキュメントも用意されていません。cnid_indexというコマンドもあり、これはちゃんとman pageがあります。試してみたところ、完璧に修復してくれるわけでもないようです。一番確実なのは、netatalkを停止してから.AppleDB/ディレクトリを削除し、netatalkを再起動することです。こうすると新たに.AppleDB/ディレクトリが作られます。

参考: Netatalk 2.0 Manual - AppleVolumes.default
参考: Netatalk 2.0 Manual - cnid_index
参考: Netatalk 2.0 Manual - cnid_metad

netatalk 2.1beta2のCNID管理

cnidscheme:dbd
かなり安定している。cnid_metadデーモンがデータベースを一括管理する。各afpdはcnid_metadと通信するだけ。
cnidscheme:last
まともに管理していない。プロセス毎にその場限りの管理をする。大昔のnetatalkにファイルを大量コピーするとエラーになったのはこれが原因です。通常は使いません。リードオンリーのファイルシステム(CD-ROMとか)のときに使います。
cnidscheme:tdb
.AppleDB/ディレクトリが読み書き出来ないときに、代わりとしてメモリ上でCNID管理する。

netatalk 2.1beta1以降のデフォルトはdbdになっています。メンテ用コマンドの名前もdbdです。このコマンドは使いやすいです。また、一度netatalk 2.1にしてしまえば、それ以降のバージョンアップでBerkeley DBのバージョンが合わなくても自動的に修復します。


ユーザ認証

netatalkのユーザ認証

AFPのユーザ認証方法(UAM)は、afpd.conf-uamlistオプションで設定します。netatalk 2.0.4以降ではデフォルト値はuams_dhx.so,uams_dhx2.soになっています。
UAMにはパスワードを暗号化するもの、しないもの、そもそもパスワードを使わないもの等、色々あります。古い認証方法は8文字制限があるので注意してください。

名前 netatalkのモジュール 説明
No User Authent uams_guest.so ユーザ認証なし。パスワードは使わない。すなわちゲスト接続。
Cleartxt Passwrd uams_cleartxt.so クリアテキスト(平文)パスワード。暗号化なし。8文字制限。Leopard以降は使用禁止。
Randnum Exchange uams_randnum.so 乱数交換。56ビットDES。弱い暗号化。8文字制限。
2-Way Randnum uams_randnum.so 双方向乱数交換。56ビットDES。弱い暗号化。8文字制限。
DHCAST128 uams_dhx.so (DebianやUbuntuには入ってない) Diffie-Hellman交換。別名DHX。128ビットSSL。強い暗号化。
DHX2 uams_dhx2.so Diffie-Hellman交換2。更に強い暗号化。
Client Krb v2 uams_gss.so Kerberos V認証。
Recon1 なし 再接続。

uams_randnum.soは、afppasswdファイルを使ってパスワードを管理します。AFPクライアント側からパスワード変更すると、このファイルが書き換えられる筈です。つまりUNIXパスワードとは別管理です。
uams_cleartxt.souams_dhx.souams_dhx2.soは、netatalkのコンパイル時のオプションにより、UNIXのpasswdファイル、shadow passwd、PAMのどれかを使うことになります。
Recon1は今のところnetatalkに実装されていません。
uams_gss.soは使った事がなくわかりませんので、とりあえずリンクだけしておきます。

netatalk で Kerberos 認証

DHXパスワードを使う為には、OpenSSLライブラリを使ってnetatalkをコンパイルする必要があります。DHX2パスワードを使う為にはlibgryptライブラリが必要です。
DebianやUbuntuのnetatalkはライセンスの関係でuams_dhx.soが入っていません。Mac OS X 10.2以前はuams_dhx2.soが使えないので注意が必要です。セキュリティ的に不安なuams_cleartxt.soを使うか、自分でビルドしてuams_dhx.soを使えるようにするか、どちらかです。

あと、netatalk 2.1beta1以降ではLDAPを使って云々... ですが、全く知識がないのでパス。

sambaのユーザ認証

sambaのユーザ認証は、smb.confsecurity =で色々と設定出来ます。user, share, server, domain, adsが選べますね。
パスワードの暗号化は大昔のWindows(記憶によれば10数年前)で既に必須になっています。
samba 3.0.xでは以下の設定がデフォルトになっており、暗号化/平文の両方が使えます。

encrypt passwords = yes

これをnoにすると平文パスワードだけになるので、最近のWindowsから接続出来ません。Windowsのレジストリをいじって平文パスワードを使えるようにする方法もありますが、お勧め出来ません。

samba 3.2.xではデフォルトのパスワード設定が厳しくなっています。以下のパラメータで調整出来ます。

lanman auth = yes/no
ntlm auth = yes/no
client NTLMv2 auth = yes/no
client lanman auth = yes/no
client plaintext auth = yes/no

netatalkの起動

netatalkの起動は、まずrcスクリプトで有効にしておいて、netatalk.confでどのdaemonを動かすか決めるという事になっていますが、OSやディストリビューションで微妙に方法が違います。特に、netatalk.confを使わず別ファイルが参照される環境もあるので注意が必要です。
configureスクリプトには--enable-redhat--enable-suse--enable-gentoo--enable-cobalt--enable-netbsd--enable-debianといったオプションがあるので、これをちゃんと選べば環境に応じたrcスクリプトがインストールされる筈です。

RedHat系

RedHat, Fedora, CentOS等のRedHat系の場合、configure optionは--enable-redhatを使います。
install後は# chkconfig --add atalkが必要かもしれません。起動スクリプトは/etc/rc.d/init.d/atalkです。serviceコマンドが使えるでしょう。
netatalk.confは有効です。

Debian系

DebianやUbuntuの場合、configure optionは--enable-debianです。debパッケージを確認したところ、スクリプトは/etc/init.d/netatalkです。
netatalk.confを使わず、代わりに/etc/default/netatalkを使います。

FreeBSD

FreeBSD 6.2と7.0のportsを確認したところ、rcスクリプトは/usr/local/etc/rc.d/netatalkでした。
各デーモンの起動は/etc/rc.confで以下のように設定します。

netatalk_enable="YES"
atalkd_enable="NO"
papd_enable="NO"
cnid_metad_enable="YES"
afpd_enable="YES"
timelord_enable="NO"

/usr/local/etc/netatalk.confで最大クライアント数、 zone名、NBP名、ゲスト接続のユーザのマッピング等が設定出来ます。

NetBSD

configure optionは--enable-netbsdです。NetBSD 3.1と4.0のpkgsrcを確認したところ、rcスクリプトは/usr/pkg/share/examples/rc.d/にサンプルがあるので/etc/rc.d/にコピーします。
各デーモンの起動は/etc/rc.confで以下のように設定します。

atalkd=NO
cnid_metad=YES
afpd=YES
papd=NO
timelord=NO

Solaris系

Solarisはconfigureオプションにありませんが、ちゃんと動きます。AppleTalkを動かす場合はDDPドライバをインストールします。

# cd sys/solaris
# gmake kinstall

rcスクリプトは/etc/init.d/atalkです。Solaris10ならsvcadmコマンドが使えます。
netatalk.confは有効です。


動作確認

クライアントから接続して操作してみるのは当然ですが、転ばぬ先の杖として以下をチェックしておくことお勧めします。

アクセス権の確認

サーバとクライアントの双方で、アクセス権の確認をすべきです。特にnetatalkの場合、サーバ側のls -l、クライアント側のls -l、Finderの「情報を見る」のそれぞれで見え方が違うので面食らいます。
また、sambaはACL対応していますが、netatalk 2.0.xはACLに対応していません。netatalk 2.1beta1以降ではSolarisでZFSを使ったときのみACLに対応します。
別ユーザで接続してみて他人のファイルを読み書き出来るかどうかもチェックしておくべきです。

ファイルネームの確認

ASCIIは大抵大丈夫でしょうが、日本語ファイル名、多言語ファイル名、長いファイル名、禁止文字の確認をすべきです。

メタデータの確認

netatalk 2.0.xはEA(拡張属性)に対応していません。Mac OS X 10.5 Leopardからnetatalkにコピーした場合はEA消失します。10.6 Snow Leopardからだと、隠しファイルをつくってそこに保存します。これは非常に気持ちわるい動作です。netatalk 2.1beta1以降はEA対応しているのでこちらがお薦めです。
samba 3.0.x以前は代替データストリーム (alternate data stream, ADS)に対応していないのでWindowsからsambaにコピーした時点で消失します。samba 3.2.xは2種類の方法で代替データストリームに対応しています。

vfs objects = xattr_tdb

と設定すると、代替データストリームをtdbのデータとして別の場所に保存します。

vfs objects = streams_xattr

MacとWindowsの双方から操作してみて、リソースフォークやカスタムアイコン、代替データストリーム等が消える条件を知っておくべきです。

タイムスタンプの確認

Macには作成時刻/変更時刻/最終アクセス時刻の3つがありますが、UNIXには作成時刻と変更時刻の区別がありません。netatalkではAppleDoubleファイルに時刻を格納して対応しています。samba側、UNIX側から作成したファイルにはAppleDoubleファイルがないわけですから、作成時刻と変更時刻が同じになります。
HFS+やAFPは1s単位で時間を刻みます。
NTFSは100ns単位で時間を刻みますが、FATでは2s間隔しか扱えません。sambaは設定次第でNTFS互換にもFAT互換にもなります。samba 3.5.0で、100ns単位で扱えるようになりました。
UNIX側はファイルシステムによって時間の解像度が異なります。例えばext3は1sですがext4は1nsです。
サーバとクライアントでタイムスタンプが完全に一致するとは思わない方がいいです。

シンボリックリンク/ハードリンク/エイリアス/ショートカットの確認

サーバ側でシンボリックリンクやハードリンクを作ると、netatalk 2.0.xでもsambaでも問題が発生します。netatalk 2.0.xは同一ファイル、同一フォルダであることを認識出来ないので、CNIDに混乱が生じます。sambaは同一フォルダであることを認識出来ないので、シンボリックリンクの方を消したつもりでも本体側のフォルダの中身を消してしまいます。

AFPクライアントからnetatalk 2.0.xへシンボリックリンクやエイリアスを作ると正常に動作しますが、サーバ側でみると思ったようなファイルになっていない筈です。ハードリンクはうまくいく場合もありますが、サーバ側のファイルシステムの制限で出来ない事もあります。例えばディレクトリのハードリンクです。なお、netatalk 2.1beta1以降はシンボリックリンクが正常に動くようになりました。

SMBクライアントからショートカットを作った場合は正常に動作すると思います。

asip-status.plコマンドでnetatalkの確認

AFPクライアントからAFPサーバへの接続は、次のような手順で行なわれます。

  1. Bonjour(TCP/IP)、SLP(TCP/IP)、NBP(AppleTalk)等でサーバの存在を知る。またはアドレスを既に知っている。
  2. サーバに対して、AppleTalkまたはTCP/IPで、どんなサーバなのか問い合わせする(GetStatus、別名GetSrvrInfo)。
  3. サーバから返答を受け取る。この返答の中に、様々なサーバの情報が入っている。
  4. この情報を基に、サーバに接続する。

つまり、この問い合わせ(GetStatus)への返答内容が間違っていると、様々な問題が発生します。
netatalkにはasip-status.plというコマンドが付属しています。これはAFPサーバにTCP/IPでGetStatusを送り、その返答内容を表示するものです。次はその例です。(参考例なので、今となっては無駄な設定も混ざっています)

# asip-status.pl サーバのIPアドレス
AFP reply from myservername: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,AFP3.2
UAMs: DHX2,DHCAST128
Flags: SupportsCopyFile,SupportsServerMessages,SupportsServerSignature,SupportsTCP/IP,SupportsSrvrNotifications,SupportsOpenDirectory,SupportsUTF8Servername,SupportsSuperClient
Server name: myservername
Signature:
a6 29 d7 5b e0 82 51 3e b0 6f 2d 19 dc 10 9e f8  .).[..Q>.o-.....
 
Network address: 192.168.1.130 (TCP/IP address)
Network address: myservername.example.org (DNS address)
Network address: myservername.example.org (SSH tunnel address)
Network address: 65280.129 (ddp address)
UTF8 Servername: myservername

Machine type:は単なる参考情報です。大昔のnetatalkはMacintoshと名乗りましたが、現在は正直にNetatalkと名乗ります。

AFP versions:は対応しているAFPのバージョンです。1.1から2.1迄はAppleTalkであり、2.2以降はTCP/IPです。

UAMs:は対応している認証方法です。詳しくは上の「ユーザ認証」を参照してください。

Flags:はサーバが対応している様々な機能を表します。

Server name:UTF8 Servername:はサーバ名です。前者はMacJapaneseであり、後者はUTF8-MACです。普通はASCIIの名前にするでしょうから、両者は同じでしょう。ここがlocalhostになっていると、問題が発生します

Signature:は、サーバを区別する為のものです。同じサーバに二重接続するのを防ぐ為にあります。逆に、何かの間違いで同一のSignatureのサーバがあると、一方にしか繋がらないという問題が発生します。特に、
00 01 7f 00 00 01 7f 00 00 01 7f 00 00 01 7f 00 とか
00 01 7f 00 00 00 00 00 00 01 7f 00 00 00 00 00 
になっている場合は問題です。これはIPアドレス127.0.0.1から生成されたものです。

Network address:は接続するサーバのアドレスです。適切なアドレスになっている事を確認してください。ここがlocalhostとか127.0.0.1になっていると問題があります。この問題は/etc/hostsの記述に由来します。

悪い例 ×

127.0.0.1      myservername  localhost.localdomain  localhost

良い例 ○

127.0.0.1      localhost
192.168.1.130  myservername  myservername.example.org

参考: 2台以上あるnetatalkサーバの1台目にしかアクセス出来ない

この間違った/etc/hostsの記述は、sambaでも問題となります。

参考: 日本Sambaユーザ会 - Sambaが動作しないときの診断方法

以上の説明で、localhostとか127.0.0.1がヤバい事がおわかりでしょう。この現象に遭遇した場合は、サーバのhostnameや/etc/hostsが適切かどうか確認してくだい。

また、AppleTalkやAFP over SSHを有効にしている場合、それらに対応するNetwork address:が表示される事も確認してください。


安全な接続

AFP

Mac OS X 10.3から10.4では、サーバにAFP over SSHで安全に繋ぐ機能がありました。afpd.conf

-advertise_ssh -fqdn サーバ名

と書いておけばAFP over SSHで接続出来ます。ただしnetatalkのログを見ても普通のAFP接続と区別が付かないので、パケットをダンプしてSSHが使われている事を確認する必要があります。psコマンドでsshが動いているのを見る方法もあります。
ところがMac OS X 10.5 LeopardでAFP over SSHが廃止になりました。
今のところ確認している唯一の方法は、netatalkのマニュアルに書かれている手法です。つまり、Terminal.appで

ssh -l $USER $SERVER -L 10548:127.0.0.1:548 sleep 3000

を実行してから、afp://127.0.0.1:10548に接続します。
これならAFP over SSHでnetatalkに接続出来ます。(ただし重いです)

SMB

サーバ側でsshを使い、クライアント側はトンネリングする為のソフトを入手してWindowsにインストールし、SMB over SSHを実現する方法がありますが、結構手間がかかります。
samba 3.2.xだと暗号化通信がサポートされたようですが、よく知らないのでパス。


トラブルシュート

netatalkサーバは見えるが、そこから先が変

.AppleDB/に異常があるときに、よくある症状です。netatalk 1.xからバージョンアップしたときにこのディレクトリを残していた場合とかですね。上の「CNIDの管理」に書いた手法で修復してください。

2台以上あるnetatalkサーバの1台目にしかアクセス出来ない。

上の「asip-status.plコマンドでnetatalkの確認」を参考にしてください。

libiconvをちゃんと入れたのに、文字コード変換をサポートしていないとログに出る

configureの前のLD_LIBRARY_PATHと、configureオプションの--with-libiconvを確認してください。
あと、設定ファイルで正しく文字コードの設定を行なっているか確認してください。

ログファイルは何処だ

netatalk 2.0.4以降のログはsyslog管理になっています。syslog.conf等を見てどのファイルに落ちるか確認してください。また、configureオプションの--with-logfile=でログファイルを指定できます。メーリングリストでこの機能はバギーだという事になっています。この場合はsyslogと指定ファイルの両方にログが落ちます。また、afpd.confの-[un]setuplogでも設定出来ます。netatalk 2.1beta1以降はログファイルを指定できます。

一方、sambaのログはconfigureオプションの--with-logfilebase=でディレクトリを指定出来ます。ファイル名はsmb.confのlog file =でマクロを使って指定出来ます。ただし、ソース中でlog.smbdlog.nmbdというファイル名が決め打ちになっており、起動時のsmb.confを読み込む前の段階では、これら2つのファイルにログが落ちます。RedHat系のディストリビューションではソースにパッチが当たっており、smbd.lognmbd.logというファイル名に変わっているので注意してください。また、configureオプションに--with-syslogというのがありますが、experimental扱いです。あと、smb.confのlog level =にも注意してください。値が小さすぎるとほとんどログに残らないし、大きすぎると動作が遅くなります。


残る問題

パーミッションが変

そもそも、Mac OS Xのパーミッションの動作が変です。Terminall.appからls -lで見た場合と、Finderの「情報を見る」で確認出来るパーミッションが異なります。更にFinderからは実行属性が扱えません。
更にMac OS X 10.4 Tiger迄と10.5 Leopard以降で動作が違います。Leopard以降ではユーザひとりで使っているような場合は問題ありませんが、複数ユーザで使っている場合、同一groupの他ユーザがアクセス出来ないかもしれません。これはAppleVolumesファイルでuprivオプションを使うと緩和出来ます。UNIXパーミッションを継承するものです。Leopard以降の「情報を見る」でアクセス権を変更するとパーミッションが異常になりファイルにアクセス出来なくなるので注意してください。こうなるとchmodコマンドで直すしかありません。
netatalk 2.0.4以降では、dpermfpermというオプションが追加されています。これはクライアントが要求してきた属性とORを取るものです。例えば、dperm:700 fperm:600と設定しておけば、少なくとも所有者は確実に読み書き出来ます。

なお、Windowsからsambaにコピーしたファイルに実行属性がついてしまうのは別の現象なので混同しないで下さい。FATやNTFSにあるアーカイブ属性がUNIXのファイルシステムにはないので、代わりに実行属性に割り当てているのが原因です。アーカイブ属性を継承する必要がないのならsmb.confmap archive = noを使うとよいです。

ACLが使えない

netatalk 2.0.xはACL (Access Control List, アクセス制御リスト)に対応していません。
2.1beta1以降はSolarisのZFS上でのみ対応しています。他のOSでは使えません。

「―〜‖−¢£¬」の互換性問題

Windows 95/98/MEとMac OS 9以前の間では「―〜‖−¢£¬」が共通に扱えません。
色々考えたんですが、Unicodeベースである限りどうしようもないです。
そもそもnetatalk/sambaを経由しなくても、Windows NT/2000/XPとMac OS X間でファイル交換しても同じ問題が出るのですから。

機種依存文字なんかどうでもよいという考えなら、samba側をEUCJP-MS、netatalk側をEUCJPにするという手法があります(或はCP932とShift_JIS)。

全OS、全アプリケーションが完全Unicodeベースになれば気にする事もなくなります。

「うワヰヱヲ」に濁点の問題

「うワヰヱヲ」に濁点が付いた文字はMac OS 9からnetatalkへコピー出来ない問題は、Mac OS 9側の問題です。今更Mac OS 9がアップデートされるとも思えないので、諦めましょう。

AFPクライアントの機能はあるか

sambaにはsmbclientコマンドが付いてきますが、netatalkにafpclientコマンドはありません。
TCP/IPベースでAFPのボリュームをファイルシステムとしてマウントするafpfs-ngというのがあります。ftpコマンドのようなafpcmdも付属します。テストしてみましたが、まだまだ不完全です。AppleTalkは使えません。ファイル名はUnicodeのみでMacJapaneseは扱えません。Unicodeの合成(precompose)の処理に問題があり日本語ファイル名がまともに扱えないので開発者にパッチを送ってありますが、いつまで経ってもバージョンアップされません。まともに使えるのはせいぜいASCIIファイル名だけでしょう。リソースフォークは扱えないのでデータフォークのみです。
alexthepuffin - afpfs-ng 0.8 An open source client for Apple Filing Protocol
SourceForge.net: afpfs-ng

単体のafpclientというものならありましたが、現在リンク切れです。これが対応しているのはAFP 1.1という非常に古いプロトコルなので、Mac OS 9やnetatalkには接続出来ますがMac OS Xには出来ません。AppleTalkのみでありTCP/IPでは接続出来ません。ファイル名は31バイト制限があります。ただ、デバッグモードがあるので実験には便利かもしれません。

単体のafpclientコマンド:
Afpclient - AppleTalk Filing Protocol client (オリジナルはリンク切れ)
web.archive.orgにあるミラー:
Afpclient - AppleTalk Filing Protocol client (ミラー)
私が保管していたものを置いておきます:
afpclient.tar.gz

AFP 3.xなのに極めて長いファイル名を扱えない

Mac OS X 10.4 Tiger迄のバージョンでは、AFP 3.xクライアントとして動作しているとき、decomposed UTF-8で255バイトを越えるファイル名を正常に扱えません。
これはnetatalkではなくMac OS X側の問題です。ちなみにMac OS XでSMB (CIFS)を使ったときも同様の現象が起きます。
この仕様(バグ)にあわせて、netatalkはファイル名を255バイト内にmangleしてクライアントに報告します。
Mac OS X 10.5 Leopardでは直っているのですが、netatalkは古いMac OS Xにあわせた仕様なので、255バイトを越えたファイル名がmangleされてしまいます。

Mac OS X 10.4迄の場合、例えばローカルのHFS+に「ああああ…」という風に「あ」が86個以上あるファイルがあったとして、これをAFP 3.xのサーバにコピーしようとするとエラーになります。このとき、サーバに対して全くリクエストを送っていません。つまりが自分でエラーを出しているのです。相手のサーバがnetatalkだろうとMac OS Xだろうと結果は同じです。

逆に、Mac OS XがAFP 3.xサーバとして動作しているときは、バージョンに関わらず255バイトを越えるファイル名でもちゃんと報告してきます。これを受け取った側のMac OS X 10.4迄のバージョンは、妙な動作をします。Finderからはファイル名が変なところでちぎれて見えるし、ターミナルで$ ls -wしてみると、エラーが出ます。これはDarwin(UNIX)の制限が255バイトであることに関係しているでしょう。

AFP 3の仕様書では、ファイル名の長さ制限は書かれていません。pathnameの長さは実質的に無制限となっています。パケットを解析してみると、pathname長さを示すところが2バイトあるので、0xFFFF=65535バイト迄表現出来る筈です。

Mac OS XからUnicodeのU+010000以上の文字が使えない

Mac OS XからのアクセスはMacJapaneseではなくUnicodeになります。このUnicodeのU+010000以上の文字が扱えません。この領域はUnicodeのバージョンが上がったときに追加されたもので、CJK Unified Ideographs Ext.Bと呼ばれる漢字の異体字が含まれます。具体的に言うと、

等が扱えません。netatalk 2.1beta1以降では使えるようになっています。


雑談

「長い名前」という言葉の混乱

AFP 3の仕様書をみると、ファイル名の扱い(type)には三種類あります。

Type1short nameDOS互換/8.3形式
Type2long nameHFS互換/日本語環境ではMacJapanese/31バイト制限
Type3unicode name (AFPname)Unicode (decomposed UTF-8)/実質的に長さ制限なし (パケット解析すると65535バイト制限)

我々が普段「短い名前」と言っているのは、仕様書上では「long name」であり、「長い名前」と言っているのは「unicode name」或は「AFPname」と呼びます。

なんでAppleはNFD (UTF8-MAC, decomposed UTF-8)なんてマイナーなものを使うんだ

Appleのページに説明があります。

HFS Plus Volume Format

B ツリーキーの比較ルーチン(Unicode 文字列を比較する)の複雑さを緩和するために、HFS Plus では Unicode 文字を完全に分解した形式にして、合成文字を標準の順番で格納することを規定しています。

正規化処理を行なう場合、NFDの方がNFCよりも速いんです。

NFDの手順
decompose → order
NFCの手順
decompose → order → precompose

しかしだねえ、そもそもファイル名を正規化する必要性はあるのか? 正規化ってのは、文書内での問題を解決する目的ではないのか?

AppleのTechnoteのテーブルがおかしい

AppleのTechnoteのページにUNICODE DECOMPOSITION TABLEがありますが、参考にしないでください。

AppleのTecknoteに載っているテーブル:
UNICODE DECOMPOSITION TABLE

Unicode 2.xベースのテーブルなので、ギリシャ拡張文字の順序等がおかしいです。Mac OS X 10.2以降はUnicode 3.2規格なのでこのテーブルと一致しません。じゃあMac OS X 10.1以前はどうかというと、バギーなので変換テーブルすら作れないです。

本家AppleはMacRomanをmangleしない

Mac OS XでローカルディスクにMacRoman由来の文字のファイルを作り、Mac OS 9でみると、一部の文字が変な化け方をします。
例えば、「登録商標記号」(まるR)は、「」(HALF WIDTH KATAKANA i)に見えます。
一体何が起きているのかは、MacRoman-Unicode変換表とMacJapanese-Unicode変換表を比較すると気付きます。

MacRomanとMacJapaneseの比較表

参考: unicode.orgにあるMacRomanの資料
参考: unicode.orgにあるMacJapaneseの資料

つまり次のような現象です。

結果として、同じフォルダに「登録商標記号」のファイルと「」のファイルがあったら、区別がつかなくなります。マウスでダブルクリックしても一方しか開けません。本来ならば、MacJapaneseにないんだからmangleすべきでしょう。(古いOSとの互換性を考えたらこうなっちゃったとも考えられますが…)
じゃあ、netatalk 2.0.4の場合はどうかというと、こういう問題は発生しません。MacJapaneseにない文字があったら必ずmangleします。

non-ASCIIのファイル名/フォルダ名を完全に禁止したい

そもそもnon-ASCIIのファイル名/フォルダ名を使うのが邪道である。美しくない。根性を叩き直すべきである。だから禁止したい。私もそう思います。
netatalkに1行パッチを当てるとmaccharset:ASCIIという設定が可能になるので、non-ASCIIのファイル名/フォルダ名を作ろうとした時点でエラーにする事が出来ます。
が、パッチは公開しません。
クライアントからnetatalk上に新しくフォルダを作るとき、「名称未設定フォルダ」という日本語の名前で作ろうとするので、その時点で失敗します。フォルダが作れないサーバに価値を見出せません。これはsambaとて同じことです。


参考

Netatalk - Networking Apple Macintosh through Open Source
netatalkのホームページ
SourceForge.net: netatalk
sourceforge projectのnetatalkのページ
netafp - the netatalk company | The Netatalk OS Company
netatalk開発者の一人であるFrank Lahmのページ
SourceForge.jp: Project Info - Netatalk 日本語化プロジェクト
2003年からあるプロジェクトのようですが、活動の形跡が全くないので読む価値なし
Samba - opening windows to a wider world
sambaのホームページ
Samba-JP
sambaの日本語情報
Netatalk
拡張ファイル属性 (EA)
AppleTalk
Apple Filing Protocol (AFP)
AppleShare
フォーク
リソースフォーク
AppleSingle/AppleDouble
Finder情報
Bonjour
Avahi
サービス・ロケーション・プロトコル (SLP)
Secure Sockets Layer (SSL)
Wikipediaの関連項目
使いこなそうユニコード
正規化の説明などがわかりやすい
Inside AppleTalk Second Edition (pdf)
AppleTalkの仕様。AFP 1.1/2.0の仕様を含む。
AppleTalk Filing Protocol Version 2.1 and 2.2 (pdf)
AFP 2.1/2.2の仕様
Apple Filing Protocol Programming Guide
Apple Filing Protocol Reference
AFP 3.xの仕様。
http://users.phg-online.de/tk/netatalk/doc/Apple/
AppleSingleとAppleDoubleの仕様書があります。(Version1とVersion2の両方)
Technical Note TN1150 HFS Plus Volume Format
HFS Plusの資料

blog

このページでは特に触れていないようなネタや速報は、blogの方に書く事にしました。

netatalk:HAT:So-net blog


履歴


↑ Upper Page