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 ---

Reply via email to