From c57cc058fbea65e73feb1c6cea90ddcd69ecf5db Mon Sep 17 00:00:00 2001 From: natemaia Date: Fri, 15 May 2020 16:19:27 -0700 Subject: [PATCH] Add more automation to early setup --- archlabs-installer | 85 ++++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/archlabs-installer b/archlabs-installer index 21802db..c4166db 100755 --- a/archlabs-installer +++ b/archlabs-installer @@ -2836,7 +2836,7 @@ ofn() die() { # cleanup and exit the installer cleanly with exit code $1 - local e="$1" # when e is 127 unmount /run/archiso/bootmnt and reboot + local e="${1:-$?}" # when e is 127 unmount /run/archiso/bootmnt and reboot trap - INT tput cnorm @@ -3158,11 +3158,13 @@ umount_dir() chk_connect() { - msg "Network Connect" "\nVerifying network connection\n" 0 - if [[ $VM != 'none' ]] && hash nm-online > /dev/null 2>&1; then - nm-online > /dev/null 2>&1 - else - ping -qc1 'archlinux.org' > /dev/null 2>&1 + if [[ ! -f /tmp/new ]]; then + msg "Network Connect" "\nVerifying network connection\n" 0 + if [[ $VM != 'none' ]] && hash nm-online > /dev/null 2>&1; then + nm-online > /dev/null 2>&1 + else + ping -qc1 'archlinux.org' > /dev/null 2>&1 + fi fi } @@ -3248,7 +3250,7 @@ termcol # ensure the required packages are installed and that we're running as root on x86_64 architecture if ! hash dialog rsync find parted curl arch-chroot >/dev/null 2>&1; then - printf "One or more required packages are missing: dialog, curl, rsync, parted, findutils, arch-install-scripts" + echo "One or more required packages are missing: dialog, curl, rsync, parted, findutils, arch-install-scripts" die 1 elif (( UID != 0 )); then msg "Not Root" "\nThis installer must be run as root or using sudo.\n\nExiting..\n" 2 @@ -3256,34 +3258,23 @@ elif (( UID != 0 )); then elif ! grep -qwm 1 'lm' /proc/cpuinfo; then msg "Not x86_64 Architecture" "\nThis installer only supports x86_64 architectures.\n\nExiting..\n" 2 die 1 -elif [[ ! -d $MNT ]]; then - msg "No Mount Directory" "\nThe installer expects an existing directory for mounting.\n\nExiting..\n" 2 - die 1 fi # trap ^C to perform cleanup trap 'printf "\n^C\n" && die 1' INT -while getopts ":htl:dnr:b:" OPT; do +while getopts ":htl:Dnr:b:m:d:" OPT; do case "$OPT" in n) NOMOUNT=true ;; - r) - if [[ ! -b $OPTARG ]]; then - echo "invalid root: $OPTARG" - die 1 - fi - ROOT=$OPTARG - ;; - b) - if [[ ! -b $OPTARG ]]; then - echo "invalid boot: $OPTARG" - die 1 - fi - BOOT=$OPTARG + m) + MNT="$OPTARG" ;; d) + DIST="$OPTARG" + ;; + D) debug ;; h) @@ -3292,11 +3283,26 @@ while getopts ":htl:dnr:b:" OPT; do t) TEARFREE=true ;; + r) + if [[ ! -b $OPTARG ]]; then + msg "Invalid Root" "\nThe installer expects a full path to a block device for root.\n\nExiting..\n" 2 + die 1 + fi + ROOT="$OPTARG" + ;; + b) + if [[ ! -b $OPTARG ]]; then + msg "Invalid Boot" "\nThe installer expects a full path to a block device for boot.\n\nExiting..\n" 2 + die 1 + fi + BOOT="$OPTARG" + ;; l) if [[ "${!WM_SESSIONS[*]}" =~ $OPTARG ]]; then live "$OPTARG" else - echo "error: invalid session for -l, see -h for help"; die 1 + echo "error: invalid session for -l, see -h for help" + die 1 fi ;; \?) @@ -3306,12 +3312,20 @@ while getopts ":htl:dnr:b:" OPT; do esac done +if [[ ! -d $MNT ]]; then + msg "Invalid Mountpoint" "\nThe installer expects an existing directory for mounting.\n\nExiting..\n" 2 + die 1 +elif [[ -z $DIST ]]; then + msg "Invalid Distribution" "\nThe distribution name cannot be empty.\n\nExiting..\n" 2 + die 1 +fi + system_identify system_devices if [[ $NOMOUNT ]]; then - if [[ (-z $ROOT || ($SYS == 'UEFI' && -z $BOOT)) ]]; then - msg "Not Enough Partitions" "$_errpart" 0 + if [[ -z $ROOT || ($SYS == 'UEFI' && -z $BOOT) ]]; then + msg "Invalid Partitions" "$_errpart" 0 die 1 fi if [[ $BOOT ]]; then @@ -3320,12 +3334,13 @@ if [[ $NOMOUNT ]]; then fi fi -if [[ -f /tmp/hassetfont ]]; then +if [[ $TERM == 'linux' && -f /tmp/hassetfont ]]; then FONT="$(< /tmp/hassetfont)" setfont "$FONT" else fontsize=16 - while [[ ! -f /tmp/hassetfont ]]; do + FONT="ter-i${fontsize}n" + while [[ $TERM == 'linux' && ! -f /tmp/hassetfont ]]; do dlg fontsize menu "Font Size" "\nSelect a font size from the list below.\n\nDefault: 16" \ 12 "setfont ter-i12n" 14 "setfont ter-i14n" 16 "setfont ter-i16n" 18 "setfont ter-i18n" \ 20 "setfont ter-i20n" 22 "setfont ter-i22n" 24 "setfont ter-i24n" 28 "setfont ter-i28n" \ @@ -3349,6 +3364,18 @@ elif ! net_connect; then die 1 fi +if [[ ! -f /tmp/new ]]; then + msg "Installer Update" "\nChecking that the installer version is the newest.\n" 0 + if curl -fsSL https://bitbucket.org/archlabslinux/installer/raw/master/archlabs-installer -o /tmp/new; then + if (( $(vercmp "$(awk -F= '/^VER=/ {print $2}' /tmp/archlabs-installer)" "$VER") > 0 )); then + cp /tmp/new /usr/bin/archlabs-installer && exec archlabs-installer "$@" + die + fi + else + msg "Download Failed" "\nUnable to download the latest version, continuing with the current.\n" 2 + fi +fi + if [[ $NOMOUNT ]]; then wrn="\nA background install process will begin early when using -n flag\n\nSome files may be overwritten during the process\n" yesno "Data Warning" "$wrn\nProceed?\n" || die 0