Cleanup variable declaration, allow unbound

This commit is contained in:
natemaia 2019-09-23 23:39:10 -07:00
parent c8d36a73ab
commit 9351190609

View File

@ -5,210 +5,77 @@
# Some ideas and code reworked from other resources # Some ideas and code reworked from other resources
# AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due # AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due
VER=2.0.72
# linux distributor, if unset will be ArchLabs
# this can be set in the environment prior to install, eg.
#
# $ DIST="My Distro" archlabs-installer
#
# will result in "My Distro Linux" used where needed
: ${DIST="ArchLabs"}
VER="2.0.71" # installer version
MNT="/mnt" # install mountpoint
ANS="/tmp/ans" # dialog answer file
# ------------------------------------------------------ #
# When manually mounting your partitions, you need
# to set these values to avoid using the mount menu.
# ------------------------------------------------------ #
# root partition, eg. /dev/sda2
ROOT_PART=''
# boot partition, required on UEFI eg. /dev/sda1
BOOT_PART=''
# boot device, used for some bootloaders eg. /dev/sda
BOOT_DEV=''
# bootloader to use, can be:
# UEFI: grub, syslinux, efistub, systemd-boot, refind-efi
# BIOS: grub, syslinux
BOOTLDR=''
# directory to mount the boot partition (if any) for most bootloaders
# this will need to be 'boot' however a popular one for grub is 'boot/efi'
BOOTDIR='boot'
# ------------------------------------------------------ #
# bulk default values { # bulk default values {
# these values will be selected during the install, it is not recommended : ${DIST=ArchLabs} # distro name if not set
# to edit them here unless you know what you're doing. MNT=/mnt # install mountpoint
ANS=/tmp/ans # dialog answer file
BOOTDIR=boot # location to mount boot partition
FONT=ter-i16n # font used for the linux console
HOOKS=shutdown # list of additional mkinitcpio HOOKS
SEL=0 # currently selected menu item
SYS=Unknown # bios type to be determined: UEFI/BIOS
ERR=/tmp/errlog # error log used internally
DBG=/tmp/debuglog # debug log when passed -d
RUN=/run/archiso/bootmnt/arch/boot # path for live system /boot
VM="$(dmesg | grep -i hypervisor)" # system running in a virtual machine
export DIALOGOPTS="--cr-wrap" # see `man dialog`
SWAP_PART='' # swap partition or file path
SWAP_SIZE='' # swap size, only used when creating a swapfile
EXMNT='' # holder for additional partitions while mounting
EXMNTS='' # when an extra partition is mounted append it's info
FONT="ter-i16n" # font used for the linux console
HOOKS="shutdown" # list of additional HOOKS to add in /etc/mkinitcpio.conf
LOGIN_TYPE='' # login manager can be: lightdm, xinit, ly
LOGIN_WM='' # default login session to be placed in ~/.xinitrc
LOGINRC='' # login shell rc file, eg. .zprofile, .bash_profile, .profile
AUTOLOGIN='' # enable autologin for xinit
INSTALL_WMS='' # space separated list of chosen wm/de
WM_PKGS='' # list of packages added during wm/de choice (not user edited)
PACKAGES='' # list of all packages to install including WM_PKGS (not user edited)
USER_PKGS='' # packages selected by the user during install
NEWUSER='' # username for the new user
USER_PASS='' # new user's password
ROOT_PASS='' # root password
KERNEL='' # linux kernel, can be: linux, linux-lts, linux-zen, or linux-hardened
MYSHELL='' # shell to use for the system, eg. zsh
UCODE='' # cpu microcode (if any), can be: amd-ucode, intel-ucode
LUKS='' # empty when not using encryption
LUKS_DEV='' # boot parameter string for LUKS
LUKS_PART='' # partition used for encryption
LUKS_PASS='' # encryption password
LUKS_UUID='' # encrypted partition UUID
LUKS_NAME='' # name used for encryption
LVM='' # empty when not using lvm
LVM_PARTS='' # partitions used for volume group
VGROUP_MB=0 # available space in volume group
WARN='' # issued mounting/partitioning warning
SEP_BOOT='' # separate boot partition for BIOS
CONFIG_DONE='' # basic configuration is finished
FORMATTED='' # partitions we formatted and should allow skipping
AUTO_ROOT_PART='' # root value from auto partition
AUTO_BOOT_PART='' # boot value from auto partition
SEL=0 # currently selected menu item
ERR="/tmp/errlog" # error log used internally
DBG="/tmp/debuglog" # debug log when passed -d
RUN="/run/archiso/bootmnt/arch/boot" # path for live system /boot
VM="$(dmesg | grep -i "hypervisor")" # system running in a virtual machine
SYS='Unknown' # bios type to be determined: UEFI/BIOS
export DIALOGOPTS="--cr-wrap" # see `man dialog`
# baseline
BASE_PKGS="base-devel xorg xorg-drivers sudo git gvfs gtk3 libmad libmatroska " BASE_PKGS="base-devel xorg xorg-drivers sudo git gvfs gtk3 libmad libmatroska "
BASE_PKGS+="tumbler playerctl pulseaudio pulseaudio-alsa pavucontrol pamixer scrot " BASE_PKGS+="tumbler playerctl pulseaudio pulseaudio-alsa pavucontrol pamixer scrot "
BASE_PKGS+="xdg-user-dirs ffmpeg gstreamer gst-libav gst-plugins-base gst-plugins-good" BASE_PKGS+="xdg-user-dirs ffmpeg gstreamer gst-libav gst-plugins-base gst-plugins-good"
# archlabs base
AL_BASE_PKGS="archlabs-skel-base archlabs-fonts archlabs-themes " AL_BASE_PKGS="archlabs-skel-base archlabs-fonts archlabs-themes "
AL_BASE_PKGS+="archlabs-icons archlabs-wallpapers archlabs-scripts archlabs-baph" AL_BASE_PKGS+="archlabs-icons archlabs-wallpapers archlabs-scripts archlabs-baph"
# extras for window managers
WM_BASE_PKGS="arandr archlabs-networkmanager-dmenu nitrogen polkit-gnome " WM_BASE_PKGS="arandr archlabs-networkmanager-dmenu nitrogen polkit-gnome "
WM_BASE_PKGS+="volumeicon xclip exo laptop-detect xdotool compton wmctrl feh " WM_BASE_PKGS+="volumeicon xclip exo laptop-detect xdotool compton wmctrl feh "
WM_BASE_PKGS+="gnome-keyring dunst gsimplecal xfce4-power-manager xfce4-settings" WM_BASE_PKGS+="gnome-keyring dunst gsimplecal xfce4-power-manager xfce4-settings"
# }
# giant ugly variable container :P {
# system RAM in MB
SYS_MEM="$(awk '/MemTotal/ {print int($2 / 1024) "M"}' /proc/meminfo)" SYS_MEM="$(awk '/MemTotal/ {print int($2 / 1024) "M"}' /proc/meminfo)"
# locales from /etc/locale.gen
LOCALES="$(awk '/\.UTF-8/ {gsub(/# .*|#/, ""); if ($1) {print $1 " - "}}' /etc/locale.gen)" LOCALES="$(awk '/\.UTF-8/ {gsub(/# .*|#/, ""); if ($1) {print $1 " - "}}' /etc/locale.gen)"
# console keyboard mappings
CMAPS="$(find /usr/share/kbd/keymaps -name '*.map.gz' | awk '{gsub(/\.map\.gz|.*\//, ""); print $1 " - "}' | sort)" CMAPS="$(find /usr/share/kbd/keymaps -name '*.map.gz' | awk '{gsub(/\.map\.gz|.*\//, ""); print $1 " - "}' | sort)"
# terminal size
[[ $LINES ]] || LINES=$(tput lines) [[ $LINES ]] || LINES=$(tput lines)
[[ $COLUMNS ]] || COLUMNS=$(tput cols) [[ $COLUMNS ]] || COLUMNS=$(tput cols)
# associative arrays # }
# {
# commands used to install each bootloader, however most get modified during runtime { # commands used to install each bootloader, however most get modified during runtime {
declare -A BCMDS=( declare -A BCMDS=(
[refind-efi]='refind-install' # minor modification [refind-efi]='refind-install'
[grub]='grub-install --recheck --force' # heavily modified [grub]='grub-install --recheck --force' [syslinux]='syslinux-install_update -i -a -m'
[syslinux]='syslinux-install_update -i -a -m' # modified on UEFI [efistub]='efibootmgr -v -d /dev/sda -p 1 -c -l' [systemd-boot]='bootctl --path=/boot install'
[efistub]='efibootmgr -v -d /dev/sda -p 1 -c -l' # heavily modified
[systemd-boot]='bootctl --path=/boot install' # not modified
) # } ) # }
# executable name for each wm/de used in ~/.xinitrc { # executable name for each wm/de used in ~/.xinitrc {
declare -A WM_SESSIONS=( declare -A WM_SESSIONS=(
[dwm]='dwm' [dwm]='dwm' [i3-gaps]='i3' [bspwm]='bspwm' [awesome]='awesome' [plasma]='startkde' [xfce4]='startxfce4'
[i3-gaps]='i3' [gnome]='gnome-session' [fluxbox]='startfluxbox' [openbox]='openbox-session' [cinnamon]='cinnamon-session'
[bspwm]='bspwm'
[awesome]='awesome'
[plasma]='startkde'
[xfce4]='startxfce4'
[gnome]='gnome-session'
[fluxbox]='startfluxbox'
[openbox]='openbox-session'
[cinnamon]='cinnamon-session'
) # } ) # }
# packages installed for each wm/de, most are depends of the skel packages { # packages installed for each wm/de, most are depends of the skel packages {
declare -A WM_EXT=( declare -A WM_EXT=(
[dwm]='' # NA [dwm]='' [gnome]='' [cinnamon]='gnome-terminal' [plasma]='kdebase-meta'
[gnome]='' # NA [awesome]='archlabs-skel-awesome' [bspwm]='archlabs-skel-bspwm' [fluxbox]='archlabs-skel-fluxbox'
[cinnamon]='gnome-terminal' # doesn't install a terminal on it's own [i3-gaps]='archlabs-skel-i3-gaps' [openbox]='archlabs-skel-openbox' [xfce4]='archlabs-skel-xfce4 xfce4-goodies'
[plasma]='kdebase-meta' # base plasma application set
[awesome]='archlabs-skel-awesome' # see deps of archlabs-skel-awesome
[bspwm]='archlabs-skel-bspwm' # see deps of archlabs-skel-bspwm
[fluxbox]='archlabs-skel-fluxbox' # see deps of archlabs-skel-fluxbox
[i3-gaps]='archlabs-skel-i3-gaps' # see deps of archlabs-skel-i3-gaps
[openbox]='archlabs-skel-openbox' # see deps of archlabs-skel-openbox
[xfce4]='archlabs-skel-xfce4 xfce4-goodies' # see deps of archlabs-skel-xfce4
) # } ) # }
# files offered for editing after install is complete { # files offered for editing after install is complete {
declare -A EDIT_FILES=( declare -A EDIT_FILES=(
[login]='' # login is populated once we know the username and shell [login]='' # login is populated once we know the username and shell
[fstab]='/etc/fstab' [fstab]='/etc/fstab' [sudoers]='/etc/sudoers' [crypttab]='/etc/crypttab' [pacman]='/etc/pacman.conf'
[sudoers]='/etc/sudoers' [console]='/etc/vconsole.conf' [mkinitcpio]='/etc/mkinitcpio.conf' [hostname]='/etc/hostname /etc/hosts'
[crypttab]='/etc/crypttab'
[pacman]='/etc/pacman.conf'
[console]='/etc/vconsole.conf'
[mkinitcpio]='/etc/mkinitcpio.conf'
[hostname]='/etc/hostname /etc/hosts'
[bootloader]="/boot/loader/entries/$DIST.conf" # ** based on bootloader [bootloader]="/boot/loader/entries/$DIST.conf" # ** based on bootloader
[locale]='/etc/locale.conf /etc/default/locale' [locale]='/etc/locale.conf /etc/default/locale' [keyboard]='/etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard'
[keyboard]='/etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard'
) # } ) # }
# mkfs command and flags for filesystem formatting { # mkfs command flags for filesystem formatting {
declare -A FS_CMDS=( declare -A FS_CMD_FLAGS=(
[f2fs]='mkfs.f2fs' [f2fs]='' [jfs]='-q' [xfs]='-f' [ntfs]='-q' [ext2]='-q' [ext3]='-q' [ext4]='-q' [vfat]='-F32' [nilfs2]='-q' [reiserfs]='-q'
[jfs]='mkfs.jfs -q'
[xfs]='mkfs.xfs -f'
[ntfs]='mkfs.ntfs -q'
[ext2]='mkfs.ext2 -q'
[ext3]='mkfs.ext3 -q'
[ext4]='mkfs.ext4 -q'
[vfat]='mkfs.vfat -F32'
[nilfs2]='mkfs.nilfs2 -q'
[reiserfs]='mkfs.reiserfs -q'
) # } ) # }
# mount options for each filesystem { # mount options for each filesystem {
declare -A FS_OPTS=( declare -A FS_OPTS=(
[vfat]='' # NA [vfat]='' [ntfs]='' [ext2]='' [ext3]='' # NA
[ntfs]='' # NA
[ext2]='' # NA
[ext3]='' # NA
[jfs]='discard errors=continue errors=panic nointegrity' [jfs]='discard errors=continue errors=panic nointegrity'
[reiserfs]='acl nolog notail replayonly user_xattr off' [reiserfs]='acl nolog notail replayonly user_xattr off'
[ext4]='discard dealloc nofail noacl relatime noatime nobarrier nodelalloc' [ext4]='discard dealloc nofail noacl relatime noatime nobarrier nodelalloc'
@ -219,10 +86,7 @@ declare -A FS_OPTS=(
# packages installed for each login option { # packages installed for each login option {
declare -A LOGIN_PKGS=( declare -A LOGIN_PKGS=(
[xinit]='xorg-xinit' [xinit]='xorg-xinit' [ly]='archlabs-ly' [gdm]='gdm' [sddm]='sddm'
[ly]='archlabs-ly'
[gdm]='gdm'
[sddm]='sddm'
[lightdm]='lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice' [lightdm]='lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice'
) # } ) # }
@ -230,27 +94,13 @@ declare -A LOGIN_PKGS=(
# if a package requires additional packages that aren't already dependencies # if a package requires additional packages that aren't already dependencies
# they can be added here eg. [package]="extra" # they can be added here eg. [package]="extra"
declare -A PKG_EXT=( declare -A PKG_EXT=(
[vlc]='qt4' [vlc]='qt4' [mpd]='mpc' [mupdf]='mupdf-tools'
[mpd]='mpc' [rxvt-unicode]='urxvt-pearls' [zathura]='zathura-pdf-poppler' [noto-fonts]='noto-fonts-emoji' [cairo-dock]='cairo-dock-plug-ins' [qt5ct]='qt5-styleplugins'
[mupdf]='mupdf-tools' [vlc]='qt5ct qt5-styleplugins' [qutebrowser]='qt5ct qt5-styleplugins' [qbittorrent]='qt5ct qt5-styleplugins' [transmission-qt]='qt5ct qt5-styleplugins'
[qt5ct]='qt5-styleplugins' [bluez]='bluez-libs bluez-utils bluez-tools bluez-plugins bluez-hid2hci' [kdenlive]='kdebase-meta dvdauthor frei0r-plugins breeze breeze-gtk qt5ct qt5-styleplugins'
[rxvt-unicode]='urxvt-pearls'
[vlc]='qt5ct qt5-styleplugins'
[zathura]='zathura-pdf-poppler'
[noto-fonts]='noto-fonts-emoji'
[cairo-dock]='cairo-dock-plug-ins'
[qutebrowser]='qt5ct qt5-styleplugins'
[qbittorrent]='qt5ct qt5-styleplugins'
[transmission-qt]='qt5ct qt5-styleplugins'
[bluez]='bluez-libs bluez-utils bluez-tools bluez-plugins bluez-hid2hci'
[kdenlive]='kdebase-meta dvdauthor frei0r-plugins breeze breeze-gtk qt5ct qt5-styleplugins'
) # } ) # }
# } # dialog text variables {
# dialog text variables
# {
# Basics (somewhat in order) # Basics (somewhat in order)
_welcome="\nThis will help you get $DIST installed and setup on your system.\n\nIf you are unsure about a section the default option will be listed or\nthe first selected item will be the default.\n\n\nMenu Navigation:\n\n - Select items with the arrow keys or the option number.\n - Use [Space] to toggle check boxes and [Enter] to accept.\n - Switch between fields using [Tab] or the arrow keys.\n - Use [Page Up] and [Page Down] to jump whole pages\n - Press the highlighted key of an option to select it.\n" _welcome="\nThis will help you get $DIST installed and setup on your system.\n\nIf you are unsure about a section the default option will be listed or\nthe first selected item will be the default.\n\n\nMenu Navigation:\n\n - Select items with the arrow keys or the option number.\n - Use [Space] to toggle check boxes and [Enter] to accept.\n - Switch between fields using [Tab] or the arrow keys.\n - Use [Page Up] and [Page Down] to jump whole pages\n - Press the highlighted key of an option to select it.\n"
_keymap="\nPick which keymap to use for the system from the list below\n\nThis is used once a graphical environment is running (Xorg).\n\nSystem default: us" _keymap="\nPick which keymap to use for the system from the list below\n\nThis is used once a graphical environment is running (Xorg).\n\nSystem default: us"
@ -307,8 +157,6 @@ _lvmerrlvsize="\nInvalid value Entered.\n\nMust be a numeric value with 'M' (meg
# } # }
# }
############################################################################### ###############################################################################
# selection menus # selection menus
# main is the entry point which calls functions including outside of its block # main is the entry point which calls functions including outside of its block
@ -961,8 +809,8 @@ part_format()
local part="$1" fs="$2" delay="$3" local part="$1" fs="$2" delay="$3"
msg "Format" "\nFormatting $part as $fs\n" 0 msg "Format" "\nFormatting $part as $fs\n" 0
${FS_CMDS[$fs]} "$part" >/dev/null 2>$ERR mkfs.$fs ${FS_CMD_FLAGS[$fs]} "$part" >/dev/null 2>$ERR
errshow "${FS_CMDS[$fs]} $part" || return 1 errshow "mkfs.$fs ${FS_CMD_FLAGS[$fs]} "$part"" || return 1
FORMATTED+="$part " FORMATTED+="$part "
sleep "${delay:-0}" sleep "${delay:-0}"
} }
@ -1368,13 +1216,11 @@ install_base()
{ {
clear clear
tput cnorm tput cnorm
while kill -0 "$RSYNC_PID" 2>/dev/null || kill -0 "$MIRROR_PID" 2>/dev/null; do while kill -0 $BG_PID 2>/dev/null; do
clear clear; printf "\nA background install process is still running...\n"; sleep 1
printf "\nOne or more background install processes are still running...\n"
sleep 1
done done
trap - EXIT trap - EXIT
unset RSYNC_PID MIRROR_PID unset BG_PID
rm -rf $MNT/etc/mkinitcpio-archiso.conf rm -rf $MNT/etc/mkinitcpio-archiso.conf
find $MNT/usr/lib/initcpio -name 'archiso*' -type f -delete find $MNT/usr/lib/initcpio -name 'archiso*' -type f -delete
@ -1397,7 +1243,6 @@ install_base()
fi fi
[[ -e /run/archiso/sfs/airootfs && $KERNEL == 'linux' ]] && cp -vf $RUN/x86_64/vmlinuz $MNT/boot/vmlinuz-linux [[ -e /run/archiso/sfs/airootfs && $KERNEL == 'linux' ]] && cp -vf $RUN/x86_64/vmlinuz $MNT/boot/vmlinuz-linux
[[ -d /etc/netctl ]] && cp -rfv /etc/netctl $MNT/etc/ [[ -d /etc/netctl ]] && cp -rfv /etc/netctl $MNT/etc/
[[ -f /etc/resolv.conf ]] && cp -fv /etc/resolv.conf $MNT/etc/ [[ -f /etc/resolv.conf ]] && cp -fv /etc/resolv.conf $MNT/etc/
[[ -e /etc/NetworkManager/system-connections ]] && cp -rvf /etc/NetworkManager/system-connections $MNT/etc/NetworkManager/ [[ -e /etc/NetworkManager/system-connections ]] && cp -rvf /etc/NetworkManager/system-connections $MNT/etc/NetworkManager/
@ -1659,13 +1504,9 @@ install_mirrorlist()
install_background() install_background()
{ {
msg "Background Install" "\nInstall will now begin in the background\n" 1 ( rsync -a /run/archiso/sfs/airootfs/ $MNT/ && install_mirrorlist "$MNT/etc/pacman.d/mirrorlist" >/dev/null 2>&1 ) &
rsync -a /run/archiso/sfs/airootfs/ $MNT/ & BG_PID=$!
RSYNC_PID=$! trap "kill $BG_PID 2>/dev/null" EXIT
( install_mirrorlist "$MNT/etc/pacman.d/mirrorlist" ) &
MIRROR_PID=$!
# end the background processes before exiting
trap "kill $RSYNC_PID $MIRROR_PID 2>/dev/null" EXIT
} }
############################################################################### ###############################################################################
@ -2467,7 +2308,7 @@ net_connect()
no_bg_install() no_bg_install()
{ {
[[ $RSYNC_PID || $MIRROR_PID ]] || return 0 [[ $BG_PID ]] || return 0
msg "Install Running" "\nA background install process is currently running.\n" 2 msg "Install Running" "\nA background install process is currently running.\n" 2
return 1 return 1
} }