Taking the x86 pxelinux.0 from /usr/lib/PXELINUX/pxelinux.0 and otherwise doing the same tftp setup as in [1] and switching from the "maas" to the "default" network where I have set up dhcp to netboot by libvirt as in [1]. I can see netboot happening. With that instead of pushing things from libvirt via kernel/initrd tags I now provide it via PXE similar to your config. TL;DR - tftp serves: lpxelinux.0 + pxe modules + PXEconfig - nginx serves: kernel/initrd/squashfs - qemu started directly without libvirt Still gets the inintial kernel booting fine and then failing to mount the squash: mount: mounting squash:http://192.168.122.1:80/squashfs on /root failed: No such device I can from the initramfs mount it: (initramfs) wget http://192.168.122.1:80/squashfs Connecting to 192.168.122.1:80 (192.168.122.1:80) squashfs 100% |*******************************| 174M 0:00:00 ETA (initramfs) mount -t squashfs squashfs /root/ It is mounted just fine: /dev/loop0 on /root type squashfs (ro,relatime) It is possible that I'm back at the same ordering issue that I had of the IP coming up too late to mount the squashfs, but later works fine. I mounted it with 2047/2048/2049 mb gusts without a problem. Despite all work on this I'd still need a better reproducer :-/ I might take a look at rebuilding a more verbose initramfs for that after lunch. --- config details --- $ find /srv/tftp/ /srv/tftp/ /srv/tftp/squashfs /srv/tftp/boot-kernel /srv/tftp/ldlinux.c32 /srv/tftp/lpxelinux.0 /srv/tftp/pxelinux.cfg /srv/tftp/pxelinux.cfg/01-52-54-00-3b-72-0a /srv/tftp/boot-initrd Kernel/initrd/squash as described in comment #18 # modified to get scrollable direct console (but no iPXE VGA output) #!/bin/bash /usr/bin/qemu-system-x86_64 -name guest=horsea-kvm-pod-2047,debug-threads=on -machine pc-i440fx-bionic,accel=kvm,usb=off,dump-guest-core=off -m 2047 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -cpu kvm64 -rtc base=utc -no-shutdown \ \ -nographic -serial mon:stdio \ \ -drive file=/var/lib/uvtool/libvirt/images/d9658e2f-d4c7-4a55-8ecc-b216612fe410,format=raw,if=none,id=drive-virtio-disk0 \ -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,serial=d9658e2f-d4c7-4a55-8ecc-b216612fe410 \ \ -boot order=n,strict=on \ \ -net bridge,br=virbr0,helper=/usr/lib/qemu/qemu-bridge-helper -net nic,model=virtio,macaddr=52:54:00:3b:72:0a # For access to the iPXE / lpxelinux graphical output #-curses \ #-chardev stdio,mux=on,id=charserial0,logfile=/tmp/test.log \ #-serial chardev:charserial0 \ #-mon chardev=charserial0,mode=readline \ # For access to a scrollable direct console and monitor # -nographic -serial mon:stdio $ cat /srv/tftp/pxelinux.cfg/default DEFAULT execute LABEL execute SAY Booting under MY direction... KERNEL http://192.168.122.1:80/boot-kernel INITRD http://192.168.122.1:80/boot-initrd APPEND console=ttyS0 nomodeset ro root=squash:http://192.168.122.1:80/squashfs ip=::::horsea-kvm-pod-2047:BOOTIF ip6=off overlayroot=tmpfs overlayroot_cfgdisk=disabled apparmor=0 IPAPPEND 2 [1]: http://ubuntu-on-big-iron.blogspot.com/2017/12/pxe-netboot-kvm-s390x.html