MINIX2 を VirtualBox で動かしてみた

## 成長を促す教育用 OS としての Minix2

アンドリュー・タネンバウム教授の Minix は教育用として有名で、現在維持されているのは Minix3 http://minix3.org/ になります。

Minix3 は OS 教育・研究用としても使いつつ、それまでの Minix, Minix2 とは違い実用 Unix OS として必要な機能を備え、ライセンスも　BSD 類似のオープンソースにすることで、フォークやコントリビューションを可能にしたより現代的なオープンソースの OS プロジェクトとなっています。

一方で Minix2 は教育専用で、ライセンス的に自由に改変可能なものではなく、**ほぼちゃんとした Unix** ではあるものの実用性は乏しいという **絶妙な味付け** となっています。（追記：2000年4月に Minix は BSD スタイルのライセンスに改訂され、Minix 2.0.4 も BSD スタイルのライセンスです）

つまり Minix2 を学んだ後は、そこで溜まったフラストレーションを別の OS （今なら Linux など）開発で貢献するか、 **自分で自分の OS を始める** するしかないわけです。こうしてそのフラストレーションをエネルギーに Linux はじめ多くの OS が産まれました。（追記:2000年以前の話になります）

## Minix2 を VirtualBox で使ってみる

そんな成長を促す Minix2 ですが、最終版の Minix 2.0.4 がダウンロード可能状態では存在しているものの、フロッピー時代の配布物なので今の PC でインストールするには多少の工夫が必要となっています。

何の役に立つのか自分でもよくわかりませんが、今回 VirtualBox で動かすことが出来るのを確認しましたので、その方法を共有したいと思います。

### 必要なもの
- VirtualBox がインストールされていること
    - どのバージョンという明確な指定はないですが、nobuh が使ったのは Ubuntu 19.10 でインストールした VirtualBox 6.0.14 です
- bzip または gzip を解凍可能なツール
- dd コマンド
    - 分割されていないフロッピーの生イメージを 1.4MB で分割する作業があり dd コマンドを使います
    - VirutlaBox のホスト OS で dd コマンドを装備している必要はなく、別マシンでのイメージ編集でもよいのでホスト OS は Windows でも何でもかまいません
    
### ダウンロード

過去バージョンのダウンロードページ https://wiki.minix3.org/doku.php?id=www:download:previousversions で `Intel-2.0.4` の bzip か gzip か、持っている解凍ツールに合わせて選んでダウンロードし解凍してください。**サーバーが細いのか無茶苦茶時間かかります** 

 ![Screenshot from 2020-07-24 14-42-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/aa534329-b654-6acf-1bdf-5c745818a138.png)

### 仮想マシン作成

