前々回、前回とsimhのPDP-11エミュレータを使ってUNIX V7をインストールしました。
今回はこのUNIX V7に別のマシンからtelnetでログインできるようにしてみます。
前々回インストールしたSoftware KitのUNIX7と前回のインストールテープから入れたものとでは構成が結構違っています。今回はSoftware Kitから入れたほうを使って作業します。
カーネルソースのダウンロード
外部からtelnetできるようにするためには、通信用のデバイスが必要ですが、今のままでは使えません。使えるようにするためにはカーネルの再構築を行う必要があります。
ただ、カーネルの再構築には当然カーネルソースが必要ですが、Software KitのUNIX V7にはカーネルソースが入っていません(テープイメージから入れたほうには最初からソースが入っています)。そのため、まずソースをダウンロードしてくる必要があります。
ソースファイルを含めたUNIX V7の全ファイルは以下のコマンドでダウンロードします。作成されるディレクトリ階層が深いので上に持ってきます。
linux$ wget -r -np -nH ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/UnixArchive/PDP-11/Trees/V7/ linux$ mv pub/mirror/UnixArchive/PDP-1/Trees/V7/ . linux$ cd V7
UNIX V7のソースはいくつかの場所で公開されていますが、Software KitのUNIX V7は磁気ディスクにRL02を使っているため、/usr/sys/confの下にrltmconfというファイルがあるものを用意する必要があります。このrltmconfがないソースアーカイブが多いので注意が必要です。
ソースへのパッチ
今回はDZ11 Terminal Multiplexerというというデバイスを有効にします。ただ、そのためには一部のソースにパッチを当てます。具体的には、カーネル再構築の設定を行う/usr/sys/conf/mkconfでデバイスdzを扱えるようにします。以下にその内容を示します。
45a46 > "dz", 248a250,259 > "dz", > 0, 300, CHAR+INTR, > " dzin; br5+%d.\n dzou; br5+%d.", > ".globl _dzrint\ndzin: jsr r0,call; jmp _dzrint\n", > ".globl _dzxint\ndzou: jsr r0,call; jmp _dzxint\n", > "", > " dzopen, dzclose, dzread, dzwrite, dzioctl, nulldev, dz_tty,", > "", > "int dzopen(), dzclose(), dzread(), dzwrite(), dzioctl();\nstruct tty dz_tty[];", >
このパッチの元ネタは以下のサイトで公開されているものです。
http://www.ljosa.com/~ljosa/v7-dz11
ただ、このサイトのパッチは前回使ったテープイメージ(Keith_Bostic_v7)のソース用に作られており、今回使うソースとはちょっと行番号がずれているので手直ししています。
このパッチをmkconf.c.diffという名前で保存しておきます。
続いて、ダウンロードしたソースファイルにこのパッチを当てます。
linux$ cp ./usr/sys/conf/mkconf.c ./usr/sys/conf/mkconf.c.org linux$ patch ./usr/sys/conf/mkconf.c < mkconf.c.diff patching file ./usr/sys/conf/mkconf.c linux$
カーネルソースをテープイメージに格納する
パッチを当てたら、カーネルソースが置かれている./usr/sysの内容をtarで固めて、simhのテープイメージに変換します。テープイメージの作成には前回の記事で使ったtapewriteコマンドを使います。
linux$ (cd ./usr/sys; tar --format=v7 -cf - .) | tapewrite > src.tap
作成したテープイメージsrc.tapはUNIX V7の実行環境があるディレクトリにコピーしておきます。
UNIX V7の起動とソースイメージのコピー
テープイメージがができたので、このテープの内容をUNIX V7に持っていきます。
そのため、起動用の設定ファイルを少し書き換えます。新しい設定ファイルの内容は以下の通りです。
linux$ cat boot.ini set cpu 11/45 set cpu 256k set rl0 RL02 att rl0 unix_v7_rl.dsk set rl1 RL02 att rl1 rl1.dsk att tm0 src.tap boot rl0
追加したのは磁気ディスクrl1と磁気テープtm0の定義です。rl1は読み込むソースの展開先として使います。tm0はさっき作ったカーネルソースのテープイメージを読み込むために使います。
では、この 設定でUNIX V7を起動していきます。
linux$ pdp11 boot.ini PDP-11 simulator V3.9-0 Disabling XQ RL: creating new file Overwrite last track? [N] ← ディスクを追加したので聞いてきます。そのままEnter @boot New Boot, known devices are hp ht rk rl rp tm vt : rl(0,0)unix mem = 177856 # (Ctrl-D) Restricted rights: Use, duplication, or disclosure is subject to restrictions stated in your contract with Western Electric Company, Inc. Thu Sep 22 17:55:15 EDT 1988 login: root Password: You have mail. #
では追加したrl1にファイルシステムを作ってマウントし、テープイメージを読み込みます。
# mkdir /mnt # /etc/mkfs /dev/rl1 5000 ←値は適当 size = 1600 m/n = 3 500 # /etc/mount /dev/rl1 /mnt # cd /mnt # mkdir usr # cd usr/ # mkdir sys # cd sys # tar xvf /dev/mt0
これで/mnt/usr/sysの下にカーネルソースができました。
カーネル再構築
続けて、デバイスdzが使えるようにカーネル再構築の設定を行います。まず、カーネル再構築用のツールであるmkconfをさっきパッチを当てたソースで再コンパイルします。
# cd /mnt/usr/sys/conf # mv mkconf mkconf.org # cc mkconf.c -o mkconf
続いてデバイスdzを組み込むための設定ファイルを作ります。もともとある設定ファイルrltmunixにデバイスdzを追加します。
# cat > unixconf dz (Ctrl-d) # cat rltmconf >> unixconf # cat unixconf dz rl tm root rl 0 swap rl 0 swplo 18000 nswap 2480
設定ファイルにdzが入ったので、この設定ファイルを使ってカーネルを再構築します。
# mkconf < unixconf # make
日付をきちんと設定していないので、すでにunixがあるというエラーが出るかもしれません。そのときはunixと.oファイルを消して再度makeします。 これで、/mnt/usr/sys/conf/unixにビルドした新しいカーネルができます。
このカーネルなら外部からの接続を受け付けられますが、まだ少し準備が必要です。
デバイスファイルの作成
まず/dev配下に外部端末用のttyファイルを作ります。その前に、c.cファイルの中にdzのメジャー番号が書かれているのでまずそれを調べます。
# cd /mnt/usr/sys/conf # cat c.c 略 dzopen, dzclose, dzread, dzwrite, dzioctl, nulldev, dz_tty, /* dz = 19 */
この例ではdzのメジャー番号は19です。この行にはdzopen、dzcloseなどの名前が書かれていますが、再構築する前のc.cではこの行がすべてnodevになっています。
メジャー番号がわかったのでデバイスファイルを作ります。とりあえず今回は3つ作っておきます。
# cd /dev # /etc/mknod tty00 c 19 0 # /etc/mknod tty01 c 19 1 # /etc/mknod tty02 c 19 2 #
続いて/etc/ttysファイルを編集して、今作ったデバイスを有効にします。/etc/ttysのtty0?の行はいずれも00で始まっていますが、これを12で始まるように書き換えます。
# cat /etc/ttys 14console 00tty00 00tty01 00tty02 00tty03 00tty04 00tty05 00tty06 略 # ed /etc/ttys 266 2,4s/00/12/ w 266 q # cat /etc/ttys 14console 12tty00 12tty01 12tty02 00tty03 00tty04 00tty05 00tty06 略
最初は"10tty??"にしていましたが、これだと外部からつないだときのレスポンスがかなり悪くなります。いろいろ対策を探していたのですが、2ケタ目が0だと端末との通信速度が300~1200ボーとして扱われるということがわかりました。ここを2にすることで9600ボーの端末として扱われ、レスポンスが劇的に改善しました。
では、カーネルを置き換えていったん終わらせます。
# cd / # mv unix unix.org # cp /mnt/usr/sys/conf/unix . # sync;sync;sync # Simulation stopped, PC: 002306 (MOV (SP)+,177776) sim> q Goodbye linux$
起動時にdzを有効にするために、simhの設定ファイルを書き換えます。
linux$ cat boot.ini set cpu 11/45 set cpu 256k set rl0 RL02 att rl0 unix_v7_rl.dsk set rl1 RL02 att rl1 rl1.dsk set dz 7b lines=32 ← 追加 att dz -am 4096 ← 追加:ポート4096で待ち受ける boot rl0
待ち受け用ポート番号は環境に応じて適当に指定します。待ち受けポートはiptablesの設定で外部からの接続を受け付けるようにしておく必要があります。では、この設定を使ってbootします。
linux$ pdp11 boot.ini PDP-11 simulator V3.9-0 Disabling XQ Listening on port 4096 (socket 6) ← この行が出ることを確認する Modem control activated Auto disconnect activated @boot New Boot, known devices are hp ht rk rl rp tm vt : rl(0,0)unix mem = 175808 # Restricted rights: Use, duplication, or disclosure is subject to restrictions stated in your contract with Western Electric Company, Inc. Thu Sep 22 19:54:23 EDT 1988 login: root Password: You have mail. #
無事にブートしたので、別のマシンから接続してみます。今回はWindowsマシンのTeraTermからtelnetでlinuxマシンのポート4096につないでみます。
無事につながりました。
今回はここまで。
[関連記事]
- [simh-pdp11]UNIX V7からLinuxにメールを送ってみる
- [simh-pdp11]UNIX V7とLinuxでUUCP(2)
- [simh-pdp11]UNIX V7とLinuxでUUCP(1)
- [simh-pdp11]UNIX V7の日付まわりを修正する
- [simh-pdp11]UNIX V7に外部からTELNETできるようにする part2
- [simh-pdp11] UNIX V7をテープイメージからインストールする
- [simh-pdp11] Version 7 Unixをインストールする
- simhをインストールしてみる
ランキングに参加してみました。クリックしていただければ嬉しいです。
にほんブログ村 |
パソコン ブログランキングへ |