2012年01月10日
SIMH - 4.1BSDを動かす (1)
SIMHで昔のUNIXを動かす第4回。
今回は、1981年リリースの4.1BSDをSIMHのVAX 11/780シミュレータで再現します。
tarの吸い上げ対象から.MAPというファイルを除外しています。.MAPファイルはCD上の各ディレクトリに存在しており、これはオリジナルのBSDソースにないものです。
※ファイル名のマッピング情報が書かれています。
コピー元には、CDの4.1.snap/ ディレクトリを指定します。CDには4.1/というディレクトリもありますが、中身は4.0BSD+アップグレード用のスクリプト/ファイルのようです。実際、/usr/src/sys以下のソースファイルやvmunixのタイムスタンプ等は、4.0/ディレクトリにあるものと同じでした。4.1.snapの素性についてCD中に情報がなく、本物のテープに入っていたバージョンとの差は不明です。4.1.snapは稼動していたシステムから吸い上げたスナップショットの可能性もありますが、ここではオリジナルの4.1BSDだと思って作業を進めることとします。
これで準備完了。workディレクトリの内容は次のとおり。
※以下、Linuxのシェル上での作業はプロンプトを"linux$"、"linux#"と表記します。
※CD上のusr/lib/uucp等にrootしか読めないファイルあり。
※最初これに気づかなくてそのままインストールしたら、boot時にシェルが立ち上がらずハマりました。
/usrと/usr/srcを別々のテープファイルに格納するため、src/の中身を削除して空のディレクトリを作り直します。
アンマウントして4.0BSDを終了します。
本物のテープには5番目のファイルとして4.0からのアップグレード用のスクリプト/ファイルのtarが入っていますが、今回のシミュレーションでは割愛しました。
maketapeを実行。
今回は、1981年リリースの4.1BSDをSIMHのVAX 11/780シミュレータで再現します。
2012年1月現在、Computer History Wikiに4.1BSDのSIMH用インストールキットは掲載されていません。そこで、CSRGのArchive CDから自力でインストールテープファイルを作成することにしました。
方法は、SIMHで4.0BSD環境を立ち上げて、専用のファイルシステムに4.1BSDのディレクトリ構造をリストアした後、(4.1BSDの)rootファイルシステムをdump、/usr以下をtarで吸い上げる、というやり方でいきます。
必要なソフトウェア
詳細は当ブログ( )内日付の記事を参照。- CSRG Archive CD-ROMsのディスク#1 (以下、単にCDと呼ぶ)(2011/10/28)
- SIMH上に構築した4.0BSDの環境 (2011/10/28)
- テープ作成コマンド: tapewrite, maketape (2011/11/06)
- テープ読込みコマンド: taperead (2011/11/27)
Step 1. SIMH 4.0BSD環境の準備
作業用ディレクトリworkを作成し、下記のファイル群をそこへコピーします。- 4.0BSDシミュレーション環境のファイル: boot, dboot.ini, tboot.ini, rp06.disk, vax780
- maketape, taperead, tapewrite
Step 2. CDからディレクトリ構造をアーカイブ
下記のシェルスクリプトarchive-bsd41を記述し、workディレクトリに保存します。#! /bin/sh srcdir=/media/cdrom/4.1.snap rm -f 41root.tap 41usr.tap root_list=".cshrc .login .profile arch/ bill/ bin/ \ boot crp/ dev/ etc/ lib/ lost+found/ mnt/ otp/ ra/ stamp sys/ tmp/ tp/ \ va/ vb/ vmunix" set -x tar cf - -C $srcdir --exclude .MAP $root_list \ | ./tapewrite -b 10240 > 41root.tap tar cf - -C $srcdir/usr --exclude .MAP . \ | ./tapewrite -b 10240 > 41usr.tapこのスクリプトは、CDから4.1BSDのディレクトリ構造をtarで吸い上げ、2つのSIMHテープファイル41root.tapおよび41usr.tapに書き込みます。41root.tapは、ルートファイルシステムのディレクトリ構造をアーカイブしたもの。41usr.tapは、/usr以下(src含む)をアーカイブしたものです。
tarの吸い上げ対象から.MAPというファイルを除外しています。.MAPファイルはCD上の各ディレクトリに存在しており、これはオリジナルのBSDソースにないものです。
※ファイル名のマッピング情報が書かれています。
コピー元には、CDの4.1.snap/ ディレクトリを指定します。CDには4.1/というディレクトリもありますが、中身は4.0BSD+アップグレード用のスクリプト/ファイルのようです。実際、/usr/src/sys以下のソースファイルやvmunixのタイムスタンプ等は、4.0/ディレクトリにあるものと同じでした。4.1.snapの素性についてCD中に情報がなく、本物のテープに入っていたバージョンとの差は不明です。4.1.snapは稼動していたシステムから吸い上げたスナップショットの可能性もありますが、ここではオリジナルの4.1BSDだと思って作業を進めることとします。
これで準備完了。workディレクトリの内容は次のとおり。
※以下、Linuxのシェル上での作業はプロンプトを"linux$"、"linux#"と表記します。
linux$ cd work linux$ ls archive-bsd41 dboot.ini rp06.disk tapewrite vax780 boot maketape taperead tboot.iniarchive-bsd41を実行。すべてのファイルを確実に読めるように、スクリプトはroot権限で実行します。
※CD上のusr/lib/uucp等にrootしか読めないファイルあり。
linux$ su linux# ./archive-bsd41生成された2つのファイル41root.tap、41usr.tapのサイズは、それぞれ4MB、41MBになります。
Step 3. SIMH 4.0BSDの起動
リストア先のRP06追加ディスクとして、dboot.iniに次の1行を追加します。set rp1 rp06VAX 11/780シミュレータから4.0BSDを起動します。
linux$ ./vax780 dboot.ini4.0BSDが立ち上がったら、システムの日付を4.1BSDリリース当時の日付に変更します。ファイルシステムのdumpファイルに書き込まれる日時にリアリティを出すためです。本物の4.1BSDテープに記録されていた日時がわからなかったので、CD上のvmunixのタイムスタンプやドキュメントに記載の日付などから類推して、ここでは仮に1982年2月10日としておきました。
# date 8202101200 Wed Feb 10 12:00:00 PST 1982SIMHは再起動するとUNIXの時計がずれて日付が変わってしまうことがあるので(2011/12/16付記事参照)、Step 4〜10の作業は1回のSIMHセッションで完遂する必要があります。
Step 4. リストア先のファイルシステムの作成
Ctrl-EでSIMHプロンプトに戻り、リストア先のディスクファイルを接続します。# ^E Simulation stopped, PC: 80000966 (BRW 80000958) sim> att rp1 rp1.disk RP: creating new file Overwrite last track? [N] sim> crp1に、ファイルシステムrp1aおよびrp1gを作成します。rp1aは/ (root)用、rp1gは/usr用です。
# /etc/mkfs /dev/rp1a 7942 isize = 5072 m/n = 3 500 # /etc/mkfs /dev/rp1g 145673 isize = 65488 m/n = 3 500それぞれ/mnt, /tにマウントします。(/tは元々存在していた空のディレクトリで、それを流用)
# /etc/mount /dev/rp1a /mnt # /etc/mount /dev/rp1g /t
Step 5. rootディレクトリ構造をリストア
Ctrl-EでSIMHプロンプトに戻り、41root.tapをテープドライブに“装着”します。# ^E Simulation stopped, PC: 80000966 (BRW 80000958) sim> att tu0 41root.tap sim> c/mntに4.1BSDのrootディレクトリ構造をリストアします。
# cd /mnt # tar xpb 20
Step 6. /usrのリストア
Ctrl-EでSIMHプロンプトに戻り、テープファイルを“取り外し”て、41usr.tapを“装着”します。# ^E Simulation stopped, PC: 80000958 (FFS #0,#20,80019CE4,R0) sim> det tu0 sim> att tu0 41usr.tap sim> c/tに4.1BSDの/usrをリストアします。
# cd /t # tar xpb 20fsckを実行。
# fsck /dev/rrp1a # fsck /dev/rrp1g
Step 7. スペシャルファイルの再作成
/mnt/にリストアされたdev以下のファイルは、元のスペシャルファイルから通常ファイルに変更されてしまっていました。# cd /mnt/dev # ls -l console tty tty0[0-2] hp* -rw--w--w- 1 root 0 May 9 09:20 console -rw------- 1 root 0 Mar 21 1981 hp0a ..... -rw-rw-rw- 1 root 0 Mar 14 1981 tty -rw--w--w- 1 root 0 Mar 21 1981 tty00 .....こんな状態なので、スペシャルファイルを作り直す必要があります。
※最初これに気づかなくてそのままインストールしたら、boot時にシェルが立ち上がらずハマりました。
# cd /mnt # mv dev dev.org # mkdir dev # cd dev # cp ../dev.org/MAKE . # MAKE std ht0 hp0 hp1 dz0 # cd /mnt # rm -fr dev.orght0, hp*は、後で4.1BSDのセットアップ手順中にも作る機会があるので、ここでは作成不要かもしれません。
Step 8. rootファイルシステムのdump
Ctrl-EでSIMHプロンプトに戻り、dumpファイル書き込み先の41rootdump.tapをテープドライブに“装着”します。dumpの前に、空のusrディレクトリを作っておくのを忘れずに。./usrは後でセットアップ手順中にmoutポイントで使います。# cd /mnt # mkdir usr # ^E Simulation stopped, PC: 80000958 (FFS #0,#20,80019CE4,R0) sim> det tu0 sim> att tu0 41rootdump.tap TU: creating new file sim> crp1aをdumpします。
# cd / # dump 0 /dev/rp1a DUMP: Date of this level 0 dump: Wed Feb 10 12:38:42 1982 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping /dev/rp1a to /dev/rmt8 DUMP: mapping (Pass I) [regular files] ...... DUMP: DUMP IS DONE DUMP: Waiting 23 seconds to rewind. #dumpが終了したらCtrl-EでSIMHプロンプトに戻り、det tu0でテープファイルを“取り外し”ます。
Step 9. /usr/srcをtar
Ctrl-EでSIMHプロンプトに戻り、tar書き込み先の41src-export.tapをテープドライブに“装着”します。# ^E Simulation stopped, PC: 80000961 (BNEQ 80000969) sim> att tu0 41src-export.tap TU: creating new file sim> ctarを実行する前に、残骸?と思われるファイルを削除します。
# cd /t/src # ls cmd dummy games lib libc new # rm dummy # tar c .tarが終了したらCtrl-EでSIMHプロンプトに戻り、det tu0でテープファイルを“取り外し”ます。
/usrと/usr/srcを別々のテープファイルに格納するため、src/の中身を削除して空のディレクトリを作り直します。
# cd /t # rm -fr src # mkdir src
Step 10. /usrをtar
Ctrl-EでSIMHプロンプトに戻り、tar書き込み先の41usr-export.tapをテープドライブに“装着”します。# ^E Simulation stopped, PC: 80000961 (BNEQ 80000969) sim> att tu0 41usr-export.tap TU: creating new file sim> ctarを実行。
# cd /t # tar c .tarが終了したらCtrl-EでSIMHプロンプトに戻り、det tu0でテープファイルを“取り外し”ます。
アンマウントして4.0BSDを終了します。
# cd / # /etc/umount /dev/rp1a # /etc/umount /dev/rp1g # kill 1 # halt syncing disks... done
Step 11. 4.1BSDインストールテープの作成
一旦テープファイルから生データを取り出して別名で保存し、maketapeコマンドに渡すtarファイルを作ります。linux$ ./taperead < 41rootdump.tap |gzip > 41rootdump.gz linux$ ./taperead < 41usr-export.tap |gzip > 41usr-export.tar.gz linux$ ./taperead < 41src-export.tap |gzip > 41src-export.tar.gz4.1BSDのインストールテープの構成をtape.confに下記のように記述します。
# 4.1bsd VAX UNIX System 7/10/81 /media/cdrom/4.1/boot.file 512 41rootdump.gz 10240 41usr-export.tar.gz 10240 41src-export.tar.gz 10240テープブートのプログラムは4.1.snapに見当たらなかったため、CDの4.1/ディレクトリにあるboot.fileを使いました。
本物のテープには5番目のファイルとして4.0からのアップグレード用のスクリプト/ファイルのtarが入っていますが、今回のシミュレーションでは割愛しました。
maketapeを実行。
$ ./maketape tape.conf 4.1bsd.tapこれで4.1BSDのインストールテープのファイル4.1bsd.tapが出来上がりました。
$ ls -lhn 4.1bsd.tap -rw-r--r-- 1 1000 1000 45M 2012-01-05 00:22 4.1bsd.tap続きは次回。
トラックバックURL
この記事へのコメント
1. Posted by K.S 2016年02月04日 16:01
はじめまして。
とても参考にさせていただいています(^^)
参考情報ですが、
今は 4.1Cのsimh tapeがありますね。
http://bitsavers.trailing-edge.com/bits/UCB_CSRG/
# miniroot/root file systemの dump とかなんですね
試してみたところ、以下のような出力でした。
Boot
: hp(0,0)vmunix
215688+63964+69764 start 0xf98
4.1c BSD UNIX #1: Sun Mar 27 14:48:45 PST 1983
real mem = 8384512
avail mem = 7036928
using 148 buffers containing 838656 bytes of memory
mcr0 at tr1
mcr1 at tr2
uba0 at tr3
zs0 at uba0 csr 172520 vec 224, ipl 15
ts0 at zs0 slave 0
dz0 at uba0 csr 160100 vec 300, ipl 15
mba0 at tr8
hp0 at mba0 drive 0
hp1 at mba0 drive 1
hp2 at mba0 drive 2
hp3 at mba0 drive 3
root on hp0
WARNING: should run interleaved swap with >= 2Mb
Automatic reboot in progress...
Fri Feb 4 07:57:56 PST 1983
/dev/rhp0a: 275 files, 3325 used, 4328 free (8 frags, 540 blocks)
/dev/rhp0h: 8014 files, 88474 used, 195871 free (95 frags, 24472 blocks)
/dev/rhp0g: 2 files, 5 used, 309203 free (7 frags, 77299 blocks)
Fri Feb 4 07:57:59 PST 1983
local daemons: telnetd ftpd tftpd syslog sendmail.
preserving editor files
clearing /tmp
standard daemons: update cron accounting berknet mail printer.
starting network: rshd rexecd rlogind rwhod routed.
Fri Feb 4 07:58:00 PST 1983
ucbmonet login: root
Last login: Fri Feb 4 07:45:03 on console
4.1c BSD UNIX #1: Sun Mar 27 14:48:45 PST 1983
Master source now lives here; freeze your 4.1c stuff now.
monet# df
Filesystem kbytes used avail capacity Mounted on
/dev/hp0a 7653 3326 3561 48% /
/dev/hp0g 309208 5 278282 0% /mnt
/dev/hp0h 142172 44238 83716 35% /usr
monet#
とても参考にさせていただいています(^^)
参考情報ですが、
今は 4.1Cのsimh tapeがありますね。
http://bitsavers.trailing-edge.com/bits/UCB_CSRG/
# miniroot/root file systemの dump とかなんですね
試してみたところ、以下のような出力でした。
Boot
: hp(0,0)vmunix
215688+63964+69764 start 0xf98
4.1c BSD UNIX #1: Sun Mar 27 14:48:45 PST 1983
real mem = 8384512
avail mem = 7036928
using 148 buffers containing 838656 bytes of memory
mcr0 at tr1
mcr1 at tr2
uba0 at tr3
zs0 at uba0 csr 172520 vec 224, ipl 15
ts0 at zs0 slave 0
dz0 at uba0 csr 160100 vec 300, ipl 15
mba0 at tr8
hp0 at mba0 drive 0
hp1 at mba0 drive 1
hp2 at mba0 drive 2
hp3 at mba0 drive 3
root on hp0
WARNING: should run interleaved swap with >= 2Mb
Automatic reboot in progress...
Fri Feb 4 07:57:56 PST 1983
/dev/rhp0a: 275 files, 3325 used, 4328 free (8 frags, 540 blocks)
/dev/rhp0h: 8014 files, 88474 used, 195871 free (95 frags, 24472 blocks)
/dev/rhp0g: 2 files, 5 used, 309203 free (7 frags, 77299 blocks)
Fri Feb 4 07:57:59 PST 1983
local daemons: telnetd ftpd tftpd syslog sendmail.
preserving editor files
clearing /tmp
standard daemons: update cron accounting berknet mail printer.
starting network: rshd rexecd rlogind rwhod routed.
Fri Feb 4 07:58:00 PST 1983
ucbmonet login: root
Last login: Fri Feb 4 07:45:03 on console
4.1c BSD UNIX #1: Sun Mar 27 14:48:45 PST 1983
Master source now lives here; freeze your 4.1c stuff now.
monet# df
Filesystem kbytes used avail capacity Mounted on
/dev/hp0a 7653 3326 3561 48% /
/dev/hp0g 309208 5 278282 0% /mnt
/dev/hp0h 142172 44238 83716 35% /usr
monet#
2. Posted by K.S 2016年02月05日 15:53
Computer History Wiki(http://gunkies.org/wiki/Category:SIMH_Tutorials)
のページにはありませんが、以下があったのですね。
知らなかった(^^;
http://gunkies.org/wiki/Installing_4.1_BSD_on_SIMH
http://gunkies.org/wiki/Installing_4.1c_BSD_on_SIMH
のページにはありませんが、以下があったのですね。
知らなかった(^^;
http://gunkies.org/wiki/Installing_4.1_BSD_on_SIMH
http://gunkies.org/wiki/Installing_4.1c_BSD_on_SIMH