TERM を構築して使い始める前に、カーネルに TCP/IP のサポートを組み込んである ことを確認しましょう。さらに、ループバックインターフェースも使えるようになっ ていることも確認してください。そうしたら、このセクションの残りに進むことがで きます。
新しい TERM のバージョンでは新しい二つの概念が TERM に導入されました。これ ら二つの概念については、次の二つのサブセクションで解説します。
バージョン 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 しておかねばなりません。
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 のもとでは 動作しません。
もしあなたがラッキーなら、これは make を起動するだけです。しかしおそらくほ とんどの場合、それ以上のことをする必要があるでしょう。新しいバージョンの新し い機能のために、TERM のバイナリを作る作業はちょっと複雑になっています。バイナ リを得るために二つの方法があります。
TERM を構築するためのこれらの方法をすべてカバーするためにこのセクションは 3 つのパートに分かれます。
最初に、上の「フル TERM ネットワーク」について のセクションを読んだかどうか確認してください。
TERM バージョン 2.0.0 かそれ以上では、TERM のバイナリとクライアントを作るた めに多くの方法があります。これらのすべては root であっても一般ユーザであって も実行可能です。
フル TERM ネットワークを使わずにプライベートモードで TERM を構築する
フル TERM ネットワークを使ってプライベートモードで TERM を構築する
フル TERM ネットワークを使わないで共有モードで TERM を構築する
フル TERM ネットワークを使って共有モードで TERM を構築する
これらのバージョンの TERM では、configure スクリプトを用いる新しいコンパイ ル方法が導入されました。configure は起動されると何のオペレーティングシステム に TERM をインストールしようとしているのか、ソースディレクトリは利用可能か、 ランタイムオプションをつけるかどうかなどをチェックします。そこで見つけたこと をもとにして、configure は TERM のパッケージに含まれる Makefile.in を使って Makefile を作ります。
configure のオプションのうち重要な2つは --root と --user で、これは TERM のインストールが root として行われるのか、一般ユーザとして行われるのかを規定 します。TERM のインストールには、あなたの望むように、他のオプションも指定でき ます(例えば標準的でない path)。
フル TERM ネットワークを使わずにプライベートモードで TERM を構築する
この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方):
./configure --root または --user make install installman |
これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。
フル TERM ネットワークを使ってプライベートモードで TERM を構築する
この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方):
./congfigure --root または -user make installnet installman |
これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。
フル TERM ネットワークを使わないで共有モードで TERM を構築する
この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方):
./configure --root または --user make share installman |
これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。
フル TERM ネットワークを使って共有モードで TERM を構築する
この方法で TERM を構築するには、次のようなコマンドを実行する必要があります (root としてか、一般ユーザとしてかの両方):
./configure --root または --user make share installnet installman |
これはバイナリを構築し、それらのバイナリとマニュアルページをインストールし ます。
これらのバージョンの TERM を構築するために、以下の方法の中から選ぶことがで きます。
一般ユーザとして、プライベートモードで TERM を構築する
一般ユーザとして、共有モードで TERM を構築する
root として、プライベートモードで TERM を構築する
root として、共有モードで TERM を構築する
いかに、TERM のコンパイルの時に共有機能を導入したり、切ったりする方法につい て説明します。
あなたは一般ユーザで(root アクセスがなく)、他のユーザと TERM コネクション を[共有したくない]とします。
TERM コネクションを他のユーザと共有したくないユーザは、TERM を構築するため に以下のようにします:
make DO=install OS-type make installman |
TERM の後、そのクライアントとマニュアルページが構築されインストールされます。
さらに、あなたは '$HOME/.term' というディレクトリを作る必要があります。これ は、TERM が 'termrc' ファイルを探すためのディレクトリです。
あなたは一般ユーザで(root アクセスがなく)、TERM コネクションを他のユーザ と[共有したい]とします。
TERM コネクションを共有したいユーザは、このようにします:
make DO=installshare USERSHARE=$HOME/term OS-type make installman |
TERM の後、そのクライアントとマニュアルページが構築されインストールされます。
さらに、パーミッション 'drwxrwxr-x' をもったディレクトリ '$HOME/term'(デ フォルト)が必要です。最低でも、このディレクトリの中に TERM がそのコネクション に使うソケット('tmp/private/socket=')が見つかるでしょう。
あなたは root で、他のユーザと TERM コネクションを[共有したくない]としま す。
TERM コネクションを共有可能にしたくない root は TERM を構築するために以下の ようにします:
make DO=install OS-type make installman |
TERM の後、そのクライアントとマニュアルページが構築されインストールされます。
さらに、パーミッション 'drwxr-xr-x' をもったディレクトリ '/usr/local/lib/term'(デフォルト)が必要です。最低でも、このディレクトリの中に TERM がそのコネクションに使うソケット('tmp/private/socket=')が見つかるでしょ う。
あなたは root で、TERM コネクションを[共有したい]とします。
最初に、上の「共有」のセクションを読んだことを確認してください。
TERM コネクションを共有したい root は以下のようにします:
make DO=installshare OS-type make installman |
TERM の後、そのクライアントとマニュアルページが構築されインストールされます。
さらに、パーミッション 'drwxrwxr-x' をもち TERM グループに所有されたディレ クトリ '/usr/local/lib/term'(デフォルト)が必要です。最低でも、このディレクト リの中に TERM がそのコネクションに使うソケット('tmp/private/socket=')が見つか るでしょう。
これらのバージョンの TERM の構築にはこのコマンド以外に必要ありません。
make DO=install OS-type make installman |
この後、TERM と、そのクライアントとマニュアルページがうまく構築されてインス トールされ、使えるようになっているでしょう。
さらに、ディレクトリ '$HOME/term' を作ることが必要です。このディレクトリは、 TERM が termrc ファイルを探すために使います。
やらなくてはならないことは、Makefile 中のいくつかの PATH とコンパイラフラグを 変更することだけです。
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 対応にするために利用することもできます(以下参照)。
TERM はユーザによって設定されたいくつかの環境変数を認識します。これらのう ち、私が解説する最初の3つは:
TERMDIR
TERMSHARE
TERMMODE
これらの変数を設定することで TERM の実行方法をコントロールすることができま す。
バージョン 1.15 までの TERM では変数 TERMDIR だけが重要です(これらのバー ジョンに共有モードはありません)。これらのバージョンでは、TERMDIR は以下のよう にセットするとよいでしょう。
setenv TERMDIR $HOME (csh または tcsh) export TERMDIR=$HOME (bash) |
バージョン 1.16 からは TERM はさらに変数 TERMSHARE と TERMMODE を認識するよ うになっています。これらの変数によって、TERM にプライベートモードで走るのか共 有モードで走るのかを知らせることができます。ここではプライベートモードと共有 モードへの変数の設定法を解説しましょう。
TERMMODE は以下の3つの値をとります。
0 = プライベート
1 = システム共有
2 = ユーザ共有
TERM をプライベートモードで実行するには、変数 TERMDIR と TERMMODE を以下の ように設定します:
csh と tcsh では
setenv TERMDIR $HOME setenv TERMMODE 0 |
bash では
export TERMDIR=$HOME export TERMMODE=0 |
TERM を共有モードで利用したい場合、変数の設定には二つの方法があります:
TERM が SUID プログラムとしてインストールされた場合、 TERMMODE のみ設定する 必要があります。
setenv TERMMODE 2 (csh または tcsh) export TERMMODE=2 (bash) |
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) |
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 が実行されてしまわない ようにしてください。
TERM を使えるようにする前に、kermit や seyon といったコミュニケーションプロ グラムを用いてモデム経由の接続を確立しなくてはなりません。コミュニケーション プログラムのドキュメントに、リモートマシンとの接続の確立には何をすることが必 要なのかが書かれています。
リモートマシンとの接続が確立し、TERM を起動しようというときに、リモートマシ ンとの接続を切らないでコミュニケーションプログラムを終了、あるいは中断する必 要があります。コミュニケーションプログラムが linecheck や TERM からキャラクタを奪ってしまわないように、このことが必要です。
どのように接続を保持し、コミュニケーションプログラムが linecheck や TERM か らキャラクタを奪わないようにするのかについて、以下にいくつかのコミュニケー ションプログラムを挙げます。
kermit を使っているなら、TERM を始めるのは簡単です。ローカルの kermit プロ ンプトで suspend と打ち込めばいいのです。Linux のプロンプトに戻ったでしょう。 このプロンプトから TERM コネクションを張ることができます。
あなたが 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' と打ち込むこともできます。これはさらに自動的に入力と出 力をリダイレクトします。
きっと、あなたはローカルとリモートのホストとの間のモデムコネクションを確立 できるでしょう。一般的には、何らかの種類のターミナルサーバにダイアルし、そこ からリモートホストに接続することになるでしょう。あなたはさらにモデムと会話す るために kermit や seyon などのある種のターミナルソフト(著者が使っているた め、この文書では例としてkermit を挙げます)を使っていることでしょう。もしモデ ムやターミナルソフトで問題が起きたら、Serial-HOWTO を読んでください;きっと助 けになるでしょう。
リンクを確立し終えたら、それを可能な限り透過的にしたいと思うでしょう。ター ミナルサーバのコマンドをチェックしてください(help か ? から始まるでしょう)。 可能なら8ビットオプションをつけてください。これはシステムへのログインの仕方 を変えることになるかもしれません。例えば、もしサーバが rlogin を使っていた ら、それを使わなくてはならないし透過的にするためにはそれに -8 オプションをつ けなければなりません。特に xon/xoff フロー制御には注意してください。それは好 ましくありません。rts/cts (ハードウェア)フロー制御ができるようにしてみてくだ さい。8ビット rts/cts コミュニケーションを形成するためにモデムのドキュメント を読む必要があるかもしれません。
警告:いくつかの文書では、linecheck のコマンドラインオプションが間違った順序 で説明されています。私はこれをチェックし、以下のオプションの順序が正しいこと を確認しました。
注意:TERM バージョン 2.3.0 からはコマンドラインにログファイルの名前を必要と しなくなりました。ログファイルは linecheck を起動したディレクトリ上のファイル 'linecheck.log' にその出力を書き出します。
Linecheck は TERM とともに供給されるプログラムです。リンクの透過性をチェッ クして TERM が正しく動作するために必要な設定の情報を提供します。linecheck は 8ビットのキャラクタ 256 個をそれぞれ送り、それがきちんと送信されたかどうかを 検査します。TERM はリンクを通じて送信できないキャラクタを設定されなくてはなり ませんので、linecheck はそのキャラクタが何なのかを特定するのです。linecheck は透過的モデムリンクを利用可能な形に確立してから用います。linecheck を動作さ せるために、以下のこと行ってください:
リモートシステム上で実行
linecheck linecheck.log |
ローカルシステムに戻って、コミュニケーションプログラムを中断します(上を参照)
ローカルシステム上で実行
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 をエスケープするように書かれ ていたからです。
リモートシステムにログインして、(まだやっていなければ)可能な限り透過的なリ ンクを張ってください。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' を見てみてください。タイムアウトやエラーが発生していますか?もしそうな らば、何かを間違えて設定してしまったことになります。もう一度(これを読み終えた 後で :-)試してみてください。なお、コネクションがおそろしく速く見える、と いうことではありません。特に圧縮を使っている場合には−−ちょっとギクシャクし た感じになるでしょう。本当のスピードはファイル転送などの時にわかります。
間違いなく、あなたが TERM を使ってたくさんの作業をした後、作業を終えて TERM コネクションを落とそうと思うでしょう。このためには4つの方法があることを理解 しなければなりません。
両方の側の TERM プログラムを kill する。これがコネクションを終了するために 勧められるもっとも単純な方法です。
より良い方法は以下のコマンドをローカルで実行することです。
echo '00000' > /dev/modem |
この方法でうまく TERM コネクションを終了できるでしょう。これはすべてのバー ジョンの TERM で働きます。ゼロの列が少なくとも5個の0を含んでいるようにして ください。
バージョン 2.0.0 以上の TERM の termrc ファイル中で、 terminate '<some string>' という記述を加えられるようになりました。これは TERM を終了させる文字列('00000'がデフォルト)を設定します。偶然終了してしまう ことを避けるため、5文字以上でなければなりません。
バージョン 1.14 からは tshutdown というプログラムがあります(実際は、バー ジョン 1.14 ではこれはパッチの形で入手できたのですが、それより新しいバージョ ンではパッケージに組み込まれました)。tshutdown の実行で TERM コネクションをう まく終了できます。
そうですか、これが必要なんですね。TERM を離れたいあなたのために TERM を削除 するステップについて説明します。TERM を削除する課程で以下のステップを踏まねば なりません:
ディレクトリを内容とともに削除する。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'を使ってください。
'term'グループ。インストールの方法のうちいくつかでは、'term'というグループ を作る必要がありました。'/etc/group' に'term'エントリがないか確認してくださ い。もしあったらそれを削除します。
TERM パッケージと TERM 対応実行可能ファイル。これが TERM の削除ではもっとも 面倒な部分でしょう。TERM パッケージについてくる実行可能ファイルについては、 ディレクトリ'/usr/local/bin'かディレクトリ '$HOME/bin'を見る必要があります。
あなたが自分で TERM 対応にした実行可能ファイルについては、私は助けになれま せん。何を削除するべきなのかを知るためにはあなたがどの実行ファイルを TERM 対 応にしたのかを知る必要があります。デフォルトとそれらの実行可能ファイルに付属 するその他のファイルについて、構成を忘れないようにしてください。
ライブラリファイル。これらを削除するためには以下のようにするのが最も良いで しょう:
cd / find . -name libtermnet* -exec /bin/rm {} |
このコマンドはライブラリファイルを見つけて削除します。
インクルードファイル。これに関しても、以下のコマンドを実行するのが最も簡単 です:
cd / find . -name termnet.h -exec /bin/rm {} |
このコマンドはインクルードファイルを削除します。
マニュアルページ。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
テンポラリユーザディレクトリ。これはディレクトリ '/usr/tmp/private' とそ の内容です。
これらの作業によって、TERM に関連するあらゆるものを削除したと確信できること になります。
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 を得ています。
このセクションでは、TERM やそのクライアントの実行で問題が生じた時に何を確認 すべきかについていくつかの考えが示されています。
TERM のディレクトリは整理されていますか?新しいバージョンの TERM では '/usr/local/lib/term' 以下のディレクトリ構造が二度変更されています。もしこれ に気づかなかったら、すべての種類のエラーメッセージを引き起こすことにもなりま す。いちばん良いのは '/usr/local/lib/term' 以下を('termrc' はセーブして)削除 し、新しい TERM のバージョンをインストールすることです。そうすれば乱雑なディ レクトリツリーと格闘せずに済みます。
古いソケットを削除しましたか? TERM のバージョンを上げるときには TERM に よって作られたすべてのソケット('socket='と呼ばれます)を削除してください。これ をしないと奇妙な問題が発生する可能性があります。TERM がどのソケットを見張って いるかを知るには、"netstat" プログラムが使えます。
TERM は sunOS 4.1.3 で正しくコンパイルできませんか?あなたは TERM を './configure --user' で設定していますね。コンパイル中に不明な '-k' フラグがあ るというアセンブラエラーが出ますね。このエラーの理由はわかりません。このエ ラーに対する解決法は TERM をスタティックライブラリで設定することです。このた めに、'./configure --user --static' を実行する必要があります。その後普通通り にコンパイルしてください。今度は TERM は正しくコンパイルされるはずです。
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 |
正しいバイナリを実行していますか? TERM は相当何度もアップデートされていま すし、多くのシステムは異なった、バージョンの流動的なプログラムを持っていま す。正しいバージョンを使っていることを確認してください。これは linecheck にも 当てはまることに注意してください。bash の type -a や whereis コマンドでどのプ ログラムが走るのかを知ることができます。TERM バージョン 1.11 以降では、スター ト時にバージョンナンバーをプリントアウトします(しかしながらバージョン 1.14 は 1.12 だと言います。ふう。)。
正しい 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' の頭にドットがついていないことに注意)。
TERM は 'termrc' ファイルを見つけられていますか?どちらの側で TERM を起動す るときにも、以下のようなメッセージを目にするはずです:
Term version: 2.2.9 Reading file: /usr/local/lib/term/termrc Using shared mode |
もし二行目がなかったなら、TERM は 'termrc' ファイルを見つけられなかったとい うことになります。インストールの途中で何かうまくいかなかったのでしょう ('termrc' ファイルを使わずに全てのオプションをコマンドラインに入れているのな ら別です :-)。'termrc' を見つけられなかった側の TERM のサイトで、'termrc' ファイルの場所とパーミッションを確認してください。
'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 |
'term' または '.term' ディレクトリが NFS でマウントされていませんか?もし 'term' または '.term' ディレクトリが NFS でマウントされている場合、Makefile の CFLAGS の行に -DTERM_NFS_DIR フラグをセットする必要があります。残念ながら、筆 者は sunOS 4.* が走っているマシンでこのフラグによってコンパイルエラーを発生し てしまいました。
全てのファイルやディレクトリが正しいユーザとグループに所有されていて、適切 なパーミッションを設定されていますか?インストールの時に設定されるので問題に ならないはずです。しかし、自分のプログラムを TERM に対応させるときには注意が 必要です。また、TERM の動作するモード(プライベートモードか、共有モードか)を変 えるときには、ファイルとディレクトリの所有者とパーミッションも適合させる必要 があります。
エラー gethostbyname: <hostname>: Non-authoritative `host not found', or server failed が発生した場合。
これを解決するには以下のことを確認してください:
ファイル '/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' に入っていることによって手間取ることになってしまいます。
'/etc/rc*' と '/etc/resolv.conf' が誰でも読み出し可能に(chmod ugo+r)なって いますか。
最後に、マシンに 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 を 読んでください。
あらゆる種類の 'timed out' メッセージが TERM のログファイルに記録されたので すか?これは TERM コネクションが最適化されていないことを意味しています。少な い数のメッセージが時々現れる程度なら問題はありません。これらはまず間違いなく ローカルとリモートを結ぶ物理的コネクションに影響を与える一時的な要因によるも のです。
これらのメッセージを常にたくさん受け取る時は、コネクションは相当スピードを 落とすでしょう。上のセクション「コネクションを最適化する」で挙げたパラメータ をいじる必要があります。残念ながら、インストールのこの部分はトライアンドエ ラーの過程ということになります。コネクションに影響を与える要因はたくさんある ので、いろいろなパラメータについてどのような数値にしたら良いかというような一 般的な決まりはありません。これらの要因はコネクションによっても、また時間によっても異なります。
リダイレクトされたポートを使う通常の FTP が働きませんか?残念なことに、FTP に必要なポート(20 と 21)のリダイレクションでは FTP が働かないというのは明らか になっている問題です。唯一の解決法は TERM 対応の ftp か ncftp を入手すること です。これまた残念なことに、いくつかの TERM 対応 ftp のバージョンは動作しない ように思います。