Linux で CAP を使う mini-HOWTO 衛藤誠司 seto@slip.net 1997年5月12日 CAP とは、The Columbia AppleTalk Package の略称で、一言で言うと Unix Box にマックの通信プロトコルである AppleTalk を理解させるソフトウェアで ある。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table of Contents 1. 免責 2. CAP とは? 3. ソースの取得とコンパイル 4. CAP のコンポーネント 5. CAP の起動 6. ファイル・サーバの構築 7. プリンタ・サーバの構築 8. 最後に 9. 参考文献 1. 免責 この文書の内容は、正しい手順の作業の上でのみ信頼できるものになると思わ れるが、この文書の内容に起因する損害が出たとしてもその責任は、著者には ないということを承諾しておいていただきたい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. CAP とは? CAP とは、The Columbia AppleTalk Package の略称で、一言で言うと Unix Box にマックの通信プロトコルである AppleTalk を理解させるソフトウェアで ある。また名前からも分かるように、このソフトウェアは、コロンビア大学に よって開発されたものである。それでこのパッケージを使って何ができるのか というと、まずマックのためのファイル・サーバの構築、AppleTalk を使った プリンタ・サーバの構築、マック・ワークステーションとのインタラクティブ な通信、Post Script プリンタへのプリント・ジョブの送信、そして PostScript プリンタとのインタラクティブな通信などがある。個人的に筆者は 、プリンタとの双方向でのやりとりができるという点で、最後の Post Script プリンタとのインタラクティブな通信というのに非常に旨味を感じる。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. ソースの取得とコンパイル あいにく CAP は、バイナリでの配布は行われていないため、各自ソースをダウ ンロードし、コンパイルしなければならない。CAP のソースは、様々なサイト から FTP を使ってダウンロードできる。次に示すサイトは、ほんの一例にすぎ ない: ┌──────────────────────────────────┐ │ ftp://munnari.OZ.AU/mac │ │ ftp://gatekeeper.DEC.COM/pub/net/appletalk/cap │ │ ftp://ftp.kuis.kyoto-u.AC.JP/net/cap │ │ ftp://ftp.crl.go.jp/archives/mac/kdd-mac/Network/cap60 │ └──────────────────────────────────┘ まず、上記のサイトから cap60.plNNN.tar.Z を取得し、解凍する: # compress -d cap60.plNNN.tar.Z # tar xf cap60.plNNN.tar 現在 cap60.patch198 までのパッチが出ているので、それらを使ってパッチレ ベルを上げる。個々のパッチについては、cap60 の再上位のディレクトリで: # patch -p < cap60.patchNNN とするのだが、CAP には、前にも述べたように非常にたくさんのパッチが出て いるため、次のようなスクリプトで対応する: #!/bin/zsh setopt numeric_glob_sort for i in cap60.patches/cap60.patch* patch -p < $i >>& /tmp/patches さらに Linux 用パッチ linux.iptalk.patch を当てる。これでコンパイルでき る状態になったはずだ。まず # ./Configure として独自のシステムの環境に合わせる。ここでは、プログラムがいろいろと 聞いてくるが、デフォルトのままで大丈夫のようだ。次に以下のコマンドで、 各ディレクトリ毎の Makefile を作る: # ./gen.makes さらに # make include でヘッダファイルをインストールする。そして # make libsmade とし、CAP 用ライブラリの生成に取り掛かる。それが終ったら本題の CAP 各種 プログラムのコンパイルだ。 # make programs 一応何もなければ、すんなりとコンパイルしてくれるはずだ。最後に # make install とし、各種プログラムをインストールする。すると /usr/local/capというディ レクトリに make で作られたプログラム群が置かれる。また IPTalk を使用す る場合には、/etc/servives に NIC の設定に対する次のエントリを忘れずに行 なっておこう: at-rtmp 201/udp at-nbp 202/udp at-echo 204/udp at-zis 206/udp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. CAP のコンポーネント 次に筆者の CAP のディレクトリを紹介しよう。 /usr/local/cap ./ ash atlooklws capd iwpr papof* ../ atis atpinger getzones lwpr papstatus .banner atistest aufs instappl ntxjif* rc.cap* afpvols atlook canonif* isrv papif* tlw 注意: * 印の付いていないファイルは、make install をした後に自動的に 置かれるもので、* 印の付いたファイルは後からコンパイルし、持ってき たもの、あるいは自分で作成したものである。 以下は、各々のファイルについての説明である: ┌──────────────────────────────────────┐ │ .banner ... バナー・ファイル。 │ │ afpvaols* ... aufs を起動する際に使うコンフィギュレーション・ファイル。 │ │ ash ... AppleShare サーバーへのログインや対話的な通信を可能にす │ │ るプログラム。 │ │ atis ... AppleTalk Information Server の略で、AppleTalk での通信 │ │ を可能にする。 │ │ atistest ... atis が正常に動いているかどうかを検証するプログラム。 │ │ atlook ... ゾーン内でのサービスを一覧表示するプログラム。 │ │ atlooklws ... ゾーン内での LaserWriter を一覧表示するプログラム。 │ │ atpinger ... ゾーン内のサービスに対して ping を行ない、それらのサービ │ │ スの状態を調べるプログラム。 │ │ aufs* ... AppleTalk file protocol UNIX File Server。AppleShare サー │ │ バーを構築するプログラム。 │ │ canonif* ... 任意のプリンタに対するフィルタ。 │ │ capd ... CAP デーモン。各機器の物理的アドレスをインタプリットする。 │ │ getzones ... アクセスできるゾーンを一覧表示するプログラム。 │ │ instappl ... アプリケーションをインストールする際に使われるらしいのだ │ │ が、筆者は、使用したことがないので分からない。 │ │ isrv ... printcap に登録されているプリンタに対して印刷物を出力する │ │ 際に用いるコマンド。 │ │ iwpr ... printcap に登録されていないプリンタに対して印刷物を出力す │ │ る際に用いるコマンド。 │ │ ntxjif* ... 任意のプリンタに対するフィルタ。 │ │ papif* ... LaserWriter プリンタ用入力/通信フィルタ。 │ │ papof* ... LaserWriter プリンタ用出力/バナー・フィルタ。 │ │ papstatus ... プリンタの印刷状態を見るプログラムらしいのだが、筆者には、 │ │ 使用方法が分からない。 │ │ rc.cap* ... CAP を起動する際に用いるスクリプト。 │ │ tlw ... 特定の LaserWriter にアクセスし、PostScript インタプリタ │ │ を起動することのできるプログラム。 │ └──────────────────────────────────────┘ なお前述のように一連の make だけでは、aufs、papif、papof などのプログラ ムやフィルタは、コンパイル、インストールしてくれないので、後に自ら CAP60 の再上位ディレクトリ /applications の下の aufs や papif のディレ クトリの中で、各プログラムをコンパイルして /usr/local/cap のディレクト リにそれらのファイルを持って来なければならない。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5. CAP の起動 CAP の起動は、手動で行なってもよいのだが、以下のようなスクリプトで起動 させると便利である。 /etc/rc.d/rc.local に次のようなステートメントを加える: # # start AppleShare server # if [ -f /usr/local/cap/rc.cap ]; then /usr/local/cap/rc.cap fi #----End of /etc/rc.d/rc.local---- # /usr/local/cap/rc.cap : #!/bin/sh echo "CAP server starting." /usr/local/cap/capd eth0 "hogehoge zone" /usr/local/cap/atis /usr/local/cap/aufs -l /var/log/aufs.log -n `hostname` \ -U 10 -G guest -V /usr/local/cap/afpvols #----End of /usr/local/cap/rc.cap---- CAP デーモンを起動させる capd コマンドは、第一引数にネットワーク・イン ターフェースのデバイス名、第二引数は、CAP を動かしたいゾーン名を指定す る。この場合、ネットワーク・インターフェースに対するデバイス名は、eth0 、ゾーン名は、hogehoge zone となっているが、各自の環境に合わせて変えて いただきたい。なおゾーン名の中にスペースが入っている場合は、上記のよう に " (ダブル・クォーテーション)で囲んで記述する。プロンプトが返ってき たら、成功ということである。さらにこのコマンドを発行すると /etc のディ レクトリに etalk.local という EtherTalk のダイナミック・コンフィギュレ ーション・ファイルができる。これも成功の目安にする。 etalk.local ファイルの例: # # EtherTalk dynamic configuration data # # Last update: Tue Apr 29 18:20:44 1997 # # Generated by Kernel AppleTalk # interface "eth0" netRangeStart 15.160 netRangeEnd 15.160 thisNet 15.160 thisNode 52 thisZone "hogehoge zone" bridgeNet 15.160 bridgeNode 167 bridgeIP 127.0.0.1 nisNet 15.160 nisNode 52 asyncNet 0.00 asyncZone "" # ----End of etalk.local---- なお /usr/local/cap/rc.cap ファイルの中の aufs コマンドについては、後述 の「ファイル・サーバの構築」の項で説明する。次に atis が、正常に動いて いるかどうかを atistest というコマンドを使って検証する。次のような出力 があれば、正常に動いているということだ。 ┌───────────────────────────────────┐ │ # atistest │ │ CAP distribution 6.00 using Kernel Based EtherTalk encapsulation, │ │ June 1996 Copyright (c) 1986,1987,1988 by The Trustees of Columbia │ │ University in the City of New York │ │ │ │ abInit: [ddp: 15.160, 136], [GW: 15.160, 165] starting │ │ debugging NBP │ │ Registering "atis test:testing@*" │ │ NBP SndNBP: sending │ │ NBP nbp_timeout: 4 tick timeout on -1073743660, 3 remain │ │ NBP SndNBP: sending │ │ NBP nbp_timeout: 4 tick timeout on -1073743660, 2 remain │ │ NBP SndNBP: sending │ │ NBP nbp_timeout: 4 tick timeout on -1073743660, 1 remain │ │ NBP SndNBP: sending │ │ NBP nbp_timeout: 4 tick timeout on -1073743660, 0 remain │ │ NBP SndNBP: sending │ │ NBP status done: found -1073743660 │ │ Okay │ └───────────────────────────────────┘ さてこれで各種 CAP プログラムを走らせるためのお膳立てができた訳だ。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6. ファイル・サーバの構築 今度は、マック用ファイル・サーバの構築である。これを行なうには、 aufs というコマンドを用いる。 # aufs -l /var/log/aufs.log -n `hostname` -U 10 -G guest \ -V /usr/local/cap/afpvols aufs には、20程のコマンド・オプションがあるが、普通使うのは、上記のステ ートメントの中で使っているものぐらいであろう。以下に各オプションについ ての説明を示す: ┌──────────────────────────────────┐ │ -l ... ログ・ファイル名を指定する(デフォルトは.log ) │ │ -n ... サーバ名を指定する。デフォルトは、 Aufs。 │ │ -U ... 一度に行なえるセッションの数を指定する。 │ │ -G ... ゲスト・ログインを許可する。この場合、サーバ側に │ │ guest アカウントが必要である。 │ │ -V ... アクセスするボリュームを記述しておくファイル名を指定 │ │ する。 │ └──────────────────────────────────┘ afpvols ファイルの例: # # This is an example of Apple Filing Protocol Volume file. # # Format: # path:volume name[:password][:] # /home/guest:Guest:: /home/seiji:Seiji:xxxxx: # ---- End of afpvols ---- AppleShare サーバが立ち上がるとマックの「セレクタ・ダイアログ」の「ファ イルサーバの選択」のリスト・ボックスにサーバ名が現れるはずである。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7. プリンタ・サーバの構築 さて今度は、プリンタ・サーバの構築である。これは、CAP と lpd の組み合わ せで、ゾーン内の AppleTalk で繋がっている PostScript プリンタに自由にプ リント・ジョブを送るというものである。さらに lpd のリモート機能を使えば 、CAP がインストールされていない Unix Box からでも、CAP がインストール されている Linux Box 経由でプリント・ジョブを PostScript プリンタに送る ことができる。まず最初に atlooklws というコマンドで特定のゾーンの中で使 用できる PostScript プリンタを一覧表示させてみよう。以下のような出力が 得られるはずだ。 # atlooklws "hogehoge zone" abInit: [ddp: 15.160, 228], [GW: 15.160, 167] starting Looking for =:LaserWriter@SJ TW 8 ... 1 - ATM Dev IIg:LaserWriter@* [Net: 15.161 Node: 83 Skt:191] ---status: idle Address confirmed for socket 191 2 - Apple LaserWriter IINTX_J:LaserWriter@* [Net: 15.161 Node:221 Skt:169] ---status: idle Address confirmed for socket 169 3 - Canon Lasershot B406GII_J:LaserWriter@* [Net: 15.161 Node:202 Skt:128] ---status: idle Address confirmed for socket 128 4 - Centaur (fonts LWII-NTX):LaserWriter@* [Net: 15.161 Node:153 Skt:234] ---status: idle Address confirmed for socket 234 5 - Cheque:LaserWriter@* [Net: 15.161 Node:167 Skt:191] ---status: idle Address confirmed for socket 191 6 - EPSON LP-8200PS2:LaserWriter@* [Net: 15.161 Node:172 Skt:128] ---status: idle 今度は、特定のプリンタにアクセスして、PostScript インタプリタを起動させ てみよう。それは、tlw というコマンドで行なう。 # tlw "Canon Lasershot B406GII_J:LaserWriter@*" abInit: [ddp: 15.160, 228], [GW: 15.160, 167] starting Starting session with Canon Lasershot B406GII_J:LaserWriter@* %no status status: idle Okay PostScript(r) Version 2013.115 (c) Copyright 1984-1994 Adobe Systems Incorporated. Typefaces (c) Copyright 1981 Linotype-Hell AG and/or its subsidiaries. All Rights Reserved. PS> showpage 次にこのプリンタに何か PS ファイルを送り、プリントしてみる。 # lwpr -p "Canon Lasershot B406GII_J:LaserWriter@*" temp.ps abInit: [ddp: 15.160, 228], [GW: 15.160, 167] starting Status: status: idle status: idle Sending temp.ps これで印刷が可能かどうか分かったら、次に lpd と連係して PostScript プリ ンタに AppleTalk を介してプリント・ジョブを送り、印刷させるための設定に 入る。まず、/etc ディレクトリに cap.printers というゾーン内の PostScript プリンタの名前を定義するファイルを以下のようにして作る。 # # /etc/cap.printers # ntxj=Apple LaserWriter IINTX_J:LaserWriter@* canon=Canon Lasershot B406GII_J:LaserWriter@* # ---- End of /etc/cap.printers ---- 次に printcap を環境に合わせて編集する。 # /etc/printcap # # Please don't edit this file directly unless you know what you are doing! # Be warned that the control-panel printtool requires a very strict format! # Look at the printcap(5) man page for more info. # # This file can be edited with the printtool in the control-panel. ##PRINTTOOL## LOCAL PostScript 300x300 a4 1 lp:\ :sd=/var/spool/lpd/lp:\ :lp=/dev/lp1:\ :sh:\ :mx#0:\ :if=/var/spool/lpd/lp/filter: ## Remote PostScript Canon Laser Shot B-406G II lp|canon|Canon Lasershot B406GII_J:\ :lp=/dev/canon:\ :sd=/var/spool/lpd/canon:\ :pl#72:pw#85:\ :sf:\ :mx#0:\ :lf=/var/spool/lpd/canon/canon-lpd-errs:\ :af=/var/spool/lpd/canon/canon-lpd-acct:\ :if=/usr/local/cap/canonif:\ :of=/usr/local/cap/papof: # ---- End of /etc/printcap ---- 次に特定のプリンタに対するデバイス・ポートを作る。 # touch /dev/canon # chmod 660 /dev/canon 次は、特定のプリンタに対するスプール・ディレクトリやバナー・ファイルを 作る。 # mkdir /var/spool/lpd # mkdir /var/spool/lpd/canon # touch /var/spool/lpd/canon/.banner # chmod daemon.daemon /var/spool/lpd/canon/.banner 続いてログ・ファイルの作成である。 # touch /var/spool/lpd/canon/canon-lpd-errs # touch /var/spool/lpd/canon/canon-lpd-acct 最後に特定のプリンタのためのフィルター・ファイルを以下のようにして作る 。 #!/bin/sh # canonif - CAP Input filter for Canon Laser Shot B-406G II /usr/local/cap/papif -P canon $* # ---- End of /usr/local/cap/canonif ---- プリント・コマンドは、以下の通り: # lpr -Pcanon hogehoge.ps さて次に CAP がインストールされていない Unix Box (hogehoge2)から CAP が インストールされてある Linux Box (hogehoge1)経由でプリント・ジョブを printcap に登録してあるプリンタに送るための設定方法について記す。まず CAP がインストールされてある Linux Box の /etc ディレクトリに hosts.lpd というファイルを以下のように作る。 # hosts.lpd hogehoge2 さらに CAP がインストールされていない Unix Box の printcap を lpd のリ モート機能が使えるように次のように設定する。 # CAP がインストールされていない Unix Box の printcap lp|canon|:lp=:rm=hogehoge1:rp=canon: こうすることで、hogehoge2 から次のコマンドで hogehoge1 にプリント・ジョ ブを送ることができる。 # lpr -Pcanon hogehoge.ps ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8. 最後に これで CAP に関する全ての説明が終った。CAP をコンパイルし、導入してみて の感想は、Linux Box とマックや PostScript プリンタとのコミュニケーショ ンが意外に簡単にできてしまったということだ。また1つのパッケージでこん なに数多くのことができてしまうということは、少し驚きでもあるが、とても 素晴らしいことだと思う。また何だか得をしたようにも思う。このパッケージ を使って様々なアプリケーションの開発へと発展していくのだろう。そういう 意味で CAP というソフトウェアは、非常に優れたソフトウェアであると言えよ う。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9. 参考文献 ┌──────────────────────────────────┐ │ 1. CAP パッケージの README。 │ │ 2. CAP60/doc の中のドキュメント類。 │ │ 3. UNIX USER 1994 No. 10 「LaserWriter への出力のみならずも UNIX │ │ 上で AppleShare サーバーも実現する CAP ファミリー」 │ │ 熊野 善康著、 ソフトバンク │ └──────────────────────────────────┘