Add refind-efi and syslinux setup for UEFI systems
This commit is contained in:
parent
3d4559e249
commit
14069e46a6
@ -12,7 +12,7 @@ _Pass2="\nRe-enter the password for"
|
|||||||
_NoFileErr="\nFile does not exist.\n"
|
_NoFileErr="\nFile does not exist.\n"
|
||||||
|
|
||||||
_WelTitle="Welcome to the"
|
_WelTitle="Welcome to the"
|
||||||
_WelBody="\nThis will help you get $DIST setup on your system.\nBeing an Arch based distribution, having prior GNU/Linux experience will be an asset however we try our best to keep things simple.\nIf you are unsure about an option, a default will be listed or the first selected option will be the default (excluding language and timezone).\n\n\nMenu Navigation:\n\n - Select items with the arrow keys or the option number.\n - Use [Space] to toggle options and [Enter] to confirm.\n - Switch between buttons using [Tab] or the arrow keys.\n - Use [Page Up] and [Page Down] to jump whole pages\n - Press the highlighted key of an option to select it.\n"
|
_WelBody="\nThis will help you get $DIST setup on your system.\nHaving GNU/Linux experience is an asset, however we try our best to keep things simple.\n\nIf you are unsure about an option, a default will be listed or\nthe first selected option will be the default (excluding language and timezone).\n\n\nMenu Navigation:\n\n - Select items with the arrow keys or the option number.\n - Use [Space] to toggle options and [Enter] to confirm.\n - Switch between buttons using [Tab] or the arrow keys.\n - Use [Page Up] and [Page Down] to jump whole pages\n - Press the highlighted key of an option to select it.\n"
|
||||||
|
|
||||||
_NotRoot="\nThis installer must be run as root or using sudo.\n"
|
_NotRoot="\nThis installer must be run as root or using sudo.\n"
|
||||||
_Not64Bit="\nThis installer only supports x86_64 architectures.\n"
|
_Not64Bit="\nThis installer only supports x86_64 architectures.\n"
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
# Some ideas and code reworked from other resources
|
# Some ideas and code reworked from other resources
|
||||||
# AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due
|
# AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due
|
||||||
|
|
||||||
VER="2.0.1" # version
|
VER="2.0.0" # version
|
||||||
DIST="ArchLabs" # distributor
|
DIST="ArchLabs" # distributor
|
||||||
MNT="/mnt" # mountpoint
|
MNT="/mnt" # mountpoint
|
||||||
|
|
||||||
@ -108,6 +108,7 @@ SHL=$((LINES - 20))
|
|||||||
|
|
||||||
# command used to install each bootloader
|
# command used to install each bootloader
|
||||||
declare -A BCMDS=(
|
declare -A BCMDS=(
|
||||||
|
[refind-efi]="refind-install"
|
||||||
[grub]="grub-install --recheck --force"
|
[grub]="grub-install --recheck --force"
|
||||||
[syslinux]="syslinux-install_update -i -a -m"
|
[syslinux]="syslinux-install_update -i -a -m"
|
||||||
[systemd-boot]="bootctl --path=/boot install"
|
[systemd-boot]="bootctl --path=/boot install"
|
||||||
@ -1702,17 +1703,19 @@ setup_boot()
|
|||||||
if [[ $SYS == 'BIOS' ]]; then
|
if [[ $SYS == 'BIOS' ]]; then
|
||||||
BOOTLDR="$(menubox "$_PrepMount" "$_MntBootBody" \
|
BOOTLDR="$(menubox "$_PrepMount" "$_MntBootBody" \
|
||||||
"grub" "The Grand Unified Bootloader, standard among many Linux distributions" \
|
"grub" "The Grand Unified Bootloader, standard among many Linux distributions" \
|
||||||
"syslinux" "A collection of boot loaders capable of booting from drives, CDs, and over the network")"
|
"syslinux" "A collection of boot loaders for booting drives, CDs, or over the network")"
|
||||||
|
|
||||||
else
|
else
|
||||||
BOOTLDR="$(menubox "$_PrepMount" "$_MntBootBody" \
|
BOOTLDR="$(menubox "$_PrepMount" "$_MntBootBody" \
|
||||||
"systemd-boot" "A simple UEFI boot manager which executes configured EFI images" \
|
"systemd-boot" "A simple UEFI boot manager which executes configured EFI images" \
|
||||||
"grub" "The Grand Unified Bootloader, standard among many Linux distributions")"
|
"grub" "The Grand Unified Bootloader, standard among many Linux distributions" \
|
||||||
|
"refind-efi" "A UEFI boot manager that aims to be platform neutral and simplify multi-boot" \
|
||||||
|
"syslinux" "A collection of boot loaders for booting drives, CDs, or over the network (no chainloading support)")"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[[ $BOOTLDR ]] || return 1
|
[[ $BOOTLDR ]] || return 1
|
||||||
if [[ $BOOT_PART != "" ]]; then
|
if [[ $BOOT_PART ]]; then
|
||||||
mount_partition "$BOOT_PART" "/boot" && SEP_BOOT=true || return 1
|
mount_partition "$BOOT_PART" "/boot" && SEP_BOOT=true || return 1
|
||||||
setup_boot_device
|
setup_boot_device
|
||||||
fi
|
fi
|
||||||
@ -1721,9 +1724,6 @@ setup_boot()
|
|||||||
|
|
||||||
setup_grub()
|
setup_grub()
|
||||||
{
|
{
|
||||||
# grub has by far the worst setup of the three however
|
|
||||||
# the configuration is shorter due to grub-mkconfig
|
|
||||||
|
|
||||||
EDIT_FILES[bootloader]="/etc/default/grub"
|
EDIT_FILES[bootloader]="/etc/default/grub"
|
||||||
|
|
||||||
if [[ $SYS == 'BIOS' ]]; then
|
if [[ $SYS == 'BIOS' ]]; then
|
||||||
@ -1751,12 +1751,49 @@ setup_grub()
|
|||||||
|
|
||||||
setup_syslinux()
|
setup_syslinux()
|
||||||
{
|
{
|
||||||
EDIT_FILES[bootloader]="/boot/syslinux/syslinux.cfg"
|
if [[ $SYS == 'BIOS' ]]; then
|
||||||
|
EDIT_FILES[bootloader]="/boot/syslinux/syslinux.cfg"
|
||||||
|
else
|
||||||
|
EDIT_FILES[bootloader]="/boot/EFI/syslinux/syslinux.cfg"
|
||||||
|
BCMDS[syslinux]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars || true &&
|
||||||
|
efibootmgr -c -d $BOOT_DEVICE -p $BOOT_PART_NUM -l /EFI/syslinux/syslinux.efi -L $DIST -v"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_systemd-boot()
|
setup_systemd-boot()
|
||||||
{
|
{
|
||||||
EDIT_FILES[bootloader]="/boot/loader/entries/$DIST.conf"
|
EDIT_FILES[bootloader]="/boot/loader/entries/$DIST.conf"
|
||||||
|
BCMDS[systemd-boot]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars || true && bootctl --path=/boot install"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_refind-efi()
|
||||||
|
{
|
||||||
|
EDIT_FILES[bootloader]="/boot/refind_linux.conf"
|
||||||
|
BCMDS[refind-efi]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars || true && refind-install"
|
||||||
|
}
|
||||||
|
|
||||||
|
prerun_refind-efi()
|
||||||
|
{
|
||||||
|
cat > $MNT/boot/refind_linux.conf << EOF
|
||||||
|
"$DIST Linux" "root=$ROOT_PART_ID $([[ $LUKS_DEV ]] &&
|
||||||
|
printf "%s " "$LUKS_DEV")rw add_efi_memmap $([[ $UCODE ]] &&
|
||||||
|
printf "initrd=/%s " "$UCODE")initrd=/initramfs-%v.img"
|
||||||
|
"$DIST Linux Fallback" "root=$ROOT_PART_ID $([[ $LUKS_DEV ]] &&
|
||||||
|
printf "%s " "$LUKS_DEV")rw add_efi_memmap $([[ $UCODE ]] &&
|
||||||
|
printf "initrd=/%s " "$UCODE")initrd=/initramfs-%v-fallback.img"
|
||||||
|
EOF
|
||||||
|
mkdir -p $MNT/etc/pacman.d/hooks
|
||||||
|
cat > $MNT/etc/pacman.d/hooks/refind.hook << EOF
|
||||||
|
[Trigger]
|
||||||
|
Operation = Upgrade
|
||||||
|
Type = Package
|
||||||
|
Target = refind-efi
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Updating rEFInd on ESP
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/bin/refind-install
|
||||||
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
prerun_grub()
|
prerun_grub()
|
||||||
@ -1765,11 +1802,16 @@ prerun_grub()
|
|||||||
s/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"\"/g" $MNT/etc/default/grub
|
s/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"\"/g" $MNT/etc/default/grub
|
||||||
if [[ $LUKS_DEV ]]; then
|
if [[ $LUKS_DEV ]]; then
|
||||||
sed -i "s~#GRUB_ENABLE_CRYPTODISK~GRUB_ENABLE_CRYPTODISK~g;
|
sed -i "s~#GRUB_ENABLE_CRYPTODISK~GRUB_ENABLE_CRYPTODISK~g;
|
||||||
s~GRUB_CMDLINE_LINUX=.*~GRUB_CMDLINE_LINUX=\"${LUKS_DEV}\"~g" $MNT/etc/default/grub
|
s~GRUB_CMDLINE_LINUX=.*~GRUB_CMDLINE_LINUX=\"${LUKS_DEV}\"~g" $MNT/etc/default/grub 2>$ERR
|
||||||
|
errshow 1 "sed -i 's~#GRUB_ENABLE_CRYPTODISK~GRUB_ENABLE_CRYPTODISK~g;
|
||||||
|
s~GRUB_CMDLINE_LINUX=.*~GRUB_CMDLINE_LINUX=\"${LUKS_DEV}\"~g' $MNT/etc/default/grub"
|
||||||
fi
|
fi
|
||||||
if [[ $SYS == 'BIOS' && $LVM && $SEP_BOOT == false ]]; then
|
if [[ $SYS == 'BIOS' && $LVM && $SEP_BOOT == false ]]; then
|
||||||
sed -i "s/GRUB_PRELOAD_MODULES=.*/GRUB_PRELOAD_MODULES=\"lvm\"/g" $MNT/etc/default/grub
|
sed -i "s/GRUB_PRELOAD_MODULES=.*/GRUB_PRELOAD_MODULES=\"lvm\"/g" $MNT/etc/default/grub 2>$ERR
|
||||||
|
errshow 1 "sed -i 's/GRUB_PRELOAD_MODULES=.*/GRUB_PRELOAD_MODULES=\"lvm\"/g' $MNT/etc/default/grub"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# setup for os-prober module
|
||||||
mkdir -p /run/lvm
|
mkdir -p /run/lvm
|
||||||
mkdir -p /run/udev
|
mkdir -p /run/udev
|
||||||
mkdir -p $MNT/hostrun/lvm
|
mkdir -p $MNT/hostrun/lvm
|
||||||
@ -1782,21 +1824,21 @@ prerun_grub()
|
|||||||
|
|
||||||
prerun_systemd-boot()
|
prerun_systemd-boot()
|
||||||
{
|
{
|
||||||
mkdir -p ${MNT}/boot/loader/entries
|
mkdir -p $MNT/boot/loader/entries
|
||||||
cat > ${MNT}/boot/loader/loader.conf << EOF
|
cat > $MNT/boot/loader/loader.conf << EOF
|
||||||
default $DIST
|
default $DIST
|
||||||
timeout 5
|
timeout 5
|
||||||
editor no
|
editor no
|
||||||
EOF
|
EOF
|
||||||
cat > ${MNT}/boot/loader/entries/${DIST}.conf << EOF
|
cat > $MNT/boot/loader/entries/$DIST.conf << EOF
|
||||||
title $DIST Linux
|
title $DIST Linux
|
||||||
linux /vmlinuz-${KERNEL}$([[ $UCODE ]] && printf "\ninitrd %s" "/${UCODE}.img")
|
linux /vmlinuz-${KERNEL}$([[ $UCODE ]] && printf "\ninitrd %s" "/$UCODE.img")
|
||||||
initrd /initramfs-$KERNEL.img
|
initrd /initramfs-$KERNEL.img
|
||||||
options root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
options root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
||||||
EOF
|
EOF
|
||||||
cat > ${MNT}/boot/loader/entries/${DIST}-fallback.conf << EOF
|
cat > $MNT/boot/loader/entries/$DIST-fallback.conf << EOF
|
||||||
title $DIST Linux Fallback
|
title $DIST Linux Fallback
|
||||||
linux /vmlinuz-${KERNEL}$([[ $UCODE ]] && printf "\ninitrd %s" "/${UCODE}.img")
|
linux /vmlinuz-${KERNEL}$([[ $UCODE ]] && printf "\ninitrd %s" "/$UCODE.img")
|
||||||
initrd /initramfs-$KERNEL-fallback.img
|
initrd /initramfs-$KERNEL-fallback.img
|
||||||
options root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
options root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
||||||
EOF
|
EOF
|
||||||
@ -1818,17 +1860,21 @@ EOF
|
|||||||
|
|
||||||
prerun_syslinux()
|
prerun_syslinux()
|
||||||
{
|
{
|
||||||
mkdir -pv $MNT/boot/syslinux
|
local cfgdir="$MNT/boot/syslinux" cfgsrcdir="/usr/lib/syslinux/bios"
|
||||||
cp -rfv $RUN/syslinux/splash.png $MNT/boot/syslinux/
|
if [[ $SYS == 'UEFI' ]]; then
|
||||||
cp -rfv /usr/lib/syslinux/bios/* $MNT/boot/syslinux/
|
cfgdir="$MNT/boot/EFI/syslinux"; cfgsrcdir="/usr/lib/syslinux/efi64/"
|
||||||
cat > $MNT/boot/syslinux/syslinux.cfg << EOF
|
fi
|
||||||
|
|
||||||
|
mkdir -pv $cfgdir
|
||||||
|
cp -rfv $cfgsrcdir/* $cfgdir/
|
||||||
|
cat > $cfgdir/syslinux.cfg << EOF
|
||||||
UI vesamenu.c32
|
UI vesamenu.c32
|
||||||
MENU TITLE $DIST Boot Menu
|
MENU TITLE $DIST Boot Menu
|
||||||
MENU BACKGROUND splash.png
|
MENU BACKGROUND splash.png
|
||||||
TIMEOUT 50
|
TIMEOUT 50
|
||||||
DEFAULT $DIST
|
DEFAULT $DIST
|
||||||
|
|
||||||
# Refer to https://www.syslinux.org/wiki/index.php/Comboot/menu.c32
|
# see: https://www.syslinux.org/wiki/index.php/Comboot/menu.c32
|
||||||
MENU WIDTH 78
|
MENU WIDTH 78
|
||||||
MENU MARGIN 4
|
MENU MARGIN 4
|
||||||
MENU ROWS 4
|
MENU ROWS 4
|
||||||
@ -1852,15 +1898,15 @@ LABEL $DIST
|
|||||||
MENU LABEL $DIST Linux
|
MENU LABEL $DIST Linux
|
||||||
LINUX ../vmlinuz-$KERNEL
|
LINUX ../vmlinuz-$KERNEL
|
||||||
APPEND root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
APPEND root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
||||||
INITRD $([[ $UCODE ]] && printf "%s" "../${UCODE}.img,")../initramfs-$KERNEL.img
|
INITRD $([[ $UCODE ]] && printf "%s" "../$UCODE.img,")../initramfs-$KERNEL.img
|
||||||
|
|
||||||
LABEL ${DIST}fallback
|
LABEL ${DIST}fallback
|
||||||
MENU LABEL $DIST Linux Fallback
|
MENU LABEL $DIST Linux Fallback
|
||||||
LINUX ../vmlinuz-$KERNEL
|
LINUX ../vmlinuz-$KERNEL
|
||||||
APPEND root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
APPEND root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw
|
||||||
INITRD $([[ $UCODE ]] && printf "%s" "../${UCODE}.img,")../initramfs-$KERNEL-fallback.img
|
INITRD $([[ $UCODE ]] && printf "%s" "../$UCODE.img,")../initramfs-$KERNEL-fallback.img
|
||||||
|
|
||||||
# some examples for chainloading other bootloaders
|
# examples of chainloading other bootloaders
|
||||||
|
|
||||||
#LABEL grub2
|
#LABEL grub2
|
||||||
#MENU LABEL Grub2
|
#MENU LABEL Grub2
|
||||||
@ -1882,7 +1928,7 @@ install_bootloader()
|
|||||||
ROOT_PART_ID="$ROOT_PART"
|
ROOT_PART_ID="$ROOT_PART"
|
||||||
elif [[ $BOOTLDR == 'syslinux' ]]; then
|
elif [[ $BOOTLDR == 'syslinux' ]]; then
|
||||||
ROOT_PART_ID="UUID=$(blkid -s UUID -o value $ROOT_PART)"
|
ROOT_PART_ID="UUID=$(blkid -s UUID -o value $ROOT_PART)"
|
||||||
elif [[ $BOOTLDR == 'systemd-boot' ]]; then
|
elif [[ $BOOTLDR == 'systemd-boot' || $BOOTLDR == 'refind-efi' ]]; then
|
||||||
ROOT_PART_ID="PARTUUID=$(blkid -s PARTUUID -o value $ROOT_PART)"
|
ROOT_PART_ID="PARTUUID=$(blkid -s PARTUUID -o value $ROOT_PART)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -1902,8 +1948,8 @@ install_bootloader()
|
|||||||
find $MNT/boot/ -name 'syslinux*' -exec rm -rf '{}' \; >/dev/null 2>&1
|
find $MNT/boot/ -name 'syslinux*' -exec rm -rf '{}' \; >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
prerun_$BOOTLDR
|
|
||||||
printf "Installing and setting up $BOOTLDR\n"
|
printf "Installing and setting up $BOOTLDR\n"
|
||||||
|
prerun_$BOOTLDR
|
||||||
chrun "${BCMDS[$BOOTLDR]}" 2>$ERR
|
chrun "${BCMDS[$BOOTLDR]}" 2>$ERR
|
||||||
errshow 1 "${BCMDS[$BOOTLDR]}"
|
errshow 1 "${BCMDS[$BOOTLDR]}"
|
||||||
|
|
||||||
@ -1913,9 +1959,20 @@ install_bootloader()
|
|||||||
rm -rf $MNT/hostrun >/dev/null 2>&1
|
rm -rf $MNT/hostrun >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $BOOTLDR == 'grub' && $SYS == 'UEFI' ]]; then
|
if [[ $SYS == 'UEFI' ]]; then
|
||||||
|
# some UEFI firmware require a generic esp/BOOT/BOOTX64.EFI
|
||||||
|
# see: https://wiki.archlinux.org/index.php/GRUB#UEFI
|
||||||
|
# also: https://wiki.archlinux.org/index.php/syslinux#UEFI_Systems
|
||||||
mkdir -pv $MNT/boot/EFI/BOOT
|
mkdir -pv $MNT/boot/EFI/BOOT
|
||||||
cp -fv $MNT/boot/EFI/$DIST/grubx64.efi $MNT/boot/EFI/BOOT/BOOTX64.EFI
|
if [[ $BOOTLDR == 'grub' ]]; then
|
||||||
|
cp -fv $MNT/boot/EFI/$DIST/grubx64.efi $MNT/boot/EFI/BOOT/BOOTX64.EFI
|
||||||
|
elif [[ $BOOTLDR == 'syslinux' ]]; then
|
||||||
|
cp -rf $MNT/boot/EFI/syslinux/* $MNT/boot/EFI/BOOT/
|
||||||
|
cp -f $MNT/boot/EFI/syslinux/syslinux.efi $MNT/boot/EFI/BOOT/BOOTX64.EFI
|
||||||
|
elif [[ $BOOTLDR == 'refind-efi' ]]; then
|
||||||
|
sed -i '/#extra_kernel_version_strings/ c extra_kernel_version_strings linux-hardened,linux-zen,linux-lts,linux'
|
||||||
|
cp -fv $MNT/boot/EFI/refind/refind_x64.efi $MNT/boot/EFI/BOOT/BOOTX64.EFI
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
Reference in New Issue
Block a user