Netatalk

概要

MacのローカルファイルシステムであるHFSやHFS+は、リソースフォークやFinder情報といったメタデータをもつ。更に最近のmacOSでは拡張属性 (EA)も扱う。netatalkは、こうしたアップル独自のメタデータを完全に保存することを目的として設計されたファイルサーバソフトウェアである。
メタデータは可能な限りサーバ側のファイルシステムの拡張属性に保存する。これが出来ない場合は隠しファイルを作って保存する。
また、バックアップソフトウェアであるTime Machineの保存先として利用することもできる。

旧AppleTalk機能

かつてのMac OSは、AppleTalkと呼ばれる独自のネットワークプロトコルを実装していた。netatalk 2.x迄はこのAppleTalkも扱うことができた。
AppleTalkの最も基本的なプロトコルであるDDPとAARPはカーネルが受け持ち、それより上のプロトコルをnetatalkが扱う仕組みである。従ってカーネルがDDPとAARPをサポートしない場合はAppleTalkが使えない。
AppleTalkの基本的な機能を有効にするためには、まずatalkdを起動する。
afpdはファイル共有プロトコルAFPのためのデーモンであり、単体でAFP over TCPを実現するが、上記atalkdを起動しておけばAFP over AppleTalkも実現できる。これは極めて古いMacに対してファイル共有できることを意味する。
印刷用のプロトコルPAPを実装するデーモンとしてpapdが付属する。これはCommon Unix Printing System (CUPS)もサポートしており、クライアントからAppleTalkプリンタとしてnetatalkを選べば、様々なプリンタに印刷することができる。
時間合わせのためのtimelordデーモンは、Columbia AppleTalk Package (CAP)のソースからのリバースエンジニアリングによって作られたものである。ただし現在のMacはNTPが利用出来るのでtimelordは使われない。
Apple IIブートサーバの機能ももつが、Classic Mac OSやmacOSのブートサーバになるわけではない。
macOSはAppleTalkの機能を徐々に縮小しTCP/IPに移行した。Mac OS X v10.6にはAppleTalkサポートがなくなった。こうした経緯からnetatalk 3.xではファイル共有のためのAFP over TCPの機能のみを残し、AppleTalk機能を削除した。

netatalkの発音

netatalkがミシガン大学にて開発されていた頃に書かれたFAQには発音の記述があった。これによると「'ned-*-to.k」と発音する。すなわち、最初のtは弱くdのように発音し、最初のaは曖昧母音である。「ta」が弱い「ドゥ」となり聞こえなくなることから、カタカナ表記を「ネットーク」とすることが多かった。
しかしながら実際には開発元でもこのように発音された事実はなく、様々な読み方があるため、現在のFAQでは発音に関する記述を意図的に除外している。

利用例

Unix系OS、すなわちLinuxディストリビューションやBSD系OS等の多くは、netatalkのパッケージを提供している。
NAS製品はUnix系OSを採用しているものが多く、NFS、SMB (CIFS)、AFP等をサポートするが、このうちAFPに関してはnetatalkを利用するケースが多い。
iPod touch、iPhone、iPad、Apple TVといったiOSを用いた製品では、Apple社の認可を受けていないアプリケーションをインストールするjailbreakと呼ばれる行為が行なわれており、これのひとつとしてnetatalkが配布されている。

歴史

netatalkは元々ミシガン大学のResearch Systems Unix Groupによって開発された。
かつてのMac OSは、TCP/IPとは異なるAppleTalkと呼ばれる独自のネットワークプロトコル群を用いていた。このAppleTalkをBSD系OSで実装し、Mac OSのサーバとして機能させるソフトウェアとして誕生した。
同様の機能を持つソフトウェアとして、かつてはCAPがあったが、開発停止となったためnetatalkが広く利用されるようになった。
その後、Adrian SunのパッチによってAFP over TCPが実装され、2000年にSourceForgeに移行した。
netatalk 1.6では、Mac OS Xからのアクセス時にデータが破壊される問題を克服した。
2004年10月リリースのnetatalk 2.0はAFP 3.1をサポートし、Unicodeファイル名(俗にいう長いファイル名)、2GiB以上のファイルサイズ、CUPSの統合、シングルサインオン、Kerberos V等を実装した。バージョン2.0.4では旧Mac OSからのアクセス時のCJKファイル名に対応した。2.0.5ではTime Machineに対応した。
2010年4月リリースのnetatalk 2.1はAFP 3.2をサポートし、拡張属性サポート、Solaris及びOpenSolaris上のZFSでのACLサポート等を追加した。また、IPv6にも対応した。
2011年7月リリースのnetatalk 2.2はAFP 3.3をサポートし、Mac OS X LionからTime Machineによるバックアップができない問題を克服した。また、Avahiを用いることでBonjourに対応した。Solaris以外でのACLにも対応した。
2012年7月リリースのnetatalk 3.0はAppleTalk機能を削除し、AFP over TCP専用となった。様々なメタデータは可能な限り拡張属性に保存するようになった。今までの設定ファイルを廃止し、Sambaを模倣したINIフォーマットの設定ファイルを採用した。
2013年10月リリースのnetatalk 3.1はSpotlight検索機能を実装した。3.1.1はAFP 3.4をサポートした。3.1.8は拡張属性の扱いをSambaと統合するための"ea = samba"オプションを追加した。

国際化対応

AFPではサーバ名、ボリューム名、ファイル名の国際化対応が必要である。
netatalk 1.xはNLSかCAPエンコーディングを用いる事で非ASCII文字を扱う事が出来る。CJKの場合はNLSが利用出来ず、結果的にCAPエンコーディングを用いる事になる。日本語環境ではEUC-JPやShift_JISを利用可能にするEUCパッチが存在した。中国語環境ではNLSを拡張するパッチが存在したが、現在はダウンロード出来ない。
netatalk 2.xはファイル名の扱いをUnicodeベースにした事でmacOSに対応した。Classic Mac OSはUnicodeベースではないため、netatalk内に変換テーブルを用意することで対応している。netatalk 2.0.3迄が対応しているテーブルは、MacCentralEurope、MacCyrillic、MacHebrew、MacRoman、MacTurkishであり、MacJapaneseのテーブルは含んでおらず、代替策としてiconvを呼び出してShift_JISとの変換を行なっていた。したがってShift_JISには含まれないMacJapanese特有の文字を扱うことが出来なかった。netatalk 2.0.4では、MacChineseSimple、MacChineseTraditional、MacJapanese、MacKoreanのテーブルが追加されている。
netatalk 3.0ではCAPエンコーディングが削除された。