家で片付けをしていたら、OSの教科書として名高い「オペレーティングシステム 設計と理論およびMINIXによる実装 第2版」(1998年、Andrew S. Tanenbaum, Albert S. Woodhull著)が出てきた。購入後ずっと放置のままだが、MINIX2.0が収録されているという付属のCD-ROMは何故か無かった。しかし今やMINIX2.0の仮想アプライアンスが存在する事は知っている為、MINIX2.0.4をAndroidタブレットにデプロイし、本を読み進めながら少しづつMINIXに触れてみる事にした。今回はMINIX 2.0.4をAndroidタブレットにデプロイし、FTPサーバとして動かしてみた。
MINIX 2.0.4に触れて、気分だけでも1990年代末期(その頃は大学生)にタイムスリップ!
MINIXとは?
オランダのアムステルダム自由大学の教授でありIEEEのフェローであるAndrew S. Tanenbaum教授によって開発、1987年にリリースされた、UNIX(UNIX version 7)互換の教育用のOSである。
マイクロカーネルが採用されている為、カーネルのサイズは非常に小さい。またシステム自体もCentOSやUbuntuはおろかXが無いAlpine Linuxよりも小さく、自分のAndroidタブレットで稼働しているMINIXでさえ34MBしかない。
今回の記事のネタであるMINIXバージョン2は1997年に2.0がリリースされた。
MINIX 2.0はx86版とSPARC版が提供され、POSIX.1への準拠やIntel386のサポートやTCP/IPの実装等、少しづつだが実用的な物に近付いていった。
MINIXは今も開発が継続されバージョン3がTanenbaum教授らによって公開されているが、MINIXバージョン2は本家版だけでなく、MINIXバージョン2の共同開発者であるAlbert S. Woodhull氏により仮想アプライアンス版を公開している。
当方の環境
・ホスト機:Androidタブレット VASTKING KingPad SA8 / Android OS 10
・エミュレータ:Limbo PC Emulator 2.0.10
・ゲストOS:MINIX 2.0.4
・ソフトウェアキーボード:Androidアプリ「Hacker's Keyboard」
Limbo PC Emulatorという、VirtualBoxのAndroidアプリ版のようなツールにてMINIXを動かす。
MINIXのデプロイ
今回は、Albert S. Woodhull氏が公開している仮想アプライアンス版を使用する。
以下はMINIX本体のファイルのダウンロードからMINIXが動作可能になるまでの流れ。
1. minix204vmwp01.zipを下記リンク先からダウンロード。
https://minix1.woodhull.com/pub/demos-2.0/VMWarePlayer/ Minix 2.0.4 Virtual Machine for VMWare Player
2. ダウンロードしたファイルminix204vmwp01.zipを展開。
VMware WorkstationやVMware Playerで動かす場合は展開して生成されたファイルをそのまま使用。
Limbo PC Emulator等QEMU環境で動かす場合やVirtualBoxで動かす場合は、mx204d0.vmdkだけ使用。
3. mx204d0.vmdkのファイル形式をvmdkからqcow2に変換。
当記事ではAndroidタブレットにインストールされているLimbo PC Emulatorというツールの中で仮想アプライアンスとしてMINIXを動作させる為、qcow2ファイルに変換する。
VMware WorkstationやVirtualBoxにて動作させる場合は、vmdkファイルのままでよい。
Windows環境ではqemuコマンドもしくはNHCというツール(https://euee.web.fc2.com/tool/nhc.html#nhc)で、macOSの環境ではqemuコマンドでqcow2ファイルに変換する。
自分の場合、Windows10のPCにてNHCを使用し変換した。
4. mx204d0.qcow2をデプロイ。
WindowsPCからAndroidタブレットにmx204d0.qcow2をコピー。
当記事ではLimbo PC Emulatorの設定の詳細は割愛。Limbo PC Emulatorの設定に関しては以下を参照。
自分の場合、仮想RAMは128MB、NICはpcnetをアサインした。
https://debslink.hatenadiary.jp/entry/20200418/1587204948
VMware WorkstationやVMware Playerの設定に関しては以下を参照。
https://minix1.woodhull.com/pub/demos-2.0/VMWarePlayer/
Limbo PC Emulatorにて外部からのFTPのアクセスを受け付けるには、Network設定のHost Forwardの欄にて以下を入力する。
よって、このFTPサーバにアクセスする際はポート番号22221を指定する必要が有る。
hostfwd=tcp::22221-:21
Limbo PC Emulatorの設定が完了したら、画面内上部の三角ボタンをタッチしデプロイを開始。
5. MINIXの起動完了後、ログインプロンプトが表示される。
rootでログイン。パスワードは無し。
Login as root and run 'setup' to install Minix.の表示が有るが、既にHDDにインストールされた状態である為、setupコマンドの実行の必要は無い。
さあ、これでMINIXを持ち歩く事が可能になった。ゲストOSだけど...
1990年代のリバイバル?全くもって実感無し。ディレクトリ構成は今時のLinuxと少し違う程度で、黒の背景に無機質な白い文字列はLinuxやBSDと同じだから。
FTPサーバの設定
ここから、外部との通信の為の設定およびFTPサーバの設定に入る。
1. TCP/IP通信の設定
MINIX2ではデフォルトでTCP/IPの通信が出来ないようなので、まずはTCP/IPの通信が可能な状態にする。
/usr/src/kernel/lance.cファイルを開き、以下の0x142を0x0043に修正。
※/usr/src/kernel/lance.cファイル内の796行目
} out_word(ioaddr+LANCE_ADDR, 0x0); (void)in_word(ioaddr+LANCE_ADDR); out_word(ioaddr+LANCE_DATA, 0x142); /* start && enable interrupt */ return; }
2. /usr/serv.accessファイルを開き、telnet ftp: +* log;をtelnet ftp: + log;に修正。
/usr/serv.accessファイル自体はls /usrで見えないものの、viコマンドで開く事が出来る。
# this is insecure! replace with something more specific asap telnet ftp: +* log;
3. /usr/etc/rcファイルを開き、# daemonize tcpd ftp in.ftpdの行頭の#を削除し、FTPのサービスが立ち上がれる状態にする。
if [ "$net" ] then if [ -f /etc/rc.net ] then # Let a customized TCP/IP initialization script figure it ou . /etc/rc.net else # Standard network daemons. Be sure network is secure before # enabling those that are initially disabled here. daemonize dhcpd -d3 daemonize nonamed # daemonize talkd # daemonize tcpd shell in.rshd # daemonize tcpd login in.rlogind daemonize tcpd telnet in.telnetd # daemonize tcpd ftp in.ftpd fi fi
4. 上記3を修正し終えたら、/usr/src/toolsディレクトリに移動しカーネルを再構築。
エラーを吐かずDone.が出力されたら、カーネルの再構築およびインストールは完了。
# cd /usr/src/tools # make hdboot : : exec sh mkboot hdboot cp image /dev/c0d0p0s0:/minix/2.0.4r0 Done. #
5. shutdown -r nowコマンドを実行しMINIXを再起動。
ホスト機側のHWスペックにも依るが、再起動自体はすぐに完了する。
# shutdown -r now
6. 今の状態ではパスワード無しでログイン可能である為、rootアカウントのパスワードを設定。
# passwd Changing the shadow password of root New password: Retype passowrd: #
7. ftpサーバ用のアカウント「ftpuser」を作成。外部からftpサーバにログインする際、このアカウントを使用する事とする。
ついでに、ftpuser用のパスワードも設定。
# adduser ftpuser other /usr/ftpuser cpdir /usr/ast /usr/ftpuser chown -R 50:3 /usr/ftpuser echo ftpuser::0:0::: >>/etc/shadow echo ftpuser:##ftpuser:50:3:ftpuser:/usr/ftpuser: >>/etc/passwd : # passwd ftpuser Changing the shadow password of ftpuser New password: Retype passowrd: #
8. Linuxの場合、一般ユーザに割り当てられるディレクトリは/home配下であるが、MINIX2の場合は/usrディレクトリ配下となる。
今回は、ftpuserユーザ用のディレクトリを公開用として設定する。
公開ディレクトリを/usr/ftpuserから/usr/ftp/pubに変更する為、/etc/passwdファイルを修正。
以下の行の/usr/ftpuserを/usr/ftp/pubに修正する。
# vi /etc/passwd : |nobody:*:9999:99::/tmp: |ftpuser:##ftpuser:50:3:ftpuser:/usr/ftpuser:
9. 公開ディレクトリ/usr/ftp/pubの所有者および権限を修正する。
以下の設定により、ftpuserのアカウントでアクセスしたユーザは、公開ディレクトリ内のファイルのダウンロードだけでなくファイルのアップロードも可能となる。
外部からのアクセスの確認用として、README.txtファイルを作成した。
# chown ftpuser:other /usr/ftp/pub # chmod -R 777 /usr/ftp/pub # touch /usr/ftp/pub/README.txt # # ls -la /usr/ftp/pub total 2 drwxrwxrwx 2 ftpuser other 32 May 20 2006 . drwxr-xr-x 6 root operator 96 May 20 2006 .. -rw------- 1 root operator 920 Feb 16 22:36 README.txt #
10. MINIXを再起動。
起動時のStarting daemons: のログにて、ftpのサービスが立ち上がった事が確認出来る。
# shutdown -r now : : Minix 2.0.4 Copyright 2001 Prentice-Hall, Inc. Executing in 32-bit protected mode at-d0: QEMU HARDDISK Memory size = 130504K MINIX = 379K RAM disk = ok Available = 130125K Hardware real-time clock says: Wed Feb 16 22:51:28 EST 2022 /dev/c0d0p0s2 is read-write mounted on /usr Multiuser startup in progress. eth_card#0: AMD Lance/PCI (1022/2000) at 0.3.0 eth_card#0: using I/O address 0xc000, IRQ 11 eth_card#0: PCnet/PCI-II 79C970A at C000:11 Starting daemons: update cron dhcpd nonamed telnet ftp. Login as root and run 'setup' to install Minix. Minix Release 2 Version 0.4 10.0.2.15 login:
11. FTPサーバへの接続確認。
MINIXの起動が完了したところで、MacBook AirにてFTPクライアントツールCyberduckを立ち上げ、Androidタブレットにて動作するMINIXのFTPサーバにアクセス。
公開ディレクトリ内のファイルREADME.txtが見える事が確認出来、MINIXのFTPサーバ化は成功した。
※画像をクリックすると拡大表示します
今回はここまで。
妻(大学の同期)と話をしながらMINIX2に触れた。BGMは当時ヒットしていたUnderworldやMassive Attackだったがその頃はまだ存在していなかったYouTubeで流していた事と、周囲に有る物は1990年代末期には無かった物だらけで、気持ちだけでもタイプトリップ...なんてものは容易な事ではなかった。
しかし、OSの勉強自体は今後も進めていこうと思う。
2023/10/9追記
MINIXの開発は停止しているようで、開発版のバージョン3.4.0rc6が2017年5月に公開されて以降、更新が止まっている。
https://srad.jp/story/23/07/04/1355204/ MINIXはもう死んでいる?
参照サイト
http://www.ne.jp/asahi/it/life/it/more/minix/minix_2.html MINIX 2をインストールする
https://qiita.com/nsan/items/2d1cd59d7c977be4ae4e MINI2 のネットワークをVirtualBoxで動かしてみた
https://minix1.woodhull.com/pub/demos-2.0/VMWarePlayer/ Minix 2.0.4 Virtual Machine for VMWare Player
https://www.amazon.co.jp/dp/4894710471/ オペレーティングシステム―設計と理論およびMINIXによる実装
https://www.minix3.org/ MINIX 3
https://sourceforge.net/projects/limbopcemulator/ Limbo PC Emulator
BGM
https://www.amazon.co.jp/dp/B000006045/ Massive Attack - Mezzanine
https://www.amazon.co.jp/dp/B000003RHD/ Underworld - Second Toughest in the Infants
https://www.amazon.co.jp/dp/B000006TNS/ The Prodigy - The Fat of the Land