Installation: UEFI

From Void Linux Wiki
Jump to: navigation, search

This is an alternate version of the basic install walkthrough, with additional information specific to installation on UEFI platforms.

More advanced installation methods for various specialized installs are also available on this Wiki.

UEFI [1] support is built into the current Void Live images and UEFI-based installation should go fairly smoothly on well-behaved platforms. So where it was once necessary to use manual installation procedures to install Linux in UEFI mode (as it was in many distributions), today it should not as often be necessary for a basic (non-specialized) install.

Important Note for 32-bit UEFI Firmware: Please see the Notes/Issues section regarding issues with installing on 32-bit firmware.


Getting Started

LiveCD ISOs for the various flavors of Void can be downloaded from https://repo.voidlinux.eu/live/current/ to be burned to a CD, mounted in a VM or copied for use on a Flash drive.

For further information regarding the live images and system requirements, see Live Images.


Installation

Boot your machine using the previously-created installation medium.

UEFI-Specific Information:
You should make sure your computer is booted in UEFI mode. Many motherboards will do so by default, but it can still vary from one platform to the next. Once booted into the install environment, you can double-check by looking for the /sys/firmware/efi/ directory. If it present, then you are presently running in UEFI mode; if not, then you are working in Legacy (BIOS) mode.

You can choose to run the live image from the media, or, if you have the resources available, you can load the contents of the limage into RAM. This option takes some time at the beginning but provides a quicker-overall installation procedure.

Once the live image has booted to a login prompt, log in as root using password voidlinux and then run:

# void-installer

Keyboard

Select the keymap for your keyboard; standard "qwerty" keybaords will generally use the "us" keymap.

Network

Select your primary network interface. If you use DHCP on your network, select that option, otherwise the installer will prompt for IP address, netmask and gateway.

Source

Choose whether you want to install from a local source (the packages that are included on the ISO) or from the network (in which case packages are downloaded from the Void remote repositories). Installing from the network allows you to install the most up-to-date packages available from the official repositories. Note that installing from local will also install any desktop installed on the disk (e.g. xfce).

Hostname

Set a hostname for your computer remembering the best practice that hostnames should be all lower case, with no spaces.

Locale

Configure your default locale settings; this will be used to set the libc locale.

Timezone

Select your timezone from the list of standard timezone options.

RootPassword

Enter and confirm the password used for the root account on your new Void installation. The password will not be shown on screen.

UserAccount

Choose a login (default void) and a descriptive name for that login (default Void User). Then enter and confirm the password for this default user. Finally you may chose to modify the group memberships for the user or go with the defaults.

BootLoader

Determine whether you'd like to use the installer to automatically install GRUB2 to the EFI system partition, or choose none if you'd like to install/configure an EFI loader manually after completing the installation process.

UEFI-Specific Information:
Provided that you made sure to boot into UEFI mode, this should work on most well-behaved UEFI systems. See the notes section regarding possible issues.

Partition

If you partitioned your disk outside of the Void installer(fdisk, cfdisk), you may skip the step. You should nevertheless read through this section for information regarding specific UEFI requirements to make sure your layout is compliant.

Void does not provide an automatic/preset partition scheme, so you will need to create this manually using cfdisk. However, in the case of UEFI, there are some special considerations that need to be made.

UEFI-Specific Information:

First, while UEFI systems are supposed to support MBR-based partition tables, the reality may be less predictable and the newer GPT scheme is going to be a better choice, especially if you have one of the larger Advanced Format disks. Use GPT.

Second, you need to create an EFI system partition, generally the first one. It does not need to be large; it is common to create one between 200MB and 1GB. When you create this partition in cfdisk, you need to change the type from the default "Linux" to the type appropriate to the ESP:

  • For GPT disks, change the type to EFI System.
  • For MBR (DOS) disks, create a primary partition and change the type to ef (EFI). [Not recommended]

You can then partition up the remaining free space as you choose for your Linux installation. See Disks#Partitioning for further information.

Filesystems

Create the filesystems used to populate the partitions you just created. Choose your filesystem type, specify the mountpoint and create the filesystem, if necessary, for each partition you mean to modify.

