we are trying UEFI HTTP boot and it looks like grub2 from rawhide/f29 don't like explicit port in the URL. For example: http://220.127.116.11:8000/EFI/blah.efi
Errors on screen are: unrecognized network address
I believe the two errors the customer was seeing are coming from different areas of the grub2 code base. The unrecognised network address error is coming from a function that checks if it's an IPv6 IP since it needs to be formatted differently (e.g. http://[IPv6 IP]) than if it were IPv4. Unfortunately that function always emits an error to the console when dealing with IPv4 addresses, which should probably be suppressed and IMHO is a valid bug.
But EFI should handle the different port just fine (I think). The second error indicates it did make it to the code where we are sending an HTTP request, but the EFI system call returns an error code (there are two shown - 0x9 and 0x2). 9 is "EFI_OUT_OF_RESOURCES" and 2 is "EFI_INVALID_PARAMETER". I'm not sure what those mean. Do we know the server is running new firmware? Also - is that a VM or hardware? If a VM, a tcpdump from the hypervisor would be really great.
So we tried to move the EFI file to http server with port 80 and the IP error is gone, now we are looking at:
grub-core/net/http.c:234: Fail to send a request! status=0x12
grub-core/net/http.c:234: Fail to send a request! status=0x2
Looking into the codebase 0x12 seems to be GRUB_EFI_TIMEOUT and 0x2 is GRUB_EFI_INVALID_PARAMETER.
Created attachment 1515347 [details]
pcap from the comm
The customer tried to boot both grubx64.efi (embedded) and x86_64/core.efi created with only "http" module. New error appeared:
grub-core/kern/dl.c:257 ELF header smaller than expected
We have two pcap files with network dump. Attached.
From what I see in the packet dump: grub2 gets downloaded but I don't see anything else. So it's failing before it makes any more network requests, I think.
But at least they have a grub2 recovery shell - can we see the environment variables? You can run 'set' in there. It might be multiple pages - I'm mostly interested in seeing $root, $fw_path, and $http_path.
Actually from grub2 rescue, could you do:
Ideally, over a serial console to capture everything.
Looks like the computer don't have physical serial connector: https://www.men.de/products/cpu-boards-1/f26l/