LINUX PLIP MINI-HOWTO Andrea Controzzi, controzz@cli.di.unipi.it 22 July 1996 川島 浩, kei@sm.sony.co.jp 4 December 1996 このハウツーは、あなたがうまく PLIP (Parallel Line Interface Protocol) を設定・使用できることを目的として書かれています。 注意: この文書はかなり以前に書かれたものなので、いまどきの Linux 環境 にはあてはまらない箇所があります。 (JF Project) 注意: このドキュメントは第二版です。いろいろと書き直したり、追加をおこ なってあります。英語は私のネイティブの言語ではないので、きっと文 法や綴の間違いがあると思います。また、おそらく大丈夫だとは思うの ですが、間違いや、古くなってしまった情報もあるかも知れません。 全ての人々に正しい情報を供給するために、** ぜひ ** そのような間 違いがあったら、私に知らせて下さい! 質問や間違いの訂正、コメントやご意見などは私のメイルアドレス: controzz@cli.di.unipi.it にお願いします。 なにか困った時には、いつでもメイル下さい。すぐには返事ができない こともあるとは思いますが、必ず返事します。もし二週間以内に返事が 届かなかったら、メイルシステムのトラブルがあったと思って下さい。 そのような場合にはもう一度メイルを出すことをためらわないでくださ い。あなたを助けることは、私の努めだと思っていますから。 (訳注: うーん、感激。) まず最初に、Terry Dawson さんの net-2-HOWTO から、たくさんの技術 的情報を得たことをお断りしておきます。私のこのミニハウツーは net-2-HOWTO を置き換えたり、他の観点から扱うようなものではありま せん。ただ単に、あなたが PLIP 接続を簡単に設定できるような方法を 提供したい、ということだけです。このミニハウツーに現れ る、(net-2-howto を越える情報は)私の個人的な経験と、私にコメント を送ってくれたたくさんの人達からのフィードバックによるものです。 このドキュメントの中では、いくつかの設定ファイルを変更しています が、ネットワーク一般や、これらのファイルに関する一般的な情報を得 るために net-2-HOWTO やその他のドキュメントを併せてお読み下さ い。 1. イントロダクション: PLIP とはなにか? どういうときに使うのか? 複数のホスト間を接続するのにはたくさんの方法があります。SLIP に良く似 た PLIP は、パラレルポートを介して二つのマシンを接続することができま す。 PLIP による接続は、シリアルポートを使う代わりにパラレルポートを使う、 ということを除けば、専用線による SLIP 接続と非常に良く似ています。パラ レルポートは一度に 1ビット以上のデータを送ることができますからシリアル インターフェースよりも高速な伝送が可能です。 PLIP は十分に高速なので、NFS のような立派な TCP/IP 機能も使うことがで きます。ですから、たとえば片方のマシンには Linux のフルシステムをイン ストールしておき、もう片方のマシンには最小限のシステムだけをインストー ルして、メインのマシンから必要なものをマウントして使うといったことも十 分可能です。 不便かもしれないことは、多くのユーザはひとつしかパラレルポートをもって いないということでしょう。これはつまり、プリンタと PLIP を同時に使えな いであろうことを意味しています。つい最近のカーネルまでは、たとえ2つ以 上のパラレルポートを持っていたとしても、カーネルモジュールを使うか、他 のトリックを使わないと、PLIP とプリンタを同時に使うことはできませんで した。 でも、いまや、あなたが2つ以上のパラレルポートを持っていれば、パッチを 当てることでこの不便を解消することができます。これには、「PLIP と LP ( プリンタデバイス)をうまく共存させるには」の章を読んで下さい。 そしてなんと、DOS と Linux を PLIP 接続する (望むらくはうまい)方法を紹 介することができるようになりました。 2. PLIP を使うのに必要なハードウエア PLIP をセットアップするのに必要なハードウエアとしては、(当然)両方のマ シンに空いたパラレルポートがあることと、これらを接続するケーブルです。 ケーブルに関しては以下のとおりです。これは、1.2.13 カーネルのソースの 中の plip.c に記述されています。 ここで使われるケーブルはデファクトスタンダードのパラレルヌルケーブルで す。つまり、「LapLink」ケーブルとして、いろいろなところで販売されてい るものです。 (訳注: 日本で購入するときには、「インターリンク用パラレル・クロスケー ブル」という名前の方が通りが良いようです。ヨドバシカメラやビッグカメラ のような量販店でも2000〜3000円程度で手に入るようです。) 自分で作る場合には、12本の線の接続が必要です。接続は以下のとおり: SLCTIN 17 - 17 GROUND 25 - 25 D0->ERROR 2 - 15 15 - 2 D1->SLCT 3 - 13 13 - 3 D2->PAPOUT 4 - 12 12 - 4 D3->ACK 5 - 10 10 - 5 D4->BUSY 6 - 11 11 - 6 他のピンは接続してはいけません。他のピンというのは: D5,D6,D7 are 7,8,9 STROBE is 1, FEED is 14, INIT is 16 extra grounds are 18,19,20,21,22,23,24 です。 (訳注: Laplink ケーブルと称するケーブルには何種類か接続があるようです が、少なくとも私は上に述べられた通りの接続ケーブルを、すだれフラット ケーブル(シールドなし)で、2m くらいの長さで作成して: o Linux/PLIP o DOS/RDISK600 o Win95/ケーブル接続 の環境でいずれもうまく動作しています。) ケーブルに関しては、もっと詳しく書いてある /usr/src/linux/drivers/net/README1.PLIP というドキュメントを読むことを 強くお勧めします。 個人的には自分でケーブルを作るよりも、出来合いのケーブルを買ってくる方 をお勧めします。自分でケーブルを作ることによって節約できるお金はわずか なものですから。それでもあなたが自分でケーブルを作ることを選ぶのなら ば、それはあなたの責任でおこなうのだ(your own risk)、ということを忘れ ないでください。私は plip.c の中に書かれていることを正確に伝えているだ けであって、なんら保証をおこなうものではありません。 最後にケーブルの長さについて: 長いケーブル(例えば 3m 以上のケーブル) は、他からの電磁的干渉を受けやすく、問題が発生しやすくなってしまいま す。もしどうしても長いケーブルが必要な場合には、シールドが良く効いた ケーブルを使って下さい。しかし、あまりに長いケーブルは駄目です。私の思 うには、最大でも 15m 程度が限界でしょう。 私にメイルをくれた人のなかで、30m のケーブルでうまくいったという人もい ます。もし誰か、オフィスと家をつないでみたい(例えば 200m くらい)という 人がいて、お金があるのなら、やってみてください。最悪の場合でも、動作し ないだけですから! 3. カーネルの再構築 あなたは既にカーネルをコンフィグレーションして、コンパイルする方法を 知っているものとします。もしそうでなければ、kernel-howto やその他のガ イドを読んでおく必要があります。 カーネル野郎たちの素晴らしい働きのおかげで、最近のカーネルは「普通の」 人でも本当に簡単にコンフィグレーションできるようになっています。ぜひ、 やってみましょう。 でもまあ、完璧を期するために、以下で簡単な概要について述べます: 注意: ここでは 2.0.xx カーネルを仮定しています。もはや 1.2.xx カーネル を使う理由はありませんから。 以下では、カーネルのオプション設定に menuconfig を使った場合の例を示し ます。他のツールを使った場合でもでもまあ大体似たようなものです。 #make menuconfig を実行します。 まず、 Loadable module support ---> と [*] Enable loadable module support と、(もし可能ならば (例えば modules.2.0.0 の場合) 以下も) [*] Kernel daemon support (e.g. autoload of modules) をイネーブルしておくことを強くお勧めします。 次に、メニューを戻って Networking options ---> を選択します。ここでは少なくとも、 [*] Network firewalls [*] TCP/IP networking [*] IP: forwarding/gatewaying を選択しておく必要があります。 またメニューを戻って、 [*] Network device support PLIP (parallel port) support を選択しておきます。 モジュール機能を使うのならば、ぜひ、PLIP をモジュールとしてセットアッ プしておきましょう。もしあなたがプリンタ機能も必要な場合には、 Character devices ---> に行って、 Parallel printer support とすることで、プリンタ機能もモジュールとして設定しておきましょう。 さて、これでカーネルの PLIP 機能をイネーブルできました。もしこれがあな たにとって初めてのカーネルコンパイルである場合には、その他のオプション についても良くチェックした後に、セーブ、終了してください。 最後に、以下のコマンドでコンパイルを行ないます。 #make dep ; make clean #make zlilo また、モジュール機能をイネーブルした場合には # make modules # make modules_install も忘れないで下さい。 4. 設定ファイルについて まず最初に、あなたが変更を加えようとするファイルはすべてバックアップを とっておきましょう。 #cp rc.inet1 rc.inet1.BACKUP のような風にするのがいいでしょう。 さて、これから接続する2つのマシンの IP アドレスを決めましょう。以下の 例では、標準的な xxx.xxx.xxx.xxx という形式で IP アドレスを記述してい ます。 接続する両側のマシンの /etc/rc.d/inet1.rc に以下の行を付け加えます( ファイルの最後に付け加えるのがいいと思います): /sbin/route add -net ${NETWORK} netmask ${NETMASK} ここの、NETWORK と NETMASK という変数はファイルの前の方で適切な値に設 定されていなければなりません。どうすればいいかわからない場合には NET2-HOWTO を読んで下さい。 以下の条件にあてはまる場合に限り、これらの変数を無視することができま す: 2つのマシンをスタンドアロンのネットワークで接続しようとしている場合に は、例えばそれぞれ 200.0.0.1 と 200.0.0.2 というアドレスを選ぶことがで きます。そして、NETWORK="200.0.0.0", NETMASK="255.255.255.0" とするこ とができます。以下の「PLIP の高速インストール」の章ではこの IP アドレ ス例を使っています。 注意: 200.0.0.1 や 200.0.0.2 は、単に例としての IP アドレスです。実際 にはこれらのアドレスは使わないことを強くお勧めします。なぜなら、これら のアドレスはインターネットのどこかで使われている可能性があるからです! (訳注:最初から安全なアドレスを選んで例示すればいいのに...) 実際に使うアドレスは、以下の「プライベートアドレス」から選ぶことを強く お勧めします: 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255 両方のマシンの /etc/hosts に、PLIP 経由で接続するそれぞれのホストのエ ントリーを追加します。私の例では: 200.0.0.1 one # this is the "one" IP address 200.0.0.2 two # this is the "two" IP address ここで "one" と "two" というのは、接続する2つのホストの名前です。 NFS を使いたい場合には、カーネルのコンフィグレーションの時にそれをイ ネーブルしておくと共に、エクスポートしたいディレクトリを /etc/exports に記述しておく必要があります。例えば "one" の /usr を "two" から Read- Only でマウントしたい場合には、"one" の /etc/exports に以下の行を記述 します: /usr two (ro) 5. PLIP リンクを張る ついに、PLIP インターフェースを起動する番ですが、これらのコマンドは root で実行する必要があります。(もちろん、すでにケーブルは接続されてい ますよね。) まず最初に lp デバイスが存在していないことを確認して下さい: #cat /proc/devices 以下のような行が存在していてはいけません: 6 lp 繰り返しますが、この例では "one" と "two" というホスト名を使っていま す。まず、ホスト "one" の上で、以下のようにタイプします: #ifconfig plip1 one pointopoint two up 次に、これがうまく動作していることを確認します: #ifconfig 以下のようなメッセージが表示されるでしょう。 ..... ..... plip1 Link encap:10Mbps Ethernet HWaddr FC:FC:C8:00:00:01 inet addr:200.0.0.1 P-t-P:200.0.0.2 Mask:255.255.255.0 UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:7 Base address:0x378 注意: kerneld (必要なモジュールを自動的にロードするデーモン)を使わずに モジュールを使う場合には、ifconfig ... を実行する前に、以下のコマンド をお忘れなく: #insmod plip あなたがとても用心深い方ならば、PLIP モジュールがちゃんとロードされて いることを: #lsmod Module: #pages: Used by: plip 3 0 で確認して下さい。 さて、"two" への経路を追加します... #route add two そして、"two" へ NFS エクスポートしたければ: #rpc.portmap #rpc.mountd #rpc.nfsd を "one" の上で実行しておきます。 ホスト "two" の上で実行すべきコマンドも上と同様です。ただし、上に述べ たコマンドの中で、"one" と "two" を入れ換えてくださいね。 もし、片方のマシン(訳注: この場合 "two"のこと) が PLIP 以外の接続を 持っていない場合には、そのマシン上で: #route add default gw one を実行します。上に述べた例では、"two" はノートブックで、PLIP 接続しか 持っていなくて、それが "one" につながっているという例です。このような 場合には \ "two"で、上のコマンドを実行しておきます。 さて、最後に "one" の上で、 #ping two を実行し、"two" の上で、 #ping one を実行して、お互いにパケットのやりとりができていることを確認して下さ い。 もちろん、これらのコマンドを毎回実行するのは面倒ですから、なにかスクリ プトにしておいて、必要な時に root で実行するのもいいですし、ブート時に 自動的に実行されるように /etc/rc.d/rc.inet2 にこれらのコマンドを付け加 えておくのもいいでしょう。以下の章の「PLIP の簡単インストール」を使う 場合には必要な設定ファイルとスクリプトが用意されています。注意: この ファイルはちょっと古いかもしれません...ごめんなさい。 6. ブート時にカーネルが出力するメッセージについて カーネルを再構築して PLIP をイネーブルしたカーネルをコンパイルした後 に、 dmesg (8) コマンドを使って、カーネルが出力したメッセージを確認し ておきましょう。 こんな感じのメッセージが出力されているはずです: NET3 PLIP version 2.0 gniibe@mri.co.jp plip1: Parallel port at 0x378, using assigned IRQ 7. もちろん、あなたがモジュール機能を使っている場合には、insmods plip を 実行した時(または、kerneld デーモンを使っている場合には PLIP モジュー ルが必要になった時)にこれらのメッセージが出力されるはずです。 klogd や syslogd の設定によってはこれらのメッセージはシステムログファイルに出力 されますので、これらのメッセージが見つからなくても驚かないでください。 lsmod を実行した時に plip モジュールが存在することを確認できればまあ十 分だと思います。 7. よくある質問 (FAQ) この章を読むことで、あなたが抱えている問題を解決できることを願っていま す。もしこの他にも質問などありましたら、いつでも私当てにメイルをくださ い。 以下では、質問は 「黒丸」 で始まり、その答えは「白丸」で始まるような形 式になっています。 o ブート時に次のようなメッセージが出力されます: SIOCSIFADDR: No such device SIOCADDRT: Network is unreachable また、上に書かれているように接続をセットアップすると、次のようなエラー メッセージが出力されます: SIOCSIFADDR: No such device SIOCSIFDSTADDR: No such device SIOCADDRT: Network is unreachable mount clntudp_create: RPC: Port Mapper failure - RPC: Unable to send o なんらかの理由で、このカーネルの PLIP 機能がイネーブルされていま せん。次のような可能性が考えられます: o カーネルコンフィグレーション時に、"PLIP support? " という質問 に yes と答えなかった。 o カーネルコンフィグレーション時に、"Printer support? " の質問 に対して yes と答えた。 o PLIP をモジュールとしてコンパイルした。この場合には、それを ロードする必要があります。 o PLIP と LP を同時にサポートする方法(モジュール以外の方法で)はありま すか。おそらく、2つのパラレルポートを使って? o 2 つの方法があります。これは、「8) PLIP と LP (プリンタデバイス) をうまく共存させるには」の章で述べられています: o 両方をサポートするためのパッチをカーネルにあてる。 o 片方のポートを PLIP に、もう片方を LP に割り当てるためのパッ チをカーネルにあてる。 o 私は2つのコンピュータを接続するためのスクリプトを書きました。自動的 に接続するために、rc.inet2 の中からこのスクリプトを呼び出し、さらに VFS をイネーブルするようにしました。 "two" というホストは "one" の ディレクトリをいくつかマウントします。ですから、"two" の /etc/fstab にこのためのエントリを追加しました。その結果、"one" がダウンしてい る時に "two" をブートすると、"two" は次のようなメッセージを出力して 数分くらい止まってしまいます: "mounting remote file systems...". o これは、"two" が "one" のファイルシステムをマウントしようとした けれども "one" がダウンしているので、"two" があきらめるまで待た されているという状況です。これを回避するには: o rc.inet2 の中のリモートファイルシステムをマウントするためのコ マンドをコメントアウトする。 o "two" の /etc/fstab の中のリモートマウントエントリーを削除し て、必要になった時にこれらを手動でマウントする。 というような方法があります。 o 接続はうまくいっているのですが、ping が通りません。カーネルから次の ようなメッセージが出力されます: plip1: timed out (1, 89) o これは、「あなた側の接続」はうまくいっていることを意味していま す。つまり、あなた側のマシンは信号を送っているのだが、相手から返 事が返ってきていないという状況です。理由には次のようなものが考え られます: o ケーブルがきちんと接続されていない/壊れている/間違っている。 o 相手のマシンで PLIP が動作していない。 o あなたのノートブックコンピュータのパラレルポートが PLIP に適 していないものである。これについては次の質問を参照して下さ い。 o PLIP 接続をインストールしたのですが、ping しても 100% data loss に なってしまいます。デスクトップとノートブックを接続しています。 o ノートブックの中には、PLIP では使えないパラレルポート(プリンタ専 用) が搭載されいるものもあります。例えば、データを送ることはでき ても受信することができないない、などです。こういう場合でもうまく PLIP を使う方法があるのかどうかは、私はわかりません。望みがある とすれば: o ノートブックのセットアップを眺めて、パラレルポートの設定をプ リンタポートから、パラレルポートに変えてみる。 o plip モード 0 を試してみる。でも、私はこれはどうやったらでき るのか、ちゃんと動作するのか、最近のカーネルでも使えるのか、 知りませんが... o PLIP はどのくらいの速度が出ますか? o なかなかむずかしい質問です。これには **たくさん** の要素があるか らです。以下のような要素がパフォーマンスに大きな影響を与えます: o 双方の CPU 速度 o パラレルポートの種類と設定 o システムの負荷 o PLIP の用途 単なる大雑把な見積りとしては、40Kバイト/秒くらい、というところで しょうか。これはシリアル接続に比べてはるかに速く、できの悪いイー サネットカードに近い速度でしょう。 o plip1 インターフェースに対して、何度も ifconfig up, ifconfig down を実行しないとうまく動作しないのですが...? o ifconfig コマンドを実行する時 (ただし、ブートの後の最初の ifconfig コマンドでは不要) に、-arp オプションが必要かもしれませ ん。私の場合には不要でしたが、必要な場合もあるようです。 o プライベートネットワーク用に予約された IP アドレスについての記述を 読んだことがあるのですが、このハウツーの中で例として使われている 200.0.0.1 や 200.0.0.2 はこの範囲外です。変更すべきでは? o ええ。そうすべきだと思います。最初から強調しているとおり、これら のアドレスは、単に単純だから例として使っているだけです。ですか ら、アドレスは自由に変更して下さい。以下は、net-2-howto からの引 用です: RFC1597 はプライベートネットワーク用にいくつかの IP アドレスを予 約しています。もしあなたのネットワークがインターネットに接続する 可能性がある場合には、これらのアドレスを使うべきです。予約されて いるアドレスは: 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255 o ソースコードを変更せずに PLIP のパラメータを変えることはできますか? o できます! /sbin/plipconfig コマンドを使ってみて下さい。詳細は man ページを読んで下さい。 o Debian GNU/Linux を使っているのですが、/etc/rc.d/rc.inet1 や rc.inet2 というファイルはありません。どのファイルに plip に関する設 定を書けばいいのでしょうか? o Debian GNU/Linux の場合には、/etc/init.d/network をエディットし てください。この中に rc.inet1 と rc.inet2 に記述する必要のあるコ マンドを全部記述します。 o PLIP で2つのホストを接続する時になにか問題が生じます。片方のマシン は最新のカーネルで、もう片方は古い バージョン 1.0.x PLIP です。こう いう組合せは駄目ですか? o ええ。両方のホストで、できる限り同じバージョンの PLIP を使って下 さい。 o 1.3.x カーネルの PLIP 機能がうまく動きません。どうしてでしょう? o 1.奇数.x のカーネルは、あくまでも開発中(訳注:実験カーネル)のもの であることを忘れないで下さい。「神々達」は毎日 linux をより良い ものにするために頑張っていますが、安定しないものを我々民草に与え たもうことも時々はあります。今現在では、2.0.xx カーネルが安定し たバージョンのはずです。 8. PLIP の簡単インストール このミニハウツーを書く前に、私は簡単に PLIP インストールを行なうための ファイル類を作りました。これを使うと、カーネルをコンパイルするのに加え て、たった数分で PLIP インターフェースのセットアップができるはずです。 このファイル類は、tar + gzip した形式で、以下の私のホームページに置い てあります: http://www.cli.di.unipi.it/~controzz/intro.html おそらく、他の ftp サイトにも誰か置いてくれていると思います。 9. PLIP と LP (プリンタデバイス)をうまく共存させるには PLIP と LP を共存させる一番いい方法は、カーネルモジュールを使う方法で す。 plip.o をロードしておいて PLIP を使い、プリントする必要が生じた時 に plip.o をアンロードして...その逆もまたしかり、という方法です。どう しても PLIP と LP を同時に使いたい場合には、以下のパッチを試してみてく ださい。 9.1. PLIP と LP を同じポートで使う。 なんらかの理由で PLIP と LP をカーネルの直接サポートで(訳注:モジュール ではなく)使いたい場合には、以下のパッチを試してみて下さい。 以下のソースコードを書き換える必要がありますが、書き換える前にそれらの バックアップをとっておくことをお忘れなく: ******** modifications to linux/drivers/char/lp.c *********************** struct lp_struct lp_table[] = { { 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, /* { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, */ }; #define LP_NO 1 ******** modifications to linux/drivers/net/Space.c ******************** #if defined(PLIP) || defined(CONFIG_PLIP) extern int plip_init(struct device *); static struct device plip2_dev = { "plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, }; static struct device plip1_dev = { "plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, }; /* static struct device plip0_dev = { "plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, }; */ # undef NEXT_DEV # define NEXT_DEV (&plip1_dev) #endif /* PLIP */ もちろん、お決まりの免責事項があります: 私は単にこのパッチをもらい、 「そのまま」ここに書いただけです。つまりこれを使うのは、"your own risk" で行なって下さい。まあ、いずれにせよ、なにか問題が起きたら、元の ファイルに戻して、リコンパイルするだけのことですけどね。 9.2. PLIP と LP を異なったポートで使う。 もし2つ以上のパラレルポートがあるならば、次のパッチを試してみましょ う。片方のポートで PLIP を、もう片方のポートで LP を動作させることがで きるはずです。 1. カーネルソースファイルの drivers/char/lp.c 中の1行をコメントアウト する。 struct lp_struct lp_table[] = { { 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, /* { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, */ }; 3つのポートから 2つのポートになってます。 2. 次のようにカーネルコンフィグレーションをする。 PLIP (parallel port) support (CONFIG_PLIP) [n] y Parallel Printer support [y] y 3. ブート時に次のようなカーネルメッセージが表示されるはず: lp1 at 0x0378, using polling driver ..... NET3 PLIP version 2.0 gniibe@mri.co.jp plip2: Parallel port at 0x278, using assigned IRQ 5. 繰り返しますが、8.1 章と同じ、お決まりの免責事項。"your own risk" 10. DOS と LINUX の間で PLIP 接続する。 このミニハウツーを最初にリリースした後に、Linux と DOS (または Windows)の間で接続する方法について、たくさんの方から情報をいただきまし た。そこで、一般的な興味からこの章を付け加えることにしました。みなさん の役にたつことを願っています。 この章は、James McDuffie の Linux Gazzete に載って いたものをもとにしています。このドキュメントは、Windows と Trumpet Winsock を使って、Linux と DOS 間での PLIP 接続をおこなうための基本的 なインストール方法から、X-Window のプログラムをWindows 上で実行するた めの方法まで、広い範囲をカバーしています。 その次の章は、James Vahn が送ってくれた追補 です。接続のセットアップに関する詳しい説明と、いろいろな問題を解決する 方法について述べられています。 ここでは、すでに Linux 側でうまく PLIP 機能が設定されており、正しい ケーブルが接続されていることを前提にしています。そうでない場合には、前 の章に戻って下さい。 さて、DOS 側ではまず、パケットドライバが必要です。以下のところにあると 思います: ftp://ftp.crynwr.com/drivers/plip.zip このプログラムは DOS の上で動作し、イーサネットパケットドライバとして ふるまいます。Windows との間で PLIP を使いたい場合には、Trumpet Winsock も必要です。これは、TCP/IP インターフェースとして機能します。 または、 DOS 上の TCP/IP ソフトウエアを使うこともできるでしょう。 (訳 注: これらは Win95 では不要のはず) さて、Linux 側に戻ります。DOS マシンのアドレスを /etc/hosts に登録しま す。DOS マシンが登録済みの IP アドレスを持っていない場合には、適切なア ドレスを選びます。(3章で述べた IP アドレスについての注意を読み返してく ださい。) Linux マシンを linux、DOS マシンを dos というホスト名だとします。次の ようなコマンドを実行します: (Linux側で) ifconfig plip1 linux pointopoint dos arp up route add dos もちろん、linux をブートするたびにこれらのコマンドを自動的に実行させる には、/etc/rc.d/rc.inet1 に以下のような行を付け加えます: /sbin/ifconfig plip1 linux pointopoint dos arp up /sbin/route add dos これらのコマンドによって、インターフェースをセットアップし、 (ネット ワーク)経路を付け加えているわけです。もちろん、二番目の(secondary) パ ラレルポートを使っているのならば、(plip1 の代わりに)plip2 としてくださ いね。 DOS/Windows マシンの方に戻って AUTOEXEC.BAT に次の行を付け加えます: c:\plip\plip.com 0x60 c:\tcpip\winsock\winpkt.com 0x60 ここでは plip.com (パケットドライバ)は c:\plip に、winpkt.com は c:\tcpip にインストールされているものと仮定しています。それ以外の場合 には正しいパスを記述して下さい。 上のコマンドでは、plip.com はパケットベクター 0x60 を使い、その後に同 じベクターを使って winpkt.com をロードするように指定しています。も し、PLIP ケーブルが、lpt1 以外のポートに接続されている場合には、 plip.com のパラメータとして IRQ 番号と I/O アドレスを指定する必要があ ります。また、Windows がパケットベクターを使用可能とするため に、winpkt.com を走らせてる必要があります。(上に記述したとおり) この先は、実際のTrumpet Winsock の設定になります。 必要な設定は、SLIP と PPP のチェックを外すことと、Packet Vector という 入力欄に 60 と入力することです。次にこのマシンに割り当てた IP アドレス を指定します。デフォールトゲートウエイには、Linux マシンの IP アドレス を指定します。 ネームサーバには、あなたのマシンの IP アドレスか、インターネットに接続 するつもりがあるのならば、あなたの使っている ISP (プロバイダ)のネーム サーバの IP アドレスを指定します。(これについては後でもっと詳しく述べ ます。) セットアップを終了して、 Winsock を再起動します。これでうまく いくはず! winsock をスタートアップグループに追加して、これで全部自動 的にセットアップされるはずです! Linux マシンを通じてインターネットに接続する場合には、 IP マスカレード 機能をインストールする必要があります。これについての情報 は、NET-2-HOWTO を参照して下さい。この機能によって、 Linux マシンの IP アドレスを Windows マシンの IP アドレスとして(インターネット側から見 て)みせかけることが簡単にできます。 また、X-Window のプログラムを Windows で走らせることのできるプログラム を見つけました! 以下の場所にあります: http://www.tucows.com/ 説明にしたがってセットアップをおこない、Windows マシンから telnet で (Linux マシンに)ログインし、DISPLAY 変数を設定(例えば DISPLAY=duncan:0.0) して、後は必要な(X client) プログラムを走らせるだ けです。 xv を Windows の上で走らせるなんて、これ以上にかっこいいこと はないでしょう! これがあなたの役に立ちますように! ##### (訳注: 訳者もこれを探してみました。www.tucows.com は、シェアウエア等の コレクションサイト (infomagic 的なもの) のようで、ここで触れられている X-server エミュレータ on Windows のオリジナル URL は, http://www.starnet.com/Products/xwin.html のようです。ここからは、評価用のデモ版がダウンロードできます。 ... ちょっと翻訳からは脱線してしまいますが ... さっそく Win95版をダウ ンロードして、使用してみましたが、なかなか快適に動作します。 Xコンソー シアムの X11 リリースから日本語関係のフォント(pcf)をコピーして fonts.dir を作り直してやると、(あたり前ですが) kterm などでちゃんと日 本語も表示できます。私の本業はゲートアレー設計ですが、電気系の CAD ソ フトである、 Verilog の波形表示や、DesignCompilerのウインドウもちゃん と動作します。 (細かい部分ではいくつか動作の変なところもありますが。) ただし、訳者がテストしたのは、イーサネット経由の接続です。 PLIP 接続の 上で X-server 機能を走らせる、というのはまだ試していません。) ##### 10.1. DOS と LINUX を PLIP 接続した経験談 注意: 私はこのドキュメントを James Vahn から 受取り、そのまま変更せずにここに載せています。ですから、この章に対する 質問は、私よりも彼の方がうまく答えることができるはずです。というわけ で、私にメイルするよりも前に、彼に質問してみてください。彼の経験は、フ ロッピーベースの DOS マシンと Linux を接続したというものですので、これ は一般的な問題に対する完璧な解決方法の一例であると言えます。 最終更新日 11/07/1996 (日/月/年 形式) からの追補 私は、フロッピーベースの DOSマシンから PLIP を使って Linux マシンの二 番目のプリンタポートにネットワーク接続しています。Linux の一番目のプリ ンタポートにはプリンタが接続されています。両方のポートとも常時接続 で、DOS ボックスから Linux に telnet できます。以下は、このような環境 を構築したときの記録です。 ブート時にカーネルがプリンタポートを認識する際、除外されていないパラレ ルポートはすべてプリンタポートとして認識されてしまいます。つまり、PLIP はどのポートも認識できません。これを防ぐひとつの方法は、必要に応じてド ライバをモジュールとしてロードすることです... によれば: ======================== 私は、PLIP/LP をカーネルモジュールとして使うことを勧めています。なぜな ら: o モジュールは設定変更に対して柔軟に対処可能 o 初心者にとってカーネルの(再)コンパイルは簡単ではない o PLIP と LP の共存にはモジュールが必須 PLIP と LP をカーネルモジュールにすると、どのポートを PLIP が使い、ど のポートを LP が使うのかを指定することができます。以下はその例: # insmod lp.o io=0x378 # insmod plip.o io=0x278 irq=2 2つのパラレルポートを両方とも PLIP に使いたければ: # insmod plip.o io=0x278,0x3bc irq=2,5 なんて指定も可能です。この例では、 plip0 は I/O アドレス 0x278, IRQ 2 plip0 は I/O アドレス 0x3bc, IRQ 5 を使うという指定です。 ========================= モジュールを使うのが正道という気はしますが、以下ではモジュールを使わず に、カーネルにパッチをあてて、PLIP とプリンタをそれぞれ別のポートで使 う方法を示します。もしあなたがモジュールという概念に不案内の場合には、 この方が簡単だと感じるかもしれません。 カーネルソースツリーの中の、2つのファイルを変更する必要があります。私 の場合には カーネル 1.2.13 ですが、私のシステムにうまく合わせるために は .../linux/drivers/net/Space.c を少々変更する必要がありました。 PLIP 定義に関する、205行目あたりを見て、あなたのシステムのコンフィグレー ションとうまくあっているかどうかを確認し、どれがどのドライバに相当する のか(plip0, plip1, plip2)に注意して下さい。私の場合には、ポート 0x278 は IRQ 5 (カードのジャンパー設定がそうなっているのです。)を使っている のですが、Space.c の中では、IRQ 2 と定義されていましたので、マシンのふ たをあけてジャンパー設定を変える代わりに、この部分を変更しました。他の 方法としては、ifconfig を実行する時に IRQ を指定するという方法もありま すが、この方法ではブート時にカーネルが wrong IRQ for PLIP というような メッセージを出力されるので、ちょっと嫌ですね。変更は簡単(一文字だけ)で す。 次は、もう少し難しい変更ですが-- .../drivers/char/lp.c の 38行目あたり に次のような部分があるはずです: struct lp_struct lp_table[] = { { 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, /* { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, * 0x278 reserved for plip1 * * }; * #define LP_NO 3 */ }; #define LP_NO 2 ポートを一つコメントアウトしたことに注意して下さい。この結果、定義され ているポートは2つだけとなります。また、おそらく 0x3bc のポートは PLIP には使えないでしょう。この IRQ 信号は普通このポートには使えません。(昔 のモノクロームディスプレイアダプターでも同様の問題があったように。) これらのファイルに変更を加える前にちゃんとバックアップはとりましたよ ね? さて、プリンター、ネット、ダミー、plip 機能をイネーブルして新しい カーネルを作る番です。 システムを設定します。以下は私の /etc/rc.d/rc.inet1 ファイルの例です: #!/bin/bash # /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 /sbin/ifconfig dummy 200.0.0.1 /sbin/route add -net 200.0.0.0 netmask 255.255.255.0 /sbin/ifconfig plip1 arp 200.0.0.1 pointopoint 200.0.0.2 up /sbin/route add 200.0.0.2 /sbin/ifconfig dummy down DOS -> Linux の接続のために、arp が使われていることに注意して下さい。 これは Linux -> Linux の接続では普通使われないものですから。 そして、/etc/hosts に次のような行を加えて、2つのマシン名を定義します: 200.0.0.1 console1 200.0.0.2 console2 ここで console2 は DOS マシンのホスト名です。実際に設定する IP アドレ スについては、オフィシャルなアドレスづけをしたほうがいいでしょ う。(Andrea の忠告 (FAQ 参照) を思い出して下さい。) (訳注: 要するに、 プライベート IP アドレスを使った方がいい、ということですね。) これまでの変更と、新しいカーネルを有効にするためにリブートします。パッ チを当てた場合にはブート時に(または dmesg を実行することで)、そうでな い場合にはモジュールがロードされた時に、以下のようなメッセージが出力さ れるはずです: lp0 at 0x03bc, using polling driver lp1 at 0x0378, using polling driver [....] NET3 PLIP version 2.0 gniibe@mri.co.jp plip1: Parallel port at 0x278, using assigned IRQ 5. また、"route" コマンドを実行すると: Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface console2 * 255.255.255.255 UH 1436 0 136 plip1 loopback * 255.0.0.0 U 1936 0 109 lo というようなメッセージが出力されるはずです。 さらに、"ifconfig plip1" というコマンドを実行すると: plip1 Link encap:10Mbps Ethernet HWaddr FC:FC:C8:00:00:01 inet addr:200.0.0.1 P-t-P:200.0.0.2 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:1500 Metric:1 RX packets:132 errors:0 dropped:0 overruns:0 TX packets:136 errors:0 dropped:0 overruns:0 Interrupt:5 Base address:0x278 というメッセージが出力されるはずです。 /etc/inetd.conf の中で telnet がイネーブルされていることを確認して下さ い。 tcpd や、/etc/hosts.allow (ALL: LOCAL) 、/etc/hosts.deny (ALL: ALL) の使い方を知るために man ページを読む必要があるかも知れません。さ て、これで "telnet localhost" がうまく動作するはずです。 Linux 側の設定は終りました。今度は DOS 側です。繰り返しになりますが、 ポート 0x3BC を使う場合にはうまく動作するかどうか疑ってかかった方がい いでしょう。 私の場合には NCSA の telnet と Crynwr の PLIP ドライバを使っています。 以下のサイトにありました: o ftp://ftp.ncsa.uiuc.edu/Telnet/DOS/ncsa/tel2308b.zip o ftp://ftp.crynwr.com/drivers/plip.zip 必ず NCSA telnet のバージョン 2.3.08 と、Crynwr PLIP ドライバのバー ジョン 11.1 を使ってください。また、Crynwr の SUPPORT.DOC がどこかにあ りますので、これも読んで下さい。 さて、CONFIG.TEL ファイルです。ほとんどはデフォールトのままですので省 略して、必要な(願わくば)部分だけを抜き出しました。私のマシンの二番 目(secondary)のパラレルポートは、 0x278, IRQ 5 です。 (訳注 : 以下の設定ファイルのコメント部分も日本語に訳出しましたが、実際 の設定ファイルで(コメントフィールドとはいえ)日本語を使う事ができるかど うかはわかりませんので注意してください。) myip=200.0.0.2 netmask=255.255.255.0 # サブネットマスク hardware=packet # ネットワークボード(パケットドライバ I/F) interrupt=5 # ネットワークボードの IRQ 番号 ioaddr=60 # ドライバが使うソフトウエア割り込み番号 # #[変更の不要な部分 ...たくさん...] # # ファイルの最後に以下の行を付け加える name=console1 ; hostip=200.0.0.1 ; nameserver=1 ; gateway=1 (ここで、console1 は Linux マシンのホスト名です。あなたのマシン名に合 わせて変更してください。) 私の場合、12フィート(3.6m) のヌルケーブルを作成して2つのマシンを接続し ました。(最初に配線の誤りがあったことを除けば)、何も問題なく動作してい ます。標準的な 11芯ヌルプリンタケーブル(訳注: Laplinkケーブルのことか な) でもうまく動作するはずです。 Linux カーネルソースの plip.c の中にケーブルの配線方法が書かれていま す。 私のケーブルは 17本 <-> 17本 という接続ですが、これは他の用途には使わ れないものでしょうし、どこかで売っていることもないと思います。 @echo off plip.com 0x60 5 0x278 telbin -s console1 以上のコマンドで、Linux マシンの /dev/ttyp に接続できるはずです。 NCSA telnet は 8つの仮想スクリーンを提供しており、ftp サーバとなることもで きます。 PLIP インターフェースは十分なスループットを実現できます。私の 場合にはこんな古いマシンでも ファイル転送で 6.5K/s の速度が出ていま す。あなたのマシンではもっと速いでしょう。:-) 11. 質問や御意見はぜひ著者にフィードバックを! 何か質問や意見があったら、以下のメイルアドレスで私にコンタクトしてくだ さい: controzz@cli.di.unipi.it フィードバックは大歓迎です。どんな誤りの指摘でも私にとっては貴重です。 あなたが質問を送ってくれれば、次のリリースではもっとたくさんの FAQ を 書くことができるでしょう。 12. このミニハウツーの最新版はどこにあるか このミニハウツーは、HOWTO の世話役達によってメンテナンスされており、毎 月 comp.os.linux.answers にポストされています。sunsite や sunsite のミ ラーサイトの HOWTO ディレクトリにもあるはずです。 私のホームページにも置いてあります。(ここから私にコンタクトすることも できます。) URL は: http://www.cli.di.unipi.it/~controzz/intro.html 13. 謝辞 以下の方々に多大なる感謝をします: o Rick Lim PLIP と LP を共存させる ためのパッチ o Takeshi Okazaki 異なるポート上で PLIP と LP を使うためのパッチ o Jim Van Zandt このハウツーの中の、「チュート リアル」部分についてのアドバイス o James Vahn 「DOS と LINUX の間で PLIP 接 続する」の章の素晴らしい追補 o linux ニュースグループに PLIP 関連の記事をポストしてくれた方々、ま たは私に直接にメイルをくれた、全ての方々。これらの方々の名前をすべ て列挙すると ミニハウツーとしては長くなり過ぎてしまうので: みなさ ん、ありがとう! 14. 著作権表示 Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions. All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below. In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs. If you have questions, please contact Greg Hankins, the Linux HOWTO coordinator, at gregh@sunsite.unc.edu via email. 別途宣言されていない限り、Linux の HOWTO 文書はそれぞれの著者が著作権 を所有しています。この著作権表示が全てのコピーに添付される限り、Linux の HOWTO 文書は、どのような物理的、電気的な手段でも、全て、あるいは一 部分のみをコピーして再配布することが可能です。商業的な利用も可能です し、推奨しますが、そのような場合には一報してくださることを期待します。 Linux HOWTO 文書からの翻訳や派生物、あるいは HOWTO 文書を集めたものは 全てこの著作権表示に従います。すなわち、HOWTO から派生した文書に対して 追加の制限を加えてはいけません。この規則については一定の条件のもとで例 外もあります;詳細については後述する Linux HOWTO のコーディネーターの アドレスまで問い合わせてください。 簡単に言うと、我々はあらゆる可能なチャンネルを経由してこの文書が広く普 及することを願っています。しかしながら、HOWTO 文書を copyright で保護 し、HOWTO 文書を再配布する計画については一報してくださるように期待して います。 なにか質問がある場合には、Linux HOWTO の世話役である Greg Hankins に電 子メイルでコンタクトしてください。彼のメイルアドレスは: gregh@sunsite.unc.edu です。