MINI2 のネットワークをVirtualBoxで動かしてみた


初めまして、Qiita初投稿のnsan と申します。 よろしくお願いします。

タネンバウム教授の Minix はLinux の元になったOSとして有名で、私もアスキー出版の「MINIXオペレーティング・システム」のMINIX 1.5 をPC-9801にインストールして勉強しました。
思えば、初めて大規模なプログラムを見た経験でした。 さすがに先生がコードまで書かれているので一貫性があってわかりやすく、C言語のプログラムの書き方がよくわかります。 現在も同様のOSがあれば良いのですが、Linuxは複雑になってしまい良い材料が無いように思います。

ここでは、MINIX 2.0.4 のTelnetとFtp をVirtualBox下で動かすことが出来たので共有したいと思います。 LANのドライバを変更してOS本体のカーネル再構築をしています。 MINIXではOSのソースコードだけでなく、ash やawk などのコマンドもソースコードが付いているので、OSの仕組みが知りたい人には最適と思います。 C言語のコンパイラについては、Amsterdam Compiler Kit をベースにした物に変更されたのでソースコードは無いです。
素直にVMWare Player を使わないのは、非商用利用のメッセージが煩わしいためです。 IT関係の仕事をしていると、どこまでが非商用か判断つかず勧めづらいので、フリーのVirtualBoxを使っています。

本家のMINIX 2.0 だとLANカードがNE2000なのでVirtualBoxでネットワークが使えないです。 ショートカットして、VMWare用のディスクイメージを以下のサイトからダウンロードします。
https://minix1.woodhull.com/pub/demos-2.0/VMWarePlayer/
minix204vmwp01.zip をクリックしてダウンロードしてください。 ZIPファイルを解凍して、mx204d0.vmdk だけ利用するので、ディレクトリ「%HOMEPATH%\"VirtualBox VMs"」などにコピーしてください。

仮想マシン作成

  • OS タイプ Other バージョンは DOS
  • メモリ 32MB VRAM 9MB HDD 500MB の提示されたサイズでよいです
  • 要するに IDE のディスクコントローラー、フロッピーのコントローラーがついていれば問題ないです

ディスクを先ほどのファイル mx204d0.vmdk に変更します。 最近のVirtualBox はVMWare用のディスクファイルもそのまま利用できるようになりました。

ネットワーク設定で割り当てを、「ホストオンリーアダプター」 、高度をクリックして展開し、アダプタータイプを「PCnet-PCI Ⅱ(Am70C970A)」に変更します。

起動します

ここで、= をタイプする必要がありますが、英語キーボード前提なので日本語キーボード利用の場合は、=の右隣の[^]を押下します。

DHCPでアドレス 192.168.56.101 を取得して起動しますが、ネットワークが使えません。

コンソールからroot でログインできます。 また、以下のコマンドでログイン後に日本語キーボードに変更できます。
loadkeys /usr/lib/keymaps/japanese.map

TCP/IPネットワークが使えないのは、LANカードドライバ(lance.c)の初期化ビットが違っているようなので修正します。 みつけるのに2週間ほどかかりました。

# cd /usr/src/kernel 
# vi lance.c

以下のように、/usr/src/kernel/lance.c の796行目で、0x142 を 0x0043 に変更します。

796:  out_word(ioaddr+LANCE_DATA, 0x0043);   /* start && enable interrupt */

/usr/src/tools に移動し、カーネルの再コンパイルを行うため,make hdboot を実行して、再起動します

# cd /usr/sec/tools
# make hdboot
#
# shutdown -r now

Telnetでログインするためには、パスワードが必要です。

# passwd
Changing the shadow password of root
New password:
Retype password:

/etc/serv.access の内容が間違っています。
telnet ftp: +* log; で* が使えなくて全て禁止になっているので、 * を削除して以下のようにします。

# /etc/serv.access
# 2006-05-21
# See the serv.access(5) man pages to learn how to edit this file
# to make your system safe on the network.

# this is insecure! replace with something more specific asap
telnet ftp: + log;

# this is better, keep outsiders out
# telnet ftp: +*.local log;

viなど使用する場合に、画面サイズが80文字、24行に決め打ちなので、コマンドプロンプトのウィンドウサイズを変更します。

Telnetします。 IPアドレスは、VirtualBoxの環境設定によって違う事があります。

C:\Users\temp> telnet 192.168.56.101

ftpd は、shell script /usr/etc/rc でコメントアウトされているので、66行目先頭の# を削除して再起動すれば利用できますが、demonaize はshell script の関数なので、コマンドラインから起動できません。 ftpが使えるとWinSCPのEditorで編集も出来るので便利です。 /usr/etc/rc はstartup script /etc/rc から呼ばれています。

/usr/etc/rc
51 |    if [ "$net" ]
52 |    then
53 |        if [ -f /etc/rc.net ]
54 |        then
55 |            # Let a customized TCP/IP initialization script figure it ou
56 |            . /etc/rc.net
57 |        else
58 |            # Standard network daemons. Be sure network is secure before
59 |            # enabling those that are initially disabled here.
60 |            daemonize dhcpd -d3
61 |            daemonize nonamed
62 |            # daemonize talkd
63 |            # daemonize tcpd shell in.rshd
64 |            # daemonize tcpd login in.rlogind
65 |            daemonize tcpd telnet in.telnetd
66 |            # daemonize tcpd ftp in.ftpd
67 |        fi
68 |    fi
69 |
:set number

シャットダウンするのは、shutdown -h now です。 d0p0s0> プロンプトが出たら電源オフして構いません

以上、少しでもみな様の参考になれば幸いです。