QEMU/KVMを使ったネットワークブートシステムのテスト環境
ネットワークブートシステムを構築するために Linuxカーネルや initramfs を作成しているとき、本物のハードウェアを使って実験していると再起動が面倒すぎてイヤになる。VMを使うのが次善策だが、BIOSの初期化には時間がかかる。
そこで qemu のlinuxカーネルを直接起動する機能を使うと、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を使うと便利ですよ(宣伝