# Netatalk 2 からのアップグレード

## 概要

Netatalk の主要な変更は以下の二点：

1. これまでの設定ファイルすべてが廃止された、全く新しい設定ファイルとしての `afp.conf`

2. マックのメタデータとリソースフォークをファイルシステムの拡張属性に保存する "`appledouble = ea`" という新しい AppleDouble のバックエンド。

### 設定まわりの変更点

- （Samba の smb.conf のような） "ini" スタイルの構文

- 一つで設定すべてを指示するという点： AFP 及びボリュームの構成を共に一つのファイルで設定することになるという点

- `afpd.conf`、 `netatalk.conf`、 `AppleVolumes.default` 及び、 `afp_ldap.conf` の廃止

ほとんどのオプション名は変更されたので、 詳細については afp.conf の manpage 全体を読むこと

### 新たな AppleDouble バックエンド

マックのメタデータとリソースフォークをファイルシステムの拡張属性に保存する "`appledouble = ea`" という新しい AppleDouble のバックエンド。

- デフォルトのバックエンドである（！）

- 拡張属性のあるファイルシステムが必須。 さもなくば "`appledouble = v2`" オプションの使用が代替となる

- "`appledouble = v2`" から "`appledouble = ea`" ファイルシステムへの変換はアクセス時、その都度行われる（無効にすることも可能）

- 一括で変換する場合 `dbd` を用いることができる

実装の詳細：

- Mac のメタデータ（すなわち FinderInfo、AFP フラグ、コメント、CNID）は “`org.netatalk.Metadata`” という名前の拡張属性に保存される。

- マックのリソースフォークは：

  - ZFS を用いた Solaris では “`org.netatalk.ResourceFork`” という拡張属性に保存される。

  - ないしは、ファイル名が “`file`” であるものに対して各々、“`._file`” という名の別の AppleDouble ファイルに保存される。

- "._" ファイルのフォーマットは、 たとえそのファイルシステムに CIFS サーバー (Samba) 経由でアクセスした場合でも、 マックの CIFS クライアントが想定しているフォーマットと全く同じである。 なので、データを失う危険性（リソースもメタデータも）なく、 マックから同じデータセットに AFP 経由と CIFS 経由と並行してアクセスすることができる。 一方、ウィンドウズから当該データセットに CIFS 経由でアクセスした場合は、未だに “`file`” と “`file`” の紐付けを失うこととなるであろう（非 ZFS ファイルシステムの場合。上記参照）。 今のところその点で拡張 Samba VFS モジュールが必要である（改善中）。

昨今、リソースフォークを使用しているアプリケーションは　 Adobe Photoshop（イメージプレビュー）と Postscript Type 1 フォントのみなので、 例えば Linux 上においても、あらゆる余分な Netatalk AppleDouble ファイル（及びフォルダー）からは 99% 無関係でいられる。

### そのほかの主要な変更点

- AFP 及び CNID デーモンの起動・再起動を担う新しいサービスコントローラデーモン netatalk の導入。バンドルされているスタートスクリプトが すべて更新されているため、自分の環境でもアップデートされているか確認する必要あり！

- CNID データベースはデフォルトで `/var/netatalk/CNID/` 以下に保存される。保存場所を変更するには、コンパイル時に `--localstatedir=PATH` のコンフィグオプションを使用する。

- Netatalk 2.x のボリュームオプション “usedots” 及び “upriv” はデフォルトとなった。

- SLP 及び AFP プロキシのサポート機能は削除。

- type/creator と拡張子の関連付けサポート機能は削除

## アップグレード

1. Netatalk 2.x を停止する

2. Netatalk 3 をインストールする

3. 設定 `afp.conf` 及び `extmap.conf` を自力で書き換える

4. netatalk 起動にのみ関連している、 Netatalk 起動スクリプト（SMF、systemd、ほかすべて…）を更新する