UEFI-Specific Information:
The EFI System Partition requires the use of the FAT12/16/32 filesystem. Be sure to select vfat for this filesystem and give it the mount point /boot/efi.

Once finished, select Back to return to the main installer menu. For additional information, see Disks#Filesystems.

Review Settings

Before installing, its generally a good idea to review the installation settings. Arrow right from the main menu to select settings and use <enter> to review.

Install

This step of the installer creates the filesystems specified in the previous step, then downloads all of the base packages (if configured to install via Network) and copies them to the target partition/partitions configured in the previous steps. After that, the installer generates an initramfs and installs GRUB2 to the EFI System partition.

UEFI-Specific Information:
If you chose to install the Grub2 EFI loader, now is actually a good time (before you reboot) to double-check and see if the system firmware has Grub in its BootOrder. See the notes section below for details.

After the installation is successfully completed, you can reboot into your new Void Linux install!


Post-Installation

Once you boot into your new Void installation, continue to Post-installation for further configuration tips.



Notes/Issues

Notes on Grub2 EFI Loader installation.

Grub2 possesses the ability to install an EFI loader to the EFI System Partition, as well as to modify the BootOrder variable in the system firmware. This works on most well-behaved UEFI imlementations. However, there are reports of a couple of issues on some systems/motherboards:

  • The BootOrder variable is not updated.
  • The BootOrder is not saved/followed by the system.

If the BootOrder variable fails to be updated, then the system will not boot the newly-installed Void system without some extra configuration.

To confirm that BootOrder has been updated before your final reboot, you can run the command efibootmgr with no arguments. The output should include something like this:

BootOrder: 0000,0003,0004
Boot0000* void_grub
Boot0003* CD/DVD Drive
Boot0004  EFI Internal Shell

See the man page for efibootmgr for more information on the capabilities and use of this program. If you see the option "void_grub" and it is listed first in BootOrder, then the variables have been successfully updated, and you can try to reboot. If not, keep reading.

Workaround:

In cases where BootOrder is either not updated, or not saved/followed after you reboot, then you should try copying grubx64.efi to the common default EFI loader location. You'll need to mount your EFI partition, and we'll assume it's on /mnt/. (In your installed Void system, the mount point would normally be /boot/efi/)

# install -D /mnt/EFI/void_grub/grubx64.efi /mnt/EFI/boot/bootx64.efi

On 32-bit firmware it should be

# install -D /mnt/EFI/void_grub/grubia32.efi /mnt/EFI/boot/bootia32.efi

You may then need to set the default boot disk in your computer's setup utility, but Void/Grub2 should boot correctly after this.

Note that you can boot your system back into the LiveCD to perform this operation if you were unable to boot to your Void Installation.

Notes on Partitioning

Cfdisk does not give me a choice of partition table type.

If the disk has already been initialized, cfdisk will continue with the partition table layout already present.

If your disk was previously partitioned with the MBR scheme, you will see the text "label: dos" near the top of the cfdisk screen. At this point, you will want to back out of the installer and run cfdisk manually with the "-z" option to start with an uninitialized disk layout, where you will then be prompted for the label type and continue with a new partition layout.

If the disk was previously using GPT, then you will see the text "Label: gpt" near the top of the cfdisk screen.

Multiple Partitions

It is common practice to put various subdirectories of / onto their own mounted partition, and there often good reasons for doing so.

However, it is important to note, because of Void's adoption of a more modern method for laying out the file system (known as the "/usr merge"), you must not try to place /usr on a seperate partition. When you attempt to do so, the installer will inform you that this is not supported in Void. For information as to the "whats" and "whys" of the /usr merge, please see https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/.


Separate Boot Partition: While there are very few cases where this would be useful today, some people will opt to create a separate /boot partition, creating a nested mount scenario, where you have one partition mounted at /boot/ and a second partition mounted at /boot/efi.

