このページは私がTurbo Linux上で実際にNetatalkを動かした経験に基づき、これからNetatalkを動かそうとする人にとって為になるであろう情報をまとめたものです。すでにJFにLinux Netatalk-HOWTOが翻訳されていますから、そちらと重複する部分はなるべく避けるようにしています。
Turbo Linuxでは、NetatalkがRPM化されていますので、Turbo LinuxをインストールすればNetatalkはインストールされます。カスタムインストールした場合には組み込まれない場合もありますが、付属CD-ROMからRPMを取ってきてインストールしてしまえばOKです。とても簡単です。
どちらかと言うと、Turbo Linuxそのもののインストールで苦労する事の方が多いと思います。そうは言っても今のインストーラーは優秀ですから、にっちもさっちも行かなくなることはまずないと思いますが、PnPには気を付けましょう(特にISAのPnP対応ネットワークインタフェースカードは曲者のようです)。私の場合、ISAのカードは使っていなかったので特に問題はなかったのですが、インストーラーが何故かEISAのWD8013 Ethernetカード用にWD-7000 SCSIカード用モジュールを割り当ててしまったので、全くネットワークに繋がらず、原因が判るまで苦労しました(該当しそうなHOWTO文書を読みまくって解決出来ました。お陰でいい勉強になりましたf(^^; )。安全を期すなら、インストールする前にTurbo Linuxのサポート情報を見て自分がインストールするマシンに障害が報告されていないかどうか確認しておくことと、本体カバーを明けてマシンに使われているチップやカードを把握しておくと良いでしょう。ちなみに、私のマシン構成は以下のようなものです(あんまりなさそうな構成です)。
まず、TCP/IPの設定をしましょう。TCP/IPがきちんと設定されていれば、LILOから「Linux 3」で起動すればNetatalkが動きます。起動時のメッセージを読むか、起動後に ps aux | grep afpd 等のコマンドで確認してみましょう。Turbo Linuxのインストール時に正しく質問に答えていればTCP/IPで通信できるようになっているでしょう。不幸にして通信できない時(私のように(^_^;;)は、以下の事を疑ってみましょう。
TCP/IPで通信できるようになったら一安心ですが、NICによってはmulticastをうまく扱えないのがありますので注意が必要です。Intelのチップを使ったものが動かないのは有名ですね。/sbin/lsmod でNICがどんなモジュールを使っているのか確認してみて下さい。私が知っている範囲では、eepro100 と via-rhine は要注意! 以下、対策です。
ネットワークの設定が終わったら、Xログイン(linux 5)でも起動時に Netatalk が立ち上がるようにします。kterm 上で tksysv を実行し、Run Level 5 にatalk.initを追加してください。番号は91がいいみたいです(/etc/rc.d/rc3.d/ では91になっていますから)。
次にNetatalk自体の設定です。家庭内LANだったら特に何もしなくても済みますが、企業や学校で使う場合にはパラメータをいじる必要が出てくるかもしれません。大抵の場合、いじる必要がある設定ファイルは /etc/rc.d/init.d/atalk.init の afpd に渡す引き数だけです。/etc/atalk.conf の方は、Ether Talk Phase 1を使っているとか、2枚のEthernet Cardを挿してAppleTalk Gatewayにしたいとか、特殊な目的の場合にのみいじる必要がありますが、そうでなければ最後の行に「eth0」とだけ書いてさえいれば自動で設定してくれます。afpd に渡す引き数を以下に示します。
設定が終わったら、再起動(デーモンを殺してもう一度呼び出しただけではNetatalkは起動しません! これはAppleTalkサポートがモジュールではなく、カーネル内に組み込まれているからです。これば嫌な人は、カーネルを再構築してAppleTalkサポートをモジュールに追い出してください)して、Netatalkの起動を確認(LANの規模にもよりますが、結構な時間が掛かります!)した後、Macintoshでセレクタを覗いてみましょう。AppleShareでちゃんと認識できましたか?
ここは主としてNetatalk Admins Mailing Listから仕入れた情報です。
#!/usr/bin/perl # nu - by Anders Brownworth anders@thehamptons.com # modified by Ambrose Li# modified by Ove Ruben R Olsen # # shows netatalk users logged on and their remote address # this assumes the netstat -p and ps uax of linux usage # # usage: nu open (NS, "/bin/netstat -p 2>&1|"); while ( ) { last if (/^Active UNIX domain/); ($junk, $remote, $morejunk, $pid) = unpack("A44 A23 A13 A10", $_); if ( ($junk =‾ /afpovertcp/) && ($morejunk != /ESTABLISHED/) ) { ($pid) = split(/¥//,$pid,2); $PID{$pid} = $remote; } } close(NS); print pack("A10 A6 A24 A20 A20", "USER", "SINCE", "FROM", "NAME"), "¥n"; open(USERS, "/bin/ps -uax|") ; while ( ) { ($uid, $pid, $junk, $since) = unpack("A8 A6 a36 A5", $_); $pid =‾ tr/ //d; if ($PID{$pid} ne "") { ($name,$office) = split(/,/,(getpwnam($uid))[6], 3); print pack("A10 A6 A24 A40", $uid, $since, $PID{$pid}, $name,$office), "¥n"; } }
#!/bin/bash # written by Thomas Riewe echo echo " NetATalk" echo " --------" ps axuw|grep atalkd|grep root|grep -v grep|sort|cut -c 1-15,42-51,59,70-160 ps axuw|grep afp|grep root|grep -v grep|sort|cut -c 1-15,42-51,59,70-160 ps axuw|grep papd|grep root|grep -v grep|sort|cut -c 1-15,42-51,59,70-160 echo " " echo "Clients PID Sta. Start Binary" echo "---------------------------------------------------------------------" ps axuw|grep afp|grep -v root|sort|cut -c 1-15,42-51,59,70-160 echo
#!/bin/sh
# Must be run as superuser.
#
# set up the raw work files
#
# afpstat
# written by Jim Hart
#
ps aux |
grep afpd |
grep -v grep |
awk '$1 != "root" {print $2, $1}' |
sort -k 1 > /tmp/afpstat1
grep 'afpd¥[' /var/log/messages |
awk '{match($5,/¥[.*¥]/);print substr($5,RSTART + 1, RLENGTH - 2), $0}' |
sort -k 1 > /tmp/afpstat2
# now, join the results together by process id
join /tmp/afpstat1 /tmp/afpstat2|
awk '
BEGIN{ OFS = "¥t"
printf "%-9s%-16s%-16s%-13s%8s%8s¥n", "username", "loginDT", "IPAddr", "ATAddr", "userID", "groupID"
printf "%-9s%-16s%-16s%-13s%8s%8s¥n", "--------", "-------", "------", "------", "------", "-------"
}
procid != $1 {
if( procid != "" ) {
printf "%-9s%-16s%-16s%-13s%8d%8d¥n",username, loginDT, IPAddr, ATAddr, userID, groupID
}
}
/session.*from/ {
username = $2
loginDT = $3 " " $4 " " $5
if( $8 == "ASIP") {
IPAddr = substr($11,1,index($11,":") - 1)
ATAddr = "-"
} else {
ATAddr = $10
IPAddr = "-"
}
procid = $1
}
$8 == "login" {
userID = substr($11,1,length($11) - 1)
groupID = substr($13,1,length($13) - 1)
procid = $1
}
END {
printf "%-9s%-16s%-16s%-13s%8d%8d¥n",username, loginDT, IPAddr, ATAddr, userID, groupID
}'
# get rid of the work files
rm /tmp/afpstat*
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0 for non-commercial use
mQBvAzOe/64AAAEDAM2s9O/EPXKlnvPOnJDH0f1KWg0iIM4i5tT7aywHcbW2Acgr
b7aaTMe0eEMu+aSDjAto9+nYSHGOG/8ni/V7aW60W2zF1AQ8dPcyLZ9l1FaoWcr2
CP8uL2bZNGZvghpEdQARAQABtCBKaW0gSGFydCA8amhhcnRAbWFpbC5hdmNuZXQu
b3JnPg==
=ymPR
-----END PGP PUBLIC KEY BLOCK-----
#!/usr/local/bin/perl # written by Tom Fitzgerald use Socket; %ip = (); # indexed by pid: IP address of client %user = (); # and user logged in on that client open (LOG, "/var/log/syslog") || die "Can't open syslog: $!"; while () { next unless / afpd¥[.*( login | logout | session| server_child)/; @a = split (' '); ($pid = $a[4]) =‾ s/^afpd¥[(.*)¥]:$/$1/; if ($a[6] =‾ /^session:/) { ($ip = $a[8]) =‾ s/:.*//; $ip {$pid} = $ip; } elsif ($a[5] eq "login") { $user {$pid} = $a[6]; } elsif ($a[5] eq "logout") { delete $ip {$pid}; delete $user {$pid}; } elsif ($a[5] =‾ /^server_child/) { $pid = $a[6]; delete $ip {$pid}; delete $user {$pid}; } } close LOG; open (PS, "ps -ae -o user,group,pid,rss,stime,time,fname|") || die "Can't fork ps: $!"; $_ = ; chop; printf "%-57s %s¥n", $_, "HOST"; while ( ) { next if /^ root / || !/afpd$/; chop; @a = split(' '); $pid = $a[2]; $packip = pack ('C4', split (/¥./, $ip{$pid})); ($name, $rest) = gethostbyaddr ($packip, AF_INET); printf "%-57s %s¥n", $_, $name; } close PS;
SAMBAと同時に使いたい、という方は少なからずいると思います。ここではNetatalkと一緒に使うためのsmb.confファイルで設定するためのパラメータを列挙します。Sambaは1.9.18p5以降を想定しています。
Windows 95/98だけのネットワークでしたら暗号化パスワードに気を付ければSAMBAは動いてくれると思いますが、NTがドメインマスターをしているような場合は以下のように設定した方が良いでしょう。
ここで注意! SambaとNetatalkはお互い相手がどのファイルを使っているのかを知る術を持ちませんので、アクセスが競合した場合はファイルが壊れてしまうこともあり得ます。運用には十分注意して下さい。Samba2.0ではこの辺が改良されて来ると期待していましたが、--with-netatalkオプションをつけてビルドしてもnetatalk.cはコンパイルされませんね。netatalk.c自体も、ファイル/フォルダの削除や移動の際にリソースフォークを一緒に操作する程度のものでしかなさそうなので、ちょっとがっかりです。