diff --git a/Amelia.sh b/Amelia.sh index 8018e0e..7a3c343 100644 --- a/Amelia.sh +++ b/Amelia.sh @@ -1,7 +1,7 @@ #!/bin/bash # Amelia Installer -# Version: 5.4 +# Version: 5.5 set -euo pipefail trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR @@ -1126,7 +1126,7 @@ set_swapsize (){ local prompt="Swapsize" BLUE " -Enter Swapfile size ${bwhite}(in GiB)${blue}: " +Enter Swap size ${bwhite}(in GB)${blue}: " read -r -p " ==> " swapsize echo @@ -2227,7 +2227,8 @@ ______________________________________________ sleep 0.3 NC " -==> [${green}${gptdrive} OK${nc}] " +==> [${green}${gptdrive} OK${nc}] + " else invalid return 1 @@ -2247,17 +2248,186 @@ ______________________________________________ ################################################################################################### disk_mngr (){ - local prompt="Disks" sleep 0.3 NC " ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Partition Manager${nc} ${magenta}]${nc}------------------------------------${magenta}###${nc} + " + YELLOW " + + > Select a Mode: " + NC " + + [1] Automatic Partitioning + + [2] Manual Partitioning " + BLUE " + + +Enter a number: " + read -r -p " +==> " part_mode + + case "${part_mode}" in + 1) + until auto_part; do : ; done ;; + 2) + until manual_part; do : ; done ;; + "") + sleep 0.3 + RED " + + [!] Please select a Mode " + reload + return 1 ;; + *) + invalid + return 1 ;; + esac +} +################################################################################################### +auto_part(){ + + local prompt="Disks" + local stage_prompt="Auto-Partitioning" + sleep 0.3 + NC " + + +${magenta}###${nc}---------------------------------${magenta}[ ${bwhite}Automatic Partitioning${nc} ${magenta}]${nc}---------------------------------${magenta}###${nc} + " + sgdsk_nmbr=" " + while [[ -n "${sgdsk_nmbr}" ]]; do + YELLOW " + + > Select a disk to Manage: " + NC " + +${disks}" + BLUE " + + +Enter a disk number ${bwhite}(empty to skip)${blue}: " + read -r -p " +==> " sgdsk_nmbr + echo + + if [[ -n "${sgdsk_nmbr}" ]]; then + drive="$(echo "${disks}" | awk "\$1 == ${sgdsk_nmbr} {print \$2}")" + partsize="$(fdisk -l "${drive}" | grep -E 'bytes'| grep -E 'Disk'| awk "{print \$5}")" + rootsize="$((partsize*25/100/1024000000))" + if [[ -e "${drive}" ]]; then + if [[ "${run_as}" != "root" ]]; then + sleep 0.3 + RED " + + [!] Root Privileges Missing.. " + reload + until dsks_submn; do : ; done + fi + + YELLOW " + + > Select a Partition Layout Preset: " + RED " + + [!] WARNING: All data on selected disk will be ${nc}INSTANTLY ${red}destroyed [!] + " + NC " + + [1] Create 'ESP' and '/Root' + + [2] Create 'ESP', '/Root' and '/Swap' + + [3] Create 'ESP', '/Root' and '/Home' + + [4] Create 'ESP', '/Root', '/Home' and '/Swap' " + BLUE " + + +Enter a number: " + read -r -p " +==> " preset + echo + + case "${preset}" in + 1) + sgdisk -o "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 2:0:0 -t 2:8304 -c 2:Root "${drive}" > /dev/null 2>&1 || stage_fail ;; + 2) + until set_swapsize; do : ; done + sgdisk -o "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 3:0:0 -t 3:8304 -c 3:Root "${drive}" > /dev/null 2>&1 || stage_fail ;; + 3) + sgdisk -o "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 2:0:+"${rootsize}"G -t 2:8304 -c 2:Root "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 3:0:0 -t 3:8302 -c 3:Home "${drive}" > /dev/null 2>&1 || stage_fail ;; + 4) + until set_swapsize; do : ; done + sgdisk -o "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 1:0:+512M -t 1:ef00 -c 1:ESP "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 2:0:+"${swapsize}"G -t 2:8200 -c 2:Swap "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 3:0:+"${rootsize}"G -t 3:8304 -c 3:Root "${drive}" > /dev/null 2>&1 || stage_fail + sgdisk -n 4:0:0 -t 4:8302 -c 4:Home "${drive}" > /dev/null 2>&1 || stage_fail ;; + "") + sleep 0.3 + RED " + + [!] Please select a Preset " + reload + return 1 ;; + *) + invalid + return 1 ;; + esac + + sleep 0.3 + NC " +==> [${green}Disk ${drive} OK${nc}] + + " + else + invalid + return 1 + fi + else + skip + ok + + if [[ -z "${sanity}" ]]; then + until dsks_submn; do : ; done + elif [[ "${sanity}" == "no" ]]; then + until instl_dsk; do : ; done + elif [[ "${revision}" == "yes" ]]; then + return 0 + elif [[ "${sanity}" == "ok" ]]; then + if [[ "${install}" == "yes" ]]; then + return 0 + fi + until dsks_submn; do : ; done + fi + fi + done +} +################################################################################################### +manual_part(){ + + local prompt="Disks" + sleep 0.3 + NC " + + +${magenta}###${nc}-----------------------------------${magenta}[ ${bwhite}Manual Partitioning${nc} ${magenta}]${nc}-----------------------------------${magenta}###${nc} " cgdsk_nmbr=" " while [[ -n "${cgdsk_nmbr}" ]]; do line3 - NC " [ SUPPORTED PARTITION TYPES & MOUNTPOINTS: ]" + NC " SUPPORTED PARTITION TYPES & MOUNTPOINTS: " line2 REDBG " ------------------------------------------------------------------------------------------- " REDBG " ### Linux /Root x86-64 Partition [ GUID Code: 8304 ] Mountpoint: / ### " @@ -2648,7 +2818,9 @@ ${multi_swap} fi local prompt="Installation Disk" + if [[ -e "${boot_dev}" ]]; then bootsize="$(lsblk -b "${boot_dev}" --noheadings --output=size)" + fi if [[ ! -e "${root_dev}" && ! -e "${boot_dev}" ]]; then sanity="no" @@ -5180,6 +5352,11 @@ NVIDIA_HOOK autoswap="" bootsize="" retry_boot="" + sgdsk_nmbr="" + part_mode="" + preset="" + partsize="" + rootsize="" clear first_check