TERM HOWTO Patrick Reijnen patrickr@bart.nl v1.2, 15 July 1995 訳:藤井 真吾 12 Dec. 1995 <sfujii@super.win.or.jp> <JCC04050@niftyserve.or.jp> 1. 法的条件 1.1. 著作権について この文書は、あらゆる形式で無料で配布することができます。この文章の一部だけ を配布することもできますが、著作権表示が含まれていることと、完全な HOWTO 文書 ではないことを読者に分かるようにして下さい。また、完全な文書がどこで手に入る かを示すべきでしょう。特に、商用の配布についても事前の承諾なしに可能ですが、 そのような利用に関しては私にお知らせ下さい。 この HOWTO は、著作権表示と、「宣言」がそのまま残されている限りどのような言 語にも翻訳して結構です。また、誰が翻訳したのかを明確にして下さい。 This document may be distributed freely as a whole in any form and free of charge. Parts of this document may be distributed, provided that this copyright message is included and the reader is informed that this is not the full HOWTO document. Furthermore, there is to be a pointer as to where the full document can be obtained. Specifically, it may be included in commercial distributions, without prior consent. However, I would like to be informed of such usage. This HOWTO may be translated into any language, whatsoever, provided that you leave this copyright statement and the disclaimer intact, and that a notice is appended stating who translated the document. 1.2. 宣言 私は、最大限に正しくそして新しい情報を入れましたが、この文書に含まれる情報 がデータの喪失を招かないとは保証できません。この HOWTO に含まれる情報に関して は「無保証」です。また、私はこの HOWTO に含まれる情報を利用することによって生 じたあらゆる損害について責任を持ちません。 While I have tried to include the most correct and up-to-date information available, I cannot guarantee that usage of the information in this document does not result in loss of data. I provide NO WARRANTY about the information in this HOWTO and I cannot be made liable for any consequences for any damage resulting from using information in this HOWTO. 2. イントロダクション 2.1. この文書 この HOWTO は、シリアルラインを多重化しネットワーク接続を可能にする Michael O'Reilly の優れたソフトウェア、TERM を使うことによる混乱をいくらかで も緩和するためのものです。どの点からみても、TERM に付属する文書は大変良いもの で、この HOWTO はそれらに代わるものではありません。この文書の目的は、TERM が どのように動いているのかという背景や、いくつかのさらなる一般的なネットワーク サービスを TERM のもとで動かす手順を提供することです。この文書は TERM を知る ための全てをカバーしていないことを指摘しておかねばなりません。これを読んだあ と、TERM のマニュアルページで、ここに含まれていない情報を読んで下さい。 2.2. TERM とは何か? TERM は Michael O'Reilly (michael@iinet.com.au) によって書かれ、Bill Riemers (bcr@physics.purdue.edu) によってメンテナンスされており、シリアルライン上で 同時に複数のコネクションを張ることを可能にします。=例えば、モデムでデータを ダウンロードしている時に、同じモデムコネクション上で(また別の)リモートシステ ムを使って作業することが可能です。TERM はまた、シリアル接続上で X クライアン トを開くために使うこともできます。tredir ユーティリティと tudpredir ユーティ リティで TERM はほとんど全ての「古典的」TCP/IP と UDP のネットワークサービス を提供することができます:メール、ニュース、ftp 、telnet 、xarchie などなど。 ある意味で、TERM は SLIP や PPP のような他のシリアルプロトコルに大変よく似て います。TERM の利点は、それが完全にユーザレベルでできることで、システム管理 者やネットワーク管理者の手を借りる必要がないことです。 SLIP や PPP と違って、あなたのマシンは独自の IP アドレスを持ちません。入っ て来るトラフィックは全てリモートホストに向けられ、TERM によってそれらがあなた のローカルコンピュータにリダイレクトされてきます。 3. TERM はどのように動くのか TERM を試す前に、この章全てと、パッケージとともに提供される INSTALLATION ファイルを最初に読むことを強くおすすめします。さらに、TERM と (term)test につ いてのマニュアルページにも目を通して下さい。きっと簡単に、素早く作業をするこ とができるでしょう。 3.1. 用語の定義など あなたが何らかのターミナルサーバを通してシステムにダイアルすることを仮定し ます。私はここでローカルとリモートという言葉をそれぞれ自宅と、ネットワークに つながったシステムの意味で使います(何か別の意味で使わない限りは :-)。 TERM は、ネットワーク接続されていないけれどもシリアルラインを通してネット ワーク接続されたマシンにつながっているローカルマシンに、ネットワークサービス を提供します。ネットワークサービスを要求する、ftp や telnet のようなプログラ ムをどのように起動するか見てみましょう。これらのプログラムは、ネットワーク サービスを要求するシステムコールを発行します。オペレーティングシステムは、こ れらのサービスをネットワークインターフェースを通じて行います(例えば、イーサ ネットを通じてパケットを送ったり受けたりする)。SLIP や PPP は、モデムラインを ネットワークインターフェースにすることによってこれを行い、これはイーサネット によるものと原理的に変わりません。つまり、これらのプロトコルが、他のマシン同 様にモデムによってつながったマシンをネットワークの一部分にするということです。 このことは、ネットワークのノードとなることによるすべての管理の負担がかかると いうことです(さらに言うなら、モデムも管理の対象とせねばなりません)。 SLIP や PPP のようなネットワークコネクションがないとき、一般的にはどうした らいいでしょう?ネットワークに繋がったマシンにダイアルして、メールやニュース を読みましょうか。もしファイルが必要になったら、まず kermit やその他のコミュ ニケーションプログラムを使って、最初にリモートマシンに送ったりまたローカルマ シンにダウンロードすることになります。これはちょっと面倒です。それは特に、モ デムリンクを使う作業が同時にたった一つしかできないことによっています。TERM の アイデアは基本的にはこのプロセスを自動化し、多重化することです。TERM はローカ ルとリモートの両方で起動され、モデムラインを通じて二つのプロセスが互いに通信 します。ネットワークサービスが必要になったら、ローカルの TERM デーモンに要求 を出すと、それはネットワークにつながったリモートのマシン上の TERM デーモンに転 送されます。結果はモデムラインを通じて返ってきます。 具体的にするために、あなたが ftp でファイルを取得したいとしましょう。まず、 あなたは TERM と会話できる ftp のバージョンが必要になります。あなたはこの termftp を普通の ftp のように、'termftp nethost.gov' のように起動します。し かしこの特別なバージョンはそのネットワークリクエストをカーネルの代わりにロー カルの TERM デーモンに出します。ローカルの TERM デーモンはモデムラインを通じ てリモートの TERM にこのリクエストを転送し、リモートの TERM は nethost.gov へ の ftp コネクションを張ります。そしてデータをモデムリンクを通じて送り返すので す。TERM は同時に異なる多数の作業を進行させるのに十分な性能を持っています。そ のためあなたは同じモデムリンクを使っていくつもの異なるネットワークセッション を張ることができるのです。例えば、termftp で転送を行っている最中に termtelnet を使って離れた別のホストにログインしている、といった具合です。 これが抽象的に過ぎたとしても(よくわからなくても)気にしないでください。この セクションを抜けるための重要な部分は、モデムの両端で二つの TERM が走っている ということなのです。 4. セットアップ 4.1. 何が必要か TERM を構築して使い始める前に、カーネルに TCP/IP のサポートを組み込んである ことを確認しましょう。さらに、ループバックインターフェースも使えるようになっ ていることも確認してください。そうしたら、このセクションの残りに進むことがで きます。 4.2. 概念の説明 新しい TERM のバージョンでは新しい二つの概念が TERM に導入されました。これ ら二つの概念については、次の二つのサブセクションで解説します。 4.2.1 共有 バージョン 1.16 から他のユーザと TERM コネクションを共有するという概念が導 入されました。これは、共有の機能を導入すると、あなたが使っているものと同じ TERM コネクションを他の人たちも使えるようになることを意味します。すなわち、あ なたが TERM コネクションを通じてリモートマシン上で作業中(ローカルマシンから trsh で入っていたとしましょう)、ローカルマシンにいるもう一人の人が、同じ TERM コネクションを使って同時に世界のどこかの ftp サイトからファイルを彼のもとに ftp してくることができるのです。 この機能を切っておく(つまり、TERM をプライベートモードで起動する)と、あなた と、そしてあなただけ(われわれは root をカウントに入れません :-)が TERM コネク ションを利用できます。 もちろん、あなたの使っているのと同じ TERM コネクションを他の人たちに利用さ せたい側だけに共有 TERM をインストールしたいと思うでしょう。そのため、もし他 の人たちがあなたのローカルマシンにログインアカウントをもっていて、それをリ モートネットワークのどこかから使いたいというような場合、あなたはリモート側の TERM で共有機能を導入することになります。このような方法をとると、これらすべて の人たちがあなたのマシンに同じ TERM コネクションを互いに、そしてあなたと共有 してログインすることができます(注意:最初の例では、TERM コネクションのローカ ル側で共有機能を導入しておく必要があったのです。) root としてインストールする際の注意:root として TERM をインストールする際 には、最初に 'term' というメンバーのいないグループを /etc/group に以下のよう な行を追加して作っておく必要があります(コンパイルの前に)。 term::16:root または、グループ ID 16 番がすでに使われてしまっていたら別の未使用のものを 使ってください。 コンパイルとインストールが終わったら TERM とそのクライアントを 'term' に SGID してください: chgrp term <term_client> chmod g+s <term_client> さらに、TERM 対応の他のプログラムも 'term' に SGID しておかねばなりません。 4.2.2. フル TERM ネットワーク TERM バージョン 2.0.0 から、フル TERM ネットワークという記述が使われるよう になりました。外界とのコネクションが TERM コネクションだけしかない場合、フル TERM ネットワークを使うことになり、あなたはフル TERM ネットワークを入れて TERM を構築するべきでしょう。このような場合、共有ディレクトリに termnet というファ イルが置かれます。これは TERM に外界とのコネクションが TERM を通じてしか行わ れないことを TERM に知らせるためのものです。 TERM コネクションに加えて何らかのネットワークコネクションがある場合、TERM 対応プログラムは最初にこのネットワークコネクションを通じて仕事を完了しようと します。これに失敗すると、TERM が起動され TERM コネクションを通じて仕事を完了 しようとします。このことをもっと明確にするために、いま TERM 対応 telnet が使 われた例を考えます。この telnet は TERM と共にでも、そうでなくても動作します。 telnet localhost は接続のために TERM を使いません。しかし、 telnet zeus.cs.kun.nl は他のタイプのネットワークコネクションがない限り TERM を使います。 フル TERM ネットワークは嘘のホストネームを使うことを意味します。つまりリ モートホストのものが使われるわけです。さらには、bind(0) が常にリモートホスト で動作するようになります。本質的には、このことによって TERM が走っていても TERM を通さない多くのプログラムは利用できないことになります。残念ながら、 UDP プログラムやデーモンのほとんどは、この悪いトリックのため TERM のもとでは 動作しません。 4.3. TERM の構築 もしあなたがラッキーなら、これは make を起動するだけです。しかしおそらくほ とんどの場合、それ以上のことをする必要があるでしょう。新しいバージョンの新し い機能のために、TERM のバイナリを作る作業はちょっと複雑になっています。バイナ リを得るために二つの方法があります。 TERM を構築するためのこれらの方法をすべてカバーするためにこのセクションは3 つのパートに分かれます。 1. TERM の構築、バージョン 2.0.0 以上 2. TERM の構築、バージョン 1.16 から 1.19 まで 3. TERM の構築、バージョン 1.15 まで 4.3.1. TERM の構築、バージョン 2.0.0 以上 最初に、上の「フル TERM ネットワーク」についてのセクションを読んだかどうか 確認してください。 TERM バージョン 2.0.0 かそれ以上では、TERM のバイナリとクライアントを作るた めに多くの方法があります。これらのすべては root であっても一般ユーザであって も実行可能です。 1. フル TERM ネットワークを使わずにプライベートモードで TERM を構築する 2. フル TERM ネットワークを使ってプライベートモードで TERM を構築する 3. フル TERM ネットワークを使わないで共有モードで TERM を構築する 4. フル TERM ネットワークを使って共有モードで TERM を構築する これらのバージョンの TERM では、configure スクリプトを用いる新しいコンパイ ル方法が導入されました。configure は起動されると何のオペレーティングシステム に TERM をインストールしようとしているのか、ソースディレクトリは利用可能か、 ランタイムオプションをつけるかどうかなどをチェックします。そこで見つけたこと をもとにして、configure は TERM のパッケージに含まれる Makefile.in を使って Makefile を作ります。 configure のオプションのうち重要な2つは --root と --user で、これは TERM のインストールが root として行われるのか、一般ユーザとして行われるのかを規定 します。TERM のインストールには、あなたの望むように、他のオプションも指定でき ます(例えば標準的でない path)。 1. フル TERM ネットワークを使わずにプライベートモードで TERM を構築する この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方): ./configure --root または --user make install installman これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。 2. フル TERM ネットワークを使ってプライベートモードで TERM を構築する この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方): ./congfigure --root または -user make installnet installman これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。 3. フル TERM ネットワークを使わないで共有モードで TERM を構築する この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方): ./configure --root または --user make share installman これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。 4. フル TERM ネットワークを使って共有モードで TERM を構築する この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方): ./configure --root または --user make share installnet installman これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。 4.3.2. TERM の構築、バージョン 1.16 から 1.19 まで これらのバージョンの TERM を構築するために、以下の方法の中から選ぶことがで きます。 1. 一般ユーザとして、プライベートモードで TERM を構築する 2. 一般ユーザとして、共有モードで TERM を構築する 3. root として、プライベートモードで TERM を構築する 4. root として、共有モードで TERM を構築する いかに、TERM のコンパイルの時に共有機能を導入したり、切ったりする方法につい て説明します。 1. あなたは一般ユーザで(root アクセスがなく)、他のユーザと TERM コネクション を[共有したくない]とします。 TERM コネクションを他のユーザと共有したくないユーザは、TERM を構築するため に以下のようにします: make DO=install OS-type make installman TERM の後、そのクライアントとマニュアルページが構築されインストールされます。 さらに、あなたは '$HOME/.term' というディレクトリを作る必要があります。これ は、TERM が 'termrc' ファイルを探すためのディレクトリです。 2. あなたは一般ユーザで(root アクセスがなく)、TERM コネクションを他のユーザ と[共有したい]とします。 TERM コネクションを共有したいユーザは、このようにします: make DO=installshare USERSHARE=$HOME/term OS-type make installman TERM の後、そのクライアントとマニュアルページが構築されインストールされます。 さらに、パーミッション 'drwxrwxr-x' をもったディレクトリ '$HOME/term'(デ フォルト)が必要です。最低でも、このディレクトリの中に TERM がそのコネクション に使うソケット('tmp/private/socket=')が見つかるでしょう。 3. あなたは root で、他のユーザと TERM コネクションを[共有したくない]としま す。 TERM コネクションを共有可能にしたくない root は TERM を構築するために以下の ようにします: make DO=install OS-type make installman TERM の後、そのクライアントとマニュアルページが構築されインストールされます。 さらに、パーミッション 'drwxr-xr-x' をもったディレクトリ '/usr/local/lib/term'(デフォルト)が必要です。最低でも、このディレクトリの中に TERM がそのコネクションに使うソケット('tmp/private/socket=')が見つかるでしょ う。 4. あなたは root で、TERM コネクションを[共有したい]とします。 最初に、上の「共有」のセクションを読んだことを確認してください。 TERM コネクションを共有したい root は以下のようにします: make DO=installshare OS-type make installman TERM の後、そのクライアントとマニュアルページが構築されインストールされます。 さらに、パーミッション 'drwxrwxr-x' をもち TERM グループに所有されたディレ クトリ '/usr/local/lib/term'(デフォルト)が必要です。最低でも、このディレクト リの中に TERM がそのコネクションに使うソケット('tmp/private/socket=')が見つか るでしょう。 4.3.3. TERM の構築、バージョン 1.15 まで これらのバージョンの TERM の構築にはこのコマンド以外に必要ありません。 make DO=install OS-type make installman この後、TERM と、そのクライアントとマニュアルページがうまく構築されてインス トールされ、使えるようになっているでしょう。 さらに、ディレクトリ '$HOME/term' を作ることが必要です。このディレクトリは、 TERM が termrc ファイルを探すために使います。 やらなくてはならないことは、Makefile 中のいくつかの PATH とコンパイラフラグを 変更することだけです。 4.4. client.a, libtermnet.a, libtermnet.sa, libtermnet.so TERM とともに、TERM クライアントのための関数群のライブラリが提供されていま す。 バージョン 1.16 までは、このライブラリは client.a と呼ばれていました。TERM のコンパイル時にこのライブラリも構築され、TERM クライアントのコンパイルの時に 使われていました。また、別のディレクトリにはインストールされませんでした。 バージョン 1.16 からライブラリの名前が libtermnet.a に変わっています。バー ジョン 1.19 まではこのライブラリは TERM ディレクトリに作られ、TERM クライアン トのコンパイルに利用されています。これは別のディレクトリにはインストールされ ません。 バージョン 2.0.0 からは、libtermnet.a に加え libtermnet.so と libtermnet.sa (シェアドライブラリと exported initialized library)が TERM パッケージのコンパ イルの際に作られるようになりました。パッケージのすべての部分のインストールの 際に、これら3つのライブラリファイルもディレクトリ '/usr/local/lib'(デフォル ト)にインストールされます。その後、libtermnet.so.2 から libtermnet.so.2.x.x にリンクが張られます。最後に、ldconfig がファイル '/etc/ld.so.conf' に書かれ たコマンドラインによって特定されるもっとも新しいシェアドライブラリへの必要な リンクとキャッシュ(ランタイムリンカ、ld.so が利用するために)を作り、これはも とからあるディレクトリ('/usr/lib' と '/lib')についても同じです。インストール が正しく終了するとスタティックライブラリの代わりにダイナミックライブラリを使 うように構築された TERM クライアントがこれら3つのライブラリファイルを使える ようになります。また、これらのライブラリはあなたの自分のソフトウェアを TERM 対応にするために利用することもできます(以下参照)。 4.5. 環境変数の設定 TERM はユーザによって設定されたいくつかの環境変数を認識します。これらのう ち、私が解説する最初の3つは: o TERMDIR o TERMSHARE o TERMMODE これらの変数を設定することで TERM の実行方法をコントロールすることができま す。 バージョン 1.15 までの TERM では変数 TERMDIR だけが重要です(これらのバー ジョンに共有モードはありません)。これらのバージョンでは、TERMDIR は以下のよう にセットするとよいでしょう。 setenv TERMDIR $HOME (csh または tcsh) export TERMDIR=$HOME (bash) バージョン 1.16 からは TERM はさらに変数 TERMSHARE と TERMMODE を認識するよ うになっています。これらの変数によって、TERM にプライベートモードで走るのか共 有モードで走るのかを知らせることができます。ここではプライベートモードと共有 モードへの変数の設定法を解説しましょう。 TERMMODE は以下の3つの値をとります。 o 0 = プライベート o 1 = システム共有 o 2 = ユーザ共有 1. TERM をプライベートモードで実行するには、変数 TERMDIR と TERMMODE を以下の ように設定します: csh と tcsh では setenv TERMDIR $HOME setenv TERMMODE 0 bash では export TERMDIR=$HOME export TERMMODE=0 2.TERM を共有モードで利用したい場合、変数の設定には二つの方法があります: a. TERM が SUID プログラムとしてインストールされた場合、 TERMMODE のみ設定する 必要があります。 setenv TERMMODE 2 (csh または tcsh) export TERMMODE=2 (bash) b. TERM が SGID プログラムとしてインストールされているときには、変数は以下の ように設定する必要があります。 csh か tcsh では setenv TERMMODE 1 setenv TERMDIR /usr/local/lib/term setenv TERMSHARE $TERMDIR bash では export TERMMODE=1 export TERMDIR=/usr/local/lib/term export TERMSHARE=$TERMDIR このように変数を設定することで、古いクライアント(古いバージョンの client.a をリンクしたクライアント)の実行が可能になります。 バージョン 2.0.0 から TERM はさらに変数 TERMSERVER を認識するようになりまし た。この変数は複数のモデムを持っていて、同時に2以上のコネクションを張るとき に設定する必要があります。どのコネクションを使うのか特定するために、TERM を サーバネーム付きで起動しなくてはなりません: nohup term -v /dev/modem1 Connection1 & nohup term -v /dev/modem2 Connection2 & ユーザは使いたいコネクションの名前を変数 TERMSERVER に設定することになりま す。 setenv TERMSERVER Connection1 (csh または tcsh) export TERMSERVER Connection2 (bash) 4.6.TERM のテスト TERM のテストデーモンを構築するために make test (新しいバージョンの TERM で は make termtest)を実行してください。(term)test はあなたのシステム上で二つの コピーとして作動し、trsh と tupload が可能になっているはずです(試してみてくだ さい tupload ./term /usr/tmp は '/usr/tmp’に TERM バイナリのコピーを作成します)。ローカルの TERM の出力 は 'local.log'に、リモートのものは 'remote.log'に出力されます。あなたは TERM を -d255 フラグをつけてこれらのファイルにデバッグ出力をさせることができ、ま た、termrc ファイル中でセットすることもできます。 注意:test は ./test と実行し、あなたのシステムの test が実行されてしまわない ようにしてください。 4.7. TERM とコミュニケーションプログラム TERM を使えるようにする前に、kermit や seyon といったコミュニケーションプロ グラムを用いてモデム経由の接続を確立しなくてはなりません。コミュニケーション プログラムのドキュメントに、リモートマシンとの接続の確立には何をすることが必 要なのかが書かれています。 リモートマシンとの接続が確立し、TERM を起動しようというときに、リモートマシ ンとの接続を切らないでコミュニケーションプログラムを終了、あるいは中断する必 要があります。コミュニケーションプログラムが linecheck や TERM からキャラクタを奪ってしまわないように、このことが必要です。 どのように接続を保持し、コミュニケーションプログラムが linecheck や TERM か らキャラクタを奪わないようにするのかについて、以下にいくつかのコミュニケー ションプログラムを挙げます。 4.7.1. Kermit kermit を使っているなら、TERM を始めるのは簡単です。ローカルの kermit プロ ンプトで suspend と打ち込めばいいのです。Linux のプロンプトに戻ったでしょう。 このプロンプトから TERM コネクションを張ることができます。 4.7.2 Seyon あなたが seyon を使っているなら、linecheck や TERM を起動するのに簡単な方法 は Transfer Menu ('$HOME/.seyon/protocols'によってコントロールされています) に登録してしまうことです。 ファイル '$HOME/.seyon/protocols' に加えてください: "Line check" "$cd /tmp; linecheck" "Term" "$term -c off -w 10 -t 150 -s 38400 -l $HOME/tlog" その後ローカルマシンで linecheck や TERM を実行したければ、Transfer Menu を 選んで、"Line Check" か "Term" アイテムを選択し、"Go" します。 もちろん、シェルコマンドボタンを使って、ポップアップダイアログボックスに 'linecheck' や 'term' と打ち込むこともできます。これはさらに自動的に入力と出 力をリダイレクトします。 4.8. 透過的なリンクを作る きっと、あなたはローカルとリモートのホストとの間のモデムコネクションを確立 できるでしょう。一般的には、何らかの種類のターミナルサーバにダイアルし、そこ からリモートホストに接続することになるでしょう。あなたはさらにモデムと会話す るために kermit や seyon などのある種のターミナルソフト(著者が使っているた め、この文書では例としてkermit を挙げます)を使っていることでしょう。もしモデ ムやターミナルソフトで問題が起きたら、Serial-HOWTO を読んでください;きっと助 けになるでしょう。 リンクを確立し終えたら、それを可能な限り透過的にしたいと思うでしょう。ター ミナルサーバのコマンドをチェックしてください(help か ? から始まるでしょう)。 可能なら8ビットオプションをつけてください。これはシステムへのログインの仕方 を変えることになるかもしれません。例えば、もしサーバが rlogin を使っていた ら、それを使わなくてはならないし透過的にするためにはそれに -8 オプションをつ けなければなりません。特に xon/xoff フロー制御には注意してください。それは好 ましくありません。rts/cts (ハードウェア)フロー制御ができるようにしてみてくだ さい。8ビット rts/cts コミュニケーションを形成するためにモデムのドキュメント を読む必要があるかもしれません。 4.9. linecheck を実行する 警告:いくつかの文書では、linecheck のコマンドラインオプションが間違った順序 で説明されています。私はこれをチェックし、以下のオプションの順序が正しいこと を確認しました。 注意:TERM バージョン 2.3.0 からはコマンドラインにログファイルの名前を必要と しなくなりました。ログファイルは linecheck を起動したディレクトリ上のファイル 'linecheck.log' にその出力を書き出します。 Linecheck は TERM とともに供給されるプログラムです。リンクの透過性をチェッ クして TERM が正しく動作するために必要な設定の情報を提供します。linecheck は 8ビットのキャラクタ 256 個をそれぞれ送り、それがきちんと送信されたかどうかを 検査します。TERM はリンクを通じて送信できないキャラクタを設定されなくてはなり ませんので、linecheck はそのキャラクタが何なのかを特定するのです。linecheck は透過的モデムリンクを利用可能な形に確立してから用います。linecheck を動作さ せるために、以下のこと行ってください: 1. リモートシステム上で実行 linecheck linecheck.log 2.ローカルシステムに戻って、コミュニケーションプログラムを中断します(上を参照) 3.ローカルシステム上で実行 linecheck linecheck.log > /dev/modem < /dev/modem linecheck の実行が終わると、linecheck.log ファイルの終わりにいくつか数字が 出ていることがわかります。これらは、リンクの相手側において termrc の中でエス ケープされなくてはなりません。例えば、私のシステムで、ローカルの 'linecheck.log' に何も書かれておらず、リモートの 'linecheck.log'に 29 と 157 をエスケープするように書かれていたとします。そこで、ローカルの 'termrc' では これらのキャラクタをエスケープし、リモートの 'termrc' では何もエスケープしま せん。もし片側でキャラクタをエスケープしたら、反対側では無視しなくてはなりま せん。ですからこの例では、リモートシステムで 29 と 157 を無視しなくてはならな いことになります。 linecheck がハングアップしたら、 linecheck linecheck.log 17 19 をリモートシステムで、そして linecheck linecheck.log 17 19 > /dev/modem < /dev/modem をローカルで実行してみてください。これは xon/xoff (フロー制御)をエスケープし ます。これはソフトウェアフロー制御を行っているときにラインをハングアップさせ てしまいます。もし、このことでハングアップの問題が解決したなら、それぞれの 'termrc' で 17/19 をエスケープ/無視する事になります。もしターミナルサーバが また別のキャラクタを通さないようになっていたら、上と同じようにして、それらの キャラクタをエスケープして linecheck を実行してみてください。linecheck がハン グアップしたらこれらのキャラクタを特定することができます。もしこうなってし まったら、kill して、その後ログファイルを見てください。最後に送信されたキャラ クタが悪いということなのでしょう。これらのキャラクタをエスケープしてもう一度 試してみてください。 最終的に、私のローカルの termrc はこのような行を含みます。 escape 29 escape 157 そして、リモートの termrc はこのような行を含みます。 ignore 29 ignore 157 これはリモートの 'linecheck.log' に 29 と 157 をエスケープするように書かれ ていたからです。 4.10. TERM を実行してみる リモートシステムにログインして、(まだやっていなければ)可能な限り透過的なリ ンクを張ってください。TERM をリモート側で起動します。私は以下の方法をとってい ます: exec term -r -l $HOME/tlog -s 38400 -c off -w 10 -t 150 それぞれのオプションを一つ一つ書き下しましょう(私はこれらのオプションを termrc に簡単に加えることもできたのです。しかし私は、TERM が作動しているとき にファイルを編集することを避けるために、このような方法をとっています)。 exec は現在のシェルを終了して、そこに与えられたプログラムを走らせます。私は ログインシェルをもう一度使う気がないので、exec しています;それは単にメモリの 無駄だからです。リンクのデバッグを行っているときや、確実にリモートの TERM を kill したい場合には、exec を使うことを望まないかもしれません。 -r オプションは、片側だけでつける必要があります。TERM はこれをコネクション のリモート側だと判断します(TERM のリモート側はあなたのローカルマシンであるこ とも可能であることに注意してください)。もし片側でこのオプションを使わないと、 TERM クライアントは自発的にクラッシュします。 -l $HOME/tlog :これは、ホームディレクトリのファイル tlog にエラーを記録し ます。デバッギングには非常に有効です。これをやらない手はありません。 -s 38400 :私は 14400 ボーの圧縮機能付きモデムを持っています。最適な圧縮比 で、可能な限り速くパイプを通したいのです。さらに遅いモデムでは、幾分低い値を 用いるべきでしょう。もしあなたがシリアルポートとして 16450 uart を持った遅い マシンを使っているのなら、高いボーレートはシリアルポートのチップへの過負荷に よってデータを失うかもしれません。TERM はこれを修復するでしょうが、ログファイ ルに多くのエラーメッセージ(または 0.99pl15 以上のバージョンの linux カーネル からのオーバーランウォーニング)がある場合、この数値をさらに下げることになる でしょう。 -c off :これはデータ圧縮をオフにします。私は圧縮モデムを持っているので、二 重の圧縮をしたくないのです。 -w 10 -t 150 :これも、速いモデムリンクを最適化するためのオプションです。私 は window を 10 に、timeout を 150 にセットしています。これは term_setup のマ ニュアルページの推奨値によるものです。 コミュニケーションプログラムを中断して(上を参照)ローカルマシンに戻ってくだ さい。あなたは TERM が動作しているときにそれ(訳注:コミュニケーションプログ ラム)も動作していることを望まないかもしれません。シリアルポートを通して TERM とぶつかってしまうかもしれないからです。もしコミュニケーションプログラムを終 了してもモデムがハングアップしないようにできるならば(DTR がトグルしたとき)、 この時点でプログラムを終了してしまうこともできます。 ではローカルで TERM を起動しましょう。私はこれを用いています: term -c off -; $HOME/tlog -s 38400 -w 10 -t 150 < /dev/modem > /dev/modem & TERM にモデムがどこにあるのかを教えてやる必要がありますので、標準入力と標準 出力を '/dev/modem' に向けています(< と > が行っているのがこれです)。さらに バックグラウンドで実行しています;このスクリーンで他にやりたいことができるか らです。 これで TERM は動作するはずです :-)。trsh を実行して、何が起こるか確かめてく ださい。もしハングアップしたり、リンクが遅く感じるようであればそれぞれの側の 'tlog' を見てみてください。タイムアウトやエラーが発生していますか?もしそうな らば、何かを間違えて設定してしまったことになります。もう一度(これを読み終えた 後で :-)試してみてください。なお、コネクションがおそろしく速く見える、と いうことではありません。特に圧縮を使っている場合には−−ちょっとギクシャクし た感じになるでしょう。本当のスピードはファイル転送などの時にわかります。 4.11. TERM を終了する 間違いなく、あなたが TERM を使ってたくさんの作業をした後、作業を終えて TERM コネクションを落とそうと思うでしょう。このためには4つの方法があることを理解 しなければなりません。 1. 両方の側の TERM プログラムを kill する。これがコネクションを終了するために 勧められるもっとも単純な方法です。 2. より良い方法は以下のコマンドをローカルで実行することです。 echo '00000' > /dev/modem この方法でうまく TERM コネクションを終了できるでしょう。これはすべてのバー ジョンの TERM で働きます。ゼロの列が少なくとも5個の0を含んでいるようにして ください。 3. バージョン 2.0.0 以上の TERM の termrc ファイル中で、 terminate '<some string>' という記述を加えられるようになりました。これは TERM を終了させる文字列('00000'がデフォルト)を設定します。偶然終了してしまう ことを避けるため、5文字以上でなければなりません。 4. バージョン 1.14 からは tshutdown というプログラムがあります(実際は、バー ジョン 1.14 ではこれはパッチの形で入手できたのですが、それより新しいバージョ ンではパッケージに組み込まれました)。tshutdown の実行で TERM コネクションをう まく終了できます。 4.12 パーティションから TERM を削除する そうですか、これが必要なんですね。TERM を離れたいあなたのために TERM を削除 するステップについて説明します。TERM を削除する課程で以下のステップを踏まねば なりません: o ディレクトリを内容とともに削除する。TERM をインストールする方法によって、あ なたのマシンには以下のディレクトリの中から一つかそれ以上のディレクトリが存在 するはずです: $HOME/.term/termrc $HOME/.term/termrc.<server> $HOME/term/termrc $HOME/term/termrc.<server> /usr/local/lib/term/termrc /usr/local/lib/term/termrc.<server> /etc/termrc /etc/termrc.<server> これらのディレクトリはその中身と共に削除することができます。このためには '/bin/rm -rf'を使ってください。 o 'term'グループ。インストールの方法のうちいくつかでは、'term'というグループ を作る必要がありました。'/etc/group' に'term'エントリがないか確認してくださ い。もしあったらそれを削除します。 o TERM パッケージと TERM 対応実行可能ファイル。これが TERM の削除ではもっとも 面倒な部分でしょう。TERM パッケージについてくる実行可能ファイルについては、 ディレクトリ'/usr/local/bin'かディレクトリ '$HOME/bin'を見る必要があります。 あなたが自分で TERM 対応にした実行可能ファイルについては、私は助けになれま せん。何を削除するべきなのかを知るためにはあなたがどの実行ファイルを TERM 対 応にしたのかを知る必要があります。デフォルトとそれらの実行可能ファイルに付属 するその他のファイルについて、構成を忘れないようにしてください。 o ライブラリファイル。これらを削除するためには以下のようにするのが最も良いで しょう: cd / find . -name libtermnet* -exec /bin/rm {} このコマンドはライブラリファイルを見つけて削除します。 o インクルードファイル。これに関しても、以下のコマンドを実行するのが最も簡単 です: cd / find . -name termnet.h -exec /bin/rm {} このコマンドはインクルードファイルを削除します。 o マニュアルページ。TERM のマニュアルページをインストールしているなら、以下の ディレクトリのどれかで見つけだせるはずです: /usr/local/man/man1 /usr/local/man/cat1 $HOME/man/man1 $HOME/man/cat1 最低でも以下のマニュアルページについて確認しなくてはなりません:term, term_clients, term_setup, tdownload, linecheck, trdate, trdated, termrc, termtest, tmon, tredir, trsh, tshutdown, tupredir, tupload, txcommand 最後に tiptest o テンポラリユーザディレクトリ。これはディレクトリ '/usr/tmp/private' とそ の内容です。 これらの作業によって、TERM に関連するあらゆるものを削除したと確信できること になります。 4.13 コネクションを最適化する TERM を実行させることができたら、最適化を行おうと思うでしょう。リンクのス ピードを測るのによい方法は、ファイルをアップ/ダウンロードしながら一つのウィ ンドウで tmon を実行することです。(大きな)テキストファイルと圧縮されたファイ ルの両方で試してみてください;プレインテキストは圧縮されたファイルの二倍くら い速いでしょう。いじれるパラメータはボーレート(-s)、圧縮(-c)、ウィンドウ (-w)、タイムアウト(-t)、そしてリトレイン(-A)です。 リトレインパラメータには注意してください。TERM バージョン 1.19 ではリトレイ ンパラメータなしのものに比べ 80% から 90% の性能低下がありました。これが TERM バージョン 1.19 のバグなのか、この問題が TERM バージョン 1.19 だけのもの なのかはっきりしていません。 ボーレート:TERM が毎秒シリアルリンクを通して送ろうとするビット数の最大の数 です。TERM はこれ以上の速さでキャラクタを送ることを避けます。デフォルトはコン ピュータのシリアルポートのスピードを使うことですが、電話回線の状態などでモデ ムの動作速度がシリアルポートより遅い場合、このスピードは速すぎるかも知れませ ん。ボーレートオプションは、モデムへの出力をバッファリングするシステムで使用 するものです。セットアップとチューニングの時には大きすぎるものよりは、小さな ボーレートを使う方がいいでしょう。高速のリンク(> 38400)では、無制限にするのが おそらく有利でしょう。これは値 'off' を使うことで実現できます。TERM はそうす ると、フロー制御を完全にカーネルに依存してしまいます。 圧縮:圧縮モデムを持っていないのなら、これをオンにしたいでしょう。圧縮モデ ムを持っているのなら、圧縮はオフにすべきです。でないと二重に圧縮することに なって、一般的には送信するデータを増やしてしまうことになります。圧縮モデムは MNP-5 や V42.bis プロトコルを用いるものです。モデムの説明書とモデムの接続メッ セージを確認してください。 ウィンドウ:これは、リモートの TERM から承認(または ack)が返ってくるまでに ライン上を送ろうとするデータ、あるいはパケットのまとまりの数です。速いモデム では、これを大きくすることは利益になるでしょうが、遅いリンクではこれがリモー ト側を圧迫するかもしれません。 タイムアウト:TERM が ack を待つ時間です。ウィンドウを上げたなら、またログ ファイルにタイムアウトが出たら、これを増やしてみてください。 14400/V42.bis では、私は -c off -w 10 -t 150 を使っています。tupload で圧縮 ファイルではだいたい 1700 cps を、アスキーファイルでは 3500 cps を得ています。 4.14 トラブルシューティング このセクションでは、TERM やそのクライアントの実行で問題が生じた時に何を確認 すべきかについていくつかの考えが示されています。 o TERM のディレクトリは整理されていますか?新しいバージョンの TERM では '/usr/local/lib/term' 以下のディレクトリ構造が二度変更されています。もしこれ に気づかなかったら、すべての種類のエラーメッセージを引き起こすことにもなりま す。いちばん良いのは '/usr/local/lib/term' 以下を('termrc' はセーブして)削除 し、新しい TERM のバージョンをインストールすることです。そうすれば乱雑なディ レクトリツリーと格闘せずに済みます。 o 古いソケットを削除しましたか? TERM のバージョンを上げるときには TERM に よって作られたすべてのソケット('socket='と呼ばれます)を削除してください。これ をしないと奇妙な問題が発生する可能性があります。TERM がどのソケットを見張って いるかを知るには、"netstat" プログラムが使えます。 o TERM は sunOS 4.1.3 で正しくコンパイルできませんか?あなたは TERM を './configure --user' で設定していますね。コンパイル中に不明な '-k' フラグがあ るというアセンブラエラーが出ますね。このエラーの理由はわかりません。このエ ラーに対する解決法は TERM をスタティックライブラリで設定することです。このた めに、'./configure --user --static' を実行する必要があります。その後普通通り にコンパイルしてください。今度は TERM は正しくコンパイルされるはずです。 o termtest が 'Term: failed to connect to term socket '/root/.term/sockettest'' というエ ラーを発生していますか? termtest は実行時に実行可能な 'term' が termtest と 同じディレクトリにあることを前提にしています。termtest を実行する前に 'make install' するのなら、TERM のバイナリは '/usr/local/bin'(または他の bin ディレクトリ)に移動されています。 これに取りかかるには、バイナリからソースディレクトリにリンクを張ります。 ln -s /usr/local/bin/term /usr/src/term-<version_number>/term o 正しいバイナリを実行していますか? TERM は相当何度もアップデートされていま すし、多くのシステムは異なった、バージョンの流動的なプログラムを持っていま す。正しいバージョンを使っていることを確認してください。これは linecheck にも 当てはまることに注意してください。bash の type -a や whereis コマンドでどのプ ログラムが走るのかを知ることができます。TERM バージョン 1.11 以降では、スター ト時にバージョンナンバーをプリントアウトします(しかしながらバージョン 1.14 は 1.12 だと言います。ふう。)。 o 正しい termrc を正しい場所に置いていますか?あなたの使っている TERM のバー ジョンとインストールの方法(root としてか、ユーザとしてか)によって、ファイルは 以下のディレクトリのうちの一つにあるはずです。 $HOME/.term/termrc $HOME/.term/termrc.<server> $HOME/term/termrc $HOME/term/termrc.<server> /usr/local/lib/term/termrc /usr/local/lib/term/termrc.<server> /etc/termrc /etc/termrc.<server> システムによってはあらかじめインストールされた 'termrc' があります;セット アップする前にそれらが消されていることを確認してください。root として作業して いるのなら、'/.term' に注意してください。TERM は実行中にファイル(実際にはソ ケット)を作成します。そのために自身のディレクトリを持っているのです('termrc' の頭にドットがついていないことに注意)。 o TERM は 'termrc' ファイルを見つけられていますか?どちらの側で TERM を起動す るときにも、以下のようなメッセージを目にするはずです: Term version: 2.2.9 Reading file: /usr/local/lib/term/termrc Using shared mode もし二行目がなかったなら、TERM は 'termrc' ファイルを見つけられなかったとい うことになります。インストールの途中で何かうまくいかなかったのでしょう ('termrc' ファイルを使わずに全てのオプションをコマンドラインに入れているのな ら別です :-)。'termrc' を見つけられなかった側の TERM のサイトで、'termrc' ファイルの場所とパーミッションを確認してください。 o 'termrc' ファイル中のエントリは正しい文法とスペリングになっていますか?明ら かになっている問題は、いくつかのキャラクタをエスケープしたり無視したりしたい 人たちが 'termrc' ファイルに次のように書くことです: escape 1,4,30,255 ignore 1,4,30,255 TERM は何も言わずこれを受け付けません。escape や ignore の記述の最初のキャ ラクタだけをエスケープ、あるいは無視します。他のキャラクタは、何も言わずにな いものとして扱います。 いくつかのキャラクタをエスケープ、あるいは無視しなくてはならない場合、それ ぞれキーワード escape あるいは ignore で始まる別々の行に書かなくてはなりませ ん。エスケープ、あるいは無視しなければならないキャラクタに幅があるときのみ、 以下のような方法をとることができます: escape 16-29 # escape characters 16, 17, 18, 19 escape 23 # 23 escape 255 # and 255 ignore 16-19 # ignore characters 16, 17, 18, 19 ignore 23 # 23 ignore 255 # and 255 o 'term' または '.term' ディレクトリが NFS でマウントされていませんか?もし 'term' または '.term' ディレクトリが NFS でマウントされている場合、Makefile の CFLAGS の行に -DTERM_NFS_DIR フラグをセットする必要があります。残念ながら、筆 者は sunOS 4.* が走っているマシンでこのフラグによってコンパイルエラーを発生し てしまいました。 o 全てのファイルやディレクトリが正しいユーザとグループに所有されていて、適切 なパーミッションを設定されていますか?インストールの時に設定されるので問題に ならないはずです。しかし、自分のプログラムを TERM に対応させるときには注意が 必要です。また、TERM の動作するモード(プライベートモードか、共有モードか)を変 えるときには、ファイルとディレクトリの所有者とパーミッションも適合させる必要 があります。 o エラー gethostbyname: <hostname>: Non-authoritative `host not found', or server failed が発生した場合。 これを解決するには以下のことを確認してください: 1. ファイル '/etc/hosts' は正しく設定されていますか? <hostname> はあなたのホ スト名ではありません(古い SLS のリリースと、いくつかの古い、また新しい Slackware リリースでは、例として 'darkstar' というホストネームがついていま す)。ファイルの中のこの部分を修正してください。最低でも以下の行を含まねばなり ません(書き方はその上に書いてあります): # Local Hosts Format: # IP_NUMBER HOSTNAME ALIASES # # Here is the name of your host, first, followed by any aliases 127.0.0.1 localhost linuxpc.domain linuxpc もし外界とのコネクションが TERM によるものしかないのであれば、ファイル '/etc/hosts' にあるのは上の行だけということもあるでしょう。よく訪れる行き先の 実際のアドレスを '/etc/hosts' に書かないでください。TERM はこれらが '/etc/hosts' に入っていることによって手間取ることになってしまいます。 2. '/etc/rc*' と '/etc/resolv.conf' が誰でも読み出し可能に(chmod ugo+r)なって いますか。 3. 最後に、マシンに TCP/IP ループバックインターフェースがインストールされてい ることを確認してください。コマンド 'ifconfig' を実行することによってループ バックを確認できます。ループバックインターフェースがインストールされていれば 最低でも画面にこのような結果を得るはずです: lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.255.255.0 UP BROADCAST LOOPBACK RUNNING MTU:2000 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:4984 errors:0 dropped:0 overruns:0 ブート時にどのプロトコルが使用中か確認することもできます。私のマシンでは以 下のような行が表示されます: IP Protocols: ICMP, UDP, TCP TCP/IP やループバックインターフェースのインストールについては、NET-HOWTO を 読んでください。 o あらゆる種類の 'timed out' メッセージが TERM のログファイルに記録されたので すか?これは TERM コネクションが最適化されていないことを意味しています。少な い数のメッセージが時々現れる程度なら問題はありません。これらはまず間違いなく ローカルとリモートを結ぶ物理的コネクションに影響を与える一時的な要因によるも のです。 これらのメッセージを常にたくさん受け取る時は、コネクションは相当スピードを 落とすでしょう。上のセクション「コネクションを最適化する」で挙げたパラメータ をいじる必要があります。残念ながら、インストールのこの部分はトライアンドエ ラーの過程ということになります。コネクションに影響を与える要因はたくさんある ので、いろいろなパラメータについてどのような数値にしたら良いかというような一 般的な決まりはありません。これらの要因はコネクションによっても、また時間によっても異なります。 o リダイレクトされたポートを使う通常の FTP が働きませんか?残念なことに、FTP に必要なポート(20 と 21)のリダイレクションでは FTP が働かないというのは明らか になっている問題です。唯一の解決法は TERM 対応の ftp か ncftp を入手すること です。これまた残念なことに、いくつかの TERM 対応 ftp のバージョンは動作しない ように思います。 5. TERM クライアント TERM はデフォルトでいくつかのクライアントを提供しています。これには trsh, tmon, tupload, tredir, txconn そして新しいバージョンでは trdate, trdated が含 まれます。さらに、バージョン 2.0.0 からは tudpredir が利用可能になり、バー ジョン 2.1.0 からは tdownload が利用可能です。このセクションでは trsh, tmon, tupload, tdownload, trdate そして trdated について扱います。その他については それ自身のセクションがあります。TERM リンクを確立するまでは TERM クライアント は動作しません。 tmon はリンクの状態をモニターする簡単なユーティリティです。受信した、また送 信したキャラクタのタイムヒストグラムを表示します。単純に tmon で起動できま す。バージョン 1.11 などでは、間違った(??)情報を表示するバグがあります。 trsh は rsh に似ています。引数なしでは、リモートシステムのインタラクティブ シェルを起動(つまりログイン)します。trsh は TERM を通してリモート側にアクセス する基本的な方法の一つです。引数を渡すと、trsh はリモートシステムのコマンドと して実行します。例えば trsh ls はリモートシステムのホームディレクトリのファイルのリストを得られます。 tupload はローカルからリモートへ、最初の引数で与えられたファイルを転送しま す。デフォルトでは、ファイルは、相手側で TERM を起動したのと同じディレクトリ に格納されます。ファイルを他のディレクトリに入れるには、その名前を tupload の 二つ目の引数として与えます。例えば、もしファイル 'term114.tar.gz' をリモート システムの '/usr/tmp' にコピーしたいとすると、このようにタイプします tupload term114.tar.gz /usr/tmp tupload を使うときは 'tupload a.*' のようにワイルドカードを使うことができま す。シェルはワイルドカードを展開して、tupload は 'tupload a.1 a.2 ......' の ように呼ばれます。 tdownload はリモートからローカルへ、最初の引数で与えられたファイルを転送し ます。デフォルトでは、ファイルはローカル側で TERM を起動したのと同じディレク トリに格納されます。ファイルを別のディレクトリに入れるには、その名前を tdownload の二つ目の引数として与えます。例えば、ファイル 'term114.tar.gz'を ローカルシステムの '/usr/tmp' にコピーしたいとすると、このようにタイプします tdownload term114.tar.gz /usr/tmp tdownload を使うときには 'tdownload a.*' のようにワイルドカードを使うことは できません。その理由は tdownload を使うときには、ローカルのシェルにはリモート のディレクトリが見えていないからです。そのため、ローカルのシェルはワイルド カードを展開できないのです。 trdate は時刻を設定するユーティリティです。リモートマシンの時刻を読みとって ローカルの時計をリモートに合わせます。これは root で実行されなくてはなりませ ん。 trdated は trdate のデーモンバージョンです。'rc.local' で起動されるとデーモ ンとして実行され、5分(デフォルト)毎に時刻を合わせます。TERM コネクションのな い時でも、rc.local にセットされると起動します。TERM コネクションが張られる と、時刻を合わせはじめます。 6. X と TERM TERM はネットワーク上のマシンで走っているクライアントから X のウィンドウを 開くことを可能にします。これは txconn クライアントによってなされます。txconn はネットワークにつながったリモート上で実行されます;単に txconn と起動するだけ です。txconn はバックグラウンドに回って標準出力に数字を返します;この数字は、 クライアントがローカルマシンの X サーバにアクセスするときに使うディスプレイ番 号です。例をあげればはっきりするでしょう。私は foo というリモートの TERM ホス トに trsh を通してログインしています。私は以下のことを実行します。 foo$ txconn Xconn bound to screen 10 :10 foo$ では、自分のマシンの X サーバで表示したい X クライアントを走らせるホスト上 で、こうします。 setenv DISPLAY foo:10 (bash では export DISPLAY=foo:10 を使うことになります) xhost + foo あるいは xhost + をローカルマシンで実行しなければならない場合もあります。今、クライアントを起 動すると、クライアントはマシン foo のスクリーン 10 番につなごうとします。が、 txconn がこのスクリーンを見張っていて、X プロトコルのパケットを TERM を通じて ローカルホストの X サーバに転送します。すなわち、ウィンドウはローカルマシン上 に開くわけです。 このことは別の向きでも可能です−ローカルマシンでクライアントを実行し、ウィ ンドウをネットワーク上のリモートマシンに開くのです;しかしこれを説明するの は、後で tredir について議論するときまで先送りにします。 X プロトコルはそんなに効率が良くありません;いくらかバンド幅を無駄に使いま す。このことはイーサネットでは普通問題になりませんが、モデム経由では命とりに もなります。X11R6 は LBX という X プロトコルのバンド幅の低いバージョンを導入 することを想定しています。しかしもし X11R5 を使うのなら、X プロトコルを圧縮す る sxpc というユーティリティを使うことができ、シリアルライン上でのレスポンス を改善します。sxpc は TERM とともにどのように動かすかについて触れているので、 おすすめできます。sxpc のパッケージには xauth の使い方についても説明があるの で、なおのことおすすめです。 7. tredir tredir は TERM のもっとも強力なユーティリティのうちの一つで、もっとも重要な ネットワークサービスを TERM リンク上で動作させることを可能にします。tredir を どうやって使うかを説明する前に、ネットワークサービスについての裏側を少し説明 しておく必要があるでしょう。以前にもネットワークサービスについて触れました が、それが何であるかにははっきりとは触れませんでした。サービスというのはつま り−ネットワークによって提供されるサービスのことです。サービスの例としてはマ シン間でのログインを提供する telnet や、マシン間でファイルを転送する File Transfer Protocol, ftp や 電子メールを送る時に使う the Simple Mail Transfer Protocol, smtp などがあります。それぞれのネットワークサービスにはそ れに付随したポート番号があります。サービスに対するポート番号の割り当ては、イ ンターネットにつながったマシンの中のファイルによって与えられています。 サービスはどのようにして呼び出されるのでしょうか?それぞれのネットワークに つながったマシンには inetd というデーモンが走っていて、ネットワークポートへの 接続の試みを見張っています。これらのリクエストはネットワークからも、ローカル マシンからも来ることがあります。ネットワークサービスは、適切な inetd ポートに 接続することによって得られます。ネットワークリクエストが出されると、inetd は リクエストが出されたポート番号によってどのサービスを呼び出すかを知っています。 inetd がそのように設定されていれば、接続要求に対して適切なサービスを提供しま す。inetd の設定は、ファイル '/etc/inetd.conf' によって与えられ、それには inetd が提供するサービスのリストが載っています。さらに情報を得るには、inetd と inetd.conf のマニュアルページを見て下さい。 telnet (termtelnet でないことに注意)を使ってネットワークサービスと直接通信 することができます。例えば、マシン machine_name 上の sendmail (または smtp) デーモンと会話するには、telnet machine_name smtp とするか、 telnet machine_name 25 (25 は '/etc/services' で smtp に割り当て得られた番号 です)とすることができます。リモートマシンのデーモンから丁寧な挨拶を受けること でしょう。これはネットワークの問題や tredir によってリダイレクトされたポート の確認(以下参照)のために大変有効なトリックです。 tredir は inetd と大変似た働きをします。デーモンとしてバックグラウンドで実 行され、ネットワークポートを見張ってリクエストを待ちます。サービスに対するリ クエストが出ると、inetd がするように、サービスを提供する代わりにそのリクエス トを TERM リンクを通じてリモート TERM に転送し、リモートの TERM はネットワー クを通じてリクエストを出し、ローカルのクライアントに対してリンクを通じて結果 を返します。tredir はネットワーク上のどのマシンにもリクエストを転送できます が、デフォルトでは TERM リンクの相手側のマシンに送ります。tredir は TCP (Transmission Control Protocol)ネットワークサービスを TERM リンクを通じてリダ イレクトします。 tredir の一般的なコマンドの形式は: tredir [this_computer:]port [that_computer:]port 例をあげるとはっきりするでしょう。ローカルポートをリモートマシンの telnet ポートにリダイレクトしてみましょう。このためには、 tredir 2023 23 とします。これで、ローカルマシンのポート 2023 につないだ人はリモートマシンの ポート 23 (telnet) にリダイレクトされます。これがセッションの例です;ローカル マシンを mymachine.modem.home 、リモートマシンを netsun とします。 $ tredir 2023 23 Redirecting 2023 to 23 $ telnet localhost 2023 Trying 127.0.0.1... Connected to mymachine.modem.home Escape character is '^]'. SunOS UNIX (netsun) login: この例は実際に非常に便利です。代わりに netsun で tredir を実行したとしま す。ネットワークにつながったマシンのリダイレクトされたポートにつなぐ(telnet を使って)だけで mymachine に telnet できることになります−すなわち、 telnet netsun 2023 とするのです。 tredir の利用の一般的な本質はネットワーク上のマシンに必要とされるサービスを リダイレクトすることです。次の例では、ネットワーク上のニュースサーバから TERM リンクを通してローカルマシンでニュースを読めるようにします。ニュースは nntp サービスで提供され、ポート番号は 119 です。全てのきちんとしたニュースリーダ は、設定ファイルか環境変数でどのポート番号を使うかを設定できるようになってい ます。これをローカルのポート 2119 に決めましょう。では、ニュースサーバを news.domain.org とします。ポート 2119 を news.domain.org のポート 119 にリダ イレクトします;そしてニュースリーダには nntp サーバがローカルホストのポート 2119 にあると設定してやります。利用するニュースリーダにもよるので、ここでは ニュースリーダの代わりに telnet を使ってリンクをテストするだけにしましょう。 $ tredir 2119 news.domain.org:119 Redirecting 2119 to news.domain.org:119 $ telnet localhost 2119 Trying 127.0.0.1... Connected to mymachine.modem.home. Escape character is '^]'. 200 news.domain.org InterNetNews NNTP server INN 1.4 07-Dec-41 ready (posting ok). ここまで来れば、あとやるべきことはニュースリーダを TERM を通して読めるよう に設定することだけです(もしこのようにしてニュースを読むのであれば、投稿する全 ての記事の Reply-To: ヘッダににきちんと届く email アドレスをセットする必要が あります。そうでないと、あなたに連絡をとろうとする人達はニュースリーダのつけ る間違った) From: ヘッダを見てメールを出してしまうでしょう)。 7.1. tredir can bite! 最後の例を読んだ賢明なる読者は、なぜポート 2119 をポート 119 にリダイレクト したのかを不思議に思うでしょう−−ニュースリーダのデフォルトがポート 119 なら ば、なぜ tredir 119 news.domain.org:119 として、ニュースリーダの設定をしない で済まさないのだろうかと。答えは 1024 より小さいポートは「予約ポート」で、 スーパーユーザだけがこれを使うことができます。もしセキュリティ上の危険を冒し て tredir を SUID するか、root として tredir を実行すれば、予約ポートにリダイ レクトして、サービスの変更の混乱を避けられるでしょう。 予約ポートを使うもう一つの問題はすでに inetd がそれらのポートを見張ってい て、また同時には一つのプログラムしかポートを見張ることはできません。そのよう なポートを使うためには、リダイレクトしたいポートを変更しなくてはなりません。 ぶつかっているサービスの行に # をつけてコメントにしてしまうのが簡単です。スー パーユーザはそのあと、inetd に HUP シグナルを送って(kill -1 inetd-pid)、その 設定を読み直させなくてはなりません。 7.2. Stupid tredir tricks このセクションでは、もっと一般的な tredir の利用を述べます。すでに nntp と telnet サービスをリダイレクトする方法については述べました;ここではもう少し複 雑な例をあげます。 7.2.1. X windows 前のセクションで、txconn を使ってネットワーク上で走っている X のクライアン トに、ホームマシンにウィンドウを開かせる方法について述べました。TERM リンクの リモート側のマシンに、あなたのホームマシンからクライアントを表示するのに同じ テクニックが使えます。しかしリモート側になっていないネットワークマシンに X ク ライアントを表示するにはどうしたらいいでしょう?答えは、我々が議論してきた他 のプログラムと同じように、X が特定のネットワークサービスを使っているというこ とです。X サーバは、ポート = 6000 + ディスプレイ番号という形の番号で与えられ るポートでネットワークリクエストを見張っています。例えば、マシンのスクリーン 0 を使っている X サーバは、ポート 6000 を見張っています。もしスクリーン 2 を 使っているなら、ポート 6002 を見張っているということです。DISPLAY 環境変数を xmachine:n のようにセットすると、X クライアントは xmachine のポート 6000 + n につなごうとします。 このことを、ローカルマシンの X クライアントをだましてリモートのディスプレイ にウィンドウを開かせるのに使うことができます。ローカルマシンで走る xterm を、 ネットワークのどこかにある xmachine のディスプレイ 0 に開いてみましょう。最初 に、ローカルのディスプレイ番号、2 を選びます(0 を使ってはいけません。ローカル の X サーバがきっと使っているはずだからです。このディスプレイを xmachine の ディスプレイ 0 に割り当てます。ポート番号で言うと、このことはローカルポート 6002 を リモートポート 6000 にリダイレクトすることになります。こうしてみま しょう。 $ tredir 6002 xmachine:6000 $ setenv DISPLAY localhost:2 $ xterm これで xmachine 上に xterm が開くはずです。しかし DISPLAY を localhost:2 に セットしたことに注意して下さい。これは、DISPLAY を :2 にセットすると X クライ アントがローカルディスプレイに接続した時にオプションでインターネットドメイン ソケットではなく unix ドメインソケットを使うことがあるからです。localhost:2 は TCP コネクションを使うように指示しています。 xmachine とつながっている限り、X リクエストは TERM リンクのリモート側 (remotemachine)から来ることに注意して下さい。ですから、もしコネクションを認証 したいのであれば、xmachine 上で xhost + remotemachine を実行するか、xmachine からの鍵を使ってディスプレイ番号2についてローカルマシンの '.Xauthority' を更 新するために xauth を使うべきでしょう。 もう一度言いますが、X の接続のスピードをあげるために sxpc というプログラム を使うことができ、そこでリンクを確立するためにどのように tredir を使うか、 xauth を使ってそれをどのように認証するかについての説明がなされています。 7.2.2. TERM とメール これについて聞きたいですか。電子メールは UNIX システムの中で、きちんと動作 させるのがもっとも難しいものの一つであるという専らの評判です。メールとともに TERM を本当にきちんと動作させるということは、メールがどのように働いているかを 知ることでもあり、それはこの文書の範囲外です。メールについてさらに知りたいの なら、UNIX システム管理の書籍や rtfm.mit.edu:/pub/usenet/comp.mail.misc から anonymous ftp で手に入る comp.mail.misc の FAQ を参考にして下さい。現在 TERM のもとでメールを働かせる手助けになる二つのパッケージが sunsite.unc.edu から anonymous ftp で手に入ります。Byron A. Jeff による term.maierd+smail と Bill C. Riemers による BCRMailHandler です。 メールプログラムには二つのクラスがあります。最初の一つはメールユーザエー ジェント(MUA)です。MUA はメッセージを読み、書き、そして送ることを支援します。 MUA の例は elm, pine, Mail, そして vm です。MUA は全くネットワーキングを行な いません;メッセージを取りまとめるだけです−−メールを送る実際の仕事は二つ目 のクラスのプログラム、メールトランスファーエージェント(MTA)によってなされま す。これらは MUA によって呼び出されます。これらはメッセージを受け取り、アドレ スを見てどこへ送るのかを決定し、実際にネットワークを通じて配送します。 Linux システムにおける最も一般的な MTA は sendmail と smail です。基本的な 要点は、あなたの MTA を、メッセージをどのように処理するかを知っているネット上 のマシンで動作している別の MTA につなぐことです。これは、ネット上のマシンの smtp ポートにローカルポートをリダイレクトすることで実現できます。あなたは MTA を、そのように扱っていいかわからないメッセージを受け取って、それをローカルマ シンのリダイレクトされたポートを通じてリモートマシンの MTA に送り、そしてそれ がメッセージを正しい宛先に送るように設定しなくてはなりません。 smail を使ってどのようにこれを実現できるでしょうか?最初に、ネットワーク上 のメールマシン(mailhost)にポートをリダイレクトします。 tredir XXXX mailhost:25 ここで、XXXX はローカルホストの smail が接続するポート番号です(これには名前 をつけて '/etc/services' に書いて smail に認識させなければなりません)。Smail には普通 '/usr/local/lib/smail' に置かれるいくつかの設定ファイルがあります。 これからの論議では、すでにローカルメールについては正しく設定されているものと します−−ファイルや、パイプや、そういったものへの配達です。もう一度言います が、まだできていないのであればドキュメントを読んでください。 ファイル 'config' に、以下のような定義を加えます: smart_path=localhost localhost は、メッセージをどう扱っていいのかわからないときにつなぐマシン名 です。 'routers' には、これを入れます。 smart_host: driver=smarthost, transport=termsmtp; path=localhost 'transport' にはこれを入れます。 termsmtp: driver=tcpsmtp, inet, return_path, remove_header="From", append_header="From: YOUR_NET_ADDRESS", -received, -max_addrs, -max_chars; service=YOUR_SMTP_SERVICE, 上では、header の行が出ていく全てのメールの From ヘッダを YOUR_NET_ADDRESS に書き換えています。これはあなたがメールを送りたいネットワークのアドレスで す。もし複数のユーザが TERM リンクを使うのなら、ローカルユーザのネットワーク アドレスのデータベースを作って From: ヘッダに埋め込むなどの工夫が必要です。 service の行はネットワークにつながったマシンの smtp ポートにリダイレクトし たローカルのポート番号の名前を入れます。私のバージョンの smail では、これは番 号を設定するだけではだめで、"foo" のような名前を付けてやり、 '/etc/services' の中でリダイレクトされたポートとして定義する必要があります。もし SUID された tredir を使って、smtp ポート(25)をリダイレクトするのであれば、これを定義する 必要はありません。 これで十分なはずです。もし sendmail を使うことにしたのなら、原理的には同じ ですが細部が異なります。Ronald Florence (ron@mlfarm.com)は標準の Sun の sendmail ではリダイレクトされたポートを通してはキューに入った複数のメッセージ を送ることはできないと教えてくれました;BSD の sendmail 8.6.9 はうまくいきま す。彼は '/etc/sendmail.cf' を TERM とともに使えるように以下のように変更しま した。彼の場合、デフォルトの sendmail ポート(25)はローカルのイーサネットを通 しての smtp トラフィックに利用されていたため、インターネットメールはリダイレ クトされたポートに転送することにしました。 # #Create the termsmtp mailer, which sends mail via a re-directed TCP port # Mtermsmtp,P=[TCP], F=mDFMuCXe, S=22, R=22, A=TCP $h PORTNUMBER ここで、PORTNUMBER はローカルマシンのリダイレクトされたポートの番号です。こ れは 2000 以上の使われていないポートであるべきでしょう。次に、sendmail にどの マシンにつなげばいいのかを伝え、またデフォルトメーラとして termsmtp をセット します。 # # major relay mailer # DMtermsmtp # # major relay host: use the $M mailer to send mail to other domains # DR HOSTNAME CR HOSTNAME ここで、HOSTNAME はローカルホストの名前です(localhost で動くでしょうか?)。 最後のエントリはインターネットメールを転送する O ルールに基づくものです。 # Pass other valid names up the ladder to our forwarder R$*<@$*.$+>$* $#$M $@$R $:$1<@$2.$3>$4 user@any.domain インターネットホストに TERM コネクションが確立されたら、ローカルマシン上で 次のコマンドを実行してください。 tredir PORTNUMBER internet.host:25 /usr/lib/sendmail -q ここからは電子メールを TERM を使って受け取る方法に移ります。メールは mailhost というネットワークマシンにあるあなたのアカウントに届けられているとします。最も簡単な解決法は単に trsh か termtelnet で mailhost にログインしてそこでメールを読むことです。しかし、あなたのメールをローカルマシンに自動的にダウンロードさせることも可能なのです。これを実現する方法の一つが Post Office Protocol, (POP)です。POP はまさにこの目的のためにデザインされています:間欠的なネットワークコネクションを持つマシンにメールを配送するためです。POP を使うには、mailhost で POP サーバがインストールされていなくてはなりません。そうなっていれば、POP クライアントを使って数分ごとにメールをダウンロードできます。期待通り、これは tredir で行われます。POP サービスは 110 です(古いプロトコル POP-2 があって、これがポート 109 を使うことに注意してください;この文書では POP の最新版である POP-3 について記述します)。いくつかの POP クライアントが入手可能です。一つは、スクリプト言語 perl によって書かれた pop-perl-1.X で、William Perry によって書かれ、私がメンテナンスしています−− sunsite.unc.edu:/pub/Linux/system/Mail で見つかるでしょう。 POP を使うために、ローカルポートを mailhost のポート 110 にリダイレクトし、 クライアントにはローカルポートを使ってローカルホストからメールを取得するよう に設定します。例では、mailhost で POP サーバが走っていることを仮定します。 ローカルポート 2110 をリダイレクトし、pop-perl クライアントを起動します: $ tredir 2110 mailhost:110 Redirecting 2110 to mailhost:110 $ pop Username: bill Password: <enter your password for mailhost> Pop Host: name of local Pop Port: 2110 Starting popmail daemon for bill POP サーバが利用できない場合、BCRMailHandler パッケージに TERM リンクを通じ てメールをローカルマシンにダウンロードするプログラムが含まれています。私は 使ったことがありませんが、使ったことのある方のコメントを歓迎します。 term.mailerd+smail パッケージもこの目的に使うことができます。残念ながら、 BCRMailHandler も term.mailerd+smail パッケージも TERM バージョン 2.0.0 以上 ではもう動きません。 8. tudpredir tudpredir は、プログラムが何をするのか、またどのように起動されるのかという ことを見れば tredir に似ています。これら二つのプログラムの大きな違いは tredir が TCP ネットワークサービスをリダイレクトするために使われるのに対して、 tudpredir は UDP (User Datagram Protocol) ネットワークサービスを TERM リンク を通してリダイレクトするということです。二つのプログラムの間のもう一つの違い は、tredir がローカルポートを確立するのに成功するとバックグラウンドデーモンに なるのに対して、tudpredir では明示的にバックグラウンドに回さなければならない ということです。 一般的な tudpredir の形は: tudpredir [this_computer:]port [that_computer:]port 9. 作業の自動化 さて、ここまでで全てのネットワークサービスを TERM を通して得る方法を知りま したので、リンクが自動的にセットアップされ、設定までできるようになったらいい ですね。そのような方法はどのコミュニケーションプログラムを使うのか、こと用に リモートシステムにログインするのかによって無数に存在するでしょう。 私は使ったことがありませんがとてもいいと聞いているプログラムが fet, a front end for TERM です。これはリモートシステムにログインし TERM を起動し全 ての tredir を実行するようデザインされています。fet についてのあらゆるコメン トは大歓迎です。 ここでは例として、kermit を使ってリモートシステムにログインし、全ての TERM の初期化をするコマンドのセットを紹介しましょう。もちろんですが、あなたがこの 例を使うのなら、あなた自身のログイン手順にあわせて修正する必要があるでしょう。 実際に呼び出されるコマンドはシェルスクリプト 'knet' で、このようなものです。 #!/bin/sh /usr/bin/kermit -y $HOME/.kerm_term > $HOME/klog < /dev/null 2> & 1 exec $HOME/bin/tstart >> $HOME/klog 2> & 1 スクリプト '.kerm_term' は次のようなものです。 pause 2 # The number you want to dial output atdtXXXXXXX \13 # Login to the terminal server input 145 {name: } output MYNAME \13 input 3 {word: } output MYPASSWORD \13 input 5 {xyplex>} # Make the line transparent output term telnet-t \13 output term stopb 1 \13 # Connect to the remote host output telnet remotehost.somedomain.org \13 input 10 {ogin: } output MYOTHERNAME \13 input 3 word: output MYOTHERPASSWORD \13 pause 5 # Fire up term on the remote host output exec term -s 38400 -l $HOME/tlog -w 10 -t 150 \13 ! /usr/bin/term -r -l $HOME/tlog -s 38400 -c off -w 10 -t 150 < /dev/modem > /dev/modem & # Open other clients here suspend !killall -KILL term 最後に、 TERM クライアントを起動するスクリプト 'tstart' がこれです。 #!/bin/sh # # This lets mail get out, can read news here, can pick up my mail here # /usr/local/bin/tredir 2025 25 2119 newshost:119 2110 pophost:110 # # So I can open up Xwindows here # /usr/local/bin/trsh -s txconn # # So I will receive mail.... # /usr/local/bin/pop # # Clean out the queue, in case of boo-boos # /usr/bin/runq # # Done now # echo ^G^G > /dev/console 最後にコネクションを切りたくなったら、kermit をレジュームし、サスペンドして ください。スクリプトの最後の行がローカルの TERM を kill してシステムを最初の 状態に戻します。 (著者からの注意:'!killall -KILL term' する代わりに '!tshutdown' でも可能な はずなのですが、これも動くでしょうか?) 先ほどいったように、やり方は無数にあります;これらは単にスタートを切るため の例に過ぎません。このほかの例も autoterm や JoelTermStuff のパッケージで見つ かるでしょう。 10. ソフトを TERM とともに使えるようにする 原理的には、ネットワークを使うプログラムは TERM との組み合わせでも動かせま す。そのうちのいくつかはすでに TERM が組み込まれたバイナリとして手に入りま す。これらには telnet, (nc)ftp, Mosaic そしてその他たくさんあります。それらの プログラムのほとんどは TERM 1.17 以前のもののためにコンパイルされています。し かし、新しいバージョンの TERM でも動くはずです。 プログラムを TERM 対応にするもう一つの方法は、自分で移植することです。この 過程については次のサブセクションで述べます。 プログラムを TERM 対応にする最後の方法は、temify することです。 10.1. ソースの移植とコンパイル ソフトウェアを TERM に移植するのはとても簡単な移植手順で可能です: もし '/usr/local' に root によってインストールされているならば: 1. コンパイルフラグ -include /usr/local/include/termnet.h を加える 2. ライブラリリストに -L$HOME/term -ltermnet を加える そしてソフトウェアについてくる INSTALL や README といった文書に書かれた通り にコンパイルすればいいのです。これだけです! この時点で、コマンドは TERM と共にでもそうでなくとも動作します。 telnet localhost は接続に TERM を使いませんが、 telnet bohr.physics.purdue.edu は他のタイプのネットワークコネクションがない限り TERM を使います。 rlogin のようないくつかのコマンドは root か TERM コネクションの所有者(特権 を持っている人)だけが実行できます。 いくつかのコマンドは TERM に対し透過的で、他に選択肢のない時にだけ TERM を 用います。例としては telnet や ftp があります。 他のものは TERM を使ってよいということを外からフラグをたてて伝える必要があ ります。これらのプログラムには xarchie, fsp そして ytalk が含まれます。 これらのプログラムにフラグを与えるには、環境変数 TERMMODE を README.security にならって設定することもできますし、make installnet を実行することもできま す。結局、作られる'termnet' ファイルは特別なネットワークの指示を含みますが、 その存在だけが確認されるのです。 もしイーサネット接続を加えるのなら、単に 'termnet' ファイルを削除して同じバ イナリを使い続けることができるのです! 注意:client.a の頃に移植されたプログラムは単に client.a から termnet.a を 見るように変更するだけで、新しいバージョンの TERM でも再コンパイル可能です。 10.2. Termify このパッケージは、TERM を使うためにダイナミックリンクライブラリを変更します。 termify を使う前に、TERM バージョン 2.2i (これはバージョン 2.2.8 でしょう か?)以上、そして libc.so.4.5.26 以上を使っている必要があります。その後、ディ レクトリ '/lib' にファイル 'libt.so.4' を作る必要があります(パッケージの README ファイルを見てください)。 この時点での問題は、TERM のバージョンをあげるごとにファイル 'libt.so.4' を 作り直さなくてはならないということです。 ライブラリができたら、このようなコマンドを使って、 TERM 対応にしたいプログ ラムを termify に食わせてやればいいのです: termify <command name> 最後に、パッケージには 'smail' を完全に termify するスクリプトが入っていま す;特別な転送の設定は必要ありません。変更しなければならないのは 'From:' アド レスくらいでしょう。 11. Term クライアント 11.1 ftp サイトから入手可能な Term クライアント 以下に、TERM を使って実行することのできるアプリケーションのリストを挙げま す。これが完全だとはいいません;あらゆる追加を歓迎します。可能な限りアプリ ケーションのあるサイトとディレクトリを入れているつもりです(私の知識の全て)。 私がアプリケーションの見つかる場所は sunsite.unc.edu であると記述したら、それ は以下の二つのディレクトリから見つかるという意味です。 1. /pub/Linux/apps/comm/term/apps 2. /pub/Linux/apps/comm/term/extra ではいってみましょう :-) TERM パッケージ: tupload tdownload (バージョン 2.1.0 以上) trsh tmon tredir tudpredir (バージョン 2.0.0 以上) txconn trdate(d) tshutdown libtermnet ファイル転送: ftpd sunsite.unc.edu termncftp sunsite.unc.edu ncftp185 sunsite.unc.edu:/pub/Linux/system/Network/file-transfer fsp sunsite.unc.edu:/pub/Linux/system/Network/file-transfer インフォメーションシステム: lynx Mosaic sunsite.unc.edu:/pub/Linux/system/Network/info-systems/Mosaic chimera netscape sunsite.unc.edu:/pub/Linux/system/Network/info-systems httpd xgopher gopher sunsite.unc.edu リモートログイン: termtelnet sunsite.unc.edu rlogin physics.purdue.edu:/pub/bcr/term/extra rsh physics.purdue.edu:/pub/bcr/term/extra ネットニュース: tin 1.3 sunsite.unc.edu:/pub/Linux/system/Mail/news news2 sunsite.unc.edu メール: slurp sunsite.unc.edu smail sunsite.unc.edu term.mailerd+smail sunsite.unc.edu BCRMailHandlerXXX physics.purdue.edu:/pub/bcr/term 自動化スクリプト: JoelTermStuff sunsite.unc.edu autoterm sunsite.unc.edu fet sunsite.unc.edu その他のプログラム: inetd sunsite.unc.edu rdate sunsite.unc.edu xgospel sunsite.unc.edu:/pub/Linux/games/x11/networked termify physics.purdue.edu:/pub/bcr/term/extra xboard sunsite.unc.edu ircII sunsite.unc.edu:/pub/Linux/system/Network/chat whois xwebster sunsite.unc.edu sxpc ftp.x.org:/R5contrib xztalk sunsite.unc.edu:/pub/Linux/apps/sound/talk 11.2. termnet パッケージ termnet-2.0.4-Linux-bin.tar.gz (sunsite.unc.edu:/pub/Linux/apps/comm/term) パッケージにはいくつかのコンパイルされた TERM クライアントとスクリプト、マ ニュアルページや libtermnet.so.2.00.04 が含まれています。クライアントは libtermnet.so のバージョンでコンパイルされています。パッケージは以下のクライ アントを含みます: fet finger ftp fwhois ncftp 警告:このパッケージには TERM 自身を含む TERM 2.0.4 のコンパイルされたクライ アントも含まれています。何をしたいのかを確認しないでインストールしてはいけま せん。実行ファイルをあちこちに移動しだすと、他のバージョンの TERM やそのクラ イアントを破壊してしまうこともあります。 11.3. 望まれてはいるがまだサポートされていないもの 1. DOOM: クライアントとサーバの両方がポート 5029 を使うという事実がこのゲーム の問題になっているようです。 2. NFS: NFS は 接続要求をするソケットが 1024 以下のポートにつながるようになっ ている場合に限りリクエストを受け付けると仮定しています。これは面倒なことで す。しかしながら、いくつかの NFS サーバは 'insecure' オプションを持っていま す。このような場合 RPC サポートが Term に加えられれば NFS は動くかもしれませ ん。 12. Term とセキュリティ このセクションでは、いくつかの TERM のセキュリティの外観について指摘してお きます。問題が説明され、セキュリティを向上させる方法が書かれています。 12.1. trsh trsh はリモートシステムからローカルの Linux box にアクセスするために使われ ると危険です。TERM とそのクライアントの問題は、TERM コネクションの所有者に加 えて 'root' もコネクションを通じて TERM 対応プログラムを実行できるということ です。 このことは、リモートシステムの 'root' が trsh を実行して TERM コネクション の所有者のログインに入ることがわめて簡単にできるということです。 この問題の解決法は簡単です:ローカルマシンの termrc ファイルに次のような行 を入れるだけです: denyrsh on これを 'termrc' ファイルにセットすることにより、リモートサイトにいる誰もが trsh を使ってあなたのマシンにアクセスできなくなります。TERM コネクションを通 してあなたのローカル Linux box にアクセスしたいのであれば、telnet やリダイレ クトされたポートは使うことができます。 12.2. txconn と xauth txconn は恐ろしく安全ではありません;誰でもが TERM を通じてあなたのローカル サーバにあらゆるいたずらを仕掛けることができます。この種のことで心配するのな ら、コネクションを認証するために xauth を使うことを考えるのがいいアイデアにな るでしょう。xauth を使ってコネクションを安全にする方法については次のセクショ ンを見てください。 12.3. sxpc, xhost と xauth sxpc は 'xhost +' と共に使うと、xauth を使わない限り非常に危険です。 sxpc を使うにあたって、xauth を使うことはセキュリティを確保する上で非常に重 要なことです。sxpc を使うとき xauth を使わないなら、'xhost +' を使うのと同じ 全ての危険が生じます。これらの危険が含まれますがこれに限りません: o あなたのスクリーンに何が表示されているのかを見る o 何をタイプしているのかを見る o 誰かがあなたのウィンドウでタイプする(例えば、あなたの全てのファイルを削除す る :-( xauth は X リリース R4 から利用可能になっています。ここでは xauth の基礎的 な使い方のセットアップについて述べます。この設定はネットワークを動き回るには 無防備ですが、それでよければうまく動くでしょう。 注意:xauth を使うときには $DISPLAY 変数をローカルホストにセットしては「いけ ません」(または、localhost:何とか)。$DISPLAY 変数がローカルホストを使うように なっていると、クライアントは適切な認証情報を見つけることができなくなります。 本当のホスト名をつけてやればよいのです。README に従ってコンパイルするなら、 -DNOGETHOSTNAME なしでコンパイルすればうまくいくでしょう。 クライアントを走らそうとするマシンを C と、また表示したいマシンを D としま す。 最初に、最大 16 の 16 進数の数字の組を鍵として選びます(0-9 と a-f からなる 偶数個の数字ということになります)。この鍵を以下の例に示す <key> の場所に置か なくてはなりません。 C で: % xauth xauth: creating new authority file $HOME/.Xauthority Using authority file $HOME/.Xauthority xauth> add Chostname:8 MIT-MAGIC-COOKIE-1 <key> xauth> exit D で: % xauth xauth: creating new authority file $HOME/.Xauthority Using authority file $HOME/.Xauthority xauth> add Dhostname/unix:0 MIT-MAGIC-COOKIE-1 <key> xauth> add Dhostname:0 MIT-MAGIC-COOKIE-1 <key> xauth> exit D で X サーバをスタートするときに、フラグ -auth $HOME/.Xauthority をつけな ければなりません。X サーバがどのようにスタートするか、'$HOME/xserverrc' を編 集あるいは作成する必要があります。例えば: #!/bin/sh exec X -auth $HOME/.Xauthority $* '.Xauthority' ファイルが C においても D においてもあなただけが読めるように しておいてください。 13. 覚えておくこと このセクションでは、TERM についてのソフトウェアや情報を得るのに役に立つ ftp アドレスや URL を書いておこうと思います。 Ftp: sunsite.unc.edu:/pub/Linux/apps/comm/term/<whole-directory-tree> sunsite.unc.edu:/pub/Linux/docs/HOWTO/<whole-directory-tree> physics.purdue.edu:/pub/bcr/term/<whole-directory-tree> URL: http://sunsite.unc.edu/mdw/HOWTO/Term-HOWTO.html http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html (常に最新のバージョン) http://physics.purdue.edu/~bcr/homepage.html Netnews: comp.os.linux.announce 新しい TERM のバージョンと Term-HOWTO のアナウンス comp.os.linux.help TERM についての質問はここへ comp.os.linux.misc またはここ comp.protocols.misc TERM に関する質問への答えはここにもポストされます 関連文書: Using Term to Pierce an Internet Firewall HOWTO by Barak Pearlmutter, bap@learning.scr.siemens.com Firewall HOWTO by David Rudder, drig@execpc.com Serial HOWTO by Greg Hankins, gregh@cc.gatech.edu Net-2/Net-3 HOWTO by Terry Dawson, terryd@extro.ucc.su.oz.au ネットニュースで質問をするときには、みなさんがその問題を解決するのに十分な 情報を入れるようにしてください(TERM のバージョン番号、コネクションのセット アップの方法、等)。現時点で多くの TERM のバージョンが使われておりそれ特有の、 また一般的な問題も存在します。そのため、もし有用な回答がほしかったら、少なく とも TERM のバージョンは記載すべきです。そうでないと、場合によっては問題を解 決するために大まかな推測だけしか得られないでしょう。 14. TERM のバージョンと信頼性 多くの TERM のバージョンが存在します。TERM をメンテナンスしている Bill Riemer は、どのバージョンが安定していてどのバージョンを避けるべきかとい うリストを作りました。このリストが以下のものです。 term110 --> なんとも言えない term111 --> なんとも言えない term112 --> なんとも言えない term113 --> なんとも言えない term114 --> そこそこ安定したβバージョン term115 --> 不安定なβバージョン term116 --> 不安定なβバージョン term117 --> 不安定なβバージョン term118 --> いくらか安定したβバージョン term119 --> 安定したガンマバージョン term-2.0.X --> いくらか安定したβバージョン term-2.1.X --> さらに安定したβバージョン term-2.2.X --> 新しいβバージョン term-2.3.X --> 15. Term スピード表 Bill McCarthy のおかげで、違うモデム、TERM のバージョン、コネクションの状態 での TERM のスピード表があります。この目的は、新しい、また経験を積んだユーザ に他の人たちが何を使っているのか、またどのような結果を得ているのかを知らせる ことです。 LINUX TERM 表 8/14/94 |___modem speed/make___|___line speed__|__avg cps__|__high__|__term ver_| | 1) USR SP 14.4 | 9600 | 950 | 963 | 1.17 | | 2) USR SP 14.4 | 14400 | 1376 | n/a | 1.18p06 | | 3) Zoom 2400 | 2400 | 220 | 230 | 1.19 | | 4) Boca V.32bis 14 | 57600 | 1400 | n/a | 1.01/09? | | 5) Viva 14.4 | 14400 | 1300 | n/a | 1.16 | | 6) USR SP 14.4 | 14400+ | 1550 | 1680 | 1.19 | | 7) Intel 14.4 Fax | 14400 | 1400 | 1650 | 2.0.4 | | 8) cable tv hookup | 57600 | 1500 | 1800 | 1.18p06 | | 9) Twincom 144/DFi | 57600 | 1500 | 4000? | 2.0.4 | | 10) USR SP 14.4 | 14400 | 1200 | 1500 | 1.08 | | 11) cable tv hookup | 19200 | 1300 | 1800 | 1.19 | |-----------------------------------------------------------------------| +コマンドフラグと/termrc 設定: 1) default escapes 2) window 5 3) baudrate 2400 4) n/a baudrate 9600 timeout 200 window 3 window 10 noise on timeout 150 5) compress off 6) baudrate 19200 7) ignore 19+17 8) compress off window 10 compress on window 4 escape 0, 13, timeout 150 timeout 90 16-19, 255 baudrate 38400 baudrate 0 shift 224 flowcrtl 500 window 10 timeout 70 retrain on breakout 24 9) compress off 10) compress off 11) baudrate 19200 baudrate 57600 baudrate 38400 compress on window 10 escape 17, 19 shift 224 timeout 200 remote escape 0, 13 16-17 noise on 19, 255 share on window 10 remote timeout 40 片方でエスケープしたキャラクタはもう一方で無視していることを意味しています。 16. ネット上で見つかるヒントとトリック Linux 関連のニュースグループでは、毎週 TERM に関する多くの質問がなされまた 回答されています。ニュースグループへのトラフィックを減らすため、このセクショ ンではこれらの質問とそれに対する答えをまとめてみようと思います。いくつかの答 えについては、私も同じ問題に関係したために確認をしました。それ以外は、単に ニュースグループからとってきただけでテストはしていません。 o 多くの人たち、特に Ultrix を使っている人たちが、24 行のウィンドウを使ってい るときに vi が 24 行以下しか表示しないというトラブルに見舞われているようで す。これを取り除くには3つの方法があります。 1. このようにリモートシステムにログインする trsh -s telnet <hostname> 2. '.login' ファイルに 'resize; clear' を入れる 3. 最もいい解決法はリモートでこのように入れることではないでしょうか: stty 38400 o 多くの人たちが何らかの理由での TERM コネクションのクラッシュが問題になって いるようです。そのため、アプリケーションをスタートする前に TERM コネクション がまだ生きているのかそうでないのかを知りたいと思っています。例として、これは 以下のような小さなシェルスクリプトで確認できます: tcsh を使っているなら: if ( { trsh -s true } ) then ... endif bash を使っているなら if trsh -s true; then ... fi o WWW ブラウザ Netscape を TERM と共に動かすことで問題が起きているようです。 いいニュースは、これは TERM のもとで動くということです。どのようにするかは: 1. Netscape を termify する 2. termnetscape を起動する Options | Preferences | Mail/Proxies 以下の「全ての」プロクシーボック スを空白にする SOCKS のボックスを 'remotehost' & 80 にセットする。 3. Options メニューから出るときのエラーを無視する。 4. termnetscape が正しく動かなかったら: Options | Preferences | Mail/Proxies 以下の「全ての」プロクシーボック スを空白にする SOCKS のボックスを 'none' & 80 にセットする。 5. Options メニューから出るときのエラーを無視する。 Scott Blachowicz は TERM リンクのリモート側にプロクシーサーバ(例えば、CERN の httpd)がインストールされていれば Netscape やその他のブラウザを TERM と共に 動かすのはかなり簡単だとメールしてくれました。ローカル側では、このようにしま す: 1. tredir localhost:8080 remotehost:80 ここで、 'remotehost' はプロクシーサーバシステムのホスト名です。 2. ブラウザを起動し、preferences や options やそういったものの中で 'localhost' のポート 8080 番をプロクシーにセットする。 いくつかのブラウザでは、このように環境変数をセットします。 export http_proxy=http://localhost:8080/ export ftp_proxy=http://localhost:8080/ 17. その他のこと いくつかのことを入れたいと思っています。 o トラブルシューティングの拡張 o セキュリティの論点の拡張 o Termwrap o 提案 もし提案、批評、この文書に関する何か他にあれば、どのような形でも結構ですの で出してください。今は、私 Patrick Reijnen が TERM-HOWTO の原作者となっていま す。私には(現在)、patrikr@bart.nl で連絡が取れます。 18. 謝辞 多くの人たちに感謝します。まず第一に我々にこのようなすばらしいツールを提供 してくれた Michael O'Reilly と TERM の開発者全てに。またこの HOWTO にフィード バック、また貢献してくれた全ての人たちに感謝します。前の作者である Bill Reynolds, Ronald Florence, Tom Payerle, Bill C. Riemers, Hugh Secker-Walker, Matt Welsh , Bill McCarthy, Sergio Weyman Martin そしてこ こであげることのできない全ての人たちに感謝します。 <<訳者より>> 1. [無保証]私はこの翻訳が正しいことを保証しません。必要ならば Term のマニュ アルやこの文書の原文を読むなどして下さい。 2. [謝辞]翻訳を支援して下さった JF の方々、ありがとうございます。 3. [お願い]この訳文の誤訳の指摘、御意見、御感想などお寄せ下さい。