5. `afp_voluuid.conf` 及び `afp_signature.conf` を localstate ディレクトリ （デフォルトでは `/var/netatalk/`）、に移動。 正しいパスを見つけるために `afpd -v` コマンドが有用

6. Netatalk 3 を起動する

## 新旧設定ファイル名対照表

## 設定ファイル名対照表

旧ファイル名 | 新ファイル名 | 注記
- | `etc/afp.conf` | 新しい "ini" 様式のフォーマット
- | `etc/extmap.conf` | netatalk 3.0.2 から採用
`etc/netatalk/afp_signature.conf` | `var/netatalk/afp_signature.conf` | 厳密には $localstatedir に移動
`etc/netatalk/afp_voluuid.conf` | `var/netatalk/afp_voluuid.conf` | 厳密には $localstatedir に移動
`etc/netatalk/netatalk.conf` (`/etc/default/netatalk`) | - | 廃止
`etc/netatalk/afpd.conf` | - | 廃止
`etc/netatalk/afp_ldap.conf` | - | 廃止
`etc/netatalk/AppleVolumes.default` | - | 廃止
`etc/netatalk/AppleVolumes.system` | - | 廃止
`~/.AppleVolumes` | - | 廃止

## 新旧オプション対応表

## netatalk.conf (/etc/default/netatalk) から afp.conf

旧 netatalk.conf | 新 afp.conf | 旧デフォルト値 | 新デフォルト値 | セクション | 詳細
ATALK_NAME | hostname | - | - | (G) | デフォルトでは gethostname() を使用
ATALK_UNIX_CHARSET | unix charset | LOCALE | UTF8 | (G) | -
ATALK_MAC_CHARSET | mac charset | MAC_ROMAN | MAC_ROMAN | (G)/(V) | -
CNID_METAD_RUN | - | yes | - | - | netatalk(8) で制御
AFPD_RUN | - | yes | - | - | netatalk(8) で制御
AFPD_MAX_CLIENTS | max connections | 20 | 200 | (G) | -
AFPD_UAMLIST | uam list | -U uams_dhx.so,uams_dhx2.so | uams_dhx.so uams_dhx2.so | (G) | -
AFPD_GUEST | guest account | nobody | nobody | (G) | -
CNID_CONFIG | log level | -l log_note | cnid:note | (G) | -
CNID_CONFIG | log file | - | - | (G) | -
ATALKD_RUN | - | no | - | - | AppleTalk が廃止
PAPD_RUN | - | no | - | - | AppleTalk が廃止
TIMELORD_RUN | - | no | - | - | AppleTalk が廃止
A2BOOT_RUN | - | no | - | - | AppleTalk が廃止
ATALK_BGROUND | - | no | - | - | AppleTalk が廃止
ATALK_ZONE | - | no | - | - | AppleTalk が廃止

## afpd.conf から afp.conf