This creates a problem in the installer where it may fail at grub-install, as the /boot/efi directory isn't created on the /boot/ partition. To avoid this particular failure the options are as follows:

  • In the Filesystems stage, make sure to assign the EFI System Partition last. As long as /boot is assigned before /boot/efi, then it will be mounted before the creation of the /boot/efi/ mountpoint, and no trouble will arise.
  • Don't use a separate /boot/ partition. One of the few cases where it might be desirable would be when having an encrypted root, but unencrypted /boot. Various ways of booting encrypted systems and the reasoning behind each is a rather large discussion of its own.
    • To the author's knowledge, Grub is the only EFI loader that, at the time of this writing, can open LUKS/LVM containers itself, so the use of other loaders would require the kernel and initrd to be on an unencrypted filesystem.
    • Another way to deal with this would be to use the ESP as /boot/ itself, but there are issues. Grub will need to be installed manually, as the installer assumes the ESP exists at /boot/efi/ and you will have to override this.
    • Lastly, you could use your preferred EFI loader to control all boot options, but allow it to chainload Grub which can handle booting your encrypted Linux installation. Obviously this does not avoid the use of Grub, so if that is one's goal, then this is not a satisfying option.

This can actually be an issue for any nested mount scenario, though such schemes aren't that common, and may not need to be configured at install-time.

Platform-specific notes

Bitness - Note that UEFI loader bitness (i.e. 32-bit or 64-bit) must match that of the firmware. So 64-bit firmware only runs a 64-bit loader (bootx64.efi), while 32-bit firmware only runs a 32-bit loader (bootia32.efi).

However, the loader can switch the CPU mode, so it is possible to boot a 64-bit kernel from a 32-bit EFI loader (given support in the loader), provided the CPU is actually x86_64 architecture. The reverse is also true (32-bit EFI kernel booted by a 64-bit EFI loader). (Awaiting test results; Void x86_64 CD does not have a grub_ia32.efi, so workarounds are needed at present.)

This applies only to firmware bitness. It is still not possible, for fairly obvious reasons, to load a 64-bit OS on a 32-bit CPU.


Working Platforms

This procedure has been tested on the following systems: (Please add any systems/motherboards where this procedure has been successfully followed)

QEMU/KVM virtual machine on 64-bit OVMF firmware image (64-bit guest, 64-bit host) - x86_64 Void Install CD. BootOrder updated successfully, BootOrder obeyed by system.

ASROCK Z77 Extreme4 (Intel Z77 chipset, 64-bit firmware) - x86_64 Void Install CD. BootOrder updated successfully, BootOrder obeyed by system.

Less-than-working Platforms

The following platforms have had issues with this procedure: (Please add any systems/motherboards that have issues related to EFI installation, as well as workarounds, if any.)

QEMU/KVM virtual machine on 32-bit OVMF firmware image (32/64-bit guests, 64-bit host) - Works with some preparation of the LiveOS - see note on 32-bit install. i686 Void Install CD. BootOrder updated successfully, BootOrder obeyed by system.


32-bit Firmware

If your motherboard uses 32-bit firmware on either 32-bit or 64-bit PC architecture (some tablets, possibly some low-end desktops/notebooks), note that the LiveCD from April, 2016 lacks some packages needed to complete Grub installation in 32-bit UEFI mode.

Additionally, the void-installer script is hardcoded to assume 64-bit when EFI mode is detected.

This can be fixed for now by doing the following before running void-installer: Update xbps on the CD and install the missing packages:

# xbps-install -S
# xbps-install efibootmgr grub-i386-efi

At the time of writing, this pulls in libefivars and updates the grub packages. No other dependencies are updated.

To deal with the script, either install grub manually (and disable it void-installer), or modify the script as follows:

# cp /usr/bin/void-installer /usr/bin/void-installer.bak
# sed -e "s/target-x86_64-efi/target=i386-efi/" \
> -e "s/grub-x86_64-efi/grub-i386-efi/" \
> /usr/bin/void-installer.bak > /usr/bin/void-installer

From here, you can proceed to go through the installer as in the walkthrough.

One final note: The present 64-bit CDs also lack any *IA32.efi executable for booting on a 32-bit UEFI, so it cannot be used to install a 64-bit Void in mixed mode (32-bit grub loading a 64-bit EFI kernel on 64-bit CPUs)
UPDATE: While no new ISO has been released at the time of this writing, void-mklive has incorporated further UEFI support, including both 64- and 32-bit firmware support on both i686 and x86_64, so it is now trivial to roll your own LiveCD for installation of either arch on both types of firmware (64-bit OS still requires 64-bit CPU).