/etc/uucp/Systems ファイルには、uucico がリモートコンピュータとの通信リンクを確立するために必要な情報が入っています。これは、UUCP を構成するときに編集しなければならない最初のファイルです。
Systems ファイルの中の各エントリは、このホストが通信するリモートコンピュータを表します。1 つのホストについて複数のエントリがある場合もあります。付加的なエントリは、順番に試される代替通信パスを表します。さらに、UUCP のデフォルト状態では、/etc/uucp/Systems ファイルに含まれていないコンピュータがこのホストにログインできないようになっています。
Sysfiles ファイルを使用して、Systems ファイルとして使用されるファイルをいくつか定義できます。詳細は、「UUCP /etc/uucp/Sysfiles ファイル」で Sysfiles ファイルの説明を参照してください。
System-Name |
Time |
Type |
Speed |
Phone |
Chat-Script |
例 27-1 に、Systems ファイルのフィールドの例を示します。
System-Name Time Type Speed Phone Chat-Script Arabian Any ACUEC 38400 111222 Login: Puucp ssword:beledi |
このフィールドには、リモートコンピュータのノード名が入ります。TCP/IP ネットワークでは、これは、マシンのホスト名でも、/etc/uucp/Sysname ファイルによって UUCP 通信用として特別に作成した名前でもかまいません。「UUCP /etc/uucp/Systems ファイル」を参照してください。例 27-1 では、System-Name フィールドにはリモートホスト arabian に関するエントリが含まれています。
このフィールドには、リモートコンピュータを呼び出すことのできる曜日と時刻を指定します。Time フィールドの形式は次のとおりです。
daytime[;retry]
day の部分には、次のエントリのいくつかを含むリストを指定できます。
表 27-1 Day フィールド
個々の曜日 |
|
任意の平日 |
|
任意の日 |
|
このホストはこのリモートコンピュータの呼び出しをいっさい行わない。呼び出しはリモートコンピュータ側から行う必要がある。それを受けて、このホストは受動モードで稼動する |
例 27-1 では、Time フィールドに Any が示されています。これは、ホスト arabian をいつでも呼び出せるということです。
time の部分には、24 時間表記で表した時間の範囲を指定します (たとえば、午前 8 時 00 分から午後 12 時 30 分までなら 0800-1230)。time の部分を指定しなかった場合は、どのような時刻にでも呼び出しができるものとみなされます。
0000 の前後にまたがる時間範囲も指定できます。たとえば、0800-0600 は、午前 6 時から午前 8 時までの間を除くすべての時間帯で呼び出し可能であることを示します。
retry サブフィールドには、試行が失敗してから次の再試行までの間に最小限必要な時間 (分単位) を指定できます。デフォルトの待ち時間は 60 分です。サブフィールド区切り文字はセミコロン (;) です。たとえば、Any;9 は、呼び出しはいつでもできるが、失敗したときは次の再試行までに少なくとも 9 分は待たなければならないことを意味します。
retry エントリを指定しなかった場合は、待ち時間倍加アルゴリズムが使用されます。これは、UUCP がデフォルトの待ち時間から始めて、失敗した試行の回数が増えるほど待ち時間を長くしていくことを意味します。たとえば、最初の再試行待ち時間が 5 分であるとします。応答がない場合は、次の再試行は 10 分後となります。次の再試行は 20 分後というようになり、最大再試行時間の 23 時間に達するまで増加します。retry を指定した場合は、常にその値が再試行待ち時間となります。指定がなければ待ち時間倍加アルゴリズムが使用されます。
このフィールドには、リモートコンピュータとの通信リンクを確立するために使用するデバイスタイプを指定します。このフィールドで使用するキーワードは、Devices ファイル中のエントリの最初のフィールドと突き合わされます。
File Name System-Name Time Type Speed Phone Chap-Script Systems arabian Any ACUEC, g 38400 1112222 ogin: Puucp ssword:beledi |
Type フィールドでは、さらに、システムとの接続に使用するプロトコルを定義できます。上記の例では、デバイスタイプ ACUEC に g プロトコルを組み合わせる方法を示しています (プロトコルの詳細は、「UUCP Devices ファイル内のプロトコル定義」を参照してください)。
このフィールド (Class フィールドとも呼ばれます) は、通信リンクの確立に使用するデバイスの転送速度を指定します。このフィールドには、ダイヤラのクラスを区別するために、1 個の英字と速度を含めることができます (たとえば、C1200、D1200) (詳細は、「UUCP Class フィールド」を参照してください)。
デバイスにはどのような速度でも使用できるものがあり、その場合はキーワード Any を使用できます。このフィールドは、Devices ファイルの対応するエントリの Class フィールドに一致していなければなりません。
File Name System-Name Time Type Speed Phone Chap-Script Systems eagle Any ACU, g D1200 NY3251 ogin: nuucp ssword: Oakgrass |
このフィールドに情報を入れる必要がない場合は、フィールドの数を合わせるためにダッシュ (-) を指定してください。
このフィールドには、自動ダイヤラ (ポートセレクタ) に与えるリモートコンピュータの電話番号 (トークン) を指定できます。電話番号は、オプションの英字による省略名と数字部分で構成されます。省略名を使用する場合は、Dialcodes ファイル内に列挙されているものの 1 つでなければなりません。
File Name System-Name Time Type Speed Phone Chap-Script Systems nubian Any ACU 2400 NY5551212 ogin: Puucp ssword:Passuan |
この文字列の中に等号 (=) が含まれている場合、二次発信音を待ってから残りの数字をダイヤルするという ACU への指示となります。文字列の中にダッシュ (-) があれば、4 秒間待ってから次の数字をダイヤルするという指示になります。
コンピュータがポートセレクタに接続されている場合は、そのセレクタに接続している他のコンピュータにアクセスできます。この種のリモートマシン用の Systems ファイルエントリの Phone フィールドには、電話番号を入れません。代わりに、このフィールドにはスイッチに渡すトークンを指定します。このようにすれば、このホストがどのリモートマシンとの通信を望んでいるかを、ポートセレクタが判断できます (この場合は、システム名だけを指定するのが普通です)。対応する Devices ファイルエントリでは、エントリの末尾に ¥D を指定して、このフィールドが Dialcode ファイルを使用して解釈されないようにしなければなりません。
このフィールド (Login フィールドとも呼ばれます) には、チャットスクリプトと呼ばれる文字列が入ります。チャットスクリプトには、ローカルマシンとリモートマシンが対話の最初の時点で互いに受け渡ししなければならない文字が含まれています。チャットスクリプトの形式は次のとおりです。
expect send [expect send] .... |
expect は、対話を開始するために、ローカルホストがリモートホストから送られてくることを想定している文字列です。send は、ローカルホストが、リモートホストからの expect 文字列を受信した後で送信する文字列です。チャットスクリプトには、複数の expect-send シーケンスを含めることもできます。
ローカルホストがリモートマシンから送られてくることを想定しているログインプロンプト
ログインするためにローカルホストがリモートマシンに送るログイン名
ローカルホストがリモートマシンから送られてくることを想定しているパスワードプロンプト
ローカルホストがリモートマシンに送るパスワード
expect フィールドは、次の形式のサブフィールドを持つことができます。
expect[-send-expect]... |
-send は、その前の expect が正常に読み取れなかった場合に送られるものであり、send の後の -expect は、その次に送られてくると想定されている文字列です。
たとえば、login--login という文字列を指定した場合、ローカルホストの UUCP は login が送られてくることを想定します。リモートマシンから login を受信すると、UUCP は次のフィールドに進みます。login を受信しなかった場合は、キャリッジリターンを送信し、再度 login が送られてくるのを待ちます。ローカルコンピュータが、初期状態でどのような文字も想定していない場合は、expect フィールドで文字列 "" (NULL 文字列) を指定します。send 文字列が ¥c で終わっている場合を除き、send フィールドの送信の後には必ずキャリッジリターンが伴うという点に注意してください。
次に示すのは、expect-send 文字列を使用する Systems ファイルエントリの例です。
System-Name Time Type Speed Phone Chap-Script sonora Any ACUEC 9600 2223333 "" ¥r ¥r ogin:-BREAK-ogin: Puucpx ssword: xyzzy |
この例は、ローカルホストの UUCP に、2 個のキャリッジリターンを送ってから ogin: (Login: という場合もあるため) を待つように指示しています。ogin を受信しなかった場合は、BREAK を送ります。ogin: を受信した場合は、ログイン名 Puucpx を送ります。ssword: (Password: を表す) を受け取ったら、パスワード xyzzy を送ります。
表 27-2 に、便利なエスケープ文字をいくつか紹介します。
表 27-2 Systems ファイルのチャットスクリプトで使用されるエスケープ文字エスケープ文字 | 説明 |
---|---|
バックスペース文字を送信または想定する |
|
文字列の末尾で使用すると、普通なら送信されるキャリッジリターンが抑止される。その他の場合は無視される |
|
後続の文字を送る前に 1 〜 3 秒の遅延が生じる |
|
エコーチェックを開始する (これ以降は、1 文字送信するたびに、その文字が受信されるのを待つ。以後の作業は、これを受信してから行われる) |
|
エコーチェックをオフにする |
|
ハングアップを 1 回無視する。このオプションはコールバックモデム用に使用する |
|
BREAK 文字を送信する |
|
CLOCAL フラグをオンにする |
|
CLOCAL フラグをオフにする |
|
改行文字を送信または想定する |
|
NULL 文字 (ASCII NUL) を送信する |
|
約 1/4 秒間または 1/2 秒間、一時停止する |
|
キャリッジリターンを送信または想定する |
|
スペース文字を送信または想定する |
|
タブ文字を送信または想定する |
|
EOT とそれに続く 2 個の改行文字を送信する |
|
ブレーク文字を送信する |
|
8 進数 (ddd) で表される文字を送信または想定する |
組織によっては、リモートコンピュータからの呼び出しを処理するダイヤルインサーバーを設定する場合があります。たとえば、コールバックモデムを持つダイヤルインサーバーを配備し、社員が自宅のコンピュータから呼び出せるようにすることができます。ダイヤルインサーバーは、リモートマシンを識別すると、そのリモートマシンとのリンクを切断し、逆にそのリモートマシンを呼び出して、通信リンクが再確立されます。
Systems ファイルのチャットスクリプトで、コールバックが必要な箇所で ¥H オプションを使用することにより、コールバックの操作を簡素化することができます。ダイヤルインサーバーのハングアップが予想される箇所で、expect 文字列の一部として ¥H を使用します。
たとえば、ダイヤルインサーバーを呼び出すチャットスクリプトに、次のような文字列が含まれているとします。
INITIATED¥Hogin: |
ローカルホストの UUCP ダイヤル機能は、ダイヤルインサーバーから INITIATED という文字列を受け取ることを想定しています。INITIATED 文字列を受け取ると、ダイヤル機能は、ダイヤルインサーバーがハングアップするまで、その後受信するすべての文字をフラッシュします。またダイヤル機能は、expect 文字列のその次の部分、つまり ogin: という文字列がダイヤルインサーバーから送られてくるのを待ちます。ogin: を受け取ると、ダイヤル機能はチャットスクリプトを先へ進めます。
上記のサンプルでは ¥H の前後に文字列が指定されていますが、これらはなくてもかまいません。
擬似送信文字列 STTY=value を使用して、モデム特性を設定することもできます。たとえば、STTY=crtscts を使用すると、ハードウェアフロー制御が可能になります。 STTY はすべての stty モードを受け入れます。詳細は、stty(1) と termio(7I) のマニュアルページを参照してください。
次の例は、Systems ファイルのエントリ内でハードウェアフロー制御を指定しています。
System-Name Time Type Speed Phone Chap-Script unix Any ACU 2400 12015551212 "" ¥r login:-¥r-login:-¥r-login: nuucp password: xxx "" ¥ STTY=crtscts |
擬似送信文字列は、Dialers ファイルのエントリの中でも使用できます。
場合によっては、呼び出そうとしているシステムがポートのパリティを検査し、パリティに誤りがあると回線を切断することがあります。このようなときは、パリティのリセットが必要になることがあります。expect-send の文字列ペアとして "" P_ZERO を使用すると、上位ビット (パリティビット) が 0 に設定されます。たとえば次のように指定します。
System-Name Time Type Speed Phone Chap-Script unix Any ACU 2400 12015551212 "" P_ZERO "" ¥r login:-¥r-login:-¥r-login: nuucp password: xxx |
同様に、P_EVEN はパリティを偶数 (デフォルト) に設定し、P_ODD は奇数パリティを設定し、P_ONE はパリティビットを 1 に設定します。
パリティ設定は、チャットスクリプトのどこにでも挿入できます。この設定は、チャットスクリプト内の "" P_ZERO より後にあるすべての情報に適用されます。これは、Dialers ファイルのエントリの中でも使用できます。