[GH-ISSUE #1632] UEFI version of netboot.xyz doesn't load local-vars.ipxe #551

Closed
opened 2026-02-27 14:52:11 +03:00 by kerem · 2 comments
Owner

Originally created by @egzakharovich on GitHub (Jun 2, 2025).
Original GitHub issue: https://github.com/netbootxyz/netboot.xyz/issues/1632

[x]: This bug persists when memory is increased beyond 8GB.

Describe the bug

netboot.xyz.efi doesn't load local-vars.ipxe, while netboot.xyz.kpxe (for legacy BIOS) does.

To Reproduce

  1. Set DHCP configuration to send different 67 option based on option 60
  2. Modify local-vars.ipxe from webapp. Set, for example, live_endpoint
  3. Boot BIOS-based device or Virtual Machine over network. Check echo ${live_endpoint} in iPXE shell
  4. Boot UEFI-based device or Virtual Machine over network. Check echo ${live_endpoint} in iPXE shell

Expected behavior
Both BIOS-based and UEFI-based machines will have live_endpoint set to local server.

But in reality, it does not.

TFTP logs from BIOS boot

2025-06-02 11:48:32 err dnsmasq-tftp[34]: error 0 TFTP Aborted received from 192.168.100.70
2025-06-02 11:48:32 info dnsmasq-tftp[34]: sent /config/menus/netboot.xyz.kpxe to 192.168.100.70
2025-06-02 11:48:45 info dnsmasq-tftp[34]: sent /config/menus/local-vars.ipxe to 192.168.100.70
2025-06-02 11:48:45 err dnsmasq-tftp[34]: file /config/menus/MAC-00155dd03907.ipxe not found for 192.168.100.70
2025-06-02 11:48:45 info dnsmasq-tftp[34]: sent /config/menus/menu.ipxe to 192.168.100.70
2025-06-02 11:48:45 info dnsmasq-tftp[34]: sent /config/menus/boot.cfg to 192.168.100.70

It does request local-vars.ipxe. And the variable is set correctly

Image

TFTP logs from UEFI boot

2025-06-02 12:04:10 err dnsmasq-tftp[34]: error 8 User aborted the transfer received from 192.168.100.73
2025-06-02 12:04:10 info dnsmasq-tftp[34]: sent /config/menus/netboot.xyz.efi to 192.168.100.73
2025-06-02 12:04:10 err dnsmasq-tftp[34]: file /config/menus/autoexec.ipxe not found for 192.168.100.73

It checks for weird autoexec.ipxe, but not for local-vars.ipxe. Does not load the menu.ipxe from server. Loads it from boot.netboot.xyz instead.

And the live_endpoint

Image

I've tried to create autoexec.ipxe with contents of local-vars.ipxe and it didn't work.

Same thing happens with netboot.xyz-snp.efi.

And same thing happens on machines with metal UEFI and over 8GB of RAM.

Originally created by @egzakharovich on GitHub (Jun 2, 2025). Original GitHub issue: https://github.com/netbootxyz/netboot.xyz/issues/1632 [x]: This bug persists when memory is increased beyond 8GB. <!-- Please validate that the issue is not a symptom of insufficient memory. Many installation media are based on live-cd images that require more than a few MB/GB of memory to run. --> **Describe the bug** `netboot.xyz.efi` doesn't load `local-vars.ipxe`, while `netboot.xyz.kpxe` (for legacy BIOS) does. **To Reproduce** 1. Set DHCP configuration to send different 67 option based on option 60 2. Modify `local-vars.ipxe` from webapp. Set, for example, `live_endpoint` 3. Boot BIOS-based device or Virtual Machine over network. Check `echo ${live_endpoint}` in iPXE shell 4. Boot UEFI-based device or Virtual Machine over network. Check `echo ${live_endpoint}` in iPXE shell **Expected behavior** Both BIOS-based and UEFI-based machines will have `live_endpoint` set to local server. But in reality, it does not. TFTP logs from BIOS boot ``` 2025-06-02 11:48:32 err dnsmasq-tftp[34]: error 0 TFTP Aborted received from 192.168.100.70 2025-06-02 11:48:32 info dnsmasq-tftp[34]: sent /config/menus/netboot.xyz.kpxe to 192.168.100.70 2025-06-02 11:48:45 info dnsmasq-tftp[34]: sent /config/menus/local-vars.ipxe to 192.168.100.70 2025-06-02 11:48:45 err dnsmasq-tftp[34]: file /config/menus/MAC-00155dd03907.ipxe not found for 192.168.100.70 2025-06-02 11:48:45 info dnsmasq-tftp[34]: sent /config/menus/menu.ipxe to 192.168.100.70 2025-06-02 11:48:45 info dnsmasq-tftp[34]: sent /config/menus/boot.cfg to 192.168.100.70 ``` It does request local-vars.ipxe. And the variable is set correctly ![Image](https://github.com/user-attachments/assets/22a961d7-953e-41b2-8e31-4b9ab842afb4) TFTP logs from UEFI boot ``` 2025-06-02 12:04:10 err dnsmasq-tftp[34]: error 8 User aborted the transfer received from 192.168.100.73 2025-06-02 12:04:10 info dnsmasq-tftp[34]: sent /config/menus/netboot.xyz.efi to 192.168.100.73 2025-06-02 12:04:10 err dnsmasq-tftp[34]: file /config/menus/autoexec.ipxe not found for 192.168.100.73 ``` It checks for weird `autoexec.ipxe`, but not for `local-vars.ipxe`. Does not load the `menu.ipxe` from server. Loads it from `boot.netboot.xyz` instead. And the `live_endpoint` ![Image](https://github.com/user-attachments/assets/93c665fe-1eba-4158-96e3-7c72aa436b30) I've tried to create `autoexec.ipxe` with contents of `local-vars.ipxe` and it didn't work. Same thing happens with `netboot.xyz-snp.efi`. And same thing happens on machines with metal UEFI and over 8GB of RAM.
kerem 2026-02-27 14:52:11 +03:00
  • closed this issue
  • added the
    bug
    label
Author
Owner

@egzakharovich commented on GitHub (Jun 2, 2025):

Also forgot to mention I'm using menus version 2.0.87 with official container ghcr.io/netbootxyz/netbootxyz

<!-- gh-comment-id:2930594900 --> @egzakharovich commented on GitHub (Jun 2, 2025): Also forgot to mention I'm using menus version `2.0.87` with official container `ghcr.io/netbootxyz/netbootxyz`
Author
Owner

@egzakharovich commented on GitHub (Jun 4, 2025):

I think I resolved it myself.

Not sure why BIOS version worked well, while UEFI version struggled.

Make sure your DHCP server returns all 3 options necessary for PXE booting. Next-server, option 66 and option 67.

For example, on my Keenetic, I found out, I omitted option 66:

ip dhcp class pxe_86
    option 60 ascii PXEClient:Arch:00000:UNDI:002001
!
ip dhcp class pxe_efi_1
    option 60 ascii PXEClient:Arch:00007:UNDI:003000
!
ip dhcp class pxe_efi_2
    option 60 ascii PXEClient:Arch:00007:UNDI:003016
!

ip dhcp pool _WEBADMIN
    class pxe_86
        option 67 ascii netboot.xyz.kpxe
    !
    class pxe_efi_1
        option 67 ascii netboot.xyz.efi
    !
    class pxe_efi_2
        option 67 ascii netboot.xyz.efi
    !
    
    ! ...
    
    next-server 192.168.100.100
    enable

I had altered the configuration, to send all 3 options in all 3 classes explicitly and removed implicit next-server in root pool configuration.

ip dhcp pool _WEBADMIN
    no next-server
    no option 66
    no option 67
    class pxe_86
        next-server 192.168.100.100
        option 66 ascii 192.168.100.100
        option 67 ascii netboot.xyz.kpxe
    !
    class pxe_efi_1
        next-server 192.168.100.100
        option 66 ascii 192.168.100.100
        option 67 ascii netboot.xyz.efi
    !
    class pxe_efi_2
        next-server 192.168.100.100
        option 66 ascii 192.168.100.100
        option 67 ascii netboot.xyz.efi
    !
!

And I confirmed that it worked in virtual machine.

<!-- gh-comment-id:2941139971 --> @egzakharovich commented on GitHub (Jun 4, 2025): I think I resolved it myself. Not sure why BIOS version worked well, while UEFI version struggled. Make sure your DHCP server returns all 3 options necessary for PXE booting. Next-server, option 66 and option 67. For example, on my Keenetic, I found out, I omitted option 66: ``` ip dhcp class pxe_86 option 60 ascii PXEClient:Arch:00000:UNDI:002001 ! ip dhcp class pxe_efi_1 option 60 ascii PXEClient:Arch:00007:UNDI:003000 ! ip dhcp class pxe_efi_2 option 60 ascii PXEClient:Arch:00007:UNDI:003016 ! ip dhcp pool _WEBADMIN class pxe_86 option 67 ascii netboot.xyz.kpxe ! class pxe_efi_1 option 67 ascii netboot.xyz.efi ! class pxe_efi_2 option 67 ascii netboot.xyz.efi ! ! ... next-server 192.168.100.100 enable ``` I had altered the configuration, to send all 3 options in all 3 classes explicitly and removed implicit next-server in root pool configuration. ``` ip dhcp pool _WEBADMIN no next-server no option 66 no option 67 class pxe_86 next-server 192.168.100.100 option 66 ascii 192.168.100.100 option 67 ascii netboot.xyz.kpxe ! class pxe_efi_1 next-server 192.168.100.100 option 66 ascii 192.168.100.100 option 67 ascii netboot.xyz.efi ! class pxe_efi_2 next-server 192.168.100.100 option 66 ascii 192.168.100.100 option 67 ascii netboot.xyz.efi ! ! ``` And I confirmed that it worked in virtual machine.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/netboot.xyz#551
No description provided.