The EFI standard starts to amaze me more and more, even though I was against the EFI standard when it came out. But that’s not the topic here.

It’s inconvenient to download an ISO image, burning it on a USB stick with proprietary tools, putting it into the maschine you want to boot of, and finally realizing that something went wrong, so you have to redo this.

But the EFI standard to the quick & easy rescue! …

I was playing around with QEMU, the royal emulator by the king Fabrice Bellard, together with OVMF, the port of Intel’s Tianocore firmware. The ‘drivers’ command in the EFI shell told me there was an HTTP driver loaded.

As an apasionate networking guy, I was curious about what that tool could do, and why such high level techniques are available in such a low level environment. So I read the docs and as it turns out you can download your boot files from an HTTP server.

The EFI standard comes with a variety of options that can help you managing your maschine faster. No need to configure TFTP servers anymore and having them propagate via the DHCP server, that is not always configurable (e.g. in your corporation, or on your non-enterprise router), etc.

So I had to try this..

Booting the ISO image

I started qemu with the OVMF bios file and “entered the bios” (this term has to be redefined, because bios is dying out).

qemu-system-x86_64 -bios /usr/share/edk2/ovmf/OVMF.fd -boot menu=on

This starst QEMU with the OVMF firmware instead of the defualt SeaBIOS (the bios path may vary), and having it display a delay with ‘menu=on’, so I can “enter the bios” with by pressing F2.

HTTP Boot Configuration to tell where to get the image from

Then, entering the HTTP Boot Configuration menu, I put a url into the “Boot URI” that was available to my network – but you could enter the direct link to your favourite OS on the internet.

Save it by pressing F10.

Enabling DHCP to be able to access the network

To be able to access the network, we take it easy and let it be configured by DHCP automatically. OVMF does everything by itself.

Saving this by pressing F10 again.

Boot Manager, containing “UEFI HTTP” boot option

Entering the Boot Manager shows a new boot option: “UEFI HTTP”. Containing the configuration we did before (see on the right side).

By pressing Enter, the boot option is triggered..

Downloading the boot image

IT WORKS!! I never thought we were coming this far! The “BIOS” got an IP address for a network device, which has its own driver, and connected to a server via HTTP and is downloading an ISO file from a webserver.

That’s nuts!!!

The Ubuntu Server setup directly after the download

Then I was greeted by the Ubuntu Server installer, as if I had normally put a USB stick in and started the computer. That’s amazing!

This is what I always wanted: Not having to have X USB sticks around and burning images to it. Just put the ISO images on the web server and start them from it.

The backdraws

But there is still one big backdraw, which I’m currently figuring out:

Ubuntu Setup canceling with an error: No CD-ROM found

The Ubuntu Server setup cannot find the “CD-ROM” to mount it. That would have worked with an USB stick, though, but I don’t know how the EFI bios handles the situation.

But there are some more backdraws, sadly:

Not every EFI firmware has this HTTP download option. Not every manufacturer is interested into implementing new features without having to do so.

Not every operating system setup seems to like the way the EFI firmware is providing the ISO image to the system. But I’m currently figuring it out – I hope so.

In the future there will be better support, I guess. Never having to use TFTP or flashing USB sticks anymore sounds gratifying.

Update #1

Using the netboot ISO for Ubuntu Server works with the EFI HTTP Boot method. That image does not rely on mounting the ISO for packages to install. The packages will be downloaded from the respective repos.