忍者ブログ
PCメモ
PC関係のメモ、気付いたこと。 simhとChromium OSをいじって遊んでいます。 Chromium OSのカスタムビルドを配布しています。(http://chromiumosde.gozaru.jp) twitter: @zui22904336 PGP fingerprint: 45FC 0E47 A68A FA06 02FE 2BEF B72C C6E6 F9FF 1C19
Admin / Write
2014/03/08 (Sat) 21:55
simhで動かしているUNIX V7にホストOSのLinuxからファイルを持っていきたいときに、いちいちテープイメージを作るのは面倒くさいので、今回はUUCPでファイルを転送できるようにしてみたいと思います。

UNIX V7の時代はまだTCP/IP自体が存在していなかったそうです。UUCPはTCP/IPによるインターネット接続が一般化する前に使われていた通信方法だそうで、UNIX V7にはデフォルトでUUCPを動かすために必要なプログラムが含まれています。私はUUCPの現役時代は雑誌記事で読んだ程度でほとんど知りません。今回はそれを試してみようと思います。

UUCPの時代は、電話回線経由でダイヤルアップによりコンピュータどうしを接続していたようです。
ただ、simhのPDP-11エミュレータではダイヤラーなどの自分から外部に接続しに行くためのデバイスがサポートされていません。そのため、今回はsimhのUNIX V7は着信専用とし、ホストOSのLinux側からUUCP Over TCP/IPで無理やりUNIX V7につなぎに行くようにしてみます。相手がエミューレーターだからできる技ですね。はっきり言って邪道ですが、まあ良しとします。
残念ながらUNIX V7どうしでのUUCP接続は発信用デバイスがないので断念しました。

着信専用といってもUNIX V7からLinuxにファイルを送ることができないわけではなく、Linuxから接続があった時にキューにたまっているファイルをUNIX V7からLinuxに送信することもできるようになっています。

<UNIX V7側の設定>


まず、前提条件として、こちらの記事で書いた手順で外部からtelnetで接続できるようにしておく必要があります。
(DC11を使った場合はうまく通信できませんでした。DZ11を使う方法でのみ確認しています)
telnet接続できるようになったら以下の手順でUNIX V7側の着信設定を行います。

ユーザuucpの設定


UUCP接続では、Linux側のuucicoというプログラムがUNIX V7に自動でtelnetで接続し、ユーザuucpでログインしてきます。このuucpユーザのシェルをやはりuucicoにすることでuucicoどうしで会話しながらファイルを送受信する、という形態になります。
UNIX V7にはデフォルトでユーザuucpが存在していますが少し手直しします。まず、ユーザuucpのパスワード設定を行います。

# passwd uucp
New password:  ← 今回は!uucpとした
Retype new password:
#

また、/etc/passwdにはデフォルトでシェルのパスとしてuucicoが設定されていますが、パスが実際と食い違っているので直します。

# ed /etc/passwd
154
5
uucp:y/Rxa0fP2UtmA:4:4::/usr/lib/uucp:/usr/lib/uucico ← lib/の後にuucp/が必要
5s/uucico/uucp\/uucico/
5
uucp:y/Rxa0fP2UtmA:4:4::/usr/lib/uucp:/usr/lib/uucp/uucico
w
159
q
# 


スプールディレクトリの作成


UUCPでは、送受信するファイルを一時的にためておくためのスプールディレクトリが必要になります。このスプールディレクトリのパスはハードコーディングされているため、その場所に作ります。アクセスするのはuucpユーザなのでオーナーの変更も行います。

# mkdir /usr/spool/uucp
# chown uucp /usr/spool/uucp

なお、スプールディレクトリのパスを変更するためには/usr/src/cmd/uucp/uucp.hを修正してUUCP関連のプログラムをリビルドする必要があります。今回は面倒なのでやりません。

リモートサイトの定義


uucp関連の設定ファイルは/usr/lib/uucpにあります。ここのL.sysに以下の行を追加して、接続してくるLinuxホストの定義を行います。

centos6 Any tty00 9600 tty00 login uucp assword: uucp

一番左の"centos6"がリモートサイトの名前になります。
次のAnyはいつでも呼び出し可であることをあらわします。当時のUUCPはダイヤルアップ接続がメインであったため、電話代節約の観点で接続時間を限定する、ということがあったようです。今回は関係ないのでAnyにしています。
あとはtty00を使って9600ボーでやり取りする、という意味になるようです。さらに後ろのlogin~は、UNIX V7から別マシンに接続しに行くときに必要になる設定です。具体的には、loginという文字列を受け取ったらuucp送信し、assword:という文字列を受け取ったらuucpを送信する、という意味のようです。要するに相手に接続する際のログインシーケンスです。今回UNIX V7側は着信専用なので、L.sysにもとからある設定をそのままパクっています。

リモートユーザのアクセス権定義


続いて/usr/lib/uucp/USERFILEを編集して、Linux側のユーザのアクセス権を設定します。このファイルに定義されているLinuxユーザだけがUNIX V7にファイルを送信できるようになります。ここにいう「Linuxユーザ」はuucpコマンドでUNIX V7にファイルを送信しようとするユーザを指します。とりあえずは以下の行を追加します。

user,centos6 /

とすると、リモートサイトcentos6のユーザuserが/配下のどこにでもアクセスできるということになります。userは実在のユーザで適宜読み替えてください。実際の運用ではこんな危ない設定はしないと思いますが、まあ、今回は試すだけなので良しとします。
ただし、処理するのはUNIX V7のuucpユーザなので、uucpユーザがアクセスできないところには読み書きできないはずです。

動作確認


ここまで設定したら動作確認します。
UNIX V7にtelnetで接続し、ユーザuucpでログインします。このとき、LinuxのGNOMEやKDEの端末プログラムではなく、WindowsのTeratermなど、外部から接続するようにするのがベストです。(理由は後述します)。

Connected to the PDP-11 simulator DZ device, line 0


login: uucp
Password: ← uucpのパスワード。今回は!uucp
Shere  ←これが表示されるか確認する

この"Shere"が表示されたら、以下のようにタイプします。

(Ctrl+P)Scentos6(Ctrl+Space)

これは接続元のサイト名がcentos6であることを表します。これを入力して

ROKPg

と表示されれば通信ができています。これは接続が許可され、gプロトコルで通信を行います、という意味です。
 
ここで、LinuxのGNOMEやKDEだと、Ctrl+Spaceが日本語入力に割り当てられていることがあり、それだとうまく動作確認ができません。いちいち設定を変えるのも面倒ですので、外部から試すのがお手軽です。

最後に

(Ctrl+P)(Ctrl+H)(Ctrl+Space)

とタイプすると通信が切断されます。

simh起動ファイルの設定

  
いったんUNIX V7を終わらせて、起動ファイルを修正します。

set dz 8b lines=32 ← 7bを8bに変更

7bを8bに変えることで通信中にトップビットがクリアされるのを抑止します。ただし、telnetで外部から接続しようとすると文字化けが起きるようになります。
長くなったのでここでいったん切ります。次はLinux側の設定について書きます。


[関連記事]



ランキングに参加してみました。クリックしていただければ嬉しいです。

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

パソコン ブログランキングへ

拍手[0回]

PR


Comment
Name
Title
Mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  HOME   17  15  14  13  12  11  10  9  8  7  6 
プロフィール
HN:
zui
性別:
非公開
PR
忍者カウンター
忍者ブログ [PR]