QEMU/KVMを使ったネットワークブートシステムのテスト環境

ネットワークブートシステムを構築するために Linuxカーネルや initramfs を作成しているとき、本物のハードウェアを使って実験していると再起動が面倒すぎてイヤになる。VMを使うのが次善策だが、BIOSの初期化には時間がかかる。
そこで qemulinuxカーネルを直接起動する機能を使うと、BIOSの初期化が速いので快適にテストできる。ブートローダーをインストールしたHDDイメージを用意しなくていいのも好都合。

kvm -kernel /path/to/vmlinuz -initrd /path/to/initramfs -append "kernel boot parameter" -hda /dev/zero


initramfsができたら、今度はそれをPXEでロードできるかどうかテストする必要がある。しかしうまくいかなかったとき、DHCPサーバーやtftpサーバーの設定に問題があるのか、NBP(pxelinuxなど)に問題があるのか分からなかったりする。
そこで qemu の仮想ネットワークのtftpサーバー機能とDHCPサーバー機能を使うと、問題の切り分けができる。

kvm -boot n -tftp /path/to/tftpboot -bootp /pxelinux.0

tftpサーバーを /path/to/tftpboot をルートに指定して起動し、dhcpd.conf で filename "/pxelinux.0" と設定した場合と同じように動く。


ここまで上手く動けば、あとはDHCPサーバーとtftpサーバーを設定すればOK。
既にDHCPサーバーが別のホストで動いているときは、pxe-pdhcpを使うと便利ですよ(宣伝