Last Update: "2013/06/06 18:18:16 makoto"
TCP/IP と AppleTalk
Macintosh が初めて Network 機能を持った時にしゃべる言葉は AppleTalk でした。
並行して世の中には Internet 接続が TCP/IP で広く使われるようになりました
自然な流れとして Macintosh も TCP/IP もしゃべるようになります。
それでも、しばらくは AppleTalk も Mac の世界でも並行して使われていました。
そのうちに、AppleTalk 上で使われていた上位の通信を TCP/IP でも行なえる
ようになります。例えば port 548 を使った File 共有の通信です。
AppleTalk は、自分(サーバ)の存在を広く放送します。このように放送を行なう場合に、
これは使う側からは
(何が利用出来るかが分るので)便利ですが、二つ問題があります。常に放送が流れる
ので通信量が大きいです。また安全上も何があるか教えてくれているので、攻撃しやすいです。
本来 TCP/IP と AppleTalk は対立(並立)する用語です。
netatalk
Netatalk (英語的には「ねらとーく」のように言うようです)。
は、Unix と Macintosh が仲良くなるためのソフトウェアです。
もう少し別の言い方をしますと、
Apple のプロトコルをしゃべるためのものです。
AppleTalk と TCP/IP
Apple のプロトコルは AppleTalk と呼ばれます。TCP/IP ではなくて
AppleTalk、ということです。
ただし、最近の Mac は TCP/IP (port 548) を使ったファイルサーバも使える
ので、その機能も内蔵しています
(Netatalk への TCP/IP の追加は asun (Adrian Sun)のおかげです)。
ちなみに、ルータを介した通信は、特にルータに設定がない場合、TCP/IP
だけが利用出来ます。ルータを自前で用意して設定しているような場合には、
そのルータに
Netatalk のうちの atalkd
を入れておけば、AppleTalk の中継が可能となります。つまり、
ルータ越にファイルサーバ機能を使う場合には、次の組合せがあります。
クライアントとサーバ が通信するプロトコル | ルータに必要な機能 |
純粋 Appletalk | + atalkd |
AppleTalk over TCP | TCP/IP only |
更に付加えると、純粋 AppleTalk の場合でも、
ネットワークをつないでいる箱が、ルータでなくブリッジであれば、その箱を越えて AppleTalk 通信
が(当然)可能です。
Mac OS X のファイルサーバ機能は、
サーバ側としても、クライアント側としても
AppleTalk over TCP を話しますので、
ルータについては、あまり考えなくてもいいということになります。
話がそれますが、AppleTalk (だけ)をしゃべるプリンタを、AirMac
を通じて使いたい、という時には AirMac のブリッジ機能を有効
にすれば可能になります
(ただしブリッジは、二つのネットワークを一つに見えるように
つないでしまう
ものですから、単純に有効にすると、問題が起きてしまう場合
もあります)。
版と構成部品
以下の記述は、次の版の設置時点で加筆したものです。
ttyp6:makoto@st4200 10:14:24/050219(...powerpc/All)> pkg_info | grep netatalk
netatalk-2.0.2 Netatalk appletalk file and print services
netatalk はいくつかの部品から構成されています。
構成部品 | 機能 | 備考 |
atalkd | AppleTalk デーモン | Native AppleTalk の場合には必須 |
afpd | ファイルサーバ | AppleTalk over TCP であれば、これだけ動かすのも可 |
papd | プリントサーバ |
timelord | 時刻サーバ |
pkg_info -D
make install や、pkg_add netatalk した時、
また設置後であれば、
% pkg_info -D netatalk
を使うと、いくつかの情報が表示されます。
そこに書いてあることですが、起動用の
手続は次のように用意します。
/etc/rc.d/atalkd (m=0755)
/etc/rc.d/afpd (m=0755)
/etc/rc.d/papd (m=0755)
/etc/rc.d/timelord (m=0755)
これらの見本が /usr/pkg/share/examples/rc.d にありますので、例えば、次のように
します。
% foreach i (atalkd afpd papd timelord)
sudo cp /usr/pkg/share/examples/rc.d/$i /etc/rc.d
end
これらは、置いただけでは有効にならないので、
/etc/rc.conf に次のように書くと、本当に起動時に有効になります。
atalkd=YES
afpd=YES
papd=YES
timelord=YES
この中で atalkd は必須ですが、他は必要に応じて設定します。
また、それぞれの設定は次のところに行ないます。
/usr/pkg/etc/netatalk/AppleVolumes.default
/usr/pkg/etc/netatalk/AppleVolumes.system
/usr/pkg/etc/netatalk/afpd.conf
/usr/pkg/etc/netatalk/atalkd.conf (初期値は実質、空。通常、自動的に設定される)
/usr/pkg/etc/netatalk/netatalk.conf
/usr/pkg/etc/netatalk/papd.conf
設定例は
/usr/pkg/share/examples/netatalk
にありますが、これを上のところに写して使います。
設置時にこれらが存在しない時には、設定例が写されます。
afpd
設定
| 譜名 | 機能(どういう時に読まれるか) |
1 | /usr/pkg/etc/netatalk/AppleVolumes.system | 常に有効
|
2 | /usr/pkg/etc/netatalk/AppleVolumes.default | 利用者の設定がない時に有効
|
3 | ~/AppleVolumes | 利用者の設定
|
4 | ~/.AppleVolumes | 利用者の設定 (先頭にピリオドが付いている)
|
これらのうちいくつかは make install で既に置かれています。
これらの見本は
/usr/pkg/share/examples/netatalk にあるので、
実物の方を変更しても、元の見本と比較が可能です。
ここの四つの設定の文法は全て同じです。
良く行なわれる例としては、共通なものは 1 に書いておき、追加の設定を 4 に書いてもらいます。
また、もし 4 がない人のために 2 を用意しておきます。
便利な設定としては、良く使う path を
path name
の形式で書いておくことです。これで画面には name が表示され、それを選ぶと、
path への読書き等が利用出来るようになります。
一時的に起動
再起動する前に、一時的に試すには、次のようにします。
/etc/rc.d/atalkd onestart
または
sudo env atalkd=YES /etc/rc.d/atalkd start
これは通常、結構時間がかかります。
次のようになることもあります。
> sudo env atalkd=YES /etc/rc.d/atalkd start
Starting atalkd.
Setting AppleTalk info with nbprgstr.
nbp_rgstr: Can't assign requested address
Can't register harry:Workstation@*
この時でも atalkd は起動している場合も多いです。
その場合には、次のように afpd を起動できます。
> sudo env afpd=YES /etc/rc.d/afpd start
Starting afpd.
ttyp1:makoto@harry 19:47:03/050218(...net/netatalk)> !ps
ps ax | grep atalk
11739 ? S 0:00.02 /usr/pkg/libexec/netatalk/atalkd
28818 ? S 0:00.03 /usr/pkg/libexec/netatalk/afpd
ttyp1:makoto@harry 19:47:23/050218(...net/netatalk)>
認証
UAM は User Authentication Method とか User Access Management の略かと思います。
netatalk では、まず、どの認証方法を使うかを、
afpd.conf の -uamlist に設定します。afpd は
/usr/pkg/etc/netatalk/afpd.conf
を読みます。
その中に、次のような部分があります。
# -uamlist <a,b,c> Comma-separated list of UAMs.
# (default: uams_guest.so,uams_clrtxt.so,uams_dhx.so)
#
# some commonly available UAMs:
# uams_guest.so: Allow guest logins
#
# uams_clrtxt.so: (uams_pam.so or uams_passwd.so)
# Allow logins with passwords
# transmitted in the clear.
#
# uams_randnum.so: Allow Random Number and Two-Way
# Random Number exchange for
# authentication.
#
# uams_dhx.so: (uams_dhx_pam.so or uams_dhx_passwd.so)
# Allow Diffie-Hellman eXchange
# (DHX) for authentication.
ここに書いてあることを整理すると、次のようになります。
-uamlist の引数 | 機能 |
uams_dhx_passwd.so | Diffie-Hellman eXchange (DHX) を使ったログイン |
uams_dhx.so |
uams_guest.so | ゲストログイン |
uams_passwd.so | 平文パスワードによるログインを許可する (vipw で設定) |
uams_clrtxt.so
|
uams_randnum.so | 乱数と双方向乱数通信による認証
(/etc/netatalk/afppaswd に設定) |
-uaamlist の引数に挙げてある名前を -uamlist の次に、カンマでつない
上記
(default:
の行に示してあるように
で記述します。
色を変えてある部分は初期設定で有効になっているものです。
これらの実体は、/usr/pkg/libexec/netatalk/uams にありますので、
次のようにして存在を確認出来ます。(2.0.1 と 2.0.3 で一部文字が変更になっているようです)。
ttyp0:makoto@s900 18:38:06/051124(~)> cd /usr/pkg/libexec/netatalk/uams
ttyp0:makoto@s900 18:38:07/051124(...netatalk/uams)> ls -l *so
lrwxr-xr-x 1 root wheel 14 Oct 20 03:08 uams_clrtxt.so@ -> uams_passwd.so
lrwxr-xr-x 1 root wheel 18 Oct 20 03:08 uams_dhx.so@ -> uams_dhx_passwd.so
-rwxr-xr-x 1 root wheel 9999 Oct 20 03:08 uams_dhx_passwd.so*
-rwxr-xr-x 1 root wheel 8421 Oct 20 03:08 uams_guest.so*
-rwxr-xr-x 1 root wheel 9622 Oct 20 03:08 uams_passwd.so*
-rwxr-xr-x 1 root wheel 13875 Oct 20 03:08 uams_randnum.so*
ttyp0:makoto@s900 18:38:10/051124(...netatalk/uams)>
この設定を /usr/pkg/etc/netatalk/afpd.conf にします。設置例では、
その中身は実質空になっていますが、そのままでも、次のような設定
が生きています。# が付いていますが、そのままでも別途有効になっているという意味です。
もし、これを変更する時には、最初の # を消して、必要な文字を
記述します。
# - -transall -uamlist uams_clrtxt.so,uams_dhx.so -nosavepassword
参考
http://www.linux.or.jp/JM/html/netatalk/man5/afpd.conf.5.html
password の設定は適切に行なっているはずなのに、
「パスワードが合っていない」と言われる時があります。
/var/log/messages を見れば書いてあるかも知れませんが、その ID に設定されている shell
が
/etc/shells に入っていない時にもそうなります。
動作確認
Mac OS X の場合、Finder の画面で command + k をすると、
..のような画面になります。
そこで、afp://server.example.com
のように入力します。
誤り
- Database environment version mismatch
-
版を新しくした時に、
Nov 29 08:16:38 u afpd[16432]: cnid_open: dbenv->open of
/home/username/hoge/.AppleDB failed:
DB_VERSION_MISMATCH: Database environment version mismatch
というような字を見ることがあります。これは
% mv /home/username/hoge/.AppleDB /home/username/hoge/.AppleDB-old
のようにすれば、取敢えずは、回避出来るはずです。
あるいは、消してしまっても大丈夫だと思います。
-
fopen: No such file or directory
-
debug (standalong) モードで起動したり、起動直後に /var/log/messages に
fopen: No such file or directory
と出るのは
/usr/pkg/etc/netatalk/afp_ldap.conf
がないためかと思います。重要ではないのですが、重要ではないと判断するのに時間がかかる気がするので、
書いておきます。
modena@makoto 14:24:06/120417(..net/netatalk)% \
sudo ktrace -t n /usr/pkg/libexec/netatalk/afpd -d -P /var/run/afpd.pid
fopen: No such file or directory
|