From 08c6a32048b0aff559e03719282726dd89563366 Mon Sep 17 00:00:00 2001 From: Jane Doe Date: Mon, 22 Sep 2025 00:21:51 +0300 Subject: [PATCH] Change: Adapt script to a recent systemd 'hostnamectl' change Change: 'Disk Management' stage/'Partition Manager' stage: Edit prompts for better aesthetics Add: Greatly re-worked the 'GPT Partitioner' stage. Now this stage comes with an extra submenu of options for user convenience and enhanced info/aesthetics --- Amelia.sh | 217 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 145 insertions(+), 72 deletions(-) diff --git a/Amelia.sh b/Amelia.sh index b1a1915..54ab829 100644 --- a/Amelia.sh +++ b/Amelia.sh @@ -2,7 +2,7 @@ # Amelia Installer # Source: https://gitlab.com/prism7/archery -# Version: 9.5.2 +# Version: 9.6.0 set -euo pipefail ################################################################################################### @@ -406,7 +406,6 @@ set_font() { ################################################################################################### slct_font() { - clear NC " @@ -535,10 +534,10 @@ machine_dtct() { ${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Machine Detection${nc} ${magenta}]${nc}------------------------------------${magenta}### " CPU="$(grep -E 'vendor_id' /proc/cpuinfo)" - hardw_model="$(hostnamectl | grep -E 'Hardware Model:'| sed 's| Hardware Model: ||')" - hardw_model_vend="$(hostnamectl | grep -E 'Hardware Model:'| sed 's| Hardware Model: ||' | awk "{print \$1}")" - hardw_vendor="$(hostnamectl | grep -E 'Hardware Vendor' | awk "{print \$3}")" - machine="$(hostnamectl | grep -E 'Chassis' | awk "{print \$2}")" + hardw_model="$(hostnamectl | grep -E "Hardware Model:" | sed 's| Hardware Model: ||')" + hardw_model_vend="$(hostnamectl | grep -E "Hardware Model:" | sed 's| Hardware Model: ||' | awk "{print \$1}")" + hardw_vendor="$(hostnamectl | grep -E "Hardware Vendor" | awk "{print \$3}")" + machine="$(hostnamectl | grep -Em 1 "Chassis" | awk "{print \$2}")" if [[ "${hypervisor}" != "none" ]]; then vm @@ -3249,7 +3248,7 @@ ${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}Disk > Select a Submenu: " NC " - [1] Disk GPT Manager + [1] GPT Manager [2] Partition Manager @@ -3266,7 +3265,7 @@ Enter a number: " 1) until gpt_mngr; do : ; done ;; 2) - until disk_mngr; do : ; done ;; + until part_mngr; do : ; done ;; "") until main_menu; do : ; done ;; *) @@ -3277,71 +3276,161 @@ Enter a number: " ################################################################################################### gpt_mngr() { - local prompt="Disk GPT" + local prompt="GPT Manager" sleep 0.2 NC " -${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}Disk GPT Manager${nc} ${magenta}]${nc}------------------------------------${magenta}### +${magenta}###${nc}---------------------------------------${magenta}[ ${bwhite}GPT Manager${nc} ${magenta}]${nc}---------------------------------------${magenta}### " gpt_dsk_nmbr=" " while [[ -n "${gpt_dsk_nmbr}" ]]; do - YELLOW " - > Select a disk to manage its GPT: + if [[ -z "${instl_drive}" ]]; then + YELLOW " - - - ### Select disk and: - - ### Type ${nc}'?'${yellow} for help, ${nc}'x'${yellow} for extra functionality or ${nc}'q'${yellow} to quit " - NC " + > Select a disk to manage its GPT: " + NC " ${disks}" - BLUE " + BLUE " Enter a disk number ${bwhite}(empty to skip)${blue}: " - read -r -p " + read -r -p " ==> " gpt_dsk_nmbr - echo + echo - if [[ -n "${gpt_dsk_nmbr}" ]]; then - gptdrive="$(echo "${disks}" | awk "\$1 == ${gpt_dsk_nmbr} {print \$2}")" - if [[ -e "${gptdrive}" ]]; then - if [[ "${run_as}" != "root" ]]; then - sleep 0.2 - RED " + if [[ -n "${gpt_dsk_nmbr}" ]]; then + gptdrive="$(echo "${disks}" | awk "\$1 == ${gpt_dsk_nmbr} {print \$2}")" + else + skip + ok + if [[ "${install}" == "yes" ]]; then + until instl_dsk; do : ; done + else + until dsks_submn; do : ; done + fi + return 0 + fi + fi + + if [[ -n "${instl_drive}" ]]; then + gptdrive="${instl_drive}" + fi + + if [[ -e "${gptdrive}" ]]; then + parttable="$(fdisk -l "${gptdrive}" 2> ${void} | grep '^Disklabel type' | awk "{print \$3}")" + if [[ "${parttable}" == "gpt" ]]; then + sleep 0.2 + NC " + --------------------- + ### ${green}Disk GPT OK ${nc}### + ---------------------" + elif [[ "${parttable}" != "gpt" && -z "${install}" ]]; then + sleep 0.2 + RED " + --------------------------------------- + ### ${yellow}No GPT found on selected disk ${red}### + ---------------------------------------" + fi + if [[ "${run_as}" != "root" ]]; then + sleep 0.2 + RED " ----------------------------------- ### ${yellow}Root Privileges Missing.. ${red}### -----------------------------------" + reload + until dsks_submn; do : ; done + fi + + YELLOW " + + > Make a Selection: " + NC " + + [1] Create new GPT table on selected disk [Destroy any existing GPT/MBR structures] + + [2] Use the program interactively [Expert Mode] + + [ ] Return to Previous Menu " + BLUE " + + +Enter a number: " + read -r -p " +==> " gptslct + echo + + if [[ "${gptslct}" == "1" ]]; then + sgdisk -Z "${gptdrive}" > ${void} && + sgdisk -o "${gptdrive}" > ${void} && + parttable="$(fdisk -l "${gptdrive}" 2> ${void} | grep '^Disklabel type' | awk "{print \$3}")" + if [[ "${parttable}" == "gpt" ]]; then + gptok="yes" + sleep 0.2 + NC " + +==> [${green}GPT Entries OK${nc}] + " + else + gptok="no" + sleep 0.2 + RED " + --------------------------------------- + ### ${yellow}No GPT found on selected disk ${red}### + ---------------------------------------" reload - until dsks_submn; do : ; done + return 1 fi + elif [[ "${gptslct}" == "2" ]]; then + YELLOW " + + ### Type ${nc}'?'${yellow} for help, ${nc}'x'${yellow} for extra functionality or ${nc}'q'${yellow} to quit " NC " + + ______________________________________________ " gdisk "${gptdrive}" - sleep 0.2 - NC " + parttable="$(fdisk -l "${gptdrive}" 2> ${void} | grep '^Disklabel type' | awk "{print \$3}")" + if [[ "${parttable}" == "gpt" ]]; then + gptok="yes" + sleep 0.2 + NC " -==> [${green}${gptdrive} OK${nc}] - " +==> [${green}GPT Entries OK${nc}] + " + else + gptok="no" + sleep 0.2 + RED " + + + --------------------------------------- + ### ${yellow}No GPT found on selected disk ${red}### + ---------------------------------------" + reload + return 1 + fi + elif [[ -z "${gptslct}" ]]; then + if [[ -n "${instl_drive}" ]]; then + skip + ok + until instl_dsk; do : ; done + elif [[ -z "${instl_drive}" ]]; then + reload + return 1 + fi else invalid return 1 fi else - skip - ok - - if [[ "${install}" == "yes" ]]; then - until instl_dsk; do : ; done - else - until dsks_submn; do : ; done - fi + invalid + return 1 fi done } @@ -3352,7 +3441,7 @@ ask_multibooting() { sleep 0.2 NC " -${magenta}###${nc}-------------------------------------${magenta}[ ${bwhite}MultiBoot Status${nc} ${magenta}]${nc}-------------------------------------${magenta}### +${magenta}###${nc}------------------------------------${magenta}[ ${bwhite}MultiBoot Status${nc} ${magenta}]${nc}------------------------------------${magenta}### " YELLOW " @@ -3401,7 +3490,7 @@ Enter [y/n]: " ok } ################################################################################################### -disk_mngr() { +part_mngr() { if [[ "${multibooting}" == "y" ]]; then until manual_part; do : ; done @@ -3646,7 +3735,7 @@ set_partsize() { ### Current ${nc}Root${yellow} partition's size is ${nc}[${rootsize} GiB]${yellow} - > Adjust Root Partition's size (by setting a custom ${nc}% ${yellow}value) ? " + > ${nc}Adjust ${yellow}Root Partition's size (by setting a custom ${nc}% ${yellow}value) ? " BLUE " @@ -3703,56 +3792,40 @@ partitioner() { local prompt="Disk ${sgdrive} Preset-Partitioned" fi - if [[ "${preset}" == "1" ]]; then wipefs -af "${sgdrive}" > "${void}" 2> "${log}" || stage_fail + if [[ "${gptok}" != "yes" ]]; then + sgdisk -Z "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -o "${sgdrive}" > "${void}" 2> "${log}" || stage_fail + gptok="yes" + fi + + if [[ "${preset}" == "1" ]]; then sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:0 -t2:8304 -c2:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail partprobe -s "${sgdrive}" > "${void}" 2> "${log}" || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi elif [[ "${preset}" == "2" ]]; then until set_swapsize; do : ; done - wipefs -af "${sgdrive}" > "${void}" 2> "${log}" || stage_fail - sgdisk -o "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n3:0:0 -t3:8304 -c3:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail partprobe -s "${sgdrive}" > "${void}" 2> "${log}" || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi elif [[ "${preset}" == "3" ]]; then - wipefs -af "${sgdrive}" > "${void}" 2> "${log}" || stage_fail - sgdisk -o "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:+"${rootsize}"G -t2:8304 -c2:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n3:0:0 -t3:8302 -c3:HOME "${sgdrive}" > "${void}" 2> "${log}" || stage_fail partprobe -s "${sgdrive}" > "${void}" 2> "${log}" || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi elif [[ "${preset}" == "4" ]]; then - wipefs -af "${sgdrive}" > "${void}" 2> "${log}" || stage_fail until set_swapsize; do : ; done - sgdisk -o "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n1:0:+512M -t1:ef00 -c1:ESP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n2:0:+"${swapsize}"G -t2:8200 -c2:SWAP "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n3:0:+"${rootsize}"G -t3:8304 -c3:ROOT "${sgdrive}" > "${void}" 2> "${log}" || stage_fail sgdisk -I -n4:0:0 -t4:8302 -c4:HOME "${sgdrive}" > "${void}" 2> "${log}" || stage_fail partprobe -s "${sgdrive}" > "${void}" 2> "${log}" || stage_fail - if [[ "${install}" == "yes" ]]; then - until sanity_check; do : ; done - else - ok - fi + fi + if [[ "${install}" == "yes" ]]; then + until sanity_check; do : ; done + else + ok fi } ################################################################################################### @@ -5787,7 +5860,7 @@ ${magenta}###${nc}-------------------------------${magenta}[ ${bwhite}Confirm In ################################################################################################### revise() { - reset=(xbootloader="" gfxconf="" vendor_slct="" vendor="" desktop="" terminal="" custompkgs="" customservices="" cust_bootopts="" REGDOM="" autoroot="" autoxboot="" autohome="" autoswap="" vendors="" lowlat="" nogsp="" sanity="" smartpart="" partok="" preset="" presetpart="" set_optm="" ask_param="" kill_watchdog="" genoptm="" desk_setup="" devel="" web="" web_pkg="" web_aur="" web_slct="" set_optm_slct="" oomd="" irqbalance="" thermald="" rngd="" rtkit="" tlp="" CRYPTPASS="" CRYPTPASS2="" askoptm="") + reset=(xbootloader="" gfxconf="" vendor_slct="" vendor="" desktop="" terminal="" custompkgs="" customservices="" cust_bootopts="" REGDOM="" autoroot="" autoxboot="" autohome="" autoswap="" vendors="" lowlat="" nogsp="" sanity="" smartpart="" partok="" preset="" presetpart="" set_optm="" ask_param="" kill_watchdog="" genoptm="" desk_setup="" devel="" web="" web_pkg="" web_aur="" web_slct="" set_optm_slct="" oomd="" irqbalance="" thermald="" rngd="" rtkit="" tlp="" CRYPTPASS="" CRYPTPASS2="" askoptm="" gptslct="" gptok="") export "${reset[@]}" gfxpkgs=() @@ -7420,7 +7493,7 @@ CUSTOMSERV log="Amelia_log.txt" disks="$(lsblk --nodeps --paths --noheadings --output=name,size,model | cat --number)" trg="" - vars=(LOCALESET="" SETLOCALE="" lcl_slct="" USERNAME="" kernelnmbr="" fs="" gfxcount="" gfxcard="" intelcount="" intelcards="" nvidiacount="" nvidiacards="" amdcount="" amdcards="" gfxconf="" gfx_conf="" gfx_setup="" vendor="" vendor1="" vendor2="" vendor3="" vendor_slct="" desktop="" terminal="" efi_entr_del="" sanity="" install="" bootldr_pkgs="" devel="" REGDOM="" gfx_bootopts="" btrfs_bootopts="" trim="" swapmode="" homecrypt="" greeter="" greeternmbr="" cust_bootopts="" vmpkgs="" vm_services="" perf_stream="" displaymanager="" wireless_reg="" bitness="" bootloader="" gfx_slct="" espsize="" autoroot="" autoesp="" autoxboot="" autohome="" autoswap="" rootprt="" espprt="" xbootprt="" homeprt="" swapprt="" partok="" instl_drive="" sgdsk_nmbr="" part_mode="" preset="" capacity="" cap_gib="" rootsize="" sgdrive="" cgdrive="" smartpart="" presetpart="" prcnt="" roottype="" stage_prompt="" zram="" zram_bootopts="" xbootloader="" multibooting="" hypervisor="" mkinitcpio_mods="" mkinitcpio_bins="" uki="" ukify="" cng_espmnt="" sep_home="" encr_swap_bootopts="" uefimode="" luks_encrypt="" nrg_plc="" multilib="" nvname="" nogsp="" luks_root="" luks_swap="" luks_home="" installation="" kill_watchdog="" oomd="" setrescue="" lowlat="" vendors="" dev="" web="" web_pkg="" web_aur="" web_slct="" printer="" print_pkgs="" shellnmbr="" shell="" shellname="" shellname2="" shell_pkgs="" genoptm="" set_optm="" ask_param="" desk_setup="" set_optm_slct="" irqbalance="" thermald="" rngd="" rtkit="" tlp="" CRYPTPASS="" CRYPTPASS2="" askoptm="") + vars=(LOCALESET="" SETLOCALE="" lcl_slct="" USERNAME="" kernelnmbr="" fs="" gfxcount="" gfxcard="" intelcount="" intelcards="" nvidiacount="" nvidiacards="" amdcount="" amdcards="" gfxconf="" gfx_conf="" gfx_setup="" vendor="" vendor1="" vendor2="" vendor3="" vendor_slct="" desktop="" terminal="" efi_entr_del="" sanity="" install="" bootldr_pkgs="" devel="" REGDOM="" gfx_bootopts="" btrfs_bootopts="" trim="" swapmode="" homecrypt="" greeter="" greeternmbr="" cust_bootopts="" vmpkgs="" vm_services="" perf_stream="" displaymanager="" wireless_reg="" bitness="" bootloader="" gfx_slct="" espsize="" autoroot="" autoesp="" autoxboot="" autohome="" autoswap="" rootprt="" espprt="" xbootprt="" homeprt="" swapprt="" partok="" instl_drive="" sgdsk_nmbr="" part_mode="" preset="" capacity="" cap_gib="" rootsize="" sgdrive="" cgdrive="" smartpart="" presetpart="" prcnt="" roottype="" stage_prompt="" zram="" zram_bootopts="" xbootloader="" multibooting="" hypervisor="" mkinitcpio_mods="" mkinitcpio_bins="" uki="" ukify="" cng_espmnt="" sep_home="" encr_swap_bootopts="" uefimode="" luks_encrypt="" nrg_plc="" multilib="" nvname="" nogsp="" luks_root="" luks_swap="" luks_home="" installation="" kill_watchdog="" oomd="" setrescue="" lowlat="" vendors="" dev="" web="" web_pkg="" web_aur="" web_slct="" printer="" print_pkgs="" shellnmbr="" shell="" shellname="" shellname2="" shell_pkgs="" genoptm="" set_optm="" ask_param="" desk_setup="" set_optm_slct="" irqbalance="" thermald="" rngd="" rtkit="" tlp="" CRYPTPASS="" CRYPTPASS2="" askoptm="" gptslct="" gptok="") export "${vars[@]}" sleep 0.2 CYANBG "************************************************************************************************* "