Linux で CAP を使う mini-HOWTO 著者:衛藤 誠司 seto@slip.net 1997年5月12日 目次 ---- 1. 免責 2. CAP とは? 3. ソースの取得とコンパイル 4. CAP のコンポーネント 5. CAP の起動 6. ファイル・サーバの構築 7. プリンタ・サーバの構築 8. 最後に 9. 参考文献 免責 ---- この文書の内容は、正しい手順の作業の上でのみ信頼できるものにな ると思われるが、この文書の内容に起因する損害が出たとしてもその 責任は、著者にはないということを承諾しておいていただきたい。 CAP とは? ----------- CAP とは、The Columbia AppleTalk Package の略称で、一言で言う と Unix Box にマックの通信プロトコルである AppleTalk を理解さ せるソフトウェアである。また名前からも分かるように、このソフト ウェアは、コロンビア大学によって開発されたものである。それでこ のパッケージを使って何ができるのかというと、まずマックのための ファイル・サーバの構築、AppleTalk を使ったプリンタ・サーバの構 築、マック・ワークステーションとのインタラクティブな通信、Post Script プリンタへのプリント・ジョブの送信、そしてPostScript プ リンタとのインタラクティブな通信などがある。個人的に筆者は、プ リンタとの双方向でのやりとりができるという点で、最後の Post Script プリンタとのインタラクティブな通信というのに非常に旨味 を感じる。 ソースの取得とコンパイル ------------------------ あいにく 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 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 のディレクトリ にそれらのファイルを持って来なければならない。 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 プログラムを走らせるためのお膳立てができ た訳だ。 ファイル・サーバの構築 ---------------------- 今度は、マック用ファイル・サーバの構築である。これを行なうには、 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 サーバが立ち上がるとマックの「セレクタ・ダイアロ グ」の「ファイルサーバの選択」のリスト・ボックスにサーバ名が 現れるはずである。 プリンタ・サーバの構築 ---------------------- さて今度は、プリンタ・サーバの構築である。これは、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 最後に ------ これで CAP に関する全ての説明が終った。CAP をコンパイルし、導入 してみての感想は、Linux Box とマックや PostScript プリンタとの コミュニケーションが意外に簡単にできてしまったということだ。ま た1つのパッケージでこんなに数多くのことができてしまうというこ とは、少し驚きでもあるが、とても素晴らしいことだと思う。また何 だか得をしたようにも思う。このパッケージを使って様々なアプリケ ーションの開発へと発展していくのだろう。そういう意味で CAP とい うソフトウェアは、非常に優れたソフトウェアであると言えよう。 参考文献 -------- 1. CAP パッケージの README。 2. CAP60/doc の中のドキュメント類。 3. UNIX USER 1994 No. 10 「LaserWriter への出力のみならずも UNIX 上で AppleShare サーバーも実現する CAP ファミリー」 熊野 善康著、 ソフトバンク