NetBSD on FreeBSD

今まで快調に動いていた、Windows10 Home Editionで、通知領域に通知が来た。 普段はうざいので、余り確認しないのだけど、たまたま見たら、エラーログが一杯 溜まっているよ。解決したいなら、ここ押せワンワンと言ってきた。

MSは人を犬並みに扱うんだな。まあ、御主人様には素直に従っておきましょ。 ボタンを押したら、今実行してますバーがツーと伸びて、はい終了しました、ですって。 この件でご意見が有ったらどうぞって言われた。

勝手にログを消して、証拠隠滅してご意見を求めるとは、ユーザーを馬鹿にしてんのか?

とは言え、ユーザーであるオイラーもWindowsに関しては、薄ら馬鹿。この際だから 知恵をつけ時ましょ。

エラーログは、Linuxみたいにジャーナルファイルになってて、editorで開いて 簡単に見る事は出来ないようだ。unix文化を逸脱してんな。

で、専用アプリでログを閲覧すると言う、豪華仕様のようだ。

レッツ! Windows 7 - システム編 「イベントビューアー」を活用する エラーログを、イベントと言い換える巧みさには、我ながら舌を巻くぞ。まあ、エラーは 楽しいお祭りと言えなくもないか。

今度、祭りが行われた、とことん参加して、堪能してやろう。

gauche 0.9.5

とうとう我慢出来なくて、FreeBSD 11-REPEASEを入れてしまった。scheme系は、gambit-cの 予定だったけど、いろいろなお供を連れてくるので敬遠。

ならば、gaucheだと思って入れてみると、警告メッセージが出てきた。このパッケージは 誰もメンテナンスしていないので、やがて消されるであろう。我と思わん方は、メンテナに 名乗り出られよ。絶賛募集中なんですな。

ならば、本家を訪ねてみるか。行ったら、何年かぶりに新しいのが出てた。これはもう、 野良ビルドしろって事ね。どうせやるなら、多数CPUの威力を実感してみよう。 いわゆる並列ビルドね。参考までに、i386な7機のFreeBSDでの結果も載せておく。

gmake
real    3m0.683s
user    2m53.595s
sys     0m6.604s
gmake -j 2
real    1m59.250s
user    3m34.029s
sys     0m8.891s
gmake -j 4
real    2m0.835s
user    3m40.827s
sys     0m9.356s
gmake (@ i386)
real    6m50.28s
user    4m31.79s
sys     2m14.50s

並列度が2でも4でも変わらない。2CPUを積んでて、論理CPUは4になるんだけど、 仕事の割り振りに手間取っているんで、並列度が2ぐらいが適当と思われる。 まあ、仕事の内容によるんだろうけどね。

今回のgaucheは開発のし易さにも目が注がれているっぽい。折角入れたんだから、 大いに使ってみるかな。repl回りが充実してる。

gosh> ,h
You're in REPL (read-eval-print-loop) of Gauche shell.
Type a Scheme expression to evaluate.
A word preceeded with comma has special meaning.  Type ,help <cmd>
to see the detailed help for <cmd>.
Commands can be abbreviated as far as it is not ambiguous.

 ,apropos|a  Show the names of global bindings that match the regexp.
 ,cd         Change the current directory.
 ,describe|d Describe the object.
 ,help|h     Show the help message of the command.
 ,history    Show REPL history.
 ,info|doc   Show info document for an entry of NAME.
 ,pwd        Print working directory.
 ,sh         Run command via shell.
 ,source     Show source code of the procedure if it's available.
 ,use|u      Use the specified module.  Same as (use module option ...).

ちょっと実験した。infoが引けるのは有り難いぞ。

