network boot from qemu
Qemu + gPXE + bootp + tftpでネットワークブートをしたいのだが、うまく行かない。
jupiter.coil.dom:/etc/bootptab
.default:\ :ht=1:sa=192.168.0.19:\ :hd=/i386:\ :bf=/pxeboot:\ :rp="192.168.0.19:/nfsroot/i386":\ :ds=192.168.0.10:\ :sm=255.255.255.0:\ :gw=192.168.0.1:\ :hn:\ :vm=rfc1048: io.coil.dom:tc=.default:\ :ha=0500048fd19c:\ :ip=192.168.0.35: moon.coil.dom:tc=.default:\ :ha=000ae422f9c6:\ :ip=192.168.0.14:
アドレスは、coil.domというドメインと仮定。
jupiter.coil.domの/tftpboot/i386にpxebootをおく。また、/nfsroot/i386以下にi386のディストリビューションを展開しておく。
jupiter.coil.dom:/nfsroot/i386/etc/disklessをつくる。
jupiter.coil.dom:/nfsroot/i386/confにbase、defaultをつくり、etcをコピーしておく。
jupiter.coil.dom:/nfsroot/i386/conf/192.168.0.14/etcに上書きファイルを作成。
% cd /nfsroot/i386/conf/192.168.0.14/etc/ % ls exports group motd pwd.db spwd.db fstab master.passwd passwd rc.conf ssh
実機PXE(ThinkPax X40)
基本的に、起動する。しかし、場合によっては、kernelを読み込んで、
Timecounter "TSC" frequency 1401316350 Hz quality 800 Timecounters tick every 1.000 msec
のところで止まる場合がある。その後、ad0のカーネルメッセージが出るはずのところなので、PCに問題があるのかもしれない。
Qemu
gPXEのisoイメージをhttp://rom-o-matic.net/から作成。bootpで起動するには、currentではなく、0.9.6を使うのがよいらしい。nicは"rtl8139:rtl8139"を選択。
% qemu -cdrom gpxe-0.9.6-rtl8139.iso -boot d -net nic,model=rtl8139,macaddr=05:00:04:8f:d1:9c -net tap,ifname=tap,script=no -serial stdio
で起動すると、bootpからIPアドレスをもらい、pxebootを起動して、kernelが起動する。しかし、
Trying to mount root from nfs:192.168.0.19:/nfsroot/i386 NFS ROOT: 192.168.0.19:/nfsroot/i386 re0: link state changed to UP
で、止まってしまう。
% qemu -hda disk.img -boot c -net nic,model=rtl8139 -net tap,ifname=tap,script=no -monitor stdio
としてハードディスクイメージから起動したFreeBSDからjupiter:/nfsroot/i386をマウントできるので、NFSに問題はないと思うのだが、確信がもてない。