Add: Now 'partprobe' is being executed after 'sgdisk' has finished processing

Change: There are 4 Partitioning Layout Presets now, to make the selection easier (man_preset function)
Change: 'Sanity Check' stage has been revised to allow 'systemd-boot' to be installed on an ESP mounted to '/efi' without the need for an 'XBOOTLDR' partition to be present
Change: 'Sanity Check' stage has been revised to being more informative to the user and perform more necessary actions to solve partitioning issues
Change: 'Sanity Check' stage now informs when there is need for an Extended Boot Partition (XBOOTLDR) when dual/multibooting
Change: Bootloader configuration (btldr_conf function) revised its logic to allow 'systemd-boot' to install to '/efi' without an 'XBOOTLDR' partition when there is dual/multiboot and 'ESP' size is more than 200Mb
This commit is contained in:
elementrick 2024-08-30 15:41:13 +00:00
parent aef70bada2
commit 076d59db95

349
Amelia.sh
View file

@ -1,7 +1,7 @@
#!/bin/bash
# Amelia Installer
# Version: 7.1
# Version: 7.2
set -euo pipefail
trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR
@ -1049,9 +1049,6 @@ Enter a number: "
if [[ "${espmnt}" == "1" ]]; then
esp_mount="/mnt/efi"
btldr_esp_mount="/efi"
if [[ "${bootloader}" == "1" ]]; then
xbootloader="yes"
fi
sleep 0.2
YELLOW "
@ -2587,8 +2584,6 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Prese
${magenta}* Btrfs${nc} compatible Layout
${red}* XBOOTLDR${nc} partition is only 'Systemd-boot' compatible
[1] Create 'ESP' and '/Root' (${cyan}Ext4${nc},${magenta}Btrfs${nc})
@ -2597,15 +2592,7 @@ ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Prese
[3] Create 'ESP', '/Root' and '/Home' (${cyan}Ext4${nc})
[4] Create 'ESP', '/Root', '/Home' and '/Swap' (${cyan}Ext4${nc})
[5] Create 'ESP', ${red}'XBOOTLDR' ${nc}and '/Root' (${cyan}Ext4${nc},${magenta}Btrfs${nc})
[6] Create 'ESP', ${red}'XBOOTLDR'${nc}, '/Root' and '/Swap' (${cyan}Ext4${nc},${magenta}Btrfs${nc})
[7] Create 'ESP', ${red}'XBOOTLDR'${nc}, '/Root' and '/Home' (${cyan}Ext4${nc})
[8] Create 'ESP', ${red}'XBOOTLDR'${nc}, '/Root', '/Home' and '/Swap' (${cyan}Ext4${nc}) "
[4] Create 'ESP', '/Root', '/Home' and '/Swap' (${cyan}Ext4${nc}) "
BLUE "
@ -2685,25 +2672,13 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: "
if [[ -z "${use_manpreset}" ]]; then
if [[ "${fs}" == "2" ]]; then
if [[ "${xbootloader}" == "yes" && "${swapmode}" == "1" ]]; then
preset="6"
elif [[ "${xbootloader}" == "yes" && "${swapmode}" != "1" ]]; then
preset="5"
elif [[ "${swapmode}" == "1" ]]; then
if [[ "${swapmode}" == "1" ]]; then
preset="2"
elif [[ "${swapmode}" != "1" ]]; then
preset="1"
fi
elif [[ "${fs}" == "1" ]] ; then
if [[ "${xbootloader}" == "yes" && "${sep_home}" == "y" && "${swapmode}" == "1" ]]; then
preset="8"
elif [[ "${xbootloader}" == "yes" && "${sep_home}" == "y" && "${swapmode}" != "1" ]]; then
preset="7"
elif [[ "${xbootloader}" == "yes" && "${sep_home}" == "n" && "${swapmode}" == "1" ]]; then
preset="6"
elif [[ "${xbootloader}" == "yes" && "${sep_home}" == "n" && "${swapmode}" != "1" ]]; then
preset="5"
elif [[ "${sep_home}" == "y" && "${swapmode}" == "1" ]]; then
if [[ "${sep_home}" == "y" && "${swapmode}" == "1" ]]; then
preset="4"
elif [[ "${sep_home}" == "y" && "${swapmode}" != "1" ]]; then
preset="3"
@ -2720,7 +2695,7 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: "
return 0
fi
if [[ "${preset}" == "3" || "${preset}" == "4" || "${preset}" == "7" || "${preset}" == "8" ]] ; then
if [[ "${preset}" == "3" || "${preset}" == "4" ]] ; then
sleep 0.2
YELLOW "
@ -2742,7 +2717,7 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: "
echo
fi
if [[ "${preset}" == "3" || "${preset}" == "4" || "${preset}" == "7" || "${preset}" == "8" ]] ; then
if [[ "${preset}" == "3" || "${preset}" == "4" ]] ; then
if [[ "${prcnt}" == [[:alpha:]] ]]; then
sleep 0.2
RED "
@ -2780,101 +2755,55 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: "
case "${preset}" in
1)
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:0 -t 2:8304 -c 2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n2:0:0 -t2:8304 -c2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
partprobe -s "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
2)
until set_swapsize; do : ; done
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 3:0:0 -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
until set_swapsize; do : ; done
sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n3:0:0 -t3:8304 -c3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
partprobe -s "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
3)
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:+"${rootsize}"G -t 2:8304 -c 2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 3:0:0 -t 3:8302 -c 3:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n2:0:+"${rootsize}"G -t2:8304 -c2:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n3:0:0 -t3:8302 -c3:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail
partprobe -s "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
4)
until set_swapsize; do : ; done
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+512M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 3:0:+"${rootsize}"G -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 4:0:0 -t 4:8302 -c 4:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
5)
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 3:0:0 -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
6)
until set_swapsize; do : ; done
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 3:0:+"${swapsize}"G -t 3:8200 -c 3:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 4:0:0 -t 4:8304 -c 4:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
7)
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 3:0:+"${rootsize}"G -t 3:8304 -c 3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 4:0:0 -t 4:8302 -c 4:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
8)
until set_swapsize; do : ; done
sgdisk -I -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 1:0:+200M -t 1:ef00 -c 1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 2:0:+300M -t 2:ea00 -c 2:XBOOTLDR "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 3:0:+"${swapsize}"G -t 3:8200 -c 3:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 4:0:+"${rootsize}"G -t 4:8304 -c 4:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n 5:0:0 -t 5:8302 -c 5:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
until set_swapsize; do : ; done
sgdisk -o "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:Swap "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n3:0:+"${rootsize}"G -t3:8304 -c3:Root "${sgdrive}" > /dev/null 2>&1 || stage_fail
sgdisk -I -n4:0:0 -t4:8302 -c4:Home "${sgdrive}" > /dev/null 2>&1 || stage_fail
partprobe -s "${sgdrive}" > /dev/null 2>&1 || stage_fail
if [[ "${install}" == "yes" ]]; then
autopart="yes"
until sanity_check; do : ; done
else
ok
fi ;;
"")
if [[ "${smartpart}" == "n" ]]; then
reload
@ -2892,7 +2821,7 @@ Enter a Custom Percentage number ${nc}e.g. 30 ${bwhite}(empty to skip)${blue}: "
invalid
return 1 ;;
esac
if [[ "${install}" == "yes" ]]; then
return 0
fi
@ -2988,6 +2917,7 @@ Enter a disk number ${bwhite}(empty to skip)${blue}: "
==> [${green}Disk ${cgdrive} OK${nc}] "
partprobe -s "${cgdrive}"
return 1
else
invalid
@ -3355,7 +3285,7 @@ ${multi_swap}
return 1
fi
fi
#--------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------#
if [[ -e "${root_dev}" ]]; then
rootprt="ok"
if [[ "${autoroot}" == "y" ]]; then
@ -3375,6 +3305,22 @@ ${multi_swap}
### ${yellow}Linux x86-64 /Root Partition not detected ${red}###
---------------------------------------------------"
fi
#..................................................................................................
if [[ -e "${esp_dev}" ]]; then
espsize="$(lsblk -dno SIZE --bytes "${esp_dev}")"
if [[ "${multibooting}" == "y" && "${bootloader}" == "1" && "${espmnt}" == "1" && "${espsize}" -lt "209715200" ]]; then
xbootloader="yes"
if [[ ! -e "${xboot_dev}" ]]; then
sleep 0.2
RED "
------------------------------------------------------
### ${yellow}A Linux Extended Boot Partition is mandatory ${red}###
------------------------------------------------------"
fi
else
xbootloader="no"
fi
fi
if [[ ${xbootloader} == "yes" ]]; then
if [[ -e "${xboot_dev}" ]]; then
@ -3397,87 +3343,55 @@ ${multi_swap}
----------------------------------------------------"
fi
fi
#..................................................................................................
if [[ -e "${esp_dev}" ]]; then
espsize="$(lsblk -dno SIZE --bytes "${esp_dev}")"
if [[ "${espsize}" -lt "209715200" ]]; then
if [[ "${bootloader}" == "1" ]]; then
if [[ "${espmnt}" == "1" ]]; then
if [[ "${xbootprt}" == "ok" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
elif [[ "${xbootprt}" == "fail" ]]; then
espprt="fail"
fi
elif [[ "${espmnt}" == "2" ]]; then
espprt="fail"
fi
elif [[ "${bootloader}" == "2" ]]; then
if [[ "${espmnt}" == "1" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
elif [[ "${espmnt}" == "2" ]]; then
espprt="fail"
fi
fi
elif [[ "${espsize}" -ge "209715200" ]]; then
if [[ "${bootloader}" == "1" ]]; then
if [[ "${espmnt}" == "1" ]]; then
if [[ "${xbootprt}" == "ok" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
elif [[ "${xbootprt}" == "fail" ]]; then
espprt="fail"
fi
elif [[ "${espmnt}" == "2" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
fi
elif [[ "${bootloader}" == "2" ]]; then
if [[ "${espmnt}" == "1" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
elif [[ "${espmnt}" == "2" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
fi
fi
fi
if [[ "${espprt}" == "fail" && "${espsize}" -lt "209715200" ]]; then
sleep 0.2
RED "
---------------------------------------------
### ${yellow}WARNING: ESP's size is not adequate ${red}###
---------------------------------------------"
fi
else
if [[ ! -e "${esp_dev}" ]]; then
espprt="fail"
sleep 0.2
RED "
-------------------------------------------
### ${yellow}EFI System Partition not detected ${red}###
-------------------------------------------"
fi
elif [[ -e "${esp_dev}" && "${espsize}" -lt "209715200" && "${xbootloader}" == "yes" ]]; then
if [[ "${xbootprt}" == "ok" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
elif [[ "${xbootprt}" == "fail" ]]; then
espprt="fail"
fi
elif [[ -e "${esp_dev}" && "${espsize}" -lt "209715200" && "${xbootloader}" == "no" ]]; then
if [[ "${bootloader}" == "1" ]]; then
espprt="fail"
sleep 0.2
RED "
---------------------------------------------
### ${yellow}WARNING: ESP's size is not adequate ${red}###
---------------------------------------------"
elif [[ "${bootloader}" == "2" && "${espmnt}" == "2" ]]; then
espprt="fail"
sleep 0.2
RED "
---------------------------------------------
### ${yellow}WARNING: ESP's size is not adequate ${red}###
---------------------------------------------"
elif [[ "${bootloader}" == "2" && "${espmnt}" == "1" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
fi
elif [[ -e "${esp_dev}" && "${espsize}" -ge "209715200" ]]; then
espprt="ok"
sleep 0.2
NC "
==> [EFI System Partition ${green}OK${nc}] "
fi
#..................................................................................................
if [[ "${fs}" == "1" ]]; then
if [[ "${sep_home}" == "y" ]]; then
if [[ -e "${home_dev}" ]]; then
@ -3501,7 +3415,7 @@ ${multi_swap}
fi
fi
fi
#..................................................................................................
if [[ "${swapmode}" == "1" ]]; then
if [[ -e "${swap_dev}" ]]; then
swapprt="ok"
@ -3523,7 +3437,7 @@ ${multi_swap}
--------------------------------------------"
fi
fi
#..................................................................................................
if [[ ${rootprt} == "fail" ]] || [[ "${espprt}" == "fail" ]] || [[ "${xbootprt}" == "fail" ]] || [[ ${homeprt} == "fail" ]] || [[ ${swapprt} == "fail" ]]; then
sanity="no"
else
@ -3569,7 +3483,7 @@ ${multi_swap}
ok
return 0
elif [[ "${partok}" == "n" ]]; then
if [[ "${multibooting}" == "n" ]]; then
if [[ "${multibooting}" == "n" ]]; then
if [[ "${smartpart}" == "y" ]]; then
reload
until manual_part; do : ; done
@ -4925,7 +4839,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}LUKS
"
#------------------------------------------------------------------------------------------
elif [[ "${fs}" == "2" ]]; then
mkfs.btrfs -L Root /dev/mapper/"${ENCROOT}" > /dev/null 2>&1 || err_abort
mkfs.btrfs -f -L Root /dev/mapper/"${ENCROOT}" > /dev/null 2>&1 || err_abort
mount /dev/mapper/"${ENCROOT}" /mnt > /dev/null 2>&1 || err_abort
btrfs subvolume create /mnt/@ > /dev/null 2>&1 || err_abort
btrfs subvolume create /mnt/@home > /dev/null 2>&1 || err_abort
@ -5398,7 +5312,7 @@ btldr_conf() {
if [[ "${bootloader}" == "1" ]]; then
cnfg
local stage_prompt="Systemd-boot"
if [[ "${espmnt}" == "1" ]]; then
if [[ "${espmnt}" == "1" && "${xbootloader}" == "yes" ]]; then
if [[ "${uki}" == "n" ]]; then
if arch-chroot /mnt <<-XBOOTCTL_NOUKI > /dev/null 2>&1 ; then
bootctl --esp-path=/efi --boot-path=/boot install || exit
@ -5425,7 +5339,34 @@ XBOOTCTL_UKI
stage_fail
fi
fi
elif [[ "${espmnt}" == "2" ]]; then
elif [[ "${espmnt}" == "1" && "${xbootloader}" == "no" ]]; then
if [[ "${uki}" == "n" ]]; then
if arch-chroot /mnt <<-BOOTCTL_NOUKI > /dev/null 2>&1 ; then
bootctl --esp-path=/efi install || exit
echo "default arch.conf" > /boot/loader/loader.conf || exit
cat <<-SDBOOT_CONF > /boot/loader/entries/arch.conf || exit
title ${entrname}
linux /vmlinuz-${kernel}
initrd /initramfs-${kernel}.img
options rw ${boot_opts}
SDBOOT_CONF
systemctl enable systemd-boot-update || exit
BOOTCTL_NOUKI
stage_ok
else
stage_fail
fi
elif [[ "${uki}" == "y" ]]; then
if arch-chroot /mnt <<-BOOTCTL_UKI > /dev/null 2>&1 ; then
bootctl --esp-path=/efi install || exit
systemctl enable systemd-boot-update || exit
BOOTCTL_UKI
stage_ok
else
stage_fail
fi
fi
else
if [[ "${uki}" == "n" ]]; then
if arch-chroot /mnt <<-BOOTCTL_NOUKI > /dev/null 2>&1 ; then
bootctl install || exit