[gPXE] Boot ordering problem with qemu-kvm / seabios / gPXE

Andrew Bobulsky rulerof at gmail.com
Thu Sep 29 07:55:38 EDT 2011


Hello Romain,

It's very likely that your VM is behaving correctly, and loading the option
ROM from the second NIC.  What's happening here is that the BIOS of your VM
is passing control over to gPXE, loaded from the [correct] NIC ROM, but gPXE
isn't aware of which NIC it was loaded from.  As a result, it enumerates the
available devices, and then tries to boot from them in the order that
they're discovered.

Chances are good that your easiest fix in this scenario would be to change
the PCI device order such that your desired NIC is enumerated first, if KVM
will let you do that. Otherwise, a small embedded script that specifically
boots "net1" (instead of "net0," as it is now) and the filename or root path
given to that NIC by DHCP will do the job for you.

Best Regards,
Andrew Bobulsky

On Sep 29, 2011, at 5:34 AM, Romain Vrignaud <romain at yakaz.com> wrote:

Hello everybody.

I'm actualy experiencing some problem for ordering my VM boot with qemu-kvm
/ Seabios and gPXE.
I use libvirt's per-device boot option which launch my VM with this options
:

You can find libvirt's xml there :  http://pastebin.com/bqizkLiZ
--
/usr/bin/kvm -S -M pc-0.14 -enable-kvm -m 2048 -smp
1,maxcpus=3,sockets=3,cores=1,threads=1 -name vm-name
-uuid 32b5bf0d-fe46-2edb-b0d9-c134ba8a7636
-nodefconfig
-nodefaults
-chardev
socket,id=charmonitor,path=/var/lib/libvirt/qemu/vm-name.monitor,server,nowait
-mon chardev=charmonitor,id=monitor,mode=control
-rtc base=utc -drive
file=/var/lib/libvirt/images/ploop2.img,if=none,id=drive-virtio-disk0,format=raw
-device
virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0
-drive
file=/var/lib/libvirt/images/vm-name.img,if=none,id=drive-virtio-disk1,format=raw
-device
virtio-blk-pci,bus=pci.0,addr=0x6,drive=drive-virtio-disk1,id=virtio-disk1
-netdev tap,fd=23,id=hostnet0
-device
rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:28:ca:e5,bus=pci.0,addr=0x3,bootindex=2
-netdev tap,fd=24,id=hostnet1
-device
rtl8139,netdev=hostnet1,id=net1,mac=52:54:00:28:ca:e6,bus=pci.0,addr=0x4,bootindex=1
-chardev pty,id=charserial0 -device
isa-serial,chardev=charserial0,id=serial0
-usb -vnc 127.0.0.1:1
-k en-us -vga cirrus
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7

--

We see the right bootindex option as I want to boot on gPXE from my second
NIC (mac=52:54:00:28:ca:e6).
The problem is that during my VM boot process, seabios initialise gPXE for
my 2 NIC.
But then gPXE try to boot (DHCP request) on the first NIC rather than on the
second one.

It always try to boot first on the first PCI device (00:03.0 instead of
00:04.0).

I don't really know if the problem comes from gPXE or Seabios but I have
exactly the same problem when I try with Ubuntu's etherboot rom.


I got this problem with Ubuntu latest qemu-kvm
(0.14.1+noroms-0ubuntu3.11.04.1) / seabios (0.6.2-0ubuntu1) and etherboot
(5.4.4-7ubuntu2) and Fedora qemu-kvm (qemu-kvm-0.15.0-4.fc15.x86_64) /
Seabios (seabios-bin-0.6.2-2.fc15.noarch)  and gPXE
(gpxe-roms-qemu-1.0.1-4.fc15.noarch).

I also recompiled latest Seabios (pre-0.6.3-20110929) trunk and gPXE
(1.0.1+) from Git : the behaviour is exactly the same. I tried with
different NIC driver (virtio and rtl8139) with also same behavior.

Do you have any idea where my problem can come from ?

Thanks in advance for any advice.

Regards,

Romain Vrignaud

_______________________________________________
gPXE mailing list
gPXE at etherboot.org
http://etherboot.org/mailman/listinfo/gpxe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://etherboot.org/pipermail/gpxe/attachments/20110929/7db2dbda/attachment.html>


More information about the gPXE mailing list