Redox とは
Rust 製の Unix Like OS 。
以下、公式サイトより引用。
- Implemented in Rust
- Microkernel Design
- Includes optional GUI - Orbital
- Supports Rust Standard Library
- MIT Licensed
- Drivers run in Userspace
- Includes common Unix commands
- Newlib port for C programs
開発は Github 上で進められている。
https://github.com/redox-os/redox
公式ドキュメントも充実。
https://doc.redox-os.org/book/
とにかく動かしてみたい
ということで、公式の Get Start に沿って進めてみる。
仮想マシンで動作
Github Release に、 redox_VERSION.bin.gz
という名前でそのバージョンの OS の入った仮想 HDD イメージが公開されているので、これを読み込んで実行させるのが一番手っ取り早い。
物理マシンで動作
Github Release では、ブータブルな Live ISO も提供されていて、物理マシンでも動かせるらしいが、なんか色々制約がありそう。
仮想マシンの構築
ということで、まずは仮想マシンでやってみることに。
公式サイトでは、QEMU を使う方法を推奨されているが。
さて、QEMU とは。
QEMU
OSS のハードウェアエミュレータ。
仮想化技術は、大きく分けて Native 型と Host 型に分けられるが、QEMU は Host 型に分類される。
Native | Host |
---|---|
Hyper-V KVM ESXi |
QEMU VirtualBox VMware Workstation |
最近のハイパーバイザは、CPU 仮想化に VT-x/AMD-V の利用を前提としているものも多いが、QEMU は CPU もソフトウェア的にエミュレートすることができるので、その辺からの需要もある。
QEMU を Raspberry Pi のエミュレータに良く使うのは、ARM プロセッサをエミュレートするためだ。
普段 Host 型仮想化ツールは Windows 上でしか使わないので、QEMU と聞いても「Linux で KVM と一緒に使う何か」程度の認識だったが、Windows にもしっかり対応していた。
Acceralator
ちなみに、その KVM と一緒に使う というのは、QEMU の CPU 仮想化の部分を KVM が担当し、VT-x/AMD-V が使えるようにするという関係性らしい。
で、驚きなのが、2018 年初めに Hyper-V も同様に Accelerator として使えるようになった という事。
QEMU 自体にも俄然興味が出てきたぞ。
とは言え、今回は Redox。
続・仮想マシンの構築
Windows 上で動かそうとした場合、主に2つの方法が思いつく。
- Github Release にある
redox_VERSION.bin.gz
を、言われた通り QEMU で動かす -
redox_VERSION.bin.gz
を、お気に入りの仮想化ツール用に変換し、動かす
どっちもやってみた
1. QEMU で起動
公式にあるコマンドは、以下 (順不同)
$ qemu-system-x86_64 -serial mon:stdio \
-d cpu_reset -d guest_errors \
-cpu host \
-smp 4 \
-m 1024 \
-s \
-net nic,model=e1000 -net user \
-machine q35 \
-device ich9-intel-hda \
-device hda-duplex \
-device nec-usb-xhci,id=xhci \
-device usb-tablet,bus=xhci.0 \
-enable-kvm \
-drive file=redox_VERSION.bin,format=raw
主なオプションの意味としては、
オプション | 設定 | 備考 |
---|---|---|
-cpu | CPU アーキテクチャ |
qemu-system-x86_64 -cpu help で一覧 |
-smp | CPU コア数 | |
-m | メモリ量 | |
-drive | 仮想HD | |
-net nic,model=e1000 -net user | ネットワーク パススルー | |
-machine | マシンタイプ指定 |
qemu-system-x86_64 -machine help で一覧 |
-device | デバイス | ich9-intel-hda : Intel HDA hda-duplex : Sound device ? nec-usb-xhci : Intel Wireless Display usb-tablet : Touch device ? |
-serial mon:stdio | シリアルポートシステムコンソールと QEMU HMI の多重化 |
・QEMU Human Monitor Interface, Example Usage ・QEMU Serial Port System Console |
-d cpu_reset -d guest_errors |
デバッグ設定 | |
-s |
-gdb tcp::1234 のショートハンド |
|
-enable-kvm | KVM モードで起動 |
どうやら、USB HID ドライバが無いため、キーボードやマウスは使えないようだ。
Windows で QEMU 起動
まずは、scoop を使って QEMU をインストールする
PS> scoop install qemu
上記コマンドから、不要な設定を外して実行してみる。
( :
や ,
を含むオプションは、''
で囲む必要がある )
PS> qemu-system-x86_64 -serial 'mon:stdio' `
-d cpu_reset -d guest_errors `
-cpu host `
-smp 4 `
-m 1024 `
-s `
-net 'nic,model=e1000' -net user `
-machine q35 `
-device ich9-intel-hda `
-device hda-duplex `
-device 'nec-usb-xhci,id=xhci' `
-device 'usb-tablet,bus=xhci.0' `
-drive 'file=redox_VERSION.bin,format=raw'
と、こんな感じになります。
どうやら、QEMU for Windwos のバージョン 2.12.0-rc0 にはバグがあるようだ。
QEMU をビルドし直せば行けそうだが、無理せず次のリリースを待とう
2. 他の仮想ツールで動かす
Github Issues を見ていると、 Virtualbox や Hyper-V で挑戦している人も結構居るので、ちょっとやってみる。
2.1 Hyper-V
Docker for Windows 中毒なので、まずは Hyper-V で挑戦。
● raw 形式の仮想 HDD イメージを変換する
ダウンロードした redox_VERSION.bin.gz
を qemu-img
を使って、VHDX 形式に変換する。
PS> qemu-img convert .\redox_VERSION.bin -O vhdx -o subformat=dynamic .\harddrive.vhdx
で、これを元に起動してみると、以下の画面が出る。
ん~、よく分からん。
● Live ISO から起動
諦めて、ISO から起動することにする。
偉大なる先駆者が似たような事をやっていたので、参考にやってみる。
-
設定
- 第一世代
- メモリ
- 4G (固定)
- ネットワーク
- なし
- 仮想ハードディスク
- 10G
- ブート CD/DVD からオペレーティングシステムをインストールする
- ダウンロードした ISO を指定
で、起動すると、しばらく bootloader が何かゴニョゴニョしている。
多分、これではないかと。
Therefore, the current ISO image uses a bootloader to load the filesystem into memory and emulates one.
終わると起動する。
◆ 感触
まず、ネットワークがつながらない。
試しに NAT 追加してみたけど駄目だった。
公式には rtl8168d と e1000 しか対応していない らしく、その辺が問題だろうか。
2.2 Virtualbox
Virtualbox でも同じ様な事ができそうなので、やってみたい。
● Live ISO から起動
-
設定
- タイプ
- Other
- バージョン
- Other/Unknown (64 bit)
- メモリ
- 4G
- 仮想ハードディスク
- VDI
- 10G (固定)
- ネットワーク
- NAT
- 82540EM
- ストレージ/光学ドライブ
- ダウンロードした ISO を指定
- Live CD/DVD
- タイプ
◆ 感触
起動めっちゃ速い。
ネットワーク繋がる。別に 82540EM でも繋がる。
● raw 形式の仮想 HDD イメージを変換する
こんなものを見つけた。
ぱっと見、VBoxManage を操作して VM 作っているだけに見えるが、実は RAW 形式から VDI にしてから起動していた。
$(VBM) convertfromraw $< build/harddrive.vdi
なるほど、こんなやり方もあるのか。
ということで、まずは以下コマンドで VDI を作成する。
PS> VBoxManage convertfromraw .\redox_VERSION.bin redox.vdi
マシンを作成する。
新規マシン作成時、作成した VDI は直接読み込まず、後からアタッチするので注意。
-
設定
- タイプ
- Other
- バージョン
- Other/Unknown (64 bit)
- メモリ
- 2G
- ストレージ
- IDE は空
- SATA コントローラ追加
- タイプ : AHCI
- ポート : 1
- ハードディスクを追加
- 変換した VDI を追加
- ネットワーク
- NAT
- 82540EM
- タイプ
これで ISO 同様に起動ができた。
ファイルも永続化している。
Redox 使用感
POSIX っぽいし、ファイルシステムも Linux っぽい。最低限の事はできる。
GUI はまだオマケだった。
ブラウザの URL を変更する方法すら分からなかった。
今はまだそういう段階なんだろうと言う感じ。
他の Rust 製 OS
Blog OS
https://os.phil-opp.com/
https://github.com/phil-opp/blog_os
Reenix
感想
かかった時間の半分以上が Redox 自身ではなく、QEMU 含む仮想化技術についての学習になってしまった。
( 元々 OS, Kernel 周りは苦手というのもあるが )
Redox の OS 設計部分の面白さを感じられるように、もう少し追いかけていきたい。