#### Beyond Linux® From Scratch (systemd Edition) - Version 11.1

### Chapter 5. File Systems and Disk Management

- Prev

  efibootmgr-17

- Next

  Using GRUB to Set Up the Boot Process with UEFI

- Up
- Home

# GRUB-2.06 for EFI

## Introduction to GRUB

The GRUB package provides GRand Unified Bootloader. In this page it will be built with UEFI support, which is not enabled for GRUB built in LFS.

This package is known to build and work properly using an LFS-11.1 platform.

### Package Information

- Download (HTTP): https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz

- Download MD5 sum: cf0fd928b1e5479c8108ee52cb114363

- Download size: 6.3 MB

- Estimated disk space required: 137 MB

- Estimated build time: 1.0 SBU (on 64-bit LFS)

### Additional Downloads

Unicode font data used to display GRUB menu

- Download (HTTP): https://unifoundry.com/pub/unifont/unifont-14.0.01/font-builds/unifont-14.0.01.pcf.gz

- Download MD5 sum: 8191ca4fce0eb6073d47c7573e6babc1

- Download size: 1.3 MB

GCC (only needed if building on 32-bit LFS)

- Download (HTTP): https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz

- Download MD5 sum: 31c86f2ced76acac66992eeedce2fce2

- Download size: 77 MB

### GRUB Dependencies

#### Required (runtime)

efibootmgr-17

#### Recommended

FreeType-2.11.1

#### Optional

LVM2-2.03.15

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/grub-efi

## Installation of GRUB

First, install font data as the `root` user:

    mkdir -pv /usr/share/fonts/unifont &&
    gunzip -c ../unifont-14.0.01.pcf.gz > /usr/share/fonts/unifont/unifont.pcf

### Warning

Unset any environment variables which may affect the build:

    unset {C,CPP,CXX,LD}FLAGS

Don't try “tuning” this package with custom compilation flags: this package is a bootloader, with low-level operations in the source code which is likely to be broken by some aggressive optimizations.

If you are running a 32-bit LFS, prepare a 64-bit compiler:

    case $(uname -m) in i?86 )
        tar xf ../gcc-11.2.0.tar.xz
        mkdir gcc-11.2.0/build
        pushd gcc-11.2.0/build
            ../configure --prefix=$PWD/../../x86_64-gcc \
                         --target=x86_64-linux-gnu      \
                         --with-system-zlib             \
                         --enable-languages=c,c++       \
                         --with-ld=/usr/bin/ld
            make all-gcc
            make install-gcc
        popd
        export TARGET_CC=$PWD/x86_64-gcc/bin/x86_64-linux-gnu-gcc
    esac

Build GRUB with the following commands:

    ./configure --prefix=/usr        \
                --sysconfdir=/etc    \
                --disable-efiemu     \
                --enable-grub-mkfont \
                --with-platform=efi  \
                --target=x86_64      \
                --disable-werror     &&
    unset TARGET_CC &&
    make

This package does not have a test suite providing meaningful results.

Now, as the `root` user:

    make install &&
    mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions

## Command Explanations

`--enable-grub-mkfont`: Build the tool named grub-mkfont to generate the font file for the boot loader from the font data we've installed.

### Warning

If the recommended dependency FreeType-2.11.1 is not installed, it is possible to omit this option and build GRUB. However, if grub-mkfont is not built, or the unicode font data is not available at the time GRUB is built, GRUB won't install any font for the boot loader. The GRUB boot menu will be displayed using a coarse font and the early stage of kernel initialization will be in “blind mode” — you can't see any kernel messages before the graphics card driver is initialized. It will be very difficult to diagnose some boot issues, especially if the graphics driver is built as module.

`--with-platform=efi`: Ensures building GRUB with EFI enabled.

`--target=x86_64`: Ensures building GRUB for x86_64 even if building on a 32-bit LFS system. Most EFI firmwares on x86_64 does not support 32-bit bootloaders.

`--target=i386`: A few 32-bit x86 platforms have EFI support. And, some x86_64 platforms have a 32-bit EFI implementation, but they are very old and rare. Use this instead of `--target=x86_64` if you are absolutely sure that LFS is running on such a system.

## Configuring GRUB

Using GRUB to make the LFS system bootable on UEFI platform will be discussed in Using GRUB to Set Up the Boot Process with UEFI.

## Contents

See the page for GRUB in LFS book.

Last updated on

- Prev

  efibootmgr-17

- Next

  Using GRUB to Set Up the Boot Process with UEFI

- Up
- Home