$Id: simh-43q.html,v 1.5 2004/07/30 07:25:39 mochid Exp $

SIMH VAX エミュレーターで 4.3BSD-Tahoe を動かす

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 だけでもできるかも知れません。

*1 Tahoe は Computer Console 社 Power6/32 の開発コード名だそうです。
*2 もうひとつの SIMH 上に NetBSD/vax を用意すればそれを使って 下ごしらえは可能とは思います。どーしても、と言うならとめません...
*3 pkgsrc の sysutils/cdrecord を入れると含まれています。
*4 NetBSD 以外の Unix でも可能と思いますが、ここでは NetBSD 前提と します。なんと言っても、FFS_EI は便利です。
ちなみに、このページの下ごしらえの動作検証は NetBSD 1.6.1_STABLE/sparc(big-endian, 32bit)で行いました。
SIMH を載せたのは DEC に敬意を表して(?) NetBSD/alpha(little-endian 64bit)です。

  1. 4.3BSD-Quasijarus
  2. 拡張版 compress のコンパイル
  3. NetBSD/vax のブート可能 CD-ROM イメージ作成
  4. SIMH の設定
  5. NetBSD/vax ブート
  6. Quasijarus の disklabel
  7. Quasijarus の newfs
  8. mount, Quasijarus の restore
  9. リブート
  10. その他
  11. リンク

4.3BSD-Quasijarus

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 を読んでおいて下さい。


拡張版 compress のコンパイル

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 上は それなりに遅いので、そのままの方がよいかも知れません。

*1 これがわかったのは新しめの file コマンドが教えてくれたおかげです。

NetBSD/vax のブート可能 CD-ROM イメージ作成

次は、ブート可能な 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 の設定

SIMH の設定をします。

    rq0  導入先ドライブ、43q.dkimg
    rq1  NetBSD/vax boot CD
    rq2  Quasijarus0a ファイルツリー CD
rq0 には 300MB のサイズを指定しました。 他に、Ethernet アドレス、CPU メモリーサイズ、コンソールなどを 設定し、不要なデバイスを無効化します。

設定例 43q.conf


NetBSD/vax ブート

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
    :
# 

Quasijarus の disklabel

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 もあるので注意。 この記事 を参照。


Quasijarus の newfs

# /q/b/etc/newfs /dev/rra0a
# /q/b/etc/newfs /dev/rra0f
# /q/b/etc/newfs /dev/rra0g

mount, Quasijarus の restore

# 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 なしで導入できると 思われます...


リンク


mochid@netside.co.jp