次のページ 前のページ 目次へ

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 ... ログ・ファイル名を指定する(デフォルトは<servername>.log )
-n ... サーバ名を指定する。デフォルトは、<hostname> 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 ファミリー」
   熊野 善康著、 ソフトバンク

次のページ 前のページ 目次へ