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); }