設定スクリプトは実行したいPPxPのコマンドを列挙した書式になっています。 ただし、#で始まる行はコメント行と解釈されます。また、1行を1つの処 理として扱いますが、行末に\を補うことによって次の行もその続きとし て扱うようになります。
# This is a sample
set MODE passive
set LOG.LEVEL phase fsm \
timer
設定スクリプトは/usr/local/etc/ppxp/conf(システム設定ディレクトリ)以下に置かれる システム設定スクリプトと、~/.ppxp/conf(ユーザー設定ディレクトリ) に置かれるユーザー設定スクリプトの2種類があります。書式は全く同じです が、システム設定スクリプトはroot権限で処理されるのに対して、ユーザー設 定スクリプトは一般ユーザー権限で処理されます。なお、両方のディレクトリ に同じ名前のスクリプトが存在する場合は、ユーザー設定ディレクトリが優先 されます。また、PPxPのユーザーがrootの場合はユーザー設定ディレクトリは システム設定ディレクトリと同じになります。
新しく作成したスクリプトは原則的にユーザー設定ディレクトリに置いてくだ さい。また、そのスクリプトの中に全ての設定を記述するのではなく、システ ム設定ディレクトリにある既存のスクリプトをsourceコマンドで取り込みなが ら変更部分だけを記述するようにすると良いでしょう。例えば、モデムを使う 場合、システム設定ディレクトリのmodemスクリプトを参照する形で記述しま す。
# modem -> serial -> serial.os
source modem
set LINE /dev/ttyS1
set DIAL.LIST 123456
このようにmodemスクリプトを読み込むことで、serialスクリプト、そして serial.osスクリプトが間接的に読み込まれます。モデムやターミナルアダプ タではシリアルインターフェイスを使いますが、そのデバイスのロックファイ ルを作成しておく必要があります。しかし、その設定を行う変数SERIAL.LOCK はroot権限でなければ変更できません。そこで、serial.osスクリプトを読み 込むことによってこの変数を設定しているのです。
スクリプト内ではPPxPの内部コマンド以外に外部コマンドを呼び出すこともで きます。スクリプトの実行権限によって外部コマンドの呼び出し方が異なりま す:
カレントディレクトリを/tmpに移し、環境変数PATHに ~/rc:/usr/local/etc/ppxp/rcが設定されます。外部コマンド名が相対パスで指定 されている場合はまず~/rcを補って実行可能なファイルを探します。そ して、見付からなければ/usr/local/etc/ppxp/rcを補って試みます。
カレントディレクトリを/tmpに移し、環境変数PATHに/usr/local/etc/ppxp/rcが設定され ます。外部コマンド名が相対パスで指定されている場合は/usr/local/etc/ppxp/rcを補っ て実行可能なファイルを探します。外部プログラムもroot権限で動作します。 したがって、外部コマンドを呼び出すシステム設定スクリプトの作成には十分 注意してください。
外部コマンドからは環境変数PPXP_PHASEを介してPPxPの状態を確認することが できます。
システムおよびユーザーの設定ディレクトリにあるipサブディレクトリに置か れる設定スクリプトをIPスクリプトと呼びます。IPスクリプトは変数 IP.UP/IP.DOWNや変数IP.START/IP.STOPに指定することにより、IPレベルでの 状態変化にともなって自動的に処理されます。変数IP.UP/IP.DOWNは接続/切断 時と自動モードの切替え時に呼び出されます。主にネットワークインターフェ イスと経路制御テーブルの設定を行うためのスクリプトです。変数 IP.START/IP.STOPは実際に接続/切断した時にのみ呼び出されます。接続と同 時に特定のコマンドを自動実行し、切断と同時に終了させるために使います。
+---------[DEAD]---------+ +---------[CONNECTED]---------+
|(connect) (auto on)| |(disconnect) /timeout/|
| V | |
| {IP.UP} +--------------+ |
+------------+ | |<-------------+
| V |
|<--------[AUTO]---------+ V
|/trigger/ (auto off)| {IP.STOP}
| | |
V V V
{IP.UP} {IP.DOWN} {IP.DOWN}
| | |
V V V
{IP.START} [DEAD] [DEAD]
|
V
[CONNECTED]
これらの変数で指定できるのはPPxPの設定スクリプトだけです。外部コマンド を呼び出す時にはリダイレクトやパイプなどシェルの機能が必要になることが あります。そこで、実行したい外部コマンドを呼び出すシェルスクリプトを用 意し、それを呼び出すPPxPスクリプトをこれらの変数に指定するようにすれば 便利でしょう。その場合、作成したシェルスクリプトはrcディレクトリに置く ようにしましょう。
rcディレクトリにはツールとしてstart/stopという2つのシェルスクリプトと そのサンプルとしてsendmail.rcおよびfetchmail.rcという2つのシェルスクリ プトを用意しています。例えば、接続時にメールキューをフラッシュしたいと しましょう。
/usr/sbin/semdmail -q
このような内容のIPスクリプトmyipstartを用意してそのファイル名を変数 IP.STARTに指定してもppxpdがこのスクリプトの終了を待つために通信が行わ れず、タイムアウトを待つことになるでしょう。そこで、次のような内容のシェ ルスクリプトmyflushqをrcディレクトリに作成します(実行属性をお忘れなく)。
/usr/sbin/semdmail -q &
そして、myipstartスクリプトの内容を次のように書き換えれば期待通りの働 きをするようになります。
myflushq
また、myipstartスクリプトの内容を次のようにすれば、rcディレクトリの startスクリプトとsendmail.rcスクリプトを利用して同じ処理をさせることが できます。
start sendmail
モデム情報ファイルはヘイズATコマンド互換モードを持つモデムやターミナル アダプタの情報をまとめたものです。PPxPのダイアラはこのファイルを参考に してモデムの初期化やダイアルを行います。IPスクリプトなどとは書式が異な りますのでご注意下さい。
パッケージにはいくつかのモデム情報ファイルが用意されています。standard ファイルはヘイズATコマンドの標準的な設定をまとめたもので、genericファ イルは現存のモデムで一般的な設定をまとめたものです。その他は特定機種、 もしくは特定シリーズの情報ファイルになっています。モデムの場合はほとん どの機種でgenericファイルがそのまま使えるでしょう。ターミナルアダプタ のようにいくつかの通信モードを持っている場合は適切なモードを使うように 専用の情報ファイルを用意しなければなりません。例えば、ABC社のTA123とい う機種ならば、次のような内容になります。
# PPxP mi file for ABC TA123
include standard
Name "ABC TA123"
MaxDTESpeed 115200
Initialize "AT$M=1H0E1"
IsdnDial "AT%B0ATD\p"
Isdn128Dial "AT%B1ATD\p"
HangUp "ATH0"
#で始まる行はコメントです。次の行はstandardファイルを参照するとい う意味になります。genericファイルも含め、これらの機種依存ファイルはす べてincludeコマンドを使ってstandardファイルを参照するように記述されて います。そして、その機種特有の設定のみを記述するようになっています。主 な設定項目はName, MaxDTESpeed, Initialize, HangUp, そしてダイアル文字 列です。MaxDTESpeedはモデムやターミナルアダプタの上限だけではなく、コ ンピュータ側の上限も考慮して設定して下さい。モデムは圧縮機能を内蔵して いますので、通信速度の3,4倍以上に設定するのが目安とされています。ター ミナルアダプタでは通信速度より2,3割大きめに設定できれば十分でしょう。
モデムに送出する際に変数などを参考にして別の文字列に展開されたり、特定 の処理を行ったりするコントロールシーケンスがいくつかあります。
100ミリ秒間待ちます。間に数字を入れるとその倍数時間になります。例えば、 \5dならば500ミリ秒です。
"\"に展開されます。
変数DIAL.NUMBERに展開されます。
改行コードに展開されます。
最近のターミナルアダプタでは同期-非同期変換機能によりISDNの能力を最大 限に活かせるようになっています。そこで、PPxPを使う時に確実にこのモード になるように初期化文字列Initializeを設定します。TA123では同期-非同期変 換モードにするためのコマンドが"AT$M=1"であり、それにハングアップコマン ド"ATH0"とエコーオンコマンド"ATE1"を加えて"AT$M=1H0E1"となります。PPxP ダイアラはモデムが正常に反応していることを確かめるために初期化文字列を 送信し、それに対してInitialEchoで指定した文字列が戻って来るかどうかを 調べます。したがって、初期化文字列には必ずエコーオンコマンドを含めるよ うにして下さい。また、この確認処理がネックになってダイアラが機能しない 場合はInitialEchoに空文字列("")を設定して下さい。
PPxPダイアラは変数DIAL.TYPEで指定された文字列の後ろに"Dial"を補った名 前を使ってモデム情報ファイルからダイアル文字列を捜し出します。例えば、 変数DIAL.TYPEにToneが設定されていると、情報ファイル内でToneDialに指定 されている文字列を使ってダイアルします。ここではIsdnDialとIsdn128Dial の2つのダイアル文字列を指定してあります。TA128では"AT%B1"により128Kで 接続するモードになるので、それを利用してIsdn128というダイアルタイプを 定義しているのです。