minix3
女房が、季節外れのブドウを買って来た。JAが都内へ出荷出来ないので地元に還元したかと思ったら違った。季節が日本と正反対のオーストラリアからの輸入品。ひと房178円とか。随分安いな。国産品と大違い。
大違いの理由は、日本のそれより酸っぱい事。へたが黒くなるぐらいになれば、甘くなるよと言う常識は通じず。いつまで待っても酸っぱい。
怒った女房はミキサーで粉砕。茶漉しで種を取り除き、炭酸水で割って、蜂蜜を加えてジュースにしちゃった。
水増ししたおかげで、4杯分になった。天然果汁のジュースの巻でした。
install minix3 in qemu
minix3なんてのが思い出されてしまったので、debina(32Bit)機で試してみる。qemu上ね。 stable版をDownloadから落としてきたよ。ISOは圧縮されてるんで、bzip2 -d で展開した。そしてインストールは済ませた。けど、コンソール画面が以外に小さくて、年寄りには無理。(後で気が付いた事であるが、ズームイン機能で、画面を拡大出来る)
debian:minix$ qemu-system-i386 -m 512 -serial pty disk & [1] 2643 debian:minix$ char device redirected to /dev/pts/2 (label serial0)
そこで、例の手(仮想シリアルデバイス)のお世話になる。後少しだけ目を細めて我慢。 そう、minix3側で、シリアル回線を有効にするんだ。
# less /etc/ttys : ttyc2 "/usr/libexec/getty default" minix on secure tty00 "/usr/libexec/getty default" vt100 on secure #tty00 "" unknown off secure
冒頭のttyc3をtty00に変更。minixなんて端末は多分誰も知らないので、 vt100に変更。次のオリジナルtty00はコメントアウト。そして、kill -HUP 1 する。そうすると、initが再実行されて、tty00で待ち構えるようになる。 後は、リナ側から cu -l /dev/pts/2 すれば良い。
# df -h Filesystem Size Used Avail %Cap Mounted on /dev/c0d0p0s0 128M 35M 93M 27% / none 0B 0B 0B 100% /proc /dev/c0d0p0s2 13G 585M 12G 4% /usr /dev/c0d0p0s1 3.1G 33M 3.0G 1% /home none 0B 0B 0B 100% /sys
こんな状態になった。次は、ファイルのやり取りとかを考慮して、minix3側にsshdを起動しておこう。どういう名前でパッケージになってるか?
こんなのが見つかったので、指示に従う。
# pkgin update # pkgin install openssh calculating dependencies... done. nothing to upgrade. 2 packages to be installed: tcp_wrappers-7.6.4 openssh-6.6.1 (1673K to download, 4262K to install) proceed ? [Y/n] y downloading packages... tcp_wrappers-7.6.4.tgz 100% 80KB 80.4KB/s 80.4KB/s 00:00 openssh-6.6.1.tgz 100% 1592KB 318.5KB/s 76.3KB/s 00:05 installing packages... installing tcp_wrappers-7.6.4... installing openssh-6.6.1... openssh-6.6.1: copying /usr/pkg/share/examples/rc.d/sshd to /usr/pkg/etc/rc.d/ss hd openssh-6.6.1: copying /usr/pkg/share/examples/openssh/moduli to /usr/pkg/etc/ss h/moduli openssh-6.6.1: copying /usr/pkg/share/examples/openssh/ssh_config to /usr/pkg/et c/ssh/ssh_config openssh-6.6.1: copying /usr/pkg/share/examples/openssh/sshd_config to /usr/pkg/e tc/ssh/sshd_config =========================================================================== $NetBSD: MESSAGE.urandom,v 1.1 2002/02/05 04:17:31 jlam Exp $ You will need a working /dev/urandom. Please make sure you have a kernel compiled from a config file containing the line: pseudo-device rnd =========================================================================== pkg_install warnings: 0, errors: 0 reading local summary... processing local summary... updating database: 100% marking openssh-6.6.1 as non auto-removable
なんかpkginってNetBSDな人が一生懸命に拡販してたパッケージャシステムだな。GPLを嫌ってBSDライセンスを選ぶなら、汎用品として適切なんだろうね。
# ps ax | grep sshd 1091 ? 0:00 /usr/pkg/sbin/sshd 1100 00 0:00 grep sshd
動いているな。後は、useradd -m -d /home/sakae sakae とかして、自分の居所を確保すればいいな。あれ? 大事なソースが入っていないぞ。どうした事か? ソースは何処?って彷徨ってみると、
MINIX 3 Frequently Asked Questions を経由して、 Official MINIX sourcesを紹介された。先端のソースかな。
新しいワインは新しい革袋に入れろの例え通り、minix3の先端に行く事にする。
minix 3.4 on VirtualBox
開発版とやらを入れてみた。OSの種類は Other Linux(32)を選んで無事に入った。
minix$ uname -a Minix minix 3.4.0 Minix 3.4.0 (GENERIC) i386 minix$ df -h Filesystem Size Used Avail %Cap Mounted on /dev/c0d0p0s0 128M 56M 72M 43% / none 0B 0B 0B 100% /proc /dev/c0d0p0s2 9.6G 1.7G 8.0G 17% /usr /dev/c0d0p0s1 2.2G 24M 2.2G 1% /home none 0B 0B 0B 100% /sys none 0B 0B 0B 100% /dev/pts
全体像はこんなもの。ソース込みね。
minix$ du -sh /usr/src 736M /usr/src
ソースもユーザーランド込みなんで、とっても小ぶりな仕様だ。
minix$ cc -v clang version 3.6 (branches/release_36 237755) Target: i386-elf32-minix Thread model: posix
ccはgccじゃなくてclangってのがBSDライセンスを的確に表しているな。それはいいんだけど、gdbが無い。pkgにも無い。開発が間に合わなかったから?
ftp://ftp.minix3.org/pub/minix/packages/
まて、無理して先端にこだわる必要は無いぞ。静かにstable版を入れておく方が無難かもよ。 後で入れ替えておくかな。
stable版の一歩手前
残念ながらstable版(3.3.0)には、ソースが何故か付いていなかった。そこで、一つ前の版を試しに入れてみた。
$ uname -a Minix 10.0.2.15 3.2.1 i686
こんなバージョンだ。
$ ls /usr/src LICENSE commands drivers kernel sbin tools Makefile common etc lib servers usr.bin benchmarks dist external libexec share usr.sbin bin distrib gnu man sys build.sh docs include releasetools test
ソースは同梱されてた。NetBSD陣営のご協力を賜り、大分移植されてるっぽい。えせNetBSDと見做してもいいかな。まて、本物のemacsが何処にも無いぞ。しょうがないのでmgって言う模造品を入れた。
$ pkgin search emacs exctags-5.8 = Exuberant (feature-filled) tagfile generator for vi, emacs and clones mg-20090107 = Small, fast, public domain EMACS style editor vile-9.7nb3 VI Like Emacs. a vi `workalike`, with many additional features zile-2.3.17 Emacs-like text editor =: package is installed and up-to-date <: package is installed but newer version is available >: installed package has a greater version than available package
tagファイルを作るやつも入れたけど、色が付かないemacsもどきじゃ、ソース閲覧に難がありそう。ならば、大幅に譲歩してminix本のソースをしっかり読む方向に転換しようか。
book版
古い版minix 1.1 のやつは提供されてるけど、動かすのに苦労しそう。ならば、3版用の簡単に動きそうなのを試すか。bookバージョンを取ってきた。まずは中身拝見。
ISO版の中身
-r-xr-xr-x 1 root wheel 378299 Jan 1 1970 BOOKSRC.TGZ* -r-xr-xr-x 1 root wheel 1474560 Jan 1 1970 BOOTFLOP.IMG* -r-xr-xr-x 1 root wheel 3233 Jan 1 1970 INDEX.TXT* -r-xr-xr-x 1 root wheel 847535 Jan 1 1970 LISTING.PDF* -r-xr-xr-x 1 root wheel 2623738 Jan 1 1970 LISTING.PS* -r-xr-xr-x 1 root wheel 1144723 Jan 1 1970 LISTING.TXT* -r-xr-xr-x 1 root wheel 100192 Jan 1 1970 PRESZ134.ZIP* -r-xr-xr-x 1 root wheel 4084 Jan 1 1970 README.TXT* -r-xr-xr-x 1 root wheel 24137 Jan 1 1970 SETUP.PDF* -r-xr-xr-x 1 root wheel 46445 Jan 1 1970 SETUP.PS*
さすが、ちゃんとしてた。ソースを固めたやつとか、付録のなってるソースリストとか、インストールする前に確認出来る。
下記は、ソースの内容。本の解説範囲が提供されてますって事だな。
drwxr-xr-x 8 sakae wheel 512 Oct 15 2005 drivers/ drwxr-xr-x 5 sakae wheel 512 Oct 15 2005 include/ drwxr-xr-x 3 sakae wheel 1024 Oct 15 2005 kernel/ drwxr-xr-x 6 sakae wheel 512 Oct 15 2005 servers/ drwxr-xr-x 2 sakae wheel 512 Oct 15 2005 tools/
debian機のqemu内に入れる事にした。インストール中に、disk内のR/Wチェックが行われる。これにめっぽう時間がかかるんで、C-c を押してスキップしよう。 フルのソースに大物のemacs 21.4 とかが含まれていて、これのインストール(勿論バイナリーも)にめっぽう時間がかかる。気長に待とうホトトギス。
ネットワークはNICを認識するもDHCPでアドレスを取得出来ず。しょうがないのでシリアルを活かす事にした。ttysじゃなくて、/etc/ttytab を変更する事になる。
$ cat /etc/ttytab : ttyc2 minix getty tty00 vt100 getty #tty00 unknown
設定が終わったら、再起動。kill -HUP 1 では、動かなかったぞ。NetBSDみたいにはいかないのね。
$ uname -a Minix minix 3 1.0 i686
こんなバージョンになった。
etc
例によって、少し資料収集。
minix3.1.4をqemu環境にインスコしたので色々遊ぶ
楽しいね。
そして、KVMとかを使うと、速くなるとな。
# cd /usr/src/tools/ # time make image : text data bss size 19568 3144 29808 52520 ../kernel/kernel 19504 2360 48616 70480 ../servers/pm/pm 42624 5556 5316124 5364304 ../servers/fs/fs 4352 616 4696 9664 ../servers/rs/rs 26144 4996 44192 75332 ../drivers/tty/tty 4784 764 3012 8560 ../drivers/memory/memory 5904 504 63276 69684 ../drivers/log/log 23680 10776 10932 45388 AT:../drivers/at_wini/at_wini 11328 1944 7276 20548 BIOS:../drivers/bios_wini/bios_wini 10352 1480 4144 15976 FLOPPY:../drivers/floppy/floppy 7088 2284 1356 10728 ../servers/init/init ------ ------ ------ ------- 175328 34424 5533432 5743184 total 35.93 real 16.91 user 14.73 sys
これが普通のやつ。
Debian KVMで仮想化環境構築 を、Debian(64-Bit)に入れる。そして、qemu-system-i386を使って起動してたのを、kvmに して起動する。
Could not access KVM kernel module: No such file or directory qemu-system-x86_64: failed to initialize KVM: No such file or directory
起動するはずなんだけど、エラーである。調べてみると、kvm-intelがちゃんと入ってるってあったので、
sakae@pen:/tmp/minix-3.1.0$ locate kvm-intel /usr/lib/modules/4.19.0-8-amd64/kernel/arch/x86/kvm/kvm-intel.ko
ほら、この通り、Intel入ってる、状態である。よその人はちゃんと動いているんだけどな。 30秒考えて、VMWare上のCPU設定で、Intel VT-xEPTを有効にしてあげたら、無事に起動した。
で、気になる実行結果だが、逆に遅くなってしまった。ちゃんと動いている所では、5秒ぐらいでコンパイルが完了するそうだ。悔しいので失敗の理由を考える。
kvmってのはCPUが提供してる、仮想化支援機構。VMWareが既にDebianを動かすのに使ってしまっている為、ゲストOS側(正確にはqemu)では利用出来ない。よって、仮想化支援をシュミレートしてるんだ。だから遅くなるのさ。残念至極。
book版で、/etc/inet.conf の所が、fxpになってた。ネットワークが動いていない。別のNICとして、lanceを選んでみた。minix 3.2.1でちゃんと動いていたって根拠の無い理由。
これで、起動時にdhcpdがあたかも、IPを貰おうとしてるんだけど、結果は失敗してる。ならば自分で設定してみろ。
# ifconfig -I /dev/ip -h 10.0.2.14 -n 255.255.255.0 # ifconfig -v /dev/ip: address 10.0.2.14 netmask 255.255.255.0 mtu 1500 # ping xxx.xxx.xxx.xxx write: Destination not reachable
IPを自前で設定してpingするも、到着せず。デフォルトゲートウェイはどうやって設定すんの? そんなのはソースに書いてあるでしょ。
TODO
ソース嫁、本も読め。
sakae@pen:~$ ls minix-3.1.0/ boot disk src-1.1 src-3.1.0 sakae@pen:~$ qemu-img info minix-3.1.0/disk image: minix-3.1.0/disk file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 320M cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
ソースを手軽にdebian上で読めるように用意した。初期の版と3版用。
find . -name '*.[chs]' | xargs etags
これで、本の付録を行ったりきたりの苦行から逃れられる。
$ cat .emacs.el (global-font-lock-mode t) (column-number-mode t) (define-key mode-specific-map "v" 'view-mode)
ついでに、軽くemacsの設定もしておく @minix
restart() なんてのがkernel/main.cに出て来るんだけど、所在不明。探したら、_restart って言うアセンブラーになってた。見つからない時は、冒頭にアンダーバーを入れて再検索。 こういうのをバッドノウハウって言うんだろうね。
それから、minixが入ったdiskの容量が300Mぐらいなんで、手軽に/tmpに転送して、思う存分いたずら出来る。どんないたずらかって?
rm -rf / したらどうなるって言う定番のやつとか、haltさせないで、いきなり電源SWをブチュっと切ったら、次回の起動時にどうなるとか、etc,etc。
cat /dev/mem したらどうなるとか。色々とメモリー内容が表示されて、まだまだ続くようなんで、C-c したら、Panicってくれたぞ。
こんな楽しい回想録が見つかった(超お勧め)。オイラーが持ってる第一版の本は、1990年の購入。30年で一緒だね。改めて読み直してみると面白いな。 読みふけって、更新が疎かになるかも。