旧 afpd.conf | 新 afp.conf | 旧デフォルト値 | 新デフォルト値 | セクション | 詳細
一番目のフィールド（"-" あるいは“サーバー名”) | hostname | - | - | (G) | デフォルトでは gethostname() を使用
-uamlist | uam list | -U uams_dhx.so,uams_dhx2.so | uams_dhx.so uams_dhx2.so | (G) | -
-nozeroconf | zeroconf | - | （サポートされていれば） yes | (G) | -
-advertise_ssh | advertise ssh | - | no | (G) | -
-[no]savepassword | save password | -savepassword | yes | (G) | -
-[no]setpassword | set password | -nosetpassword | no | (G) | -
-client_polling | client polling | - | no | (G) | -
-hostname | hostname | - | - | (G) | デフォルトでは gethostname() を使用
-loginmesg | login message | - | - | (G)/(V) | -
-guestname | guest account | nobody | nobody | (G) | -
-passwdfile | passwd file | afppasswd | afppasswd | (G) | -
-passwdminlen | passwd minlen | - | - | (G) | -
-tickleval | tickleval | 30 | 30 | (G) | -
-timeout | timeout | 4 | 4 | (G) | -
-sleep | sleep time | 10 | 10 | (G) | -
-dsireadbuf | dsireadbuf | 12 | 12 | (G) | -
-server_quantum | server quantum | 303840 | 1048576 | (G) | -
-volnamelen | volnamelen | 80 | 80 | (G) | -
-setuplog | log level | default log_note | default:note | (G) | -
-setuplog | log file | - | - | (G) | -
-admingroup | admingroup | - | - | (G) | -
-k5service | k5 service | - | - | (G) | -
-k5realm | k5 realm | - | - | (G) | -
-k5keytab | k5 keytab | - | - | (G) | -
-uampath | uam path | etc/netatalk/uams/ | lib/netatalk/ | (G) | 厳密には $libdir に移動
-ipaddr | afp listen | - | - | (G) | -
-cnidserver | cnid server | localhost:4700 | localhost:4700 | (G)/(V) | -
-port | port | 548 | 548 | (G) | -
-signature | signature | auto | - | (G) | -
-fqdn | fqdn | - | - | (G) | -
-unixcodepage | unix charset | LOCALE | UTF8 | (G) | -
-maccodepage | mac charset | MAC_ROMAN | MAC_ROMAN | (G)/(V) | -
-closevol | close vol | - | no | (G) | -
-ntdomain | nt domain | - | - | (G) | -
-ntseparator | nt separator | - | - | (G) | -
-dircachesize | dircachesize | 8192 | 8192 | (G) | -
-tcpsndbuf | tcpsndbuf | - | - | (G) | OS のデフォルト
-tcprcvbuf | tcprcvbuf | - | - | (G) | OS のデフォルト
-fcelistener | fce listener | - | - | (G) | -
-fcecoalesce | fce coalesce | - | - | (G) | -
-fceevents | fce events | - | - | (G) | -
-fceholdfmod | fce holdfmod | 60 | 60 | (G) | -
-mimicmodel | mimic model | - | - | (G) | -
-adminauthuser | admin auth user | - | - | (G) | -
-noacl2maccess | map acls | - | rights | (G) | -
-[no]tcp | - | -tcp | - | - | 常に TCP のみ
-[no]ddp | - | -noddp | - | - | AppleTalk が廃止
-[no]transall | - | -tcp -noddp | - | - | 常に TCP のみ
-nodebug | - | - | - | - | 廃止
-[no]slp | - | -noslp | - | - | SLP サポートが廃止
-[no]uservolfirst | - | -nouservolfirst | - | - | uservol が廃止
-[no]uservol | - | -uservol | - | - | uservol が廃止
-proxy | - | - | - | - | AppleTalk が廃止
-defaultvol | - | AppleVolumes.default | - | - | afp.conf のみ
-systemvol | - | AppleVolumes.system | - | - | afp.conf のみ
-loginmaxfail | - | - | - | - | そもそも最初からサポートされていない
-unsetuplog | - | - | - | - | 廃止
-authprintdir | - | - | - | - | AppleTalk が廃止
-ddpaddr | - | - | - | - | AppleTalk が廃止
-[no]icon | - | -noicon |  | - | 廃止
-keepsessions | - | - | - | - | 廃止。kill -HUP を使用

## from afp_ldap.conf から afp.conf

旧 afp_ldap.conf | 新 afp.conf | 旧デフォルト値 | 新デフォルト値 | セクション | 詳細
ldap_server | ldap server | - | - | (G) | -
ldap_auth_method | ldap auth method | - | - | (G) | -
ldap_auth_dn | ldap auth dn | - | - | (G) | -
ldap_auth_pw | ldap auth pw | - | - | (G) | -
ldap_userbase | ldap userbase | - | - | (G) | -
ldap_userscope | ldap userscope | - | - | (G) | -
ldap_groupbase | ldap groupbase | - | - | (G) | -
ldap_groupscope | ldap groupscope | - | - | (G) | -
ldap_uuid_attr | ldap uuid attr | - | - | (G) | -
ldap_uuid_string | ldap uuid string | - | - | (G) | -
ldap_name_attr | ldap name attr | - | - | (G) | -
ldap_group_attr | ldap group attr | - | - | (G) | -

