Russ Coxのboot/qemuスクリプト
Russが tailscale をPlan 9に移植する手伝いをしたとき、boot/qemu という起動スクリプトが追加された。これは qemu でPlan 9を実行するための簡易なものだが、ソースコードを u9fs でルートファイルシステムとしてマウントする仕掛けがある。
QEMUのオプション
Section titled “QEMUのオプション”qemu の -nic または -netdev オプションには guestfwd= パラメータがあって、構文は以下の通り。
guestfwd=[tcp]:server:port-devguestfwd=[tcp]:server:port-cmd:commandまた、上記オプションには tftp= パラメータもあり、これは qemu 組み込みTFTPサーバのルートとなるディレクトリを指定する。
tftp=dir詳細はQEMU User Documentationに書いてある。
どうやっているのか
Section titled “どうやっているのか”上記で挙げたパラメータを使うと、qemu 実行時にコマンドを起動できるようになっていて、u9fs を動作させる場合は以下のように記述する。
cd plan9/bootqemu-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 以下にコミットしていたが、これらは次のスクリプトでビルドできる。
# pxeboot.rawcd /usr/glenda/bin/rcmkpxebootWIP ビルドスクリプトは以下にあって、カーネルと plan9.ini を組み込んだディスクイメージを作成している。u9fsがルートとなるので当然バイナリ類はビルドしておく必要がある。 https://github.com/rsc/plan9/commit/bca04326b9c2035259dc7dd12f6df12b3b987ec9