- OS タイプ `Other` バージョンは `DOS`
- メモリ 32MB VRAM 9MB HDD 500MB の提示されたサイズでよいです
- 要するに IDE のディスクコントローラー、フロッピーのコントローラーがついていれば問題ないです
- フロッピードライブは２台ほしいので１台増やします
    - `ストレージ` のメニューで `コントローラー:Floppy` 右横にある + アイコンを押して (下の方の +- アイコンはコントローラー自体の追加なので違います）
    - `空のままにする` でドライブを追加します
    - ![Screenshot from 2020-07-24 14-54-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/7ef6cc9f-f5cb-7091-9452-11d87e5c070a.png)
- 設定全体
    - ![Screenshot from 2020-07-24 15-01-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/d054f8a4-7520-96d7-235a-36c613f5fd40.png)

### フロッピーイメージ作成

解凍した i386 ディレクトリにある `ROOT.MNX` `USR.MNX` `USR.TAZ` がインストール時に使うフロッピーイメージです

```
Intel-2.0.4/i386/
├── DOSMINIX.ZIP
├── NET.TAZ
├── ROOT.MNX
├── USR.MNX
└── USR.TAZ
```

VirtualBox がフロッピーとして読み込むには、どうやら以下の条件がありそのままでは使えません

- サイズは `1440k` 固定。中の使用量が小さい場合も 0 埋めなどしてこのサイズであること
- ファイルの拡張子は `.img`　MNX とか TAZ とか駄目

この条件を満たせるように以下のコマンドを実行します

```
cd Intel-2.0.4/i386/
cp ROOT.MNX ROOT.img
cp USR.MNX USR.img
dd if=USR.TAZ of=USR1.img bs=1440k count=1 skip=0 conv=sync
dd if=USR.TAZ of=USR2.img bs=1440k count=1 skip=1 conv=sync
dd if=USR.TAZ of=USR3.img bs=1440k count=1 skip=2 conv=sync
```

### インストーラー起動

フロッピー0 に `ROOT.img` をマウント、フロッピー1に `USR.img` をマウントし仮想サーバーを起動します

![Screenshot from 2020-07-24 15-32-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/51a5e2db-bf47-b8d0-b593-217d216c33ae.png)

ブートローダーでメニューは `=` しかないので選ぶ余地は無いですが、ブートローダーは英語キーボードのみとなっていますので、日本語キーボードの方は `~` を代わりに押してください

![Screenshot from 2020-07-24 15-35-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/b032e52c-5e62-9814-3240-da8fbeca8f58.png)

インストールの２枚フロッピーのうち USR をマウントしたドライブを聞かれますので `fd1` 

![Screenshot from 2020-07-24 15-37-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/62170bb6-bb35-6656-43aa-dab5683a7c93.png)

root のパスなしでフロッピーのインストーラーの OS （今でいう Live CD と同じですね）に入れました

### setup 実行

これだけでも雰囲気は味わえますが、HDD にインストールしないと醍醐味は味わったと言えないので `setup` を実行します

![Screenshot from 2020-07-24 15-41-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/bc4892f1-809a-d059-2bd5-e5acd8a454bc.png)

いろいろ言われますが気にせず `RETURN` 

![Screenshot from 2020-07-24 15-43-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/1bdf3a2e-6fc2-e8f0-131b-19a6a3d37d14.png)

キーボードを聞かれますので日本語キーボードな人は `japanese` を選びましょう

![Screenshot from 2020-07-24 15-45-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/84361af6-13f5-eb9b-c025-17a8d1923786.png)

いよいよパーティション作成ですという説明が出ますが `RETURN` を押します

![Screenshot from 2020-07-24 15-46-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/8b2c5ce2-9a29-aee3-9e81-c542887c57ff.png)

タネンバウム教授の `part` というパーティションレイアウト編集ツールの実行画面になりました。デバイス `/dev/c0d0` を反転表示で選択中の状態のまま `r` をタイプし現状のレイアウトを読み込みます。

![Screenshot from 2020-07-24 15-49-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/122aecb8-8576-4291-d89a-e5fc3c040561.png)

P0 - P3 と4つ定義されているようですが、タイプが `00 None` と表示されているパーティションは書き込みされない仕様となっています。（逆にタイプを 00 にすることでパーティションの削除を行う仕様らしい）

カーソルを `P0` パーティションのタイプの数字 00 のところに持って行って、`81` と打つと以下になります

![Screenshot from 2020-07-24 15-52-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/85cf545e-11f7-4aef-0a3c-26272e561602.png)

この例のようにパーティションレイアウトの数字が `反転表示` になっているのは異常。明るい強調表示になっているのは `要注意` の設定とのことです。 `m` キーがおすすめの数字を自動選択してくれることになっていますので使います。

まずは `Base` の列にカーソルを持っていて `m` を１回タイプします

![Screenshot from 2020-07-24 15-58-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/0550fff3-d695-9b52-f5be-db7951d3e3fe.png)

ジオメトリの Head が 0 で白く光ってますが気にせず、 `Size` 列に移動して `m` を１回だけタイプします

![Screenshot from 2020-07-24 15-59-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/2b5808b2-ba8c-4c26-950a-e80e30a56e89.png)

警告もなくなりましたので 500MB のディスク全部が p0 になったようです。Minix2 は１パーティション最大 1GB なのでご注意ください

`w` をタイプして書き込みます

![Screenshot from 2020-07-24 16-01-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/760eef59-23ac-17f1-49b2-e918aae19bbd.png)

確認がありますが `y` です

![Screenshot from 2020-07-24 16-02-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/0aa702f7-a089-a24d-620d-32b4f06fa103.png)

書き込みは行っても part は終了してくれないようなので自分で `q` をタイプして終了します

今まで作ったディスクとパーティションの名を聞かれますので `c0d0p0` を指定します

![Screenshot from 2020-07-24 16-05-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/8df6e1ef-1826-5ff3-2a5c-e3974764da8b.png)

次にスワップスペースのサイズを聞かれます

![Screenshot from 2020-07-24 16-07-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/efab5777-beea-598e-2dbb-e8857a0de0b1.png)

0 でよいのでそのまま RETURN をタイプします。

![Screenshot from 2020-07-24 16-08-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/02012f76-cf47-ef2b-c8dc-a66fc05480fb.png)

最後に確認がありますので RETURN をタイプします。

昔のディスクは不良セクタの自動メンテなどが効いてないことがあったのか、インストールが自分でスキャンを行います。不要でしたら DEL で止められるようですがすぐ済みます。

USR ディスクからのコピーが終わると、ROOT ディスクの場所を聞かれますが

![Screenshot from 2020-07-24 16-13-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/a4b5cac8-d89e-efa2-ea98-2e731963b800.png)

0 のままでよいのでそのまま RETURN をタイプします。

ROOT のコピーも終了して以下の表示が出れば最小 setup は完了です

![Screenshot from 2020-07-24 16-14-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/68fd13cf-b5a2-0b7b-0661-bc39a6cbaac6.png)

仮想フロッピーを抜いていちど起動してみましょう。（ブートマネージャーは相変わらず英語キーボードしか認識していないので注意！）

### /usr への追加インストール

最小インストールでは `vi` などコマンドが入っていませんので、最初に作成しておいた USR.TAZ をもとにした３枚フロッピーを使って /usr へ追加ソフトをインストールしていきます。`setup /usr` を実行します

![Screenshot from 2020-07-24 17-36-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/cd87a586-57be-dce5-556d-a9d45c5b67bb.png)

フロッピーのサイズを聞かれますが [all] でよく、またドライブも [0] でよいので RETURN を押していきます

![Screenshot from 2020-07-24 17-40-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/ede3caad-b6a7-bf35-e4cd-feaae3df94b6.png)

１枚目の挿入を要求されますので、ウィンドウ下部のメニューのフロッピーアイコンを右クリックして、作成しておいた `USR1.img` をマウントし RETURN を押していきます

![Screenshot from 2020-07-24 17-43-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/eb1d0950-1a4a-8ff9-4dab-47e767649d82.png)

以降 `USR2.img` `USR3.img` と続けてマウントして RETURN を押して読み込ませます

![Screenshot from 2020-07-24 17-45-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/9a0438e4-3373-0e95-a3bc-cb33a2dc2aae.png)

以上でインストーラーは終了です。`vi` などツールが動いていれば無事終了です！

![Screenshot from 2020-07-24 18-01-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101020/e2f96ae4-ed05-2fe5-0eb9-8ea744accc18.png)


ソースなどさらなる追加パッケージは配布の `src` ディレクトリに格納されています。こちらも TAZ 拡張子になっていますがフロッピーイメージですので 1440k に分割しておいて、`setup /usr` コマンドで `/usr/src` などにインストールされますので挑戦してみてください

```
  src/SYS.TAZ           - Operating system sources (libary, kernel, etc.)
  src/CMD.TAZ           - Commands sources (cp, ls, mkdir, etc.)
  src/FIX.TAZ           - Fixed RTL8139 driver (install last)
```

## まとめ
- 教育用 OS の趣が強く Linux を生み出す土壌となった Minix を現代でも体験することが出来ました
- DOS 時代の Minix を VirtualBox を使って動かすことが出来ました。同様のアプローチで他の DOS 時代のソフトを使うことが出来るので応用範囲は案外広いかもしれないです