## AppleVolumes.* から afp.conf

旧 AppleVolumes.* | 新 afp.conf | 旧デフォルト値 | 新デフォルト値 | セクション | 詳細
（ピリオドで始まる行） | - | - | - | - | extmap.conf で使用する
:DEFAULT: | - | options:upriv,usedots | - | - | "vol preset =" を使用する
一番目のフィールド ("~") | - | - | - | - | [Homes] セクションを使用する
一番目のフィールド ("/path") | path | - | - | (V) | -
二番目のフィールド | - | - | - | - | セクション名を使用する
allow: | valid users | - | - | (V) | -
deny: | invalid users | - | - | (V) | -
rwlist: | rwlist | - | - | (V) | -
rolist: | rolist | - | - | (V) | -
volcharset: | vol charset | UTF8 | （unix charset と同じ） | (G)/(V) | -
maccharset: | mac charset | MAC_ROMAN | MAC_ROMAN | (G)/(V) | -
veto: | veto files | - | - | (V) | -
cnidscheme: | cnid scheme | dbd | dbd | (V) | -
casefold: | casefold | - | - | (V) | -
adouble: | appledouble | v2 | ea | (V) | v1、osx 及び sfm は廃止
cnidserver: | cnid server | localhost:4700 | localhost:4700 | (G)/(V) | -
dbpath: | vol dbpath | （ボリュームディレクトリ） | var/netatalk/CNID/ | (G) | 厳密には $localstatedir に移動
umask: | umask | 0000 | 0000 | (V) | -
dperm: | directory perm | 0000 | 0000 | (V) | -
fperm: | file perm | 0000 | 0000 | (V) | -
password: | password | - | - | (V) | -
root_preexec: | root preexec | - | - | (V) | -
preexec: | preexec | - | - | (V) | -
root_postexec: | root postexec | - | - | (V) | -
postexec: | postexec | - | - | (V) | -
allowed_hosts: | hosts allow | - | - | (V) | -
denied_hosts: | hosts deny | - | - | (V) | -
ea: | ea | auto | auto | (V) | -
volsizelimit: | vol size limit | - | - | (V) | -
perm: | - | - | - | - | "directory perm" 及び "file perm" を使用する
forceuid: | - | - | - | - | 廃止
forcegid: | - | - | - | - | 廃止
options:ro | read only | - | no | (V) | -
options:invisibledots | invisible dots | - | no | (V) | -
options:nostat | stat vol | - | yes | (V) | -
options:preexec_close | preexec close | - | no | (V) | -
options:root_preexec_close | root preexec close | - | no | (V) | -
options:upriv | unix priv | - | yes | (V) | -
options:nodev | cnid dev | - | yes | (V) | -
options:illegalseq | illegal seq | - | no | (V) | -
options:tm | time machine | - | no | (V) | -
options:searchdb | search db | - | no | (V) | -
options:nonetids | network ids | - | yes | (V) | -
options:noacls | acls | - | yes | (V) | -
options:followsymlinks | follow symlinks | - | no | (V) | -
options:nohex | - | - | - | - | ":2f" は ":" に自動変換される
options:usedots | - | - | - | - | ":2e" は "." に自動変換される
options:nofileid | - | - | - | - | 廃止
options:prodos | - | - | - | - | 廃止
options:mswindows | - | - | - | - | 廃止
options:crlf | - | - | - | - | 廃止
options:noadouble | - | - | - | - | 廃止
options:limitsize | - | - | - | - | 廃止
options:dropbox | - | - | - | - | 廃止
options:dropkludge | - | - | - | - | 廃止
options:nocnidcache | - | - | - | - | 廃止
options:caseinsensitive | - | - | - | - | 廃止

## To Do

- `ad` ユーティリティーを `appledouble = ea` のもとでテスト