Hide Forgot
Description of problem: When booting an unknown UEFI host with HTTPboot support (instead of PXE undi), DHCP doesn't respond with the URL to the grubx64.efi as it should, instead, it points to the "pxelinux.0"[|bootp]: # tcpdump -i eth1 -xXvn '((port 67 or port 68))' ### Client request: 06:59:08.013025 IP (tos 0x0, ttl 64, id 2098, offset 0, flags [none], proto UDP (17), length 368) 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 56:6f:0d:72:06:50, length 340, xid 0xdaaa569f, Flags [Broadcast] Client-Ethernet-Address 56:6f:0d:72:06:50 Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Discover MSZ Option 57, length 2: 1472 Parameter-Request Option 55, length 27: Subnet-Mask, Time-Zone, Default-Gateway, Time-Server IEN-Name-Server, Domain-Name-Server, Hostname, BS Domain-Name, RP, EP, RSZ TTL, BR, YD, YS NTP, Vendor-Option, Requested-IP, Lease-Time Server-ID, RN, RB, Vendor-Class Option 212, BF, GUID GUID Option 97, length 17: 0.94.124.8.164.87.223.182.65.130.9.202.143.153.235.4.233 NDI Option 94, length 3: 1.3.1 ARCH Option 93, length 2: 16 ========> Vendor-Class Option 60, length 33: "HTTPClient:Arch:00016:UNDI:003001" <========= ### Server response: 06:59:09.107131 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 339) 10.1.5.41.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 311, xid 0xdaaa569f, Flags [Broadcast] Your-IP 10.1.5.42 Server-IP 10.1.5.41 Client-Ethernet-Address 56:6f:0d:72:06:50 ========> file "pxelinux.0"[|bootp] <========= Version-Release number of selected component (if applicable): 6.8.0-8 How reproducible: Actual results: 06:59:09.107131 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 339) 10.1.5.41.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 311, xid 0xdaaa569f, Flags [Broadcast] Your-IP 10.1.5.42 Server-IP 10.1.5.41 Client-Ethernet-Address 56:6f:0d:72:06:50 file "pxelinux.0"[|bootp] Expected results: 07:11:08.491117 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 362) 10.1.5.41.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 334, xid 0x61131983, Flags [Broadcast] Your-IP 10.1.5.42 Server-IP 10.1.3.52 Client-Ethernet-Address 56:6f:0d:72:06:87 file "http://<sat fqdn>:8000/httpboot/grub2/grubx64.efi"[|bootp] Additional info:
Roman, can you test it with this change: Instead: if option architecture = 00:06 { filename "grub2/shim.efi"; } elsif option architecture = 00:07 { filename "grub2/shim.efi"; } elsif option architecture = 00:09 { filename "grub2/shim.efi"; } else { filename "pxelinux.0"; } Do this: class "httpclients" { match if substring (option vendor-class-identifier, 0, 9) = "HTTPClient"; if option arch = 00:0F { filename "https://proxy.example.com:8000/EFI/grub2/bootia32.efi"; } else if option arch = 00:10 { filename "https://proxy.example.com:8000/EFI/grub2/bootx64.efi"; } } class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 10.0.0.1; if exists user-class and option user-class = "iPXE" { filename "https://foreman.example.com:443/unattended/iPXE"; } else if option arch = 00:06 { filename "grub2/bootia32.efi"; } else if option arch = 00:07 { filename "grub2/bootx64.efi"; } else { filename "pxelinux.0"; } }
s/arch/architecture/g
THERE WAS A TYPO ABOVE, HERE IS CORRECTED VERSION: class "httpclients" { match if substring(option vendor-class-identifier, 0, 10) = "HTTPClient"; option vendor-class-identifier "HTTPClient"; if option architecture = 00:0F { filename "https://192.168.199.15:9090/EFI/grub2/bootia32.efi"; } else if option architecture = 00:10 { filename "https://192.168.199.15:9090/EFI/grub2/bootx64.efi"; } } class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 10.0.0.1; if exists user-class and option user-class = "iPXE" { filename "https://foreman.example.com:443/unattended/iPXE"; } else if option architecture = 00:06 { filename "grub2/bootia32.efi"; } else if option architecture = 00:07 { filename "grub2/bootx64.efi"; } else { filename "pxelinux.0"; } }
There is another typo, disregard all comments here is the up to date version: https://gist.github.com/lzap/8a3e7cfddf68991926eb268023f1709a
Upstream patch RFM and tested: https://github.com/theforeman/puppet-foreman_proxy/pull/611
Upstream bug assigned to ekohlvan@redhat.com
VERIFIED on sat6.8.0-14 the dhcp config is updated and the httpboot-clients correctly load the default template and load FDI correctly. tested the rest of the workflow and the provisioning works correctly as well.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (Important: Satellite 6.8 release), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2020:4366