UEFI HTTP Boot via grub2


I have finished series of patches to enable support for UEFI HTTP boot via grub2. Here is a short tutorial on how to test this, the remaining patch is in the final review stage and this should hit Foreman 1.24.

First step is to extract grubx64.efi from Fedora Rawhide, I tested with grub2-efi-x64-2.02-97.fc31.x86_64.rpm. Note grub2 from RHEL7 or RHEL8 or CentOS will not work. I was also not able to get this working with net directory structure created with grub2-mknetdir.

The second thing to remember is that dhcp.conf needs to have HTTPClient vendor class identifier. Our installer will set this up, verify it’s there:

if substring(option vendor-class-identifier, 0, 10) = "HTTPClient" {
  option vendor-class-identifier "HTTPClient";

Smart Proxy version develop or 1.24 is required because TFTP module now deploys grub2 configuration files both with : and - character separators. The regexp hack that was used did not work and this is also a cleaner solution to the problem.

Finally, a patch in Foreman core is required to correctly set HTTP or HTTPS port. Again, you must use Foreman develop or 1.24 or newer to have that. Make sure to perform Refresh Features action on all TFTP Smart Proxies to fetch latest capabilities and exposed settings.

The rest is easy - create a host with Grub2 UEFI HTTP(s) PXE loader and boot it. Note the warnings “unrecognised network address” and “Press a key to continue…”" - these can be safely ignored. No key need to be pressed, grub2 will continue booting as expected.

Related patches:

The remaining patch is:

Then I will record a screencast about how this all works.

Did you do a recording? If so, where can we find?

Oh probably not, check our channel if there was a demo but I don’t remember recently showing it:

It works in 2.1 (develop branch), I think 2.0 would work too (although I made few template changes mostly improvements). All you need is to use grub2 from Fedora Rawhide and select the correct PXE loader.

When I was testing 2.1 rc1 I was running into out of memory issue in grub2:


On IPv6 this is known to work.