netatalk で AppleTalk トラブル記 (未解決)
TROUBLE REPORT
AppleTalk と netatalk
AppleTalk は、主に Apple Macintosh のネットワークで使用されているプロトコルです。このプロトコルを使って、Macintosh 同士が通信しあって、AppleShare などでファイルを共有しあっています。
その Apple ネットワークに Linux 介入するためには、Linux 自身も AppleTalk を使って Macintosh と会話をする必要があります。
AppleTalk は Linux Kernel のコンパイル時に組み込むことができます。そして、netatalk というソフトウェアを使って、Macintosh に対して、共有できるフォルダがあることを知らせることができるようになります。
通信環境
今回の通信環境はちょっとばかし特殊です。
基本的にハードウェアは1台。
-- Apple Macintosh G4 --
OS MacOS 9 CPU PowerPC G4 450MHz x 2 MEMORY 128MB x 4 = 512MB
この Macintosh に、Connectix 社の Virtual PC 3.0.3 をインストールして、Virtual PC 3.0.3 上の Vine Linux 2.1 と AppleTalk してしまおうというものです。
-- Virtual PC 3.0.3 --
OS Vine Linux 2.1 CPU ConnectixCPU ( Intel Pentium 互換 ) 000MHz ? MEMORY 111MB
Virtual PC の IP アドレス割り当て方法は、独自の IP を使用するようになっています。
Macintosh 自体にはいわゆる、固定 IP ( static ip ) が割り当てられていて、Vine Linux では、DHCP サーバによって、自動的に IP アドレスが割り当てられる ( dynamic ip ) を使用しています。
AppleTalk DDP の組み込み
Vine Linux 2.1 が標準で AppleTalk を組み込んでいたかは覚えていません。というわけで、せっかくですので カーネルの再構築というものを、Vine Linux でもやってみることにしましょう。
簡単に言うと、カーネルの再構築は、Linux のソースファイルが保存されているディレクトリ上で、make コマンドによって行います。
ちなみに、カーネルの再構築は危険が伴いますので気をつけましょう。
慣れてしまえばなんてことないのですが、慣れないと Linux が起動できなくなってしまってお手上げ状態になることも多々ありです。特に、とことんスリム化をねらうこだわり派初心者 (昔の自分) の場合は、これでもかというくらい再起不能にしてしまいます。
というわけで、人の Linux、特に Server として本稼動しているようなコンピュータに、いきなりやるのはひかえておきましょう。せめて、起動しなくなってしまっても対処できるくらいの技量を身につけてから、やりましょう、人のマシンの場合は・・・。
まずは、
cd /usr/src/linux
と入力して、Linux のソースファイルが保存されているフォルダまで移動します。
make menuconfig
と入力すると、一応 GUI の設定画面が現れます。お好みの設定にあわせれば、理想の Linux の出来上がりです。今回は AppleTalk が目的ですのでそのことだけに注目してみます。
Networking options --->
<*> Appletalk DDP
Networking options の中の、Appletalk DDP という項目に、チェックマークをつけます。これで、カーネルレベルで AppleTalk が使用できるようになります。
他に、<M> というようにも設定できますが、これはモジュールとして AppleTalk を導入するという指定です。モジュールとして導入した場合、必要に応じて AppleTalk モジュールを Linux へ組み込む必要があります。お好みに合わせて選びましょう。
今回は、<*> でいきます。
もう一箇所だけ個人的に設定を変更しておきたい場所があります。
それは、Processor type and features の中の、Processor family です。別に今回の話題とは関係ないのですけど、せっかくカーネルを再構築するのですから、適切な CPU 用にコンパイルしてもらいましょう。
Virtual PC 3.0.3 の場合、ConnectixCPU は、Intel MMX Pentium 互換の CPU ですので、Pentium/K6/TSC を選択します。ちなみに、Pentium は Math emulation 内蔵のようなので、そちらのチェックも不要なはず・・・。
とりあえず、設定はこの程度でいいでしょう。
< Exit > で抜け出していって、最後の Do you wish to save your new kernel configuration? という問いに対して、< Yes > を選択して変更情報を保存します。
コマンドラインへ復帰したら、いよいよカーネルの再構築です。
make dep
make clean
make
というように、コマンドを実行していきます。
make コマンドは非常に時間がかかります。特に Virtual PC の場合、コーヒーブレークどころか、だんらんまでできてしまいそうな感じです。
モジュールの設定を変更した場合はさらに、
make modules
make modules_install
depmod -a
というようなコマンドも実行する必要があるようです。
さて、コンパイルが終わったら、ブートイメージを書き出しておきましょう。
make bzlilo
LILO ブートローダ用のブートイメージ作成です。このコマンドを実行すると、/vmlinuz というファイルが作成されます。これが新しいブートイメージです。
さて、Vine Linux 2.1 の場合、もうすこし設定が必要です。
インストール直後のブートイメージは、/boot/vmlinuz-2.2.17-0vl10 として LILO に登録されています。
上記で作られたブートイメージは、/vmlinuz という違う場所に書き出されるので、LILO に新しいブートイメージの場所を伝えておく必要があります。
/etc/lilo.conf というファイルに次のような行を追加しましょう。
image=/vmlinuz
label=newlinux
read-only
root=/dev/hda1
ここで、root=/dev/hda1 の部分は、インストール方法によって変わってきますので、他の部分を参考に設定しましょう。これで、新しい /vmlinuz をブートイメージとする、newlinux の設定が完了です。
あとは、lilo というコマンドを実行して、設定を有効にします。
再起動をしてみると、起動直後の選択画面で、linux か、newlinux かが選べるようになっていると思います。ここで、newlinux を選択すれば、カーネルを再構築した Linux が起動します。
正常に起動できれば、たぶん AppleTakl DDP の組込みは完了です。うまくいかない場合は、linux の方のブートイメージをつかって、いろいろと設定を変えて再構築しなおしてみてください。
netatalk のコンパイルは失敗…
まずは netatalk をダウンロードすることにします。
http://www.umich.edu/~rsug/netatalk/ からダウンロードすることができます。今回は、Obtaining netatalk から、netatalk-1.3.3.tar.gz をダウンロードしてみました。
netatalk-1.3.3.tar.gz を /usr/src/ ディレクトリへ移動して、
cd /usr/src/
tar xvzf netatalk-1.3.3.tar.gzとして、アーカイブ (圧縮ファイル) を展開します。すると、netatalk-1.3.3/ というディレクトリが作成されますので、そのディレクトリ内へ移動します。
cd netatalk-1.3.3/
そして、
make
しかしながら、途中で bytesex.h というヘッダファイルが見つからないということで、コンパイルが途中で中断されてしまいます。
調べてみると、Red Hat 系の Linux では、patched_afpd_1_0.tar.gz というパッチを当てないと、コンパイルすらまともにできないということです。
ということで、とりあえず、このパッチをダウンロードしてみようと思ったのですが、netatalk-1.4b2 用であるということと、いろいろと探し回ってけれど、どこもリンクが途切れていることから、断念してしまいました。
その途中で見つけた netatalk-1.4b2+asun2.1.3.tar.gz が、どうもコンパイルできそうな感じだったので、そちらに乗り換えてみます。ftp://ftp.cobaltnet.com/pub/users/asun/release/ からダウンロードすることができました。
tar xvzf netatalk-1.4b2+asun2.1.3.tar.gz
と入力して圧縮ファイルを展開すると、netatalk-1.4b2+asun2.1.3 という名前のディレクトリが出来上がりますので、
cd netatalk-1.4b2+asun2.1.3/
と入力して、展開されたディレクトリの中へ入ります。
このままコンパイルしても、途中で des.h がないというメッセージが表示されてしまいました。どうやら DES 系のライブラリが必要なようです。ftp://ftp.psy.uq.oz.au/pub/Crypto/DES/ から、libdes.tar.gz をダウンロードして、まずはそれをインストールすることにしました。
libdes.tar.gz を /usr/src/ へダウンロードして、
cd /usr/src/
tar xvzf libdes.tar.gzとして展開します。展開後、des/ というディレクトリが出来上がりますので、
cd des/
makeとして、コンパイルをおこないます。次はインストール作業ですが、Vine Linux 2.1 には、/usr/local/include/ というディレクトリが無いようなので、それをつくってからのインストールです。
mkdir /usr/local/include/
make installこれでインストール完了です。
ふたたび、netatalk-1.4b2+asun2.1.3/ ディレクトリへ戻ります。他にもいくつか変更箇所があるようなので、それをやってしまうことにします。
/usr/src/netatalk-1.4b2+asun2.1.3/Makefile
このファイルの中の、PAMDIR=/usr の部分をコメントアウトします。
# PAMDIR=/usr
/usr/src/netatalk-1.4b2+asun2.1.3/sys/linux/Makefile
この中の、AFPLIBS=-lrpcsvc という行をコメントアウトします。
# AFPLIBS=-lrpcsvc
/usr/src/netatalk-1.4b2+asun2.1.3/etc/afpd/Makefile
Vine Linux 2.1 は shadow password を使用していますので、この中の CFLAGS= という部分を修正します。一番最後の部分に、-DSHADOWPW と付け加えます。
CFLAGS= ${DEFS} ${AFSDEFS} ${KRBDEFS} ${DESDEFS} ${OPTIONS} ${INCPATH} ${PAMDEFS} -DAPPLCNAME -DSHADOWPW
修正が済んだら、ふたたび
cd /usr/src/netatalk-1.4b2+asun2.1.3/
make depend
make clean
make
を実行してみます。
今度はリンカがエラーを出している様子。とりあえず、/usr/src/netatalk-1.4b2+asun2.1.3/Makefile の中の、DESDIR=/usr/local, TCPWRAPDIR=/usr PAMDIR=/usr の全部をコメントアウトしてみる事にします。
make clean; make
そうすると、今度は crypt 関数が auth.o の中で実体がないようなお話しです。ここはすこし、強引に crypt 関数を実装させてみましょうか・・・。
/usr/src/netatalk-1.4b2+asun2.1.3/etc/afpd/Makefile の 101 行目、
afpd : ${OBJ} ../../libatalk/libatalk.a
${CC} ${CFLAGS} ${LDFLAGS} -o afpd ${OBJ} ${LIBDIRS} ${LIBS}
ここの、一番最後に -lcrypt とつけてみます。すると、なんとか crypt がないというエラーはでなくなりましたが、やっぱり xdr_getquota_rslt がないなどをいわれてしまいます。
これはもはや、RPM に頼るしかないかも・・・。
RPM でのインストール
Vine Linux は、RedHat 系のディストリビューションであるということで、RedHat のサイトの RPM に頼ってみることにします。
ダウンロードのページへ行って、Find Latest RPMs のキーワード欄に、netatalk と入力して、[Search] をかけてみます。すると、7つほど netatalk 関連の RPM が見つかったようです。
今回はそのなかから、netatalk 1.4b2+asun2.1.3 - 7 という、Red Hat, Inc. が提供しているものをダウンロードしてみることにします。
netatalk-1.4b2+asun2.1.3-7.i386.rpm
をダウンロードします。
rpm -i netatalk-1.4b2+asun2.1.3-7.i386.rpm
としてインストール完了?
warning: The DDP services appear to be present in /etc/services.
warning: Please check them against services.atalk in the documentation.とでましたが、特にエラーはないようです・・・。man atalkd によると、設定ファイルは /etc/atalk/ のなかにあるようです。
atalkd.conf ファイルに eth0 と書き込んで、/etc/rc.d/init.d/atalk start として netatalk を起動してみましたが、どうやら Macintosh からは見つけることができませんでした。
非 Virtual PC で試してみる
いきなり Virtual PC 上でやるのも問題だったのかもしれないので、感覚をつかむために普通の PC で netatalk を実験してみることにしました。
-- Dell DIMENSION XPS H266 --
OS Vine Linux 2.1 CPU Pentium II 266MHz MEMORY 96MB (ECC) Vine Linux 2.1 をインストールしてまず感じたことは、インストールにかかる時間が Virtual PC よりも物理コンピュータ の方が、圧倒的にはやいということです。Pentium II 266MHz のコンピュータなのに、ここまで違うとは・・・。
当然ながら、インストール後の使用でもその圧倒的な差は感じます。
さて、Virtual PC の時と同様、RedHat のサイトから RPM をダウンロードして、同じ方法でインストールしてみました。やっぱり同じ Warning が表示されますね。
/etc/atalk/ の中の atalkd.conf に eth0 と書き込んで、/etc/rc.d/init.d/atalk start として netatalk を起動してみることにします。
すると・・・、セレクタに localhost の文字が・・・。
どうやらうまくいってしまった模様・・・。
再び Virtual PC にて
もう一度、Virtual PC にて試してみることにします。物理コンピュータ の時と同様の設定にしてみたのですが、やっぱりうまくいきません。Virtual PC で IP を共有するように設定したりしましたがだめなようです。
もしかして、いろいろと環境を整えていた時点でおかしくしてしまったのでしょうか・・・。ということで、ふたたびまっさらの状態の Vine Linux 2.1 を Virtual PC 3.0.3 へ復元してみることにしました。
インストールが終わって、さっそく、先ほどの物理コンピュータと同様に、RPM をダウンロードしてきてインストールを行ってみます。
さて、どうなったでしょう。
・・・、セレクタを開いてみましたが、まったく認識されないようです。Virtual PC の Linux にはつなげられないのでしょうか・・・。
念のため、もういちど、共有 IP モードでやってみました。しかしながら、自動的に認識されることはないし、IP アドレスを指定してもだめでした。
別の Macintosh で接続
どうしてもだめそうな感じだったのですが、念のため Virtual PC が稼動しているのとは別の Macintosh から AppleTalk で接続してみることにしました。
別の PowerMac G3 を起動して、セレクタを開いてみます。すると、なんと Vine Linux が正常に認識されているではありませんか。どうやら、同一コンピュータ上の、Macintosh が Linux へ接続しようとしたのがうまくいかなかったようです。
ふと、そのとき、セレクタ上に Vine Linux だけではなく、Virtual PC が稼動しているコンピュータ自体も認識されていることに気がつきました。もしかすると、両方とも AppleTalk でファイル共有を提供していたためにぶつかっているのかもしれません。
ということで、Macintosh の方のファイル共有を停止してみることにしました。が、結果はかわらず。
断念
結局、同一コンピュータ上で、Macintosh と Virtual PC 上の netatalk とで通信することはできませんでした。
他のコンピュータがどちらにも接続できるのを考えると、Macintosh と Virtual PC でネットワークアダプタを特別な方法で共有しているのかもしれませんね。