unixv7PCメモPC関係のメモ、気付いたこと。OSをいじって遊んでいます。OSのカスタムビルドを配布しています。ないブログに表示されています。新しい記事を書く事で広告が消えます。V7をインストールしました。V7に別のマシンからtelnetでログインできるようにしてみます。KitのUNIX7と前回のインストールテープから入れたものとでは構成が結構違っています。Kitから入れたほうを使って作業します。カーネルソースのダウンロード外部からtelnetできるようにするためには、通信用のデバイスが必要ですが、今のままでは使えません。使えるようにするためにはカーネルの再構築を行う必要があります。V7にはカーネルソースが入っていません(テープイメージから入れたほうには最初からソースが入っています)。そのため、まずソースをダウンロードしてくる必要があります。V7の全ファイルは以下のコマンドでダウンロードします。作成されるディレクトリ階層が深いので上に持ってきます。V7は磁気ディスクにRL02を使っているため、/usr/sys/confの下にrltmconfというファイルがあるものを用意する必要があります。このrltmconfがないソースアーカイブが多いので注意が必要です。Multiplexerというというデバイスを有効にします。そのためには一部のソースにパッチを当てます。具体的には、カーネル再構築の設定を行う/usr/sys/conf/mkconfでデバイスdzを扱えるようにします。以下にその内容を示します。このパッチの元ネタは以下のサイトで公開されているものです。http://www.ljosa.com/~ljosa/v7-dz11ただ、このサイトのパッチは前回使ったテープイメージ(Keith_Bostic_v7)のソース用に作られており、今回使うソースとはちょっと行番号がずれているので手直ししています。このパッチをmkconf.c.diffという名前で保存しておきます。続いて、ダウンロードしたソースファイルにこのパッチを当てます。./usr/sys/conf/mkconf.clinux$カーネルソースをテープイメージに格納するパッチを当てたら、カーネルソースが置かれている./usr/sysの内容をtarで固めて、simhのテープイメージに変換します。テープイメージの作成には前回の記事で使ったtapewriteコマンドを使います。V7の実行環境があるディレクトリにコピーしておきます。V7に持っていきます。そのため、起動用の設定ファイルを少し書き換えます。新しい設定ファイルの内容は以下の通りです。rl0追加したのは磁気ディスクrl1と磁気テープtm0の定義です。rl1は読み込むソースの展開先として使います。tm0はさっき作ったカーネルソースのテープイメージを読み込むために使います。V7を起動していきます。ディスクを追加したので聞いてきます。追加したrl1にファイルシステムを作ってマウントし、テープイメージを読み込みます。/dev/mt0これで/mnt/usr/sysの下にカーネルソースができました。続けて、デバイスdzが使えるようにカーネル再構築の設定を行います。カーネル再構築用のツールであるmkconfをさっきパッチを当てたソースで再コンパイルします。mkconf続いてデバイスdzを組み込むための設定ファイルを作ります。ある設定ファイルrltmunixにデバイスdzを追加します。2480設定ファイルにdzが入ったので、この設定ファイルを使ってカーネルを再構築します。make日付をきちんと設定していないので、すでにunixがあるというエラーが出るかもしれません。そのときはunixと.oファイルを消して再度makeします。これで、/mnt/usr/sys/conf/unixにビルドした新しいカーネルができます。このカーネルなら外部からの接続を受け付けられますが、まだ少し準備が必要です。デバイスファイルの作成まず/dev配下に外部端末用のttyファイルを作ります。その前に、c.cファイルの中にdzのメジャー番号が書かれているのでまずそれを調べます。*/この例ではdzのメジャー番号は19です。この行にはdzopen、dzcloseなどの名前が書かれていますが、再構築する前のc.cではこの行がすべてnodevになっています。メジャー番号がわかったのでデバイスファイルを作ります。今回は3つ作っておきます。2#続いて/etc/ttysファイルを編集して、今作ったデバイスを有効にします。/etc/ttysのtty0?の行はいずれも00で始まっていますが、これを12で始まるように書き換えます。最初は"10tty??"にしていましたが、これだと外部からつないだときのレスポンスがかなり悪くなります。対策を探していたのですが、2ケタ目が0だと端末との通信速度が300~1200ボーとして扱われるということがわかりました。ここを2にすることで9600ボーの端末として扱われ、レスポンスが劇的に改善しました。カーネルを置き換えていったん終わらせます。起動時にdzを有効にするために、simhの設定ファイルを書き換えます。rl0待ち受け用ポート番号は環境に応じて適当に指定します。待ち受けポートはiptablesの設定で外部からの接続を受け付けるようにしておく必要があります。この設定を使ってbootします。mail.#無事にブートしたので、別のマシンから接続してみます。今回はWindowsマシンのTeraTermからtelnetでlinuxマシンのポート4096につないでみます。無事につながりました。Unixをインストールするsimhをインストールしてみるランキングに参加してみました。クリックしていただければ嬉しいです。V7をインストールしましたが、実際にはインストールしたというよりは、インストール済みディスクを持ってきてつないだ、というのが正解かな、という感じです。V7インストールに挑戦します。V7のマニュアルが、開発元であるベル研究所のページからダウンロードできます。http://plan9.bell-labs.com/7thEdMan/bswv7.htmlマニュアルは3つに分かれていますが、セットアップの手順はこのうちのv7vol2b.pdfに書かれています。Unix」という章です。ここに書かれている手順で作業していきます。Archiveからダウンロードできます。日本のミラーサイトのURLは以下の通りです。ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/UnixArchive/PDP-11/Distributions/research/Keith_Bostic_v7/ここにあるf0.gz~f6.gzの7つのファイルとfilelist、すべてをどこか適当な場所にダウンロードします。テープイメージをsimhの形式に変換する。ダウンロードしたテープイメージのファイルですが、そのままでは使えません。simhで読み込める形に変換する必要があります。この変換に必要なツールはsimhには含まれておらず、いろいろな方がばらばらに作っているみたいです。こちらのブログで公開されていたものをお借りしたいと思います。こちらのツールは、テープイメージに含めるファイルのブロックサイズを個別に指定でき、しかもgzファイルをそのまま読み込めるのでとても便利です。公開されている2つのソース、tapewrite.cとmaketapeを自分のマシンにおいて、tapewrite.cはコンパイルします。maketapeには実行権を付けます。maketapeつづけて、maketape用の設定ファイルを作ります。内容は以下の通りです。tape-unixv7.conff0.gz512f1.gz512f2.gz512f3.gz512f4.gz512f5.gz10240f6.gz10240linux$各行の左はテープイメージに書き込むファイル名、右側はブロックサイズです。このブロックサイズの情報は一緒にダウンロードしたfilelistに書かれています。ファイルができたら以下のようにしてテープイメージファイルを作ります。bsize=10240linux$これでunixv7.tapという名前のファイルができていればOKです。このテープイメージを使ってインストールを行います。インストール準備が整ったので、pdp11エミュレータを起動します。Unixを見ると最初の起動時にマシン語のプログラムを打ち込む必要があるようなので、設定と一緒にあらかじめファイルに書いておきます。Kitでインストールしたときは磁気ディスクの種類としてRL02を指定しましたが、今回インストールするテープにはRL02用のカーネルやブートストラップが含まれていませんので、このテープで利用可能なRP04を指定します。ディスクの内容はこれからのインストールで作成していきますので、仮想磁気ディスクファイルには存在しない適当な名前を指定すればOKです。準備が整ったら起動します。simhのプロンプトが出たら、プログラムを100000番地から実行します。必要な処理をしてCPUループになるので、数秒待ってCtrl-Eで止め、今度は0番地から実行します。出力されたらテープからブートします。この工程で磁気ディスクに空のファイルシステムを作ります。2つほど聞かれるので、マニュアルの通りに入力していきます。磁気ディスクのRP04はsimhのプロンプトではrpですが、ここでの指定はhpとなるようです。:が出るので、再びテープから起動します。今度は今作った空のファイルシステム上にUNIXのルートファイルシステムをリストアします。tapeBoot:マニュアルには数分かかるとありますが、数秒で終わってしまいます。この辺は最新のハードディスクと大昔のテープの差でしょうか。これで磁気ディスク上にルートファイルシステムができました。このルートファイルシステム上のカーネルを使って起動を行います。無事、シングルユーザモードで起動しました。引き続き、マニュアルの記述に従って、カーネルのリネームおよびスペシャルファイルの作成を行います。V7はシングルユーザモードでの入力が全部大文字になります。Kitの時と異なり、ここで/dev/swapも自動で作られます。続けて、/usr用のファイルシステムを作り、データをリストアします。作成したファイルシステムを/usrにマウントして中身を確認します。最後の仕上げとして、ブートストラップブロックを磁気ディスクの先頭に書き込みます。これで一通り作業は終わりました。Ctrl-dを押してシングルユーザモードを抜けます。マルチユーザモードでログインできたことを確認したらいったん終わらせます。qGoodbyelinux$これで一通りインストール作業は終わりました。インストールできたかどうか確認します。今インストールした磁気ディスクから起動してみます。起動用の設定ファイルは以下のようになります。Kitでインストールしたときは、最初の"boot"と打ち込むところでプロンプトとして"@"が出るのですが、こちらでは何も出ません。Kitの時と同じように起動できました。Unixをインストールするsimhをインストールしてみるランキングに参加してみました。クリックしていただければ嬉しいです。V7)をインストールしてみます。V7は現在ではフリーソフトになっているようで、だれでも自由に入手できます。Kitを使ってみます。これはインストール済みの仮想ディスクイメージなので、ダウンロードすればすぐ使えます。ダウンロードURLはhttp://simh.trailing-edge.com/kits/uv7swre.zipです。ダウンロードしたら適当な場所に展開します。unix_v7_rl.dskこのunix_v7_rl.dskがインストール済みの仮想磁気ディスクイメージですので、これを使って起動します。simhのpdp11エミュレータを起動して以下のように入力していきます。attなどのコマンドおよびrl0などのパラメータの説明は、http://simh.trailing-edge.com/pdf/pdp11_doc.pdfに書いてあります。@が表示されたら、bootと入力します。表示されたら、ブートするカーネルの指定を行います。以下のように指定します。177856##のプロンプトはシングルユーザモードでUNIXが起動したことを表します。ここで、磁気ディスクと磁気テープのデバイスファイルを作っておきます。nrmt0/tmpがないので作っておきます。ないとmanコマンドがエラーになるようです。/tmpさらにswapデバイスを作成し、カーネルを"unix"という名前でコピーします。これはpsコマンドを動かすのに必要なんだそうです。この作業は最初は抜けていました。ほかにも抜けていることがあるかもしれません。(Ctrl-dを入力)Ctrl-dを押すとシングルユーザモードが終わってマルチユーザモードに移行します。ここでおなじみのloginプロンプトが出ますので、ユーザ名、パスワードともにrootでログインします。V7が起動できました。V7にはshutdownコマンドがありませんので以下のようにします。pdp11エミュレータに自動で読み込ませることができます。rl(0,0)unixカーネルをunixという名前でコピーしたので、2回目以降は上のようにrl(0,0)unixで起動できるようになります。2回目以降はシングルユーザモードでは特にやることはありませんので、#が表示されたらすぐにCtrl-dを押してマルチユーザモードに移行すればOKです。V7をテープイメージからインストールするsimhをインストールしてみるランキングに参加してみました。クリックしていただければ嬉しいです。