レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
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 ファミリー」            │
│     熊野 善康著、 ソフトバンク                                     │
└──────────────────────────────────┘

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/