From 656ca6227ed3701fb30ccbf4f889d2f3daf99e02 Mon Sep 17 00:00:00 2001 From: Electronic Eel Date: Sun, 30 May 2021 13:47:25 +0200 Subject: [PATCH 1/2] fix typo in efibootmgr cmdline options --- migrate2rocky.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrate2rocky.sh b/migrate2rocky.sh index d4a0e52..f8a9166 100644 --- a/migrate2rocky.sh +++ b/migrate2rocky.sh @@ -521,7 +521,7 @@ EOF fix_efi () ( grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg || exit_message "Error updating the grub config." - efibootmgr -c -d "$efi_mount" -L "Rocky Linux" -I /EFI/rocky/grubx64.efi || + efibootmgr -c -d "$efi_mount" -L "Rocky Linux" -l /EFI/rocky/grubx64.efi || exit_message "Error updating uEFI firmware." ) From 47c7ab35c0b42ecfcad8d505a3ccdb3fae7c9ae0 Mon Sep 17 00:00:00 2001 From: Electronic Eel Date: Sun, 30 May 2021 14:15:59 +0200 Subject: [PATCH 2/2] Automatically run EFI conversion steps Before this commit the user was supposed to give the -e cmdline parameter to run the EFI conversion when necessary. But it was missing in the getopts parameter list, so it didn't work. Instead of fixing it, I opted to remove the -e parameter alltogether and automatically detect if the system is running on EFI or not. Because if the user should forget to give -e on an EFI system, it would result in an unbootable system without any bootmanager installed. Fixing this situation takes time and requires some sysadmin skills, so we should take steps to avoid this situation. Detecting if the system runs on EFI or not can reliably done by checking for /sys/firmware/efi/. --- migrate2rocky.sh | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/migrate2rocky.sh b/migrate2rocky.sh index f8a9166..196ad61 100644 --- a/migrate2rocky.sh +++ b/migrate2rocky.sh @@ -382,7 +382,6 @@ usage() { "Usage: ${0##*/} [OPTIONS]" \ '' \ 'Options:' \ - '-e Update EFI boot sector when done' \ '-h Display this help' \ '-r Convert to rocky' \ '-V Verify switch' \ @@ -517,6 +516,21 @@ EOF dnf -y distro-sync || exit_message "Error during distro-sync." } +# Check if this system is running on EFI +# If yes, we'll need to run fix_efi() at the end of the conversion +efi_check () { + # Check if we have /sys mounted and it is looking sane + if ! [[ -d /sys/class/block ]]; then + exit_message "/sys is not accessible." + fi + + # Now that we know /sys is reliable, use it to check if we are running on EFI or not + if [[ -d /sys/firmware/efi/ ]]; then + declare -g update_efi + update_efi=true + fi +} + # Called to update the EFI boot. fix_efi () ( grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg || @@ -540,9 +554,6 @@ while getopts "hrVR" option; do V) verify_all_rpms=true ;; - e) - update_efi=true - ;; *) printf '%s\n' "${errcolor}Invalid switch.$nocolor" usage @@ -553,6 +564,7 @@ if (( ! noopts )); then usage fi +efi_check bin_check if [[ $verify_all_rpms ]]; then