gosh> ,d 1234
1234 is an instance of class <integer>
  (#x4d2, ~ 1.2Ki, #\Ӓ as char, 1970-01-01T00:20:34Z as unix-time)
gosh> ,info car
 -- Function: car pair
 -- Function: cdr pair
     [R7RS] Returns car and cdr of PAIR, respectively.

gosh> ,a cons
%tree-map-check-consistency    (gauche)
acons                          (gauche)
cons                           (scheme)
cons*                          (gauche)
consume-trailing-whitespaces   (gauche)
define-constant                (gauche)
lcons                          (gauche)
lcons*                         (gauche)

bhyve

技評のWebページにFreeBSD四方山話が載ってて、毎週楽しく読んでますよ。 ここで、BSD界隈の話を収集してる。だって、最近はBSD関係の雑誌はぱたっと発行され なくなっちゃったからねぇ。

FreeBSD11.0を入れたんで、何か面白い事をしよう。 ふと思い出したのは、仮想PCをFreeBSDの中に作るってやつ。 そんなの、qemuだろう。車輪の再発明だ そうですよ。

使ってみようハイパーバイザbhyve

bhyveでNetBSDを使ってみよう

OpenBSD 6.0-RELEASEをbhyveにインストール

FreeBSD as a Host with bhyve

どうせやるなら、Ubuntu on Windows に対抗すべきだろうな。

man on NetBSD on FreeBSD

にしましょ。だって、NetBSDのmanを引くと、includeに対するlibraryの案内が出て来るって 言う、捨てが居たい機能が有るから。

だったら、普通にインストールしといたらいいじゃん。それをやると色々なパッケージも 入れたくなっちゃうのよね。所が、最近はパッケージも場所を喰うみたいで、色々な サイトで公開されなくなった。唯一頑張っている所は、 こちらだけって ような、寂しい状況になってます。そして、こことてamd64版は置いてない。

最初なんで、技評のページの通りにやってみる。但しオイラーはzfsを使っていないんで、 HOME-dirの下にNB7ってdirを作り、そこに仮想PC名がやはり、NB7としたNetBSDを 入れる事にした。

仮想PCのメモリーは256Mも有れば十分、仮想HDDも1Gと言うミニミニサイズです。 なお、NIC名はem0ってなってたので、そのように設定した。

起動用スクリプトは下記。不要なマシンが有ったら除去。カーネルをロードして起動。 マシンの設定情報で、マシンを構成。マシンが落ちたら、マシンの除去。

sudo bhyvectl --destroy --vm=NB7;
printf "knetbsd -h -r cd0a (hd0,netbsd1)/netbsd\nboot\n" |
  sudo grub-bhyve -m /home/sakae/NB7/netbsd-7.0-device.map -M 256M NB7;
sudo bhyve -W -c 1 -m 256M -H -P -A -l com1,stdio \
  -s 0:0,hostbridge \
  -s 1:0,lpc \
  -s 2:0,virtio-net,tap0 \
  -s 3:0,virtio-blk,/home/sakae/NB7/netbsd.img NB7;
sudo bhyvectl --destroy --vm=NB7

出来上がったVMを走らせてみた。

 :
boot device: <unknown>
root device:
use one of: ld0[a-p] ddb halt reboot
root device: ld0a
dump device (default ld0b):
file system (default generic):
root on ld0a dumps on ld0b
root file system type: ffs
init path (default /sbin/init):
 :
NetBSD/amd64 (nb7.localdomain) (console)

login: sakae
Password:
Oct 21 13:43:05 nb7 login: sakae on tty console
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
    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 7.0 (GENERIC.201509250726Z)

Welcome to NetBSD!

nb7$ df
Filesystem   512-blocks       Used      Avail %Cap Mounted on
/dev/ld0a       1909582    1334668     479436  73% /
kernfs                2          2          0 100% /kern
ptyfs                 2          2          0 100% /dev/pts
procfs                8          8          0 100% /proc
tmpfs            130872          0     130872   0% /var/shm

NetBSDのインストールで齟齬が有ったみたい。起動の途中で、kernelが見つけられずに 質問が出てきたので、適当に答えると、ログイン出来たよ。

参考のため、grubがどんな風に認識してるか見ておく。

[sakae@fb11 ~/NB7]$ sudo grub-bhyve -m /home/sakae/NB7/netbsd-7.0-device.map -M 256M NB7
  :
grub> ls
(hd0) (hd0,msdos1) (hd0,netbsd4) (hd0,netbsd1) (host)
grub> ls (hd0)
Device hd0: No known filesystem detected - Total size 2097152 sectors
grub> ls (hd0,msdos1)
        Partition hd0,msdos1: Filesystem type ufs2 - Last modification time
2016-10-21 05:50:25 Friday, UUID 5804670f1cd95dff - Partition start at 63 -
Total size 2097089 sectors
grub> ls (hd0,netbsd4)
        Partition hd0,netbsd4: No known filesystem detected - Partition start
at 0 - Total size 2097152 sectors
grub> ls (hd0,netbsd1)
        Partition hd0,netbsd1: Filesystem type ufs2 - Last modification time
2016-10-21 05:50:25 Friday, UUID 5804670f1cd95dff - Partition start at 63 -
Total size 2030112 sectors
grub> ls (hd0,netbsd1)/
etc/ kern/ proc/ dev/ cdrom/ var/ boot stand/ netbsd altroot/ bin/ lib/ libdata
/ libexec/ mnt/ rescue/ root/ sbin/ tmp/ usr/ home/ boot.cfg

そして、こちらは、NetBSDの中でのDISK情報。

nb7$ disklabel ld0
# /dev/rld0d:
  :
16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   2030112        63     4.2BSD   1024  8192     0  # (Cyl.      0*-   1007*)
 c:   2097089        63     unused      0     0        # (Cyl.      0*-   1040*)
 d:   2097152         0     unused      0     0        # (Cyl.      0 -   1040*)

御覧の通り、SWAPもケチって、作っていないと言う、いい加減さです。こういう イリーガルな事をするから、罰が当たったんだろうな。まあ、余り使う事も無いから これでいいだろう。ちなみに、起動さえしてしまえば、ISOファイルは不要なので、 捨ててしまっても大丈夫。

下記、参考までに7機に入れたNetBSDのマップ。上のやつとさほど変わらんなあ。

nb7$ disklabel wd0
# /dev/rwd0d:
  :
16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   8388545        63     4.2BSD   2048 16384     0  # (Cyl.      0*-   8322*)
 c:   8388545        63     unused      0     0        # (Cyl.      0*-   8322*)
 d:   8388608         0     unused      0     0        # (Cyl.      0 -   8322*)
nb7$ ifconfig -a
vioif0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        address: 00:a0:98:e0:d6:f3
        inet xxx.xxx.xxx.xx3 netmask 0xffffff00 broadcast zzz.zzz.zzz.255
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33648
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2

NICはブリッジを経由してtap0に結び付き、それがNetBSD上からは、viof0って名前で 参照出来る。IPアドレスは伏字にしちゃったけど、VMWAREが提供してるDHCPサーバーから ちゃんと取得してくれている。

----yyy.yyyy.yyy.yyy PING Statistics----
21 packets transmitted, 21 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.306100/0.971519/2.251300/0.384703 ms

親のFreeBSDにpingしてみると、約1msで接続出来ていた。

NetBSDはデフォで、postfixが動いているけど、必要ないのでNOって言って止めて おいた。これでマニュアルを見るには、十分な環境が出来上がったな。

dateが狂っていたので、下記の処置を実施

vi /etc/rc.conf
rtclocaltime=YES
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

こうして出来上がったVMの動きの状況をモニターしてみた。

[sakae@fb11 ~]$ sudo bhyvectl --vm=NB7 --get-stats
vcpu0 stats:
number of times hlt was intercepted             30383
number of times %cr access was intercepted      4
number of times rdmsr was intercepted           16
number of times wrmsr was intercepted           16
number of monitor trap exits                    0
number of times pause was intercepted           164249
vm exits due to interrupt window opening        285
vm exits due to nmi window opening              0
number of times in/out was intercepted          1243090
number of times cpuid was intercepted           4617
vm exits due to nested page fault               64456
vm exits for instruction emulation              365706
number of vm exits for unknown reason           0
number of times astpending at exit              1656
number of times idle requested at exit          0
number of vm exits handled in userspace         1867884
number of times rendezvous pending at exit      0
number of vm exits due to exceptions            0
vcpu total runtime                              59934821919
number of ticks vcpu was idle                   333847
number of NMIs delivered to vcpu                0
number of ExtINTs delivered to vcpu             0
EOI without any in-service interrupt            1420
error interrupts generated by vlapic            0
timer interrupts generated by vlapic            31123
corrected machine check interrupts generated by vlapic  0
lvts triggered[0]                               0
 :
lvts triggered[6]                               0
ipis sent to vcpu[0]                            0
 :
ipis sent to vcpu[15]                           0
Resident memory                                 206348288
Wired memory                                    0
Number of vpid invalidations saved              267
Number of vpid invalidations done               7983
vcpu migration across host cpus                 8250
total number of vm exits                        1880378
vm exits due to external interrupt              7555

bhyveはFreeBSDで絶賛展開中だけど、それを後押しするportsも色々出てきている。 これから成長が楽しみですよ。

[sakae@fb11 /usr/ports]$ make search key=bhyve | grep Port:
Port:   bhyve-firmware-1.0
Port:   bhyve-rc-3
Port:   cbsd-11.0.3
Port:   chyves-0.2.0
Port:   grub2-bhyve-0.40
Port:   iohyve-0.7.6_1
Port:   uefi-edk2-bhyve-20160704_1
Port:   uefi-edk2-bhyve-csm-20160704_1
Port:   vm-bhyve-1.1.5