mBoot は、物理 x86_64 PC 上で mochiOS を全画面 QEMU 仮想マシンとして 起動する Buildroot ベースの専用 Linux アプライアンスです。mBoot 自体は BIOS/UEFI の両方から起動でき、物理 GPU、入力、ストレージ、音声、 ネットワークを Linux が担当します。mochiOS 側には安定した virtio プラットフォームを提供します。
mBoot に必要なのは kernel.elf や initfs の単体ファイルではありません。
mochiOS のブートローダー、カーネル、initfs、パーティションテーブルを
すべて含んだ、起動可能な raw GPT ディスクイメージが必要です。
現在の mochiOS リポジトリでは、通常これは次の成果物です。
mochiOS/out/artifacts/disk.img
このファイルはビルド時に mBoot の root filesystem へ
/var/lib/mboot/mochiOS.img として格納されます。実機では mBoot と mochiOS を
別々のディスクへ書き込む必要はありません。
# mBoot リポジトリ直下へ、既定名で配置する
cp ../mochiOS/out/artifacts/disk.img ./mochiOS.img
make defconfig
make build
# または元の場所を明示する
make build MOCHIOS=../mochiOS/out/artifacts/disk.img必要条件は以下のとおりです。
- QEMU の raw block device として渡せる通常ファイル
- GPT パーティションテーブルを持つこと
- 64 MiB 以上で、ビルド時に読み取れること
- OVMF/UEFI で単独起動できる完全な mochiOS ディスクであること
make build はファイルの存在、最小サイズ、GPT header を検査します。完成後の
mBoot は内包したファイルを MOCHIOS という virtio disk serial 付きで mochiOS
へ渡します。GPTパーティション名やfilesystem labelの変更は不要です。また、完成
diskのGPT、root PARTUUID、ext4の可読性、hostname、host identity混入、boot file、
kernel builtin driverを自動検査し、失敗したimageを成功成果物として扱いません。
再現ビルド対応前のBuildroot outputは互換versionで一度だけ自動cleanされ、その後は
通常のcached buildへ戻ります。
make defconfig # 初回だけ設定を生成
make build MOCHIOS=../mochiOS/out/artifacts/disk.img
make check
make check-image MOCHIOS=../mochiOS/out/artifacts/disk.img
make run MOCHIOS=../mochiOS/out/artifacts/disk.imgmake build は次の2つを生成します。内容は同一です。
output/images/disk.img 通常のraw GPTディスクイメージ
output/images/mboot.iso USB書き込みツール向けの配布名
mboot.iso は、CD/DVD用の読み取り専用ISO9660ではありません。mochiOSのディスク
内容やOVMF状態を実機で永続化するため、BIOS/UEFI両対応の書き込み可能なraw GPT
イメージを.isoという名前でも出力しています。
disk GUID、partition GUID、root filesystem UUID/type、hostname、root deviceの待機
時間は boot-layout.conf だけで定義します。Buildroot、
kernel、GRUB、genimage用の設定はoutput/generated/へ自動生成されます。kernelは
root deviceを無期限には待たず、見つからない場合は30秒後に期待値、検出partition、
VFS errorをconsoleへ表示します。
GUI を使わずシリアルログだけを確認する場合は、次のように実行します。
make run QEMU_DISPLAY=nonemake run は完成した1台のmBootディスクだけを外側のQEMUへ接続します。内側の
mochiOSが自動起動するため、単一ディスク構成をそのまま仮想環境で確認できます。
利用可能ならKVM、利用できなければTCGを選択します。
output/images/mboot.isoまたはdisk.imgを、ファイルとしてコピーするのではなく、
USBメモリやSSDのデバイス全体へディスクイメージとして書き込みます。4 GiB
以上の専用媒体を推奨します。書き込み先の既存データは消去されます。
書き込んだ1台だけを実機へ接続し、BIOSまたはUEFIから起動してください。別の
mochiOS用ディスクやMOCHIOSラベルは不要です。Secure Bootには対応していない
ため、ファームウェア設定で無効にしてください。
root 所有の /etc/mboot.conf で、vCPU、メモリ上限、Q35/PC、virtio GPU、
SDL 全画面、user networking、ALSA 音声、disk cache を設定できます。
mochiOSは現在マルチコア未対応のため、既定値はMBOOT_VCPUS=1です。メモリを
空欄にするとLinux用の予約分を残して自動算出します。
ログは次に保存され、再起動後も残ります。
/var/log/mboot/launcher.log
/var/log/mboot/xorg.log
/var/log/mboot/qemu.log
/var/log/mboot/mochios.log
mochiOS が正常終了すると mBoot も電源を切ります。初期化失敗や QEMU の 異常終了時はログインシェルを開かず、tty1 に短いエラーコードとログ位置を 表示します。
通信デバイスに依存しないv1 codecはcrates/mboot-protocol、Linux daemonは
crates/mbootdにあります。virtio-serial統合前の開発用transportとしてUnix
domain socketを使用でき、socket pathは第1引数で変更できます。
make protocol-test
cargo run -p mbootd -- /tmp/mochios-control.sock
# 別のterminalから
cargo run -p mock-mochios-agent -- /tmp/mochios-control.sock既定socketは/run/mboot/mochios-control.sockです。mock agentはHELLO、4段階の
READY、uptime 10000msのHEARTBEATを送信し、mbootdのWELCOMEを検証します。
HOST.POWEROFFとHOST.REBOOTはprotocol responseまでに限定され、host command
やshutdown処理は実行しません。
詳しい構成は docs/architecture.md、検証項目は docs/test-plan.md、同梱 OVMF の由来は docs/ovmf.md を参照してください。