まだ書きかけです... 未検証注意!!!
cmd.exe や command.com でインストーラーがちゃんとつかえるのだらうか...??
cmd.exe では NetBSD インストーラー崩れまくり要手動インストール。
$Id: simh-netbsd.html,v 1.3 2004/07/30 06:58:50 mochid Exp $

SIMH VAX エミュレーターで NetBSD を動かす

いにしえの名機 DEC VAX のシミュレーター SIMH で最新の Unix NetBSD を 動かす方法を解説します。

MS-Windows と(*1)数百メガバイトのディスクスペースさえあれば、最新の Unix 環境である NetBSD/vax を 簡単に動作させることができます。

VAX というと、名前だけ知っている方(*2)には古めかしい雰囲気がすると 思います。しかし、最新の Unix を載せてみると、ログインしたり サーバーとして利用したりする分には、速度を除いて最近のハードウエアと あまりにも 同じ という感じです(*3)。

*1 SIMH さえ動けばよいので、もちろん Unix でも可能です。
*2 私もそのひとりです。デカい DEC の PostScript プリンターの 制御端末として VAX が付いてたのを触ったことがあるのみです。
*3 NetBSD で複数のアーキを使っている方はよくご存知と思います。 32bit 以上でデマンドページングできて Ethernet 付いてれば どれにログインしてもほとんど同じ...

  1. SIMH の導入
  2. NetBSD/vax ブート可能 CD-ROM イメージ取得
  3. SIMH 設定
  4. ブート可能 CD-ROM イメージからブート
おまけ
  1. インストーラーを使わずに手動インストール
  2. 独自構成のブート可能 CD-ROM イメージ作成
  3. その他
  4. リンク

SIMH の導入

ここでは、Ethernet サポート付きの SIMH を動作させることについて 記述しています。 Ethernet デバイスを扱うためには、SIMH を管理者権限で動かします。 MS-Windows では、SIMH を利用するユーザーに administrator 権限を付与して下さい。あるいは、システム起動時に 自動実行する方法もある様です。Ethernet サポートのない バイナリーを利用する場合はその必要はありません。

  1. MS-Windows 用 Ethernet サポート付きバイナリー、ブート ROM イメージ取得

    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 というファイル名になっています。

  2. 展開

    アーカイバーを使って、適当なフォルダーへ展開します。ここでは c:\opt\simh というフォルダーを作成して展開したとします。 simhvXX-exe-ether.zip の方からは vax.exe、simhvXX.zip の方からは VAX\ka655.bin というファイルを取り出します。

  3. WinPcap の導入

    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 イメージ取得

VAX 用の NetBSD のブート可能 CD-ROM イメージを下記等より取得します。

2003 10/4 現在、1.6.1/vaxcd.iso が最新で、60MBytes ほどの大きさです。

SIMH 設定

ここでは、NetBSD/vax ブート可能 CD-ROM イメージ vaxcd.iso も SIMH を展開した c:\opt\simh にあることとします。

  1. コマンドプロンプトを起動し、c:\opt\simh へ移動します。
  2. vax.exe を起動します。
  3. ブート ROM ka655.bin をロードします。
  4. xq に Ethernet の MAC アドレスを指定します。これはホストの Ethernet アドレスと同じものを、この形式にして指定します。 MS-Windows では ipconfig コマンドか winipcfg コマンドで 調べることができます。Unix では ifconfig -a です。
  5. Ethernet デバイス xq をホストの Ethernet デバイスに割り付けます。 MS-Windows では eth0 を指定するようです。Unix では 割り付けたいデバイス名を指定します。
  6. NetBSD/vax を導入するディスクの種類を rq0 として 設定します。ra82 はディスクの型番です。指定できるのは rd51-rd54, ra72, ra82, ra90, ra92 等です。ra82 は 623MBytes です。
    他に、rauser=500 などと記述すると、MBytes 単位で任意の容量の ディスクを指定できます。この例では 500MBytes になります。 5〜2000 の範囲で指定できます。
    SIMH 付属の vax_doc.txt には 512Bytes 単位で最小は 50MBytes と 書いてありますが、これは間違っているようです。
    それぞれ型番の容量は、NetBSD の VAX ハードウエアのページの Storage devices のところに記述があります。
  7. 型を指定した rq0 のイメージのホスト OS 上のファイル名を指定します。 正味ディスクの容量と同じ大きさのファイルができます。
  8. ブート用 CD-ROM を rq1 として設定します。
  9. rq1 の実体として vaxcd.iso を割り付けます。
  10. 起動をかけます。これで ka655.bin へ制御が移ります。プロンプトが >>> に変わります。
  11. Ctrl+E が割り込みに割り当てられています。sim> プロンプトへ 戻ることができます。
  12. q で 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)にし、不要なデバイスを無効にしています。


ブート可能 CD-ROM イメージからブート

それでは、いよいよ NetBSD の起動です。

  1. SIMH の設定を適当なファイル、ここでは vconf.txt に記述したら、 vax.exe を起動します。
  2. ブート ROM の >>> プロンプトで、 SIMH 上で rq1 に指定した CD イメージのブート ROM 上の名称 dua1 で起動します。
