SIMH - 時計のずれSIMH - 4.1BSDを動かす (2)

2012年01月10日

SIMH - 4.1BSDを動かす (1)

SIMHで昔のUNIXを動かす第4回。
今回は、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.ini
archive-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 rp06
VAX 11/780シミュレータから4.0BSDを起動します。
linux$ ./vax780 dboot.ini 
4.0BSDが立ち上がったら、システムの日付を4.1BSDリリース当時の日付に変更します。ファイルシステムのdumpファイルに書き込まれる日時にリアリティを出すためです。本物の4.1BSDテープに記録されていた日時がわからなかったので、CD上のvmunixのタイムスタンプやドキュメントに記載の日付などから類推して、ここでは仮に1982年2月10日としておきました。
# date 8202101200
Wed Feb 10 12:00:00 PST 1982
SIMHは再起動すると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> c
rp1に、ファイルシステム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 20
fsckを実行。
# 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.org
ht0, 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> c
rp1aを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> c
tarを実行する前に、残骸?と思われるファイルを削除します。
# 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> c
tarを実行。
# 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.gz
4.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
続きは次回。

corbie at 00:39│Comments(2)TrackBack(0) simh 

トラックバック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#
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

コメントする

名前
 
  絵文字
 
 
SIMH - 時計のずれSIMH - 4.1BSDを動かす (2)