SIMH の VAX エミュレーターは、4.2BSD などの古い Unix がそのまま動きそうな ものなのですが、 MicroVAX 3800, 3900 という比較的新しい VAX 相当で、VAX-11/7xx 等では ないために、動きません。4.3BSD-Tahoe になると MicroVAX に対応しているらしいのですが、当時配布されたバイナリーは Tahoe(*1) 用のものなので、ブートさせることができません。
ところが、なんと、様々の VAX で 4.3BSD-Tahoe をブートできるように 手を入れてバイナリーを配布している方がいます。 4.3BSD-Quasijarus (本家?) を入手して SIMH に導入し、ブートさせることができましたので その手順を解説します。
--- ※ Quasijarus0a について記述しています。2004 2/15 に Quasijarus0c が出ています。
ちょっと古い Unix なので、ブート可能 CD-ROM イメージなどがある NetBSD の場合とは違い、 MS-Windows 上では下ごしらえができません(*2)。NetBSD と、 mkisofs(*3) が必要です(*4)。
下ごしらえに NetBSD のいらない方法を 別ページに 考えてみました。 拡張版 compress のコンパイル さえ クリアできれば MS-Windows だけでもできるかも知れません。
Quasijarus Project
(本家?)の
4.3BSD-Quasijarus VAX Releases は、4.3BSD-Tahoe に手を入れて、VAX 用
バイナリーで配布されています。これは、
PUPS
PDP Unix Preservation Society Home Page の
Unix Archive Sites で入手できます。
2003 10/6 現在、日本のサイトは ftp.ics.es.osaka-u.ac.jp が
登録されています。
4.3BSD-Quasijarus0a の配布セットは、
UnixArchive/4BSD/Distributions/4.3BSD-Quasijarus0a/ 下にあります。
ここで説明するバイナリーの導入に必要なのは
miniroot.Z, rootdump.Z, usr.tar.Zの 3 つです。
なお、これらの利用には Caldera の Copyright やカリフォルニア大バークレー校の Copyright などが適用されます。UnixArchive のトップに置かれている COPYRIGHTS を読んでおいて下さい。
4.3BSD-Quasijarus0a のファイルですが、.Z にもかかわらず、
通常の commpress -d で伸長できません。これは、Quasijarus 用の
Strong compression なファイルなのだそうで(*1)、それ用の
compress のソースが
UnixArchive/4BSD/Distributions/components/compress.tar にあります。
これを取って来てコンパイルし、圧縮を解きます。
私が NetBSD 1.6.1 で使った パッチ を
置いておきます。
% pax -rvf compress.tar % patch -p < ecompress.diff % (cd usr.lib/libz; make) % (cd ucb/compress; make) |
これでできた ucb/compress/compress で 3 ファイルの圧縮を 解いておきます。
NetBSD 上で restore に食わせるときには gzip や通常の compress が 使えるのでそれらで再度圧縮しておいてもよいですが、SIMH 上は それなりに遅いので、そのままの方がよいかも知れません。
次は、ブート可能な NetBSD/vax の CD-ROM イメージを作成します。 NetBSD/vax のインストール用 CD-ROM イメージはネットワーク上から 入手できますが、それの INSTALL カーネルでは COMPAT_* が削ってあり、 Quasijarus0a のバイナリーが動作しません。
NetBSD/vax は 最新の公式リリースのもの か、Release 枝の 最新のもの がよいと思います。いずれも vax/binary/sets 下の
base.tgz, etc.tgz, kern-GENERIC.tgzの 3 つがあれば十分です。
これらを展開し、/dev で MAKEDEV、mkisofs で ISO 9660 イメージを 作成して、installboot でブートローダーを書き込みます。
1.6.1 ではなぜか CD としてブートした場合カーネルを圧縮していないと
うまくロードしてくれません。/netbsd を gzip しておきます。
(ディスクにインストール後は圧縮しなくてもブートしますので、
新しい版では直っているかも知れません。)
# cd /hoge/vax/binary/sets # for f in [bek]*.tgz; do \ gunzip < $f | (cd /uge/nbtree; pax -rvp e); done # cd /uge # gzip nbtree/netbsd ←カーネルを圧縮 # (cd nbtree/dev; sh ./MAKEDEV all) # mkdir nbtree/q ←Quasijarus 用のマウントポイントを用意 # mkisofs -d -D -R -N -l -L -J -o nb.cdimg nbtree # installboot -v -m vax nb.cdimg nbtree/usr/mdec/xxboot |
※ mkisofs は、pkgsrc の sysutils/cdrecord を入れると インストールされます。
さらに、Quasijarus0a の伸長した rootdump usr.tar と、miniroot を 展開したバイナリーツリーを含む CD-ROM イメージを作成します。
# cd /uge/43qftree # ls rootdump usr.tar # vnconfig -cv vnd0 /somewhere/miniroot # mount -o ro /dev/vnd0c /mnt # mkdir b; (cd /mnt; pax -w .) | (cd b; pax -rvp e) # cd .. # mkisofs -d -D -R -N -l -L -J -o 43qf.cdimg 43qftree |
big-endian のマシンでは、上記 mount にコンパイル時 options FFS_EI(Enable "Endian-Independent" FFS support, options(4) 参照)を 含んだカーネルが必要と思います。
2 つの ISO 9660 イメージを作りましたが、Quasijarus の方のツリーを NetBSD/vax のツリーに含めてしまってもかまいません。
ISO 9660 イメージなどにせず、ifconfig して NFS するという手も あります。また、FTP で MFS へ持ってくるという手もあります。
NetBSD/vax 本体もネットワークブートでもいけるかも知れません。 ちょっとだけ MOP いじってみましたが、すぐあきらめました。未確認です。
さらに後で気付きましたが、tar してできたファイルを SIMH 設定で ドライブに割り当て、/dev/rra?c から読んでバラす、という手もあります。
SIMH の設定をします。
rq0 導入先ドライブ、43q.dkimg rq1 NetBSD/vax boot CD rq2 Quasijarus0a ファイルツリー CDrq0 には 300MB のサイズを指定しました。 他に、Ethernet アドレス、CPU メモリーサイズ、コンソールなどを 設定し、不要なデバイスを無効化します。
NetBSD/vax のドライブからブートします。
# simh-vax 43q.conf VAX simulator V3.0-2 : 08..07..06..05..04..03.. Tests completed. >>>boot dua1 : /etc/rc.conf is not configured. Multiuser boot aborted. Enter pathname of shell or RETURN for sh: Terminal type? [unknown] vt100 : # |
NetBSD/vax のバイナリー互換能力を使って、Quasijarus0a の disklabel コマンドを動かします。NetBSD/vax のカーネル設定 GENERIC には 4.3BSD-Reno のバイナリー互換性しか書いてありませんが、 4.3BSD-Tahoe 相当の Quasijarus0a のバイナリーも動きます。
ですが、4.3BSD-Tahoe の disklabel は操作が面倒なので、
パーティション設定については NetBSD のものを使います。
ここでは、/ 32MB, swap 64MB, /usr 50MB, /var 残りとし、それぞれ
a, b, f, g に割り当てました。
disklabel -i の使い方については
「SIMH VAX エミュレーターで NetBSD を動かす」の
インストーラーを使わずに手動インストール のラベル付けの項を
参考にして下さい。
# disklabel -r -i -I ra0 : partition> P 8 partitions: # size offset fstype [fsize bsize cpg/sgs] a: 65835 0 4.2BSD 0 0 0 # (Cyl. 0 - 76) b: 131670 65835 swap # (Cyl. 77 - 230) c: 613890 0 unused 0 0 # (Cyl. 0 - 717) f: 102600 197505 4.2BSD 0 0 0 # (Cyl. 231 - 350) g: 313785 300105 4.2BSD 0 0 0 # (Cyl. 351 - 717) |
c パーティションもシリンダーに収まるようにします。
'P' で表示される右端の (Cyl. xx - xx) の数字に '*' が付いていると
シリンダーをはみ出しているので、size を c 単位で指定し直します。
次に、Quasijarus のもの、/q/b/etc/disklabel を使って、 ブートローダーを書き込みます。
# mount -t cd9660 -o ro /dev/ra2a /q ←Quasijarus ツリーを /q に # mount_mfs -s 8m swap /tmp ←/tmp に 8MB の MFS # /q/b/etc/disklabel -r ra0 > /tmp/a ←プロファイル保存 # cd /q/b/usr/mdec ↓raboot でなく rdboot # /q/b/etc/disklabel -r -R ra0 /tmp/a rdboot bootra |
disklabel の引数の最後から 2 番目は 'raboot' ではなく 'rdboot'
だそうです。
/q/b/usr/mdec には raboot もあるので注意。
この記事 を参照。
# /q/b/etc/newfs /dev/rra0a # /q/b/etc/newfs /dev/rra0f # /q/b/etc/newfs /dev/rra0g |
# mount /dev/ra0a /mnt # mkdir /mnt/usr /mnt/var # mount /dev/ra0f /mnt/usr # mount /dev/ra0g /mnt/var # cd /mnt # cat /q/rootdump | (cd /mnt; /q/b/etc/restore xvf -) : set owner/mode for '.'? [yn] y # (cd /mnt/usr; /mnt/bin/tar xpvf /q/usr.tar) |
/etc/fstab を作成します。古い書式なので、/mnt/etc/fstab.ra80 などを 参考にします。
# sync; sync; sync # reboot : sim> boot cpu >>>boot dua0 ←導入したディスクでブート |
/dev に ra[1-3] や pty[0-] などを作っておきます。
/dev/pty[0-] を作成して ifconfig すると TELNET ログインできます。
/dev/ttys getty が多数 on になっているので、減らします。
2000 年問題があるようです。date コマンドをちょっといじって、
年に 03 で 2003 年と解釈するようにしてみたのですが、日付設定して
しばらくするとハングアップしてしまいます.... しばらくは動いたり
するので、ディスクキャッシュを吐くタイミング、
ファイルシステム関係かも知れません。
→ その後、
Quasijarus0c が出ました。(2004 7/30 現在、なぜか
ifctfvax.harhan.org にしかありません。)
Y2K 対応されている
模様 。
IT Securty Geek の Download の Retrocomputing の下に、quasijarus0a.tap.bz2 というのを 発見しました。これあれば NetBSD/vax なしで導入できると 思われます...