Your message dated Sun, 22 Jun 2025 12:25:15 +0200
with message-id <[email protected]>
and subject line ipxe-qemu: iPXE no longer works with libvirt, closing
has caused the Debian Bug report #1107267,
regarding ipxe-qemu: iPXE no longer works with libvirt
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
1107267: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1107267
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: ipxe-qemu
Version: 1.21.1+git20250501.dad20602+dfsg-1
Severity: important
Dear Maintainer,
iPXE support no longer appears to be available for network booting of
virtual machines.
For example, a functional libvirt domain definition using
http://boot.netboot.xyz under Bookworm with version
1.0.0+git-20190125.36a4c85-5.1 no longer works: no iPXE boot and
therefore no HTTP requests to network boot are made.
See the attached netboot_test.sh file to reproduce my test.
If I manually install the bookworm version (1.0.0+git-20190125.36a4c85-5.1)
on trixie, the same test becomes functional again, and network booting via
HTTP on http://boot.netboot.xyz works as expected.
This appears to be a significant regression.
-- System Information:
Debian Release: 13.0
APT prefers trixie
APT policy: (500, 'trixie')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 6.12.27-amd64 (SMP w/16 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE,
TAINT_UNSIGNED_MODULE
Locale: LANG=C.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to
C.UTF-8), LANGUAGE=C.UTF-8
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
-- no debconf information
#!/bin/sh
export LIBVIRT_DEFAULT_URI=qemu:///system
for dir in /tmp/storage_pool /tmp/www; do
if [ -d "$dir" ]; then rm -rf "$dir" && printf '%s removed' "$dir"; fi
done
# A basic HTTP server will be used to serve /tmp/www at http://10.42.42.1:8080
mkdir -p /tmp/www
cat <<EOF >/tmp/www/master.ipxe
#!ipxe
isset ip || set server-ip 10.42.42.1
imgfree
:MENU
menu
item exit Exit iPXE and continue BIOS boot
item --gap -- --------------- iPXE Install Menu ---------------
item bootlocal Boot from local
disk
item netboot Netboot XYZ iPXE
menu
item shell iPXE Shell
item hostinfo Computer
Informations
item --gap -- -------------------------------------------------
choose --default netboot --timeout 1000 target && goto \${target}
:bootlocal
sanboot --no-describe --drive 0x80 || goto MENU
:netboot
chain --autofree http://boot.netboot.xyz
:shell
shell ||
goto MENU
:hostinfo
echo ||
echo ||
echo MAC address: \${net0/mac} ||
echo IP address: \${ip} ||
echo Netmask: \${netmask} ||
echo Serial: \${serial} ||
echo Asset number: \${asset} ||
echo Manufacturer: \${manufacturer} ||
echo Product: \${product} ||
echo BIOS platform: \${platform} ||
echo ||
echo Press [Esc] to go back ||
prompt
goto MENU
:exit
exit
EOF
cat <<EOF >/tmp/www/ipxe_test_net-create_dump.xml
<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
<dnsmasq:options>
<dnsmasq:option value='log-queries'/>
<dnsmasq:option value='log-dhcp'/>
<dnsmasq:option value='log-debug'/>
</dnsmasq:options>
<name>virtual-pxebridge4242</name>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virpxebr4242' stp='on' delay='0'/>
<mac address='52:54:00:00:42:00'/>
<ip address='10.42.42.1' netmask='255.255.255.0'>
<dhcp>
<range start='10.42.42.100' end='10.42.42.200'/>
<host mac='52:54:00:00:42:42' name='foo' ip='10.42.42.101'/>
<bootp file='http://10.42.42.1:8080/master.ipxe'/>
</dhcp>
</ip>
</network>
EOF
virsh net-create /tmp/www/ipxe_test_net-create_dump.xml --validate
# Creating storage pool path
mkdir -p /tmp/storage_pool
cat <<EOF >/tmp/www/ipxe_test_pool-create_dump.xml
<pool type='dir'>
<name>storage-pool4242</name>
<source>
</source>
<target>
<path>/tmp/storage_pool</path>
</target>
</pool>
EOF
virsh pool-create /tmp/www/ipxe_test_pool-create_dump.xml
cat <<EOF >/tmp/www/ipxe_test_vol-create_dump.xml
<volume type='file'>
<name>foo-root-disk.qcow2</name>
<key>/tmp/storage_pool/foo-root-disk.qcow2</key>
<capacity unit='k'>4194304</capacity>
<target>
<path>/tmp/storage_pool/foo-root-disk.qcow2</path>
<format type='qcow2'/>
</target>
</volume>
EOF
virsh vol-create storage-pool4242 /tmp/www/ipxe_test_vol-create_dump.xml
cat <<EOF >/tmp/www/ipxe_test_define_dump.xml
<domain type='kvm'>
<name>foo</name>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='auto'>2</vcpu>
<numatune>
<memory mode='strict' placement='auto'/>
</numatune>
<os firmware='efi'>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
<boot dev='cdrom'/>
<boot dev='network'/>
<bootmenu enable='yes' timeout='3000'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu mode='host-passthrough' check='none'>
<model fallback='forbid'>qemu64</model>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/tmp/storage_pool/foo-root-disk.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
</disk>
<controller type='usb' index='0' model='piix3-uhci'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01'
function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<interface type='bridge'>
<mac address='52:54:00:00:42:42'/>
<source bridge='virpxebr4242'/>
<target dev='brtap4242'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
</interface>
<input type='mouse' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='keyboard' bus='usb'>
<address type='usb' bus='0' port='2'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<input type='tablet' bus='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/>
</input>
<graphics type='vnc' port='-1' autoport='yes' keymap='en-us'>
<listen type='address'/>
</graphics>
<audio id='1' type='none'/>
<video>
<model type='virtio' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='builtin'/>
</rng>
</devices>
</domain>
EOF
virsh define /tmp/www/ipxe_test_define_dump.xml --validate
virsh start foo
__tear_down() {
virsh net-destroy virtual-pxebridge4242 2>/dev/null || true
virsh pool-destroy storage-pool4242 2>/dev/null || true
virsh destroy foo 2>/dev/null || true
virsh undefine foo --nvram 2>/dev/null || true
rm -f /tmp/storage_pool/foo-root-disk.qcow2 2>/dev/null || true
rm -rf /tmp/{www,storage_pool} 2>/dev/null || true
}
trap __tear_down EXIT QUIT INT TERM
printf '\e[1;31mHit Crtl-C to stop HTTP server\e[0m\n'
# Basic HTTP server used to serve /tmp/www at http://10.42.42.1:8080
caddy file-server --browse --listen 10.42.42.1:8080 --root /tmp/www || true
--- End Message ---
--- Begin Message ---
Hi Miao Wang
Chainloading with the following options in the provided script works.
<dnsmasq:option value='enable-tftp'/>
<dnsmasq:option value='tftp-root=/usr/lib/ipxe'/>
<dnsmasq:option value='dhcp-match=set:ipxe,175'/>
<dnsmasq:option value='dhcp-boot=tag:!ipxe,snponly.efi'/>
Thanks for your explanation, this is no longer an issue for me.
Cheers.
--
. Laurent Vallar
..: 4096R/0x57F18A3B8D194625
--- End Message ---