NetBSD on VAX

女房が、買ってはいけない食品 なんて本に嵌まっている。

おかげで、ジャムは蜂蜜に切り替えられるし、メーカー製の海草スープは禁止されるし。代わりに、とろろ昆布とこぶ茶と干しえびに切り替えさせられた。とろろ昆布は、富山県でよく食べられているそうな。

この間、巣鴨の街を歩いていると、北前船という屋号をかかげる昆布専門店を見つけた。ここで、一番削りのとろろ昆布を買ってきた。ちょっと値は張るが、それはそれは美味であった。店主によると、手で削っていって、中心付近が余ると、機械加工でとろろに仕立てるとか。

また、干し海老もいろいろな種類を取り揃えている店を見つけた。大きな枡に一杯で500円と手ごろな値段。また行ったら買ってきておこう。

いずれの店も、地蔵さんのお寺の先にある。

BSD 4

BSDの進化を辿って行くと、3から4へと続く訳であるが、4の時代が長いんよ。なんせ カリフォーニアは気候良好でHackするには最適な地ですからねぇ。日本は、暑いし寒いし Hackするには最低。

で、いきがかり上、BSDの4.X代を試してみたいんだけど、ほいと動かすにはちと辛いものがある。 で、 SIMH VAX エミュレーターで 4.3BSD-Tahoe を動かす を経由して、NetBSD/Vaxをやってみる事にする。

VAX

土台がPDP-11から往年の名機であるVAXに舞台は移るんだなあ。何はなくとも VAXのマニュアル を用意せんとな。ちゃんと資料が残っていて公開されてる事に感銘を受けるよ。 マニュアルをちら見すると複雑になってるなあ。こりゃ、シュミレーションも大変だと思うぞ。

ふとITPROを見てると、VAXの対抗馬の開発物語に触れていた。 あるマシンの魂 この本、初版を読んだ記憶があるな。あの頃はマシンのアーキとかソフトの事を余り知らなかったから 深い所まで洞察出来なかったんだよなあ。でも、鮮明に覚えている事がある。ハードのバグが 見つかってそれを修正する為のロジックを実装した。そんでもって、その回路の信号に名前 を付けて回路図に記載する必要が出てきた。

その回路は何かの信号の待ち合わせをゲートする回路だったので、信号名に yet と付けた とな。変数名も信号名も一緒の考えで名づけるんだとな。それ以来、私もしばしば yet と いう変数名を使うようになりましたとさ。

NetBSD/Vax

おいらも昔やったような記憶があるぞ。まあ、歴史は繰り返すっつう事でご勘弁。

どうせやるなら、SIMH VAX エミュレーターで NetBSD を動かす手動インストールで、行ってみよう。 ISOは古い方がいいんだろうけど、古いのはサーバーから消えてしまっているので、5.0.2です。

肝は

# disklabel -r -i -I ra0       ←対話式、初期化

で、Diskを下こしらえする所と

# cd /mnt/vax/binary/sets        ←CD-ROM へ移動
# ls                             ↓必要なものだけディスクへ展開
# for f in [bek]*.tgz; do gunzip < $f | (cd /mnt2; pax -rvp e); done

で、ファイルを展開する所かなあ。それと、ブートローダーの書き込みに installbootを 使う事だな。

そうそう、話は前後しちゃうけど、sim用の設定は、次のようにしてます。

[sakae@cdr ~/VAX]$
[sakae@cdr ~/VAX]$ cat netbsd.txt
set cpu 64m
load -r /usr/local/share/simh/ka655x.bin

set xq MAC=00-00-AA-05-00-02
att xq /dev/bpf0

;; RA82 is 623MB
set rq0 ra82
att rq0 vdisk0.img

;; tape
;set tq0 TK50
att tq0 dump.tap

;; NetBSD/vax bootable CD image
; set rq1 cdrom
; att rq1 vaxcd-5.0.2.iso

; set cpu history=128

boot cpu

;;;  boot dua1:

VAXとご対面

[sakae@cdr ~/VAX]$ vax netbsd.txt

VAX simulator V3.8-1
netbsd.txt> att xq /dev/bpf0
File open error
TQ: creating new file


KA655-B V5.3, VMB 2.7
Performing normal system tests.
40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25..
24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09..
08..07..06..05..04..03..
Tests completed.

電源を入れると、上記のように自己診断が行われて、それが正常に終了するとモニターに 落ちる。そしたら、下記のように、Diskから起動させる。