> 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..
  :
  1. NetBSD が起動し、 インストーラー画面 が 表示されます。
    MS-WindowsNT や 2000 の cmd.exe では、インストーラー画面が崩れて 表示され、使い物にならない様です。その場合は インストーラーを使わずに手動インストール の 方法でインストールして下さい。
  2. あとは通常の NetBSD のインストールです。NetBSD 上では、SIMH 上の rq0(disk), rq1(CD-ROM) はそれぞれ ra0, ra1 というデバイス名です。 ra0 にインストールします。
    留意する点は、アーカイブの存在するデバイスがデフォルトの cd0 ではなく、ra1 であるという点です。 手順例 を置いておきますので 参考にしてください。

  3. 再起動し、>>> プロンプトで dua0 (SIMH 上の rq0, NetBSD での ra0)を指定してブートします。

sim> boot cpu
>>>boot dua0                  ←ディスク dua0 でブート

入ってしまえば、普通の NetBSD となんら変わりません。もちろん pkgsrc も使えます。

NetBSD の設定等は、 NetBSD ドキュメンテーション のページ等を参考にして下さい。


インストーラーを使わずに手動インストール

NetBSD のインストーラーは簡潔で使いやすいですが、昔ながらの方法で コマンドを使って導入することもできます。それらのコマンドも 簡潔で使いやすいように改良されていて、比較的簡単に作業できますので やり方を紹介します。

  1. CD-ROM イメージでブートして、インストーラーが起動したら、 'x', 'Enter' でインストーラーを終了します。
  2. ラベル付け

    対象ドライブにラベルを付けます。
    パーティションは 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     ←表示確認
    

  3. ファイルシステムを作成

    4.2BSD を指定したパーティションにファイルシステムを作成します。 デバイスにはそれぞれのパーティションの raw デバイス名を指定します。 'r' が頭に余分に付きます。

    # newfs /dev/rra0a 
    # newfs /dev/rra0f 
    

  4. 作成したファイルシステムと CD-ROM をマウント

    作成したファイルシステムを、実際の利用時の形で /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                                 ←表示確認
    

  5. ファイルを展開

    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
    

  6. デバイスファイル作成 (/dev)
    # cd /mnt2/dev
    # sh ./MAKEDEV all
    

  7. ブートローダー書き込み
    # umount /mnt2/usr
    # umount /mnt2
    # cd /usr/mdec
    # disklabel -B -b raboot ra0
    

    ※ NetBSD の新しい版では disklabel ではなく installboot を 使うようになっているかも知れません。
    # installboot -v ra0 raboot

  8. リブート (初回、シングルユーザーモード)

    導入した dua0 (ra0) からブートします。シングルユーザーモードで NetBSD が起動します。

    # reboot
    sim> boot cpu
    >>>boot dua0
        :
    Enter pathname of shell or RETURN for sh: 
    # 
    

  9. /etc 下を設定

    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
    

  10. リブート (マルチユーザーモード)

    起動したら、まずルートのパスワードを付けましょう。

    # reboot
    sim> boot cpu
    >>>boot dua0
        :
    login: root
    Terminal type? [unknown] vt100
    # passwd root 
    New password:******
    Retype new password:******
    

独自構成のブート可能 CD-ROM イメージ作成

この作業は NetBSD 上前提です。(NetBSD の installboot が使えれば、 他の OS でも可能かも知れません。) MS-Windows 上では不可です。

独自構成の CD-ROM イメージを作っておくと何かと便利です。 また、SIMH 上の NetBSD へファイルを持って行く時も、ネットワーク経由でも 可能ですが、大きいファイルなどは CD イメージにしてしまう手もあります。
他には、GENERIC カーネルや独自にコンパイルしたカーネルで ブートさせたい場合などです。 インストール用のイメージは INSTALL カーネルで、COMPAT_* が減らして あったりします。

  1. ファイルツリーの展開

    インストーラーを使わずに手動インストール と 同様に、適当なディレクトリーに NetBSD を展開し、 任意の独自の変更を加えます。
    MAKEDEV を忘れないようにしましょう。

    # cd /somewehre/vax/binary/sets
    # ls                             ↓必要なものだけ展開
    # for f in [a-z]*.tgz; do gunzip < $f | (cd /hoge/treetop; pax -rvp e); done
    
  2. ISO 9660 イメージの作成

    mkisofs を使って CD-ROM イメージを作成します。
    mkisofs は、pkgsrc の sysutils/cdrecord を入れると インストールされます。

    # mkisofs -d -D -R -N -l -L -J -o custom.cdimg /hoge/treetop
    

  3. installboot

    ISO 9660 イメージにブートローダーを書き込みます。

    # installboot -v -m vax custom.cdimg /hoge/treetop/usr/mdec/xxboot
    

以上の手順を行った ISO 9660 イメージを SIMH に設定し、 ブートさせます。


その他

  1. autoboot

    SIMH 上の OS を終了させると、デフォルトでは halt でも reboot でも SIMH のプロンプトへ戻ります。下記設定をすると、 halt でブート ROM へ、reboot で文字通り OS がリブートするように なります。

    sim> set cpu conhalt
    >>>set boot dua0
    >>>boot
    

    ブート ROM プロンプトから SIMH へ抜けるには Ctrl+E を使います。


リンク


mochid@netside.co.jp