1. Apply GRUB workaround:

    echo 'export ZPOOL_VDEV_NAME_PATH=YES' >> /etc/profile.d/
    source /etc/profile.d/
    # GRUB fails to detect rpool name, hard code as "rpool"
    sed -i "s|rpool=.*|rpool=rpool|"  /etc/grub.d/10_linux

    This sed workaround needs to be applied for every GRUB update, as the update will overwrite the changes.

  2. Install GRUB:

    echo 'GRUB_ENABLE_BLSCFG=false' >> /etc/default/grub
    mkdir -p /boot/efi/almalinux/grub-bootdir/i386-pc/
    mkdir -p /boot/efi/almalinux/grub-bootdir/x86_64-efi/
    for i in ${DISK}; do
     grub2-install --target=i386-pc --boot-directory \
         /boot/efi/almalinux/grub-bootdir/i386-pc/  $i
    cp -r /usr/lib/grub/x86_64-efi/ /boot/efi/EFI/almalinux/
    grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
    grub2-mkconfig -o /boot/efi/almalinux/grub-bootdir/i386-pc/grub2/grub.cfg
  3. For both legacy and EFI booting: mirror ESP content:

    unalias -a
    ESP_MIRROR=$(mktemp -d)
    cp -r /boot/efi/EFI $ESP_MIRROR
    for i in /boot/efis/*; do
     cp -r $ESP_MIRROR/EFI $i
    rm -rf $ESP_MIRROR
  4. Note: you need to regenerate GRUB menu after kernel updates, otherwise computer will still boot old kernel on reboot:

    grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg
    grub2-mkconfig -o /boot/efi/almalinux/grub-bootdir/i386-pc/grub2/grub.cfg

Finish Installation

  1. Exit chroot:

  2. Export pools:

    umount -Rl /mnt
    zpool export -a
  3. Reboot:


Post installaion

  1. Install package groups:

    dnf group list --hidden -v       # query package groups
    dnf group install gnome-desktop
  2. Add new user, configure swap.

  3. You can create a snapshot of the newly installed system for later rollback, see this page.