3
3

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-04-29

初めまして、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用のディスクファイルもそのまま利用できるようになりました。
virtualbox-minix-disk.gif

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

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

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

コンソールから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行に決め打ちなので、コマンドプロンプトのウィンドウサイズを変更します。
virtualbox-minix-cmd.gif

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

C:\Users\temp> telnet 192.168.56.101

virtualbox-minix-telnet.gif

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> プロンプトが出たら電源オフして構いません
virtualbox-minix-shutdown.gif

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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3