Managing EFI Boot Loaders for Linux:
Using gummiboot

by Rod Smith, rodsmith@rodsbooks.com

Originally written: 11/5/2012; last update: 4/27/2013

I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!

Donate $1.00 Donate $2.50 Donate $5.00 Donate $10.00 Donate another value
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal

This page is part of my Managing EFI Boot Loaders for Linux document. If a Web search has brought you to this page, you may want to start at the beginning.

The gummiboot boot manager's name is German for rubber boat. It is, like rEFIt and rEFInd, a boot manager, not a boot loader; you can use gummiboot to select which OS to boot or to launch a 3.3.0 or later kernel, but not to launch another OS's kernel.

When to Use gummiboot

Compared to rEFIt and rEFInd, gummiboot is a very simple boot manager. It has no GUI (it's a text-mode program), it can't auto-detect Linux boot loaders, and it can't launch BIOS-mode boot loaders, for instance. This simplicity can be a turn-off for those who want "eye candy" or who need certain advanced features; but it's a boon for those who want simplicity.

Because gummiboot is a boot manager and not a boot loader, you'll need to use a separate boot loader to launch Linux. In practice, this could well be the EFI stub loader, though, making gummiboot a good substitute for ELILO, GRUB Legacy, or GRUB 2 if you're using a 3.3.0 or later kernel.

gummiboot is a rather new program. It is, as of April of 2013, sparsely documented. Its simplicity, however, means that it requires relatively little in the way of documentation. Familiarity with the basic principles of Linux boot loader configuration, as exemplified by LILO, ELILO, or GRUB, will be helpful in setting up gummiboot.

One particular deficit of gummiboot is that it includes no Secure Boot support. Even when launched from the shim program, it will be unable to launch other boot loaders unless those follow-on programs have been signed with the platform's key—that is, shim is useless except to launch gummiboot itself. You should have better luck using gummiboot in conjunction with the signed binary version of the Linux Foundation's PreBootloader. See the page on Secure Boot for more information on how to deal with Secure Boot.

Installing gummiboot

Recent versions of gummiboot include an installation program, confusingly called gummiboot. If you install a binary package of gummiboot, you should be able to type gummiboot --path /boot/efi install to handle the installation, or gummiboot --path /boot/efi update to update an existing installation. (Change the option to the --path variable if the ESP is not mounted at /boot/efi.) Of course, you can install manually if you prefer, as described in EFI Boot Loader Installation.

The preceding paragraph referred to installing a binary gummiboot package. Unfortunately, the developers don't make such a package available, at least not as of January of 2013. A Web search has turned up a few binary packages:

If you prefer, or if you're using a non-x86-64 platform, you can compile gummiboot from source code. The git download command is git clone git://anongit.freedesktop.org/gummiboot. You must have git installed for this to work. You'll also have to install the GNU-EFI package. I haven't tested gummiboot compilation on anything but the x86-64 platform; it may be that you'll need to make some changes on other architectures.

Configuring gummiboot

gummiboot uses a series of configuration files. The first is a global configuration file called loader/loader.conf on the ESP (typically /boot/efi/loader/loader.conf under Linux). Note that this file does not reside in the same directory as the gummiboot.efi file unless you place it in an odd location for an EFI boot loader (namely, the loader directory on the ESP). The loader.conf file supports just two options: timeout to set a timeout value and default to set a default boot option. An example looks like this:

timeout 10
default fedora-*

gummiboot automatically detects a few boot loaders and programs:

Beyond these entries, you must create entries for Linux kernels or other boot loaders by creating configuration files whose names end in .conf in the ESP's loader/entries directory. For instance, you might create files called loader/entries/fedora.conf and loader/entries/custom-kernel.conf. These files include keywords to set a title (title), to launch a non-Linux EFI program (efi), to launch a Linux kernel with EFI stub support (linux), to pass options to a Linux kernel or other EFI program (options), and to specify an initial RAM disk (initrd). An example looks something like this:

title   Fedora 17
linux   /vmlinuz-3.5.2-3.fc17.x86_64
initrd  /initramfs-3.5.2-3.fc17.x86_64.img
options ro root=/dev/sda7 quiet

You should include only one definition per configuration file in loader/entries; each file generates one menu entry. Thus, a system with many kernels or OSes will have several configuration files; but distributions should be able to maintain their configurations without stepping on each others' toes. In fact, that's part of the point of gummiboot and the associated boot loader specification: With gummiboot installed, all distributions can manage their own boot loader entries merely by dropping configuration files into a standard directory.

gummiboot enables you to adjust some of its defaults by setting EFI variables stored in NVRAM. Some keys, such as d (set the default option), + (increase the timeout), and - (decrease the timeout), enable you to adjust these options from within gummiboot. Others can be accessed from directories called /sys/firmware/efi/*-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f, where * is a variable name, such as LoaderTicksInit. The gummiboot Web page describes the meaning of these variables. A text-mode or GUI utility to adjust these variables from Linux would be useful, but does not yet exist, as far as I know.

Using gummiboot

When gummiboot is launched, you'll see a text-mode list of boot options, as shown here:


gummiboot presents a simple text-based menu of boot options.

As you might expect, you can move the selection around by using the arrow keys and launch your selection by pressing the Enter key. Typing e starts a line editor with which you can edit your boot options, q quits from gummiboot, v shows the gummiboot and firmware version, and F1 summarizes the keys' functions.

Maintaining gummiboot

To the best of my knowledge, no distribution provides scripts to help automate the maintenance of a gummiboot configuration, so if you use gummiboot in conjunction with an EFI stub loader, you must add new configuration files whenever you add a kernel and delete old ones whenever you remove one. If you use gummiboot in conjunction with ELILO or some other boot loader, though, you may be able to do less to maintain gummiboot; in this case you need only update gummiboot if and when you add or delete a boot loader from your system.


Go on to "Dealing with Secure Boot"

Return to "Managing EFI Boot Loaders for Linux" main page


If you have problems with or comments about this web page, please e-mail me at rodsmith@rodsbooks.com. Thanks.

Return to my main Web page.