いにしえの名機 DEC VAX のシミュレーター SIMH で最新の Unix NetBSD を 動かす方法を解説します。
MS-Windows と(*1)数百メガバイトのディスクスペースさえあれば、最新の Unix 環境である NetBSD/vax を 簡単に動作させることができます。
VAX というと、名前だけ知っている方(*2)には古めかしい雰囲気がすると 思います。しかし、最新の Unix を載せてみると、ログインしたり サーバーとして利用したりする分には、速度を除いて最近のハードウエアと あまりにも 同じ という感じです(*3)。
ここでは、Ethernet サポート付きの SIMH を動作させることについて 記述しています。 Ethernet デバイスを扱うためには、SIMH を管理者権限で動かします。 MS-Windows では、SIMH を利用するユーザーに administrator 権限を付与して下さい。あるいは、システム起動時に 自動実行する方法もある様です。Ethernet サポートのない バイナリーを利用する場合はその必要はありません。
SIMH のページ から、
ソースコードと Ethernet サポート付きのバイナリーを取得します。
"latest sources for SIMH " のところの
リンクからソースコード、
"Windows excecutables" のリンクの少し後の、
"with Ethernet support are available here" の
方のリンクからバイナリーのファイルを取得します。ソースコードの
中にブート ROM イメージが入っています。
2003 10/4 現在ではそれぞれ、simhv30-2.zip,
simhv30-2-exe-ether.zip というファイル名になっています。
アーカイバーを使って、適当なフォルダーへ展開します。ここでは c:\opt\simh というフォルダーを作成して展開したとします。 simhvXX-exe-ether.zip の方からは vax.exe、simhvXX.zip の方からは VAX\ka655.bin というファイルを取り出します。
WinPcap のページ の
"download" のリンクの先の、
"WinPcap auto-installer" というのを
取得します。2003 10/4 現在 WinPcap_3_01_a.exe という
ファイル名です。
取得したら実行、インストールします。
SIMH の Ethernet サポートを使うには、WinPcap を導入する必要が
あります。
このことは
FAQ のページ
"How do I install SIMH with Ethernet support on Windows?" に
書かれています。
WinPcap は tcpdump の libpcap の MS-Windows 版だそうです。
※ Unix に導入する場合は、 FAQ のページ の "Which host systems does SIMH run on?" や "How do I install SIMH on Unix?" を参考にして下さい。 また、NetBSD には pkgsrc の emulators/simh で導入するのが簡単です。 pkgsrc で入れた場合、SIMH の実行ファイルは /usr/pkg/bin/simh-vax, ブート ROM は /usr/pkg/share/simh/ka655.bin となります。
ここでは、NetBSD/vax ブート可能 CD-ROM イメージ vaxcd.iso も SIMH を展開した c:\opt\simh にあることとします。
> cd \opt\simh > vax VAX simulator V3.0-2 sim> load -r ka655.bin sim> set xq MAC=00-00-AA-BB-CC-DD ←実際の Ethernet addr sim> att xq eth0 Eth: opened eth0 sim> set rq0 ra82 ←RA82 型を指定 sim> att rq0 vdisk0.img sim> set rq1 cdrom ←CD イメージを指定 sim> att rq1 vaxcd.iso sim> boot cpu ←VAX 起動 KA655-B V5.3, VMB 2.7 : 08..07..06..05..04..03.. Tests completed. >>>^E ←ブート ROMのプロンプト。Ctrl+E で SIMH へ Simulation stopped, PC: 20043743 (EXTZV #7,#1,R0,R0) sim> q ←SIMH 終了 Goodbye > |
以上のような sim> での入力は、ファイルに記述しておいて vax.exe 起動時に読み込ませることができます。';' でコメントを 記述することもできます。サンプル vconf.txt を参考にして下さい。上記の他に、メモリーを 64MBytes(デフォルトは 16MBytes)にし、不要なデバイスを無効にしています。
それでは、いよいよ NetBSD の起動です。
> vax vconf.txt VAX simulator V3.0-2 Eth: opened eth0 KA655-B V5.3, VMB 2.7 : 08..07..06..05..04..03.. Tests completed. >>>boot dua1 ←CD-ROM dua1 でブート (BOOT/R5:0 DUA1 2.. -DUA1 1..0.. >> NetBSD/vax boot [1.11 Wed Apr 9 05:16:34 UTC 2003] << >> Press any key to abort autoboot 0 getdisklabel: no disk label nfs_open: must mount first. 2370516+117728=0x25f950 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All ri.. : |
sim> boot cpu >>>boot dua0 ←ディスク dua0 でブート |
入ってしまえば、普通の NetBSD となんら変わりません。もちろん pkgsrc も使えます。
NetBSD の設定等は、 NetBSD ドキュメンテーション のページ等を参考にして下さい。
NetBSD のインストーラーは簡潔で使いやすいですが、昔ながらの方法で コマンドを使って導入することもできます。それらのコマンドも 簡潔で使いやすいように改良されていて、比較的簡単に作業できますので やり方を紹介します。
対象ドライブにラベルを付けます。
パーティションは a から h の 8 つ利用できます。そのうち、
c はディスク全体と決まっています。また、b はスワップ、
a はルートパーティションにした方がよいです。
c を除くパーティションは、通常、オーバーラップしないように
設定します。
下記の例では、a に 32MB、b に 64MB、残りを f に割り当てています。
# disklabel -r -i -I ra0 ←対話式、初期化 partition> ? ←ヘルプ partition> P ←表示 partition> R Rounding [sectors]: c ←シリンダー境界で丸める partition> C Automatically adjust partitions [no]: y ←a,b,d,e,f と連結するように partition> a Filesystem type [?] [unused]: 4.2BSD Start offset [0c, 0s, 0M]: Partition size ('$' for all remaining) [479.064c, 409600s, 200M]: 32m partition> b Filesystem type [?] [unused]: swap Start offset [0c, 0s, 0M]: Partition size ('$' for all remaining) [0c, 0s, 0M]: 64m partition> f Filesystem type [?] [unused]: 4.2BSD Start offset [0c, 0s, 0M]: Partition size ('$' for all remaining) [0c, 0s, 0M]: $ ←のこり全部 partition> P ←重なっていないのを確認 partition> f ← f がデカ過ぎる(c に収まっていない)場合(バグ) Filesystem type [?] [4.2BSD]: Start offset [116c, 99180s, 48.4277M]: ↓再度のこり全部を指定 Partition size ('$' for all remaining) [479.064c, 409600s, 200M]: $ partition> P partition> f ←一応、c の範囲でシリンダー境界にする Filesystem type [?] [4.2BSD]: Start offset [116c, 99180s, 48.4277M]: ↓363.064c の端数を取って指定 Partition size ('$' for all remaining) [363.064c, 310420s, 151.572M]: 363c partition> P partition> W ←書き込み Label disk [n]? y partition> Q # disklabel -r ra0 ←表示確認 |
4.2BSD を指定したパーティションにファイルシステムを作成します。 デバイスにはそれぞれのパーティションの raw デバイス名を指定します。 'r' が頭に余分に付きます。
# newfs /dev/rra0a # newfs /dev/rra0f |
作成したファイルシステムを、実際の利用時の形で /mnt2 以下に マウントします。また、CD-ROM を /mnt にマウントします。
# mount -o async /dev/ra0a /mnt2 ←失敗したらやり直せばいいので # mkdir /mnt2/usr 非同期マウント # mount -o async /dev/ra0f /mnt2/usr # mount -t cd9660 -o ro /dev/ra1a /mnt ←CD-ROM # df -k ←表示確認 |
CD-ROM のアーカイブファイルをディスク上へ展開します。
必要なものを選択して入れるとよいでしょう。
最低限必要なのは base と etc と kern-GENERIC です。
Unix の勉強用であれば x* 以外を入れればよいでしょう。
X のアプリも使う予定であれば全て入れます。
# cd /mnt/vax/binary/sets ←CD-ROM へ移動 # ls ↓必要なものだけディスクへ展開 # for f in [bek]*.tgz; do gunzip < $f | (cd /mnt2; pax -rvp e); done |
# cd /mnt2/dev # sh ./MAKEDEV all |
# umount /mnt2/usr # umount /mnt2 # cd /usr/mdec # disklabel -B -b raboot ra0 |
※ NetBSD の新しい版では disklabel ではなく installboot を
使うようになっているかも知れません。
# installboot -v ra0 raboot
導入した dua0 (ra0) からブートします。シングルユーザーモードで NetBSD が起動します。
# reboot sim> boot cpu >>>boot dua0 : Enter pathname of shell or RETURN for sh: # |
rc.conf や inetd.conf 等、各種の設定を行います。
fstab も作成します。/usr/share/examples/fstab/fstab.sd0.2 などを
参考にします。( 例)
rc.conf の rc_configured を YES にすることで次回から
マルチユーザーで起動します。
vi を利用するには、/usr をマウントし、/var/tmp を書き込み可にし、 TERM 環境変数を設定します。
# mount -u /dev/ra0a / # mount /dev/ra0f /usr # TERM=vt100 # export TERM # vi |
起動したら、まずルートのパスワードを付けましょう。
# reboot sim> boot cpu >>>boot dua0 : login: root Terminal type? [unknown] vt100 # passwd root New password:****** Retype new password:****** |
この作業は NetBSD 上前提です。(NetBSD の installboot が使えれば、 他の OS でも可能かも知れません。) MS-Windows 上では不可です。
独自構成の CD-ROM イメージを作っておくと何かと便利です。
また、SIMH 上の NetBSD へファイルを持って行く時も、ネットワーク経由でも
可能ですが、大きいファイルなどは CD イメージにしてしまう手もあります。
他には、GENERIC カーネルや独自にコンパイルしたカーネルで
ブートさせたい場合などです。
インストール用のイメージは INSTALL カーネルで、COMPAT_* が減らして
あったりします。
インストーラーを使わずに手動インストール と
同様に、適当なディレクトリーに NetBSD を展開し、
任意の独自の変更を加えます。
MAKEDEV を忘れないようにしましょう。
# cd /somewehre/vax/binary/sets # ls ↓必要なものだけ展開 # for f in [a-z]*.tgz; do gunzip < $f | (cd /hoge/treetop; pax -rvp e); done |
mkisofs を使って CD-ROM イメージを作成します。
mkisofs は、pkgsrc の sysutils/cdrecord を入れると
インストールされます。
# mkisofs -d -D -R -N -l -L -J -o custom.cdimg /hoge/treetop |
ISO 9660 イメージにブートローダーを書き込みます。
# installboot -v -m vax custom.cdimg /hoge/treetop/usr/mdec/xxboot |
以上の手順を行った ISO 9660 イメージを SIMH に設定し、 ブートさせます。
SIMH 上の OS を終了させると、デフォルトでは halt でも reboot でも SIMH のプロンプトへ戻ります。下記設定をすると、 halt でブート ROM へ、reboot で文字通り OS がリブートするように なります。
sim> set cpu conhalt >>>set boot dua0 >>>boot |
ブート ROM プロンプトから SIMH へ抜けるには Ctrl+E を使います。