From a69659a550aa2a2f558e5aac61bdb2977bd68a66 Mon Sep 17 00:00:00 2001 From: Jane Doe Date: Sat, 10 Feb 2024 18:22:41 +0000 Subject: [PATCH] Added 'set -euo pipefail' flag Set some variables (only to comply with the 'set -u' flag) Replaced some color functions with simple 'echo' commands 'Secure Erasure': Now a prompt informs about the need to reboot system after erasing the disk, which also takes place automatically when done 'chroot_conf' > 'Custom System Configuration': Now when 'grub' is selected, enabling services will take effect only if a(ny) service(s) have been first set to be enabled 'chroot_conf': Renamed a few 'HERE-docs' for clarification 'Select Desktop' > 'Custom System' > 'Custom Packages Setup': Now, if 'lightdm' has been set as a custom package, a prompt will ask you to select between 'lightdm-gtk-greeter' & 'lightdm-slick-greeter' for convenience, and said greeter will be automatically installed and also lightdm automatically configured for said greeter. NOTE: The user only has to set 'lightdm' service to be enabled in next step --- Amelia.sh | 246 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 170 insertions(+), 76 deletions(-) diff --git a/Amelia.sh b/Amelia.sh index 78e7923..9134172 100644 --- a/Amelia.sh +++ b/Amelia.sh @@ -1,8 +1,9 @@ #!/bin/bash # Amelia Installer -# Version: 3.3 +# Version: 3.4 +set -euo pipefail ########################################################################################### # ### COLOR FUNCTIONS ### @@ -261,7 +262,7 @@ first_check (){ REDBG " ---------------------------------------- ### WARNING: High Risk Of Data Loss ### ----------------------------------------" - NC + echo else PURPLE " ### The installer must be run as Root (Not 'wheel' group user) " @@ -386,7 +387,7 @@ ${purple}###${nc} Main Menu ${purple}###${nc} [3] Disk Management - [4] Start Installation (Auto-Navigated) " + [4] Start Installation (${cyan}Auto-Navigation${nc}) " BLUE " @@ -564,7 +565,7 @@ ${purple}###${nc} User Setup ${purple}###${nc} Enter a username: " read -p " ==> " USERNAME - NC + echo if [[ -z "${USERNAME}" ]]; then sleep 0.5 @@ -584,7 +585,7 @@ Enter a username: " Enter a password for${nc} ${cyan}"${USERNAME}"${blue}: " read -p " ==> " USERPASSWD - NC + echo if [[ -z "${USERPASSWD}" ]]; then sleep 0.5 @@ -598,7 +599,7 @@ Enter a password for${nc} ${cyan}"${USERNAME}"${blue}: " Re-enter${nc} ${cyan}"${USERNAME}"'s ${blue}password: " read -p " ==> " USERPASSWD2 - NC + echo if [[ "${USERPASSWD}" != "${USERPASSWD2}" ]]; then sleep 0.5 @@ -639,7 +640,7 @@ Enter a password for the${nc}${cyan} Root ${blue}user: " Re-enter${nc} ${cyan}Root ${blue}user's password: " read -p " ==> " ROOTPASSWD2 - NC + echo if [[ "${ROOTPASSWD}" != "${ROOTPASSWD2}" ]]; then sleep 0.5 @@ -665,7 +666,7 @@ ${purple}###${nc} Hostname Setup ${purple}###${nc} Enter a hostname: " read -p " ==> " HOSTNAME - NC + echo if [[ -z "${HOSTNAME}" ]]; then sleep 0.5 @@ -891,7 +892,7 @@ ${purple}###${nc} Filesystem Selection ${purple}###${nc} Enter a number: " read -p " ==> " fs - NC + echo case "${fs}" in 1) @@ -1016,7 +1017,7 @@ set_swapsize (){ Enter Swapfile size ${bwhite}(in GiB)${blue}: " read -p " ==> " swapsize - NC + echo if [[ -z "${swapsize}" ]]; then sleep 0.5 @@ -1085,7 +1086,7 @@ ${purple}###${nc} Graphics Setup ${purple}###${nc} if [[ "${vendor}" == "Virtual Machine" ]]; then vgaconf="n" - NC + echo skip ok return 0 @@ -1129,7 +1130,7 @@ Enter a number ${bwhite}(empty to skip)${blue}: " ==> " islands if [[ -z "${islands}" ]]; then skip - NC + echo elif [[ "${islands}" == "1" ]]; then NC " @@ -1196,12 +1197,12 @@ Enter a number: " ==> [${green}Turing+ OK${nc}] " else - NC + echo invalid return 1 fi else - NC + echo invalid return 1 fi @@ -1257,7 +1258,7 @@ Enter a number: " ### ""${vendor}"" Graphics will be automatically configured " elif [[ "${vgaconf}" == "n" ]]; then - NC + echo skip else invalid @@ -1391,11 +1392,11 @@ Enter [y/n]: " ==> [${green}Terminal OK${nc}] " ;; n) - NC + echo skip ;; "") sleep 0.5 - NC + echo RED " [!] Please type 'y' or 'n' to continue " reload @@ -1434,11 +1435,11 @@ Enter [y/n]: " ==> [${green}Terminal OK${nc}] " ;; n) - NC + echo skip ;; "") sleep 0.5 - NC + echo RED " [!] Please type 'y' or 'n' to continue " reload @@ -1495,11 +1496,11 @@ Enter [y/n]: " ==> [${green}base-devel OK${nc}] " ;; n) - NC + echo skip ;; "") sleep 0.5 - NC + echo RED " [!] Please type 'y' or 'n' to continue " reload @@ -1528,11 +1529,11 @@ Enter [y/n]: " y) add_prmtrs ;; n) - NC + echo skip ;; "") sleep 0.5 - NC + echo RED " [!] Please type 'y' or 'n' to continue " reload @@ -1575,6 +1576,59 @@ Enter your packages ${bwhite}(space-seperated)${blue}: " [!] Please enter package(s) to continue " reload return 1 + + elif [[ "${custompkgs}" =~ "lightdm" ]]; then + + echo + sleep 0.5 + NC " +_________________________________ + +${purple}###${nc} Lightdm Greeter Selection ${purple}###${nc} + " + YELLOW " + + > Select a Greeter: " + NC " + + [1] Gtk + + [2] Slick " + BLUE " + + +Enter a number: " + read -p " +==> " greeternmbr + + case "${greeternmbr}" in + + 1) + greeter="lightdm-gtk-greeter" + sleep 0.5 + NC " + +==> [${green}Lightdm Gtk Greeter OK${nc}] " ;; + + 2) + greeter="lightdm-slick-greeter" + sleep 0.5 + NC " + +==> [${green}Lightdm Slick Greeter OK${nc}] " ;; + + "") + sleep 0.5 + echo + RED " + [!] Please make a selection.. " + reload + return 1 ;; + *) + invalid + return 1 ;; + esac + else ok fi @@ -1600,7 +1654,7 @@ Enter your services ${bwhite}(space-seperated)${blue}: " ==> " customservices if [[ -z "${customservices}" ]]; then - NC + echo skip else ok @@ -1627,7 +1681,7 @@ Enter your Kernel parameters ${bwhite}(space-seperated)${blue}: " ==> " cust_bootopts if [[ -z "${cust_bootopts}" ]]; then - NC + echo skip else ok @@ -1660,7 +1714,7 @@ ${purple}###${nc} EFI Boot Entries Deletion ${purple}###${nc} Enter a${nc} ${cyan}BootOrder${blue} number for Deletion ${bwhite}(empty to skip)${blue}: " read -p " ==> " boot_entry - NC + echo if [[ -n "${boot_entry}" ]]; then @@ -1707,7 +1761,7 @@ ${purple}###${nc} Wireless Regulatory Domain Setup ${purple}###${nc} " skip ok - NC + echo return 0 fi @@ -1718,7 +1772,7 @@ Enter your Country Code, ie:${nc} ${cyan}US ${bwhite}(empty to skip)${blue}: " ==> " REGDOM if [[ -z "${REGDOM}" ]]; then - NC + echo skip elif [[ "${REGDOM}" =~ [[:lower:]] ]]; then sleep 0.5 @@ -1955,7 +2009,7 @@ ${disks} " Enter a disk number: " read -p " ==> " instl_dsk_nmbr - NC + echo if [[ -n "${instl_dsk_nmbr}" ]]; then instl_drive="$(echo "${disks}" | awk "\$1 == "${instl_dsk_nmbr}" {print \$2}")" @@ -2162,7 +2216,7 @@ ${purple}###${nc} Encryption Setup ${purple}###${nc} " read -p " ==> " encrypt - NC + echo if [[ "${encrypt}" == "no" ]]; then skip @@ -2179,7 +2233,7 @@ ${purple}###${nc} Encryption Setup ${purple}###${nc} Enter a name: " read -p " ==> " ENCROOT - NC + echo if [[ -z "${ENCROOT}" ]]; then sleep 0.5 @@ -2220,7 +2274,7 @@ Enter a name: " " read -p " ==> " homecrypt - NC + echo if [[ "${homecrypt}" == "no" ]]; then skip @@ -2235,7 +2289,7 @@ Enter a name: " Enter a name: " read -p " ==> " ENCRHOME - NC + echo if [[ -z "${ENCRHOME}" ]]; then sleep 0.5 @@ -2400,7 +2454,6 @@ instl (){ if [[ "${encrypt}" == "no" ]]; then until set_mode; do : ; done until confirm_status; do : ; done - return 0 elif [[ "${encrypt}" == "yes" ]]; then until sec_erase; do : ; done @@ -2416,7 +2469,6 @@ instl (){ fi until chroot_conf; do : ; done - return 0 fi } ########################################################################################### @@ -2460,7 +2512,7 @@ ${purple}###${nc} Mode Selection ${purple}###${nc} Enter a Mode number: " read -p " ==> " setmode - NC + echo case "${setmode}" in 1) @@ -2488,7 +2540,7 @@ Enter a Mode number: " " sleep 0.5 lsblk -f - NC + echo sleep 1 } ########################################################################################### @@ -2879,7 +2931,7 @@ ask_homepart_form (){ " read -p " ==> " homeform - NC + echo if [[ "${homeform}" == "y" ]]; then if mkdir -pv /mnt/home; then @@ -3036,7 +3088,7 @@ ${volumes} " Enter your${nc} ${cyan}"${roottype}"${blue} partition number: " read -p " ==> " mntroot_nmbr - NC + echo if [[ -n "${mntroot_nmbr}" ]]; then rootpart="$(echo "${volumes}" | awk "\$1 == "${mntroot_nmbr}" { print \$2}")" @@ -3103,7 +3155,7 @@ ${volumes} " Enter your${nc} ${cyan}/BOOT${blue} partition number: " read -p " ==> " mntboot_nmbr - NC + echo if [[ -n "${mntboot_nmbr}" ]]; then bootpart="$(echo "${volumes}" | awk "\$1 == "${mntboot_nmbr}" { print \$2}")" @@ -3148,7 +3200,7 @@ ${volumes} " Enter your${nc} ${cyan}/HOME${blue} partition number: " read -p " ==> " mnthome_nmbr - NC + echo if [[ -n "${mnthome_nmbr}" ]]; then homepart="$(echo "${volumes}" | awk "\$1 == "${mnthome_nmbr}" { print \$2}")" @@ -3193,7 +3245,6 @@ ${purple}###${nc} Confirm Installation Status ${purple}###${nc} " read -p " ==> " agree - NC if [[ "${agree}" == "yes" ]]; then ok @@ -3206,7 +3257,6 @@ ${purple}###${nc} Confirm Installation Status ${purple}###${nc} until wireless_regdom; do : ; done fi until chroot_conf; do : ; done - return 0 elif [[ "${agree}" == "no" ]]; then reload @@ -3229,7 +3279,6 @@ ${purple}###${nc} Unmount Filesystems ${purple}###${nc} fi revise - return 0 else sleep 0.5 @@ -3276,7 +3325,9 @@ ${purple}###${nc} Secure Disk Erasure ${purple}###${nc} while [[ -n "${erase_dsk_nmbr}" ]]; do YELLOW " - > Select a disk for Secure Erasure ${red}[!] (CAUTION) [!]${nc} " + > Select a disk for Secure Erasure ${red}[!] (CAUTION) [!]${yellow} + + ### A ${nc}reboot${yellow} is mandatory and will take effect imediatelly when done " NC " @@ -3287,32 +3338,35 @@ ${disks}" Enter a disk number ${bwhite}(empty to skip)${blue}: " read -p " ==> " erase_dsk_nmbr - NC + echo if [[ -n "${erase_dsk_nmbr}" ]]; then erasedrive="$(echo "${disks}" | awk "\$1 == "${erase_dsk_nmbr}" {print \$2}")" if [[ -e "${erasedrive}" ]]; then cryptsetup open --type plain -d /dev/urandom "${erasedrive}" temp && dd if=/dev/zero of=/dev/mapper/temp status=progress bs=1M oflag=direct && - if cryptsetup close temp; then - sleep 0.5 - NC " + cryptsetup close temp + sleep 0.5 + NC " ==> [${green}Drive "${erasedrive}" Erased OK${nc}] " - else - err_try - return 1 - fi + + sleep 1 + NC " + +==> [${green}Rebooting${nc}] " + sleep 3 + reboot else invalid return 1 fi else skip + ok fi done - ok } ########################################################################################### luks (){ @@ -3449,7 +3503,7 @@ ${purple}###${nc} LUKS Encryption ${purple}###${nc} " read -p " ==> " homeform - NC + echo if [[ "${homeform}" == "y" ]]; then if mkfs.ext4 -F -L HOME "${home_dev}"; then @@ -3514,7 +3568,7 @@ ${purple}###${nc} LUKS Encryption ${purple}###${nc} " sleep 0.5 lsblk -f - NC + echo sleep 1 } ########################################################################################### @@ -3543,7 +3597,7 @@ ${purple}###${nc} Optimize PacMan ${purple}###${nc} Enter country name or code ${bwhite}(Empty for Defaults)${blue}: " read -p " ==> " COUNTRY - NC + echo if [[ -z "${COUNTRY}" ]] ; then sleep 0.5 @@ -3577,7 +3631,7 @@ Enter country name or code ${bwhite}(Empty for Defaults)${blue}: " Enter [y/n]: " read -p " ==> " parallel - NC + echo if [[ "${parallel}" == "y" ]]; then sleep 0.5 @@ -3598,7 +3652,7 @@ Enter [y/n]: " Enter a number: " read -p " ==> " parallelnmbr - NC + echo if [[ "${parallelnmbr}" =~ ^(2|3|4|5)$ ]]; then sed -i "s|#ParallelDownloads = 5|ParallelDownloads = "${parallelnmbr}"|g" /etc/pacman.conf @@ -3721,9 +3775,9 @@ ${purple}###${nc} Pacstrap System ${purple}###${nc} 11) # NOTE: Custom System: if [[ "${vendor}" == "Virtual Machine" ]]; then - deskpkgs="base sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}"" + deskpkgs="base sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}" "${greeter}"" else - deskpkgs="base linux-firmware sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}" "${vgapkgs}" "${wireless_reg}"" + deskpkgs="base linux-firmware sudo "${bootldr_pkgs}" "${custompkgs}" "${fstools}" "${kernel}" "${microcode}" "${vgapkgs}" "${wireless_reg}" "${greeter}"" fi ;; esac @@ -3829,7 +3883,7 @@ REGDOM ########################################################################################### chroot_conf (){ - local prompt="System" + local prompt="Arch Linux" sleep 0.5 NC " _________________________________ @@ -3946,7 +4000,7 @@ ${purple}###${nc} Chroot & Configure System ${purple}###${nc} if [[ "${packages}" =~ ^(1|3|4|5|6|7|8|9|10)$ ]]; then - arch-chroot /mnt <<-SYSTEM + arch-chroot /mnt <<-VANILLA_CONF sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen && locale-gen && echo LANG=${SETLOCALE} > /etc/locale.conf && @@ -3971,7 +4025,7 @@ ${purple}###${nc} Chroot & Configure System ${purple}###${nc} echo " %wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoedits && visudo -c /etc/sudoers.d/sudoedits -SYSTEM +VANILLA_CONF if [[ -f /mnt/etc/lightdm/lightdm.conf ]]; then if [[ "${packages}" == "6" ]]; then @@ -3979,13 +4033,13 @@ SYSTEM sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-deepin-greeter|g' /etc/lightdm/lightdm.conf DEEPIN elif [[ "${packages}" == "7" ]]; then - arch-chroot /mnt <<-BUDGIE + arch-chroot /mnt <<-GTK sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf -BUDGIE +GTK else - arch-chroot /mnt <<-LIGHTDM + arch-chroot /mnt <<-SLICK sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf -LIGHTDM +SLICK fi fi @@ -4001,6 +4055,7 @@ LIGHTDM options rw ${boot_opts}" | tee /boot/loader/entries/arch.conf && systemctl enable systemd-boot-update ${bluetooth} ${displaymanager} ${network} ${trim} BOOTCTL + elif [[ "${bootloader}" == "2" ]]; then arch-chroot /mnt <<-GRUB grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB && @@ -4023,7 +4078,6 @@ GRUBBTRFSD sed -i "/^#GRUB_TERMINAL_OUTPUT=console/s/^#//" /etc/default/grub && grub-mkconfig -o /boot/grub/grub.cfg NVIDIAGRUB - fi fi @@ -4069,7 +4123,7 @@ NVIDIAHOOK NRG fi - arch-chroot /mnt <<-OPTIMIZED + arch-chroot /mnt <<-OPTIMIZED_CONF sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen && locale-gen && echo LANG=${SETLOCALE} > /etc/locale.conf && @@ -4205,7 +4259,7 @@ NRG %wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoedits && visudo -c /etc/sudoers.d/sudoedits && systemctl enable avahi-daemon bluetooth cups ipp-usb NetworkManager rngd sddm systemd-boot-update ufw ${trim} -OPTIMIZED +OPTIMIZED_CONF if [[ "${vgaconf}" == "y" && "${vendor}" == "Nvidia" ]]; then if [[ "${kernelnmbr}" == "1" ]] || [[ "${kernelnmbr}" == "2" && "${family}" == "1" ]] || [[ "${kernelnmbr}" == "2" && "${family}" == "2" && ${nvdriver} == "2" ]]; then @@ -4242,7 +4296,7 @@ NVIDIAHOOK # NOTE: Custom System Configuration (Add any extra configuration below): if [[ "${packages}" == "11" ]]; then - arch-chroot /mnt <<-CUSTOM + arch-chroot /mnt <<-CUSTOM_CONF sed -i "/^#${SETLOCALE}/s/^#//" /etc/locale.gen && locale-gen && echo LANG=${SETLOCALE} > /etc/locale.conf && @@ -4266,7 +4320,20 @@ NVIDIAHOOK echo " %wheel ALL=(ALL) ALL" | tee /etc/sudoers.d/sudoedits && visudo -c /etc/sudoers.d/sudoedits -CUSTOM +CUSTOM_CONF + + if [[ -f /mnt/etc/lightdm/lightdm.conf ]]; then + + if [[ "${greeternmbr}" == "1" ]]; then + arch-chroot /mnt <<-GTK + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-gtk-greeter|g' /etc/lightdm/lightdm.conf +GTK + elif [[ "${greeternmbr}" == "2" ]]; then + arch-chroot /mnt <<-SLICK + sed -i 's|^#greeter-session=example-gtk-gnome|greeter-session=lightdm-slick-greeter|g' /etc/lightdm/lightdm.conf +SLICK + fi + fi if [[ "${bootloader}" == "1" ]]; then arch-chroot /mnt <<-BOOTCTL @@ -4280,6 +4347,7 @@ CUSTOM options rw ${boot_opts}" | tee /boot/loader/entries/arch.conf && systemctl enable systemd-boot-update ${customservices} ${trim} BOOTCTL + elif [[ "${bootloader}" == "2" ]]; then arch-chroot /mnt <<-GRUB grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB && @@ -4288,8 +4356,14 @@ BOOTCTL -e "/^#GRUB_DISABLE_OS_PROBER=false/s/^#//" \ /etc/default/grub && grub-mkconfig -o /boot/grub/grub.cfg - systemctl enable ${customservices} ${trim} GRUB + + if [[ -n "${customservices}" || -n "${trim}" ]]; then + arch-chroot /mnt <<-SERVICES + systemctl enable ${customservices} ${trim} +SERVICES + fi + if [[ "${bootloader}" == "2" && "${fs}" == "2" ]]; then arch-chroot /mnt <<-GRUBBTRFSD systemctl enable grub-btrfsd @@ -4339,12 +4413,32 @@ NVIDIAHOOK # ### END FUNCTIONS ### ########################################################################################### - clear - set -eo pipefail run_as="$(whoami)" tty="$(tty)" disks="$(lsblk --nodeps --paths --noheadings --output=name,size,model | cat --number)" + SETLOCALE="" + USERNAME="" + kernelnmbr="" + fs="" + vgaconf="" + packages="" + efi_entr_del="" + wrlss_rgd="" + sanity="" + install="" + bootldr_pkgs="" + devel="" + REGDOM="" + vga_bootopts="" + btrfs_opts="" + trim="" + swapmode="" + homecrypt="" + greeter="" + revision="" + greeternmbr="" + clear first_check sleep 1 CYAN "