>>>boot dua0
(BOOT/R5:0 DUA0



  2..
-DUA0
  1..0..


>> NetBSD/vax boot [1.11 Sat Feb  6 22:37:47 UTC 2010] <<
>> Press any key to abort autoboot 0
nfs_open: must mount first.
open netbsd.vax: Device not configured
> boot netbsd
2388172+308476 [193664+183590]=0x2eea9c
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 5.0.2 (GENERIC) #0: Sat Feb  6 22:45:58 UTC 2010
        builds@b8.netbsd.org:/home/builds/ab/netbsd-5-0-2-RELEASE/vax/201002061851Z-obj/home/builds/ab/netbsd-5-0-2-RELEASE/src/sys/arch/vax/compile/GENERIC
MicroVAX 3800/3900
total memory = 65468 KB
avail memory = 60328 KB
mainbus0 (root)
cpu0 at mainbus0: KA655, CVAX microcode rev 6 Firmware rev 83
lance at mainbus0 not configured
 :
Starting inetd.
Starting cron.
Tue Sep 28 19:29:16 JST 2010

NetBSD/vax (Amnesiac) (console)

login:

無事に起動してきたけど、一つ不満が。それは、NICが使えんって事。simレベルでNICが 拒否されちゃってるよ。やはり、FreeBSDの/dev/bpfでは使えんのだろうか?

[sakae@cdr ~/VAX]$ ldd /usr/local/bin/vax
/usr/local/bin/vax:
        libm.so.5 => /lib/libm.so.5 (0x280e9000)
        libpcap.so.7 => /lib/libpcap.so.7 (0x28103000)
        libc.so.7 => /lib/libc.so.7 (0x28131000)

上記のように、ちゃんとlibcapを取り込んでいるす、bpfのパーミションにも気を使っているんだけどね。 深く考えるのはやめて、Linux(Arch)ででもやってみるか。

Arch Linux でも NetBSD/Vax

まずは、simhを入れんとな。パッケージあるんかいな。まてまて、仮に有ったとしても NICが使えるようにコンパイルされてるんか分からんし、VAX以外も付録もどっさりと着いて きてしまうな。もうソースから自前で入れる鹿。で、make USE_NETWORK=1 vax したんだけど エラーだわさ。

しょうがないのでmakefile を開いてみたら、libpcapに静的リンクを使うように指定されてた。 今時それは無いでしょうと、makefileをちと変更。

  ifeq ($(USE_NETWORK),)
  else
    NETWORK_OPT = -DUSE_NETWORK -lpcap
  endif

これをやったら、文句を言われる事なくインストール出来たよ。

simの設定を

set xq MAC=00-00-AA-02-06-34
att xq eth0

のように変更した上で、rootになってから起動する。rootになるのは、Arch Linux上のNICを 出入りするパケットをpcapでキャプチャーする為です。

qe0 at uba0 csr 174440 vec 764 ipl 17: delqa, hardware address 00:00:aa:02:06:3
rlc0 at uba0 csr 174400 vec 160 ipl 17

起動後のdmesgを眺めてみると、上記のようにNICを認識してくれてました。そこで、NICに 適当にIPを振ってあげ、隣のマシンと導通試験しました。

vax# ifconfig qe0 xxx.xxx.xxx.100
vax# ifconfig qe0
qe0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:00:aa:02:06:34
        inet xxx.xxx.xxx.100 netmask 0xffffff00 broadcast xxx.xxx.xxx.255
        inet6 fe80::200:aaff:fe02:634%qe0 prefixlen 64 scopeid 0x1
vax# ping xxx.xxx.xxx.130
PING xxx.xxx.xxx.130 (xxx.xxx.xxx.130): 56 data bytes
64 bytes from xxx.xxx.xxx.130: icmp_seq=0 ttl=64 time=20.000 ms
64 bytes from xxx.xxx.xxx.130: icmp_seq=1 ttl=64 time=10.000 ms
64 bytes from xxx.xxx.xxx.130: icmp_seq=2 ttl=64 time=10.000 ms
64 bytes from xxx.xxx.xxx.130: icmp_seq=3 ttl=64 time=10.000 ms
64 bytes from xxx.xxx.xxx.130: icmp_seq=4 ttl=64 time=20.000 ms
^C
----xxx.xxx.xxx.130 PING Statistics----
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 10.000/14.000/20.000/5.477 ms

ちゃんと導通してますね。(RTTが遅いけど、これはVMWAREの仮想網が遅いから? VAXも仮想 だしね。)導通試験だけじゃ心元ないので、ちゃんとしたアプリでも動作確認。

sakae@ubuntu:~$ ssh xxx.xxx.xxx.100
Password:
Last login: Tue Sep 28 23:10:57 2010 from xxx.xxx.xxx.130
NetBSD 5.0.2 (GENERIC) #0: Sat Feb 6 22:45:58 UTC 2010

Welcome to NetBSD!

vax$ df
Filesystem  512-blocks       Used      Avail %Cap Mounted on
/dev/ra0a         63390      52230       7992  86% /
/dev/ra0f        988694     761960     177300  81% /usr
mfs:144           30719          1      29183   0% /tmp
kernfs                2          2          0 100% /kern
procfs                8          8          0 100% /proc
vax$ ps awx
PID TTY   STAT    TIME COMMAND
  0 ?     DKl  0:00.90 [system]
  1 ?     Is   0:00.42 init
 72 ?     Ss   0:00.27 /usr/sbin/syslogd -s
144 ?     Is   0:00.03 mount_mfs -s 16m swap /tmp
238 ?     Is   0:00.21 /usr/sbin/sshd
326 ?     Is   0:00.92 /usr/libexec/postfix/master
337 ?     Is   0:00.12 /usr/sbin/cron
339 ?     Is   0:00.12 /usr/sbin/inetd -l
348 ?     I    0:00.72 qmgr -l -t unix -u
351 ?     I    0:00.62 pickup -l -t fifo -u
397 ?     Is   0:05.08 sshd: sakae [priv]
406 ?     S    0:00.75 sshd: sakae@ttyp0
346 ttyp0 O+   0:00.14 ps -awx
399 ttyp0 Ss   0:00.57 -sh
350 ttyg0 Is   0:02.07 login
361 ttyg0 I+   0:00.64 -csh

ちゃんと動いたじゃない。おめでとう。

Kernelのコンパイル

ここまでくれば普通のNetBSD。最初にやる事は、Kernelの再コンパイルですね。NFSもIPv6 も、おいらにとっちゃ無用の長物だもの。

vax# cd /usr/src/sys/arch/vax/conf
vax# vi GENERIC
vax# config GENERIC
Build directory is ../compile/GENERIC
Don't forget to run "make depend"

make dependに2時間かかったよ。その後のmakeは、もう5時間もやってるけど終了する気配は ない。丸一日かかるのだろうか?

普通のNetBSD

を作ってみた。って言っても、お得意のVMWARE上ですけど。 折角なので、postfixの停止やntpも設定してみた。

nb5$ cat /etc/rc.conf
rc_configured=YES
wscons=YES
hostname=nb5.hoge.net
sshd=YES
dhclient=YES
postfix=NO
inetd=NO
ntpdate=YES
ntpdate_flags="-b ntp.nict.jp"
ntpd=YES

動かしてるものも極々少なめね。

nb5$ ps awx
PID TTY   STAT    TIME COMMAND
  0 ?     DKl  0:00.09 [system]
  1 ?     Is   0:00.07 init
 67 ?     Ss   0:00.00 /sbin/dhclient
102 ?     Ss   0:00.03 /usr/sbin/syslogd -s
150 ?     Is   0:00.00 mount_mfs -s 66150 /dev/wd0b /tmp
253 ?     Is   0:00.01 /usr/sbin/sshd
265 ?     Is   0:00.01 /usr/sbin/cron
281 ?     Is   0:00.06 sshd: sakae [priv]
295 ?     S    0:00.05 sshd: sakae@pts/0 (sshd)
301 ?     Ss   0:00.07 ntpd
303 ttyp0 Ss   0:00.04 -sh
319 ttyp0 O+   0:00.00 ps -awx
267 ttyE0 Is+  0:00.01 /usr/libexec/getty Pc console

でも、呆れるぐらい色々なマシンに対応してて、ちょっとびっくり。これって、カリフォーニアの 青い自由な空気が全世界に浸透した結果なのね。

nb5$ ls /usr/src/sys/arch
CVS          atari        hp300        luna68k      next68k      shark
Makefile     bebox        hp700        m68k         ofppc        sparc
README       cats         hpc          mac68k       playstation2 sparc64
acorn26      cesfic       hpcarm       macppc       pmax         sun2
acorn32      cobalt       hpcmips      mips         powerpc      sun3
algor        dreamcast    hpcsh        mipsco       prep         sun68k
alpha        evbarm       hppa         mmeye        rs6000       usermode
amd64        evbmips      i386         mvme68k      sandpoint    vax
amiga        evbppc       ia64         mvmeppc      sbmips       x68k
amigappc     evbsh3       ibmnws       netwinder    sgimips      x86
arc          evbsh5       iyonix       news68k      sh3          xen
arm          ews4800mips  landisk      newsmips     sh5          zaurus

OpenBSDは?

某所には、OpenBSDな人がたむろしてたので、調子に乗って入れてみた。親分のいる所は、 カナダのオタワでしたっけ? 今度行った時に聞いてみよう。

ntpを設定しようと思って、/etc/ntpd.confに ntp.nict.jpを書いたけど、さっぱりntpdが 動いてくれない。何故って思って調べたら、

$ cat /etc/rc.conf.local
ntpd_flags=" -s"                # enabled during install

を書いておかないとだめなのね。知らなんだよ、親分さん。

ついでなので、某所でこぞって貧乏ゆすり検出器を買ってた人がいた。そしてドライバーを 親分に献上してた人が居た。ソースを見ておく。

$ more /sys/dev/usb/uyurex.c
  :
/* Driver for Maywa-Denki & KAYAC YUREX BBU sensor */
  :
        /* wait till sensor data are updated, 250ms will be enough */
        tsleep(&sc->sc_sensortask, 0, "uyurex", (250*hz+999)/1000 + 1);
}