bobuhiro11/gokvm - GitHub

はじめに

gokvm開発 1 2 3 4 5 6 の続き。

前回までに紹介したとおり virtio-blk と virtio-net に対応したことで、仮想マシンが外部とIOを通してやり取りができるようになった。 今回は initrd を busybox ベースから u-root ベースへと変更したので、それについて述べていく。

0d89a47f u-rootベースの initrd の導入

Go言語で作られたVMMには、同じくGo言語で書かれた initrd が相応しいのではないかということで、Pull Requestをもらった。 1コマンドで成果物を生成でき、busyboxと比べると手順が少なく簡単な印象を受けた。

cb504d85 u-rootベースのinitrdをデフォルトとする

u-rootによるinitrdをしばらく触ってみると自分のやりたいことはこなせるだろうという感触を持ったので、デフォルトとした。ただ、busyboxでは特に意識せずできていたことが u-root ではできないことがあった。例えば以下のもの。

  • ctrl-lやctrl-eでシェル内カーソル移動を行うために、clearやticコマンドに加えて terminfo ファイルが必要だった。
  • ゲストの起動時に、NIC・ファイルシステムの初期化やHTTPサーバの起動のために、それを記載したスクリプトファイルを /bin/uinit に配置したが、デーモンが途中でkillされるような挙動になってしまった。init関連の挙動に対する自分の理解が甘いのだと思う。しょうがないのでワークアラウンドとして .bashrc に記載した。

終わりに

この他にもいくつかリファクタリングを実施した。 今回はVMMらしい変更はなかった。今後はマイグレーションをやっていきたい。


  1. KVMを使ったVMMを自作してLinuxを起動するまでの記録 ↩︎

  2. KVMを使ったVMMを自作してLinuxを起動するまでの記録2 ↩︎

  3. KVMを使った自作VMMのSMP対応 ↩︎

  4. 自作VMMの PCI デバイス対応 ↩︎

  5. 自作VMM の virtio-net 対応 ↩︎

  6. 自作VMM の virtio-blk 対応 ↩︎