Skip to content

Russ Coxのboot/qemuスクリプト

Russが tailscale をPlan 9に移植する手伝いをしたとき、boot/qemu という起動スクリプトが追加された。これは qemu でPlan 9を実行するための簡易なものだが、ソースコードを u9fs でルートファイルシステムとしてマウントする仕掛けがある。

qemu-nic または -netdev オプションには guestfwd= パラメータがあって、構文は以下の通り。

Terminal window
guestfwd=[tcp]:server:port-dev
guestfwd=[tcp]:server:port-cmd:command

また、上記オプションには tftp= パラメータもあり、これは qemu 組み込みTFTPサーバのルートとなるディレクトリを指定する。

Terminal window
tftp=dir

詳細はQEMU User Documentationに書いてある。

上記で挙げたパラメータを使うと、qemu 実行時にコマンドを起動できるようになっていて、u9fs を動作させる場合は以下のように記述する。

Terminal window
cd plan9/boot
qemu-system-x86_64 -netdev "user,id=net0,guestfwd=tcp:10.0.2.1:564-cmd:../sys/src/cmd/unix/u9fs/u9fs -a none -u $USER ..,tftp=.."

こうすると plan9 ディレクトリのソースコードを9pで提供するサーバが用意され、組み込みTFTPでカーネルも取得できるようになる。Russのスクリプトではカーネルを plan9/boot 以下にコミットしていたが、これらは次のスクリプトでビルドできる。

Terminal window
# pxeboot.raw
cd /usr/glenda/bin/rc
mkpxeboot

WIP ビルドスクリプトは以下にあって、カーネルと plan9.ini を組み込んだディスクイメージを作成している。u9fsがルートとなるので当然バイナリ類はビルドしておく必要がある。 https://github.com/rsc/plan9/commit/bca04326b9c2035259dc7dd12f6df12b3b987ec9