Update and clean up some functions

This commit is contained in:
natemaia 2018-12-14 01:47:39 -08:00
parent c815cb7f02
commit f96435486a
5 changed files with 99 additions and 58 deletions

View File

@ -10,7 +10,7 @@
# immutable globals
readonly VER="1.7.28" # Installer version
readonly VER="1.7.29" # Installer version
readonly DIST="ArchLabs" # Linux distributor
readonly MNT="/mnt" # Install mountpoint
readonly ERR="/tmp/errlog" # Built-in error log
@ -43,8 +43,9 @@ main()
preinstall_checks 1 || return 1
elif (( SELECTED == 6 )); then
preinstall_checks || return 1
elif (( SELECTED == 2 || SELECTED == 5 )) && [[ $WARN != true ]]; then
msgbox "$_PrepTitle" "$_WarnMount" && WARN=true
elif [[ $WARN != true ]] && (( SELECTED == 2 || SELECTED == 5 )); then
msgbox "$_PrepTitle" "$_WarnMount"
WARN=true
fi
fi
@ -56,14 +57,17 @@ main()
5) mnt_menu || SELECTED=$((SELECTED - 1)) ;;
6) cfg_menu || SELECTED=$((SELECTED - 1)) ;;
7) show_cfg ;;
8) install ;;
8) install ;;
*) yesno "$_CloseInst" "$_CloseInstBody" "Exit" "Back" && die
esac
}
# source all the lib files
for i in /usr/share/archlabs/installer/lib/?*.sh; do
. "$i" || { printf "\nFailed to source library file %s\n" "$i"; die 1; }
if ! . "$i" 2>/dev/null; then
printf "\nFailed to source library file %s\n" "$i"
die 1
fi
done
# trap Ctrl-C to properly exit

View File

@ -48,16 +48,14 @@ declare -gA WM_SESSIONS=(
[cinnamon]='cinnamon-session'
)
# additional packages installed for the given window manager
rp="rofi archlabs-polybar"
# additional packages installed for each wm/de
declare -gA WM_EXT=(
[gnome]="gnome-extra"
[bspwm]="sxhkd archlabs-skel-bspwm $rp"
[i3-gaps]="i3status perl-anyevent-i3 archlabs-skel-i3-gaps $rp"
[openbox]="obconf archlabs-skel-openbox jgmenu tint2 conky $rp"
[bspwm]="sxhkd archlabs-skel-bspwm rofi archlabs-polybar"
[xfce4]="xfce4-goodies xfce4-pulseaudio-plugin archlabs-skel-xfce4"
[i3-gaps]="i3status perl-anyevent-i3 archlabs-skel-i3-gaps rofi archlabs-polybar"
[openbox]="obconf archlabs-skel-openbox jgmenu archlabs-polybar tint2 conky rofi"
)
unset rp
# files the user can edit during the final stage of install
declare -gA EDIT_FILES=(
@ -70,7 +68,7 @@ declare -gA EDIT_FILES=(
[8]="/etc/crypttab"
[9]="/etc/default/grub"
[10]="/etc/pacman.conf"
[11]="" # login files populated later, /home/USER?/FILES? ... lightdm?
[11]="" # login files.. Populated later once login method is chosen
)
# }

View File

@ -352,11 +352,23 @@ suckless_install()
# install and setup dwm
printf "\n%s\n\n" "Installing and setting up dwm."
mkdir -pv $MNT/home/$NEWUSER/suckless
for i in dwm dmenu st; do
p="/home/$NEWUSER/suckless/$i"
chrun "git clone https://bitbucket.org/natemaia/$i $p && { cd $p; rm -f $p/config.h 2>/dev/null; make clean install && make clean; }"
chrun "git clone https://bitbucket.org/natemaia/$i $p"
e=$?
if (( e == 0 )); then
chrun "cd $p; rm -f config.h; make clean install; make clean"
else
printf "\n\nFailed to clone dwm repo\n\n"
fi
done
printf "\n\n%s\n\n" "To configure dwm edit /home/$NEWUSER/suckless/dwm/config.h and recompile with 'sudo make clean install'"
if [[ -d /home/$NEWUSER/suckless/dwm ]]; then
printf "\n\n%s" "To configure dwm edit /home/$NEWUSER/suckless/dwm/config.h"
printf "\n%s\n\n" "You can then recompile it with 'sudo make clean install'"
fi
sleep 2
}

View File

@ -6,7 +6,7 @@
# this file is not meant to be run directly
# sourcing this file in a non bash shell is not advised
# shellcheck disable=2154,2153,2046
# shellcheck disable=2154,2155,2153,2046
declare -Agr FS_CMDS=(
[ext2]="mkfs.ext2 -q" [ext3]="mkfs.ext3 -q" [ext4]="mkfs.ext4 -q"
@ -107,7 +107,11 @@ select_device()
{
local dev
local msg
[[ $1 == 'boot' ]] && msg="$_DevSelTitle for bootloader\n" || umount_dir $MNT
if [[ $1 == 'boot' ]]; then
msg="$_DevSelTitle for bootloader\n"
else
umount_dir $MNT
fi
if [[ $DEV_COUNT -eq 1 && $SYS_DEVS ]]; then
DEVICE="$(awk '{print $1}' <<< "$SYS_DEVS")"
@ -124,6 +128,7 @@ select_device()
# if the device selected was for bootloader, set the BOOT_DEVICE
[[ $1 == 'boot' ]] && BOOT_DEVICE="$DEVICE"
return 0
}
@ -131,14 +136,19 @@ confirm_mount()
{
local part="$1"
local mount="$2"
local msg="Partition: $part\n"
[[ $mount == "$MNT" ]] && msg+="Mountpoint: / (root)" || msg+="Mountpoint: ${mount#$MNT}"
if [[ $mount == "$MNT" ]]; then
local msg="Partition: $part\nMountpoint: / (root)"
else
local msg="Partition: $part\nMountpoint: ${mount#$MNT}"
fi
if [[ $(mount) == *"$mount"* ]]; then
infobox "$_MntTitle" "$_MntSucc\n$msg\n" 1 && decr_count "$part"
infobox "$_MntTitle" "$_MntSucc\n$msg\n" 1; decr_count "$part"
else
infobox "$_MntTitle" "$_MntFail\n$msg\n" 1 && return 1
infobox "$_MntTitle" "$_MntFail\n$msg\n" 1; return 1
fi
return 0
}
@ -146,8 +156,7 @@ check_cryptlvm()
{
local dev=""
local part="$1"
local devs
devs="$(lsblk -lno NAME,FSTYPE,TYPE)"
local devs="$(lsblk -lno NAME,FSTYPE,TYPE)"
# Identify if $part is "crypt" (LUKS on LVM, or LUKS alone)
if [[ $(lsblk -lno TYPE "$part") =~ 'crypt' ]]; then
@ -263,8 +272,7 @@ mount_partition()
{
local part="$1"
local mountp="${MNT}$2"
local fs
fs="$(lsblk -lno FSTYPE $part)"
local fs="$(lsblk -lno FSTYPE $part)"
mkdir -p "$mountp"

View File

@ -6,7 +6,7 @@
# this file is not meant to be run directly
# sourcing this file in a non bash shell is not advised
# shellcheck disable=2154
# shellcheck disable=2154,2034
chrun()
{
@ -33,24 +33,36 @@ ssd()
# returns 0 (true) when the device passed ($1) is NOT a rotational device
local dev=$1
dev=${dev#/dev/}
[[ $dev =~ nvme ]] && dev=${dev%p[0-9]*} || dev=${dev%[0-9]*}
if [[ $dev =~ nvme ]]; then
dev=${dev%p[0-9]*}
else
dev=${dev%[0-9]*}
fi
[[ $(cat /sys/block/$dev/queue/rotational) -eq 0 ]] || return 1
}
die()
{
# die peacefully
local exitcode=0
(( $# == 0 )) || exitcode=$1
if (( $# >= 1 )); then
local exitcode=$1
else
local exitcode=0
fi
tput cnorm
if [[ -d $MNT ]] && command cd /; then
umount_dir $MNT
if (( exitcode == 127 )); then
# umount -l /run/archiso/bootmnt
umount -l /run/archiso/bootmnt
systemctl -i reboot
fi
fi
rm -fv /tmp/.ai_*
exit $exitcode
}
@ -131,33 +143,40 @@ system_identify()
if [[ -d $efidir ]]; then
SYS="UEFI"
[[ $(cat $efidir/fw_platform_size) == 64 ]] && export IS_64BIT=true
grep -q $efidir/efivars <<< "$(mount)" || mount -t efivarfs efivarfs $efidir/efivars
if ! grep -q $efidir/efivars <<< "$(mount)"; then
mount -t efivarfs efivarfs $efidir/efivars
fi
else
SYS="BIOS"
fi
# shellcheck disable=2034
declare -g BT="$DIST Installer - $SYS (x86_64) - Version $VER"
return 0
}
system_checks()
{
[[ $(whoami) == "root" ]] || { infobox "$_ErrTitle" "$_NotRoot\n$_Exit" && die 1; }
grep -qw 'lm' /proc/cpuinfo || { infobox "$_ErrTitle" "$_Not64Bit\n$_Exit" && die 1; }
if [[ $(whoami) != "root" ]]; then
infobox "$_ErrTitle" "$_NotRoot\n$_Exit"
die 1
elif ! grep -qw 'lm' /proc/cpuinfo; then
infobox "$_ErrTitle" "$_Not64Bit\n$_Exit"
die 1
fi
if grep -qw 'BCM4352' <<< "$(lspci -vnn -d 14e4:)"; then
rmmod bcma >/dev/null 2>&1
rmmod wl >/dev/null 2>&1
modprobe wl >/dev/null 2>&1
export BROADCOM_WL=true
BROADCOM_WL=true
printf "\nLoading wifi kernel modules please wait...\n"
sleep 2
fi
if ! curl -s --head 'https://www.archlinux.org/mirrorlist/all/' | sed '1q' | grep -qw '200'; then
if [[ $(systemctl is-active NetworkManager) == "active" ]] && hash nmtui >/dev/null 2>&1; then
tput civis; nmtui-connect
tput civis
nmtui-connect
if ! curl -s --head 'https://www.archlinux.org/mirrorlist/all/' | sed '1q' | grep -qw '200'; then
infobox "$_ErrTitle" "$_NoNetwork" 3
die 1
@ -170,34 +189,41 @@ system_checks()
preinstall_checks()
{
[[ $(lsblk -o MOUNTPOINT) =~ $MNT ]] || { msgbox "$_ErrTitle" "$_ErrNoMount"; export SELECTED=4; return 1; }
if [[ $# -eq 1 ]]; then
[[ $CONFIG_DONE == true ]] || { msgbox "$_ErrTitle" "$_ErrNoConfig"; export SELECTED=5; return 1; }
if ! [[ $(lsblk -o MOUNTPOINT) =~ $MNT ]]; then
msgbox "$_ErrTitle" "$_ErrNoMount"
SELECTED=4
return 1
elif [[ $# -eq 1 && $CONFIG_DONE != true ]]; then
msgbox "$_ErrTitle" "$_ErrNoConfig"
SELECTED=5
return 1
fi
return 0
}
echeck()
{
# return if the last process exited normally
local last_exit_code=$?
(( last_exit_code == 0 )) && return 0
local msg="\nThe command exited abnormally: $1"
if (( last_exit_code == 0 )); then
return 0
fi
# get error message from logfile and strip any non-printable characters,
# escape sequences, and other messy text
local err
err="$(sed 's/[^[:print:]]//g; s/\[[0-9\;:]*\?m//g; s/==> //g; s/] ERROR:/]\nERROR:/g' "$ERR")"
[[ $err != "" ]] && msgbox "$_ErrTitle" "$msg\n\nWith the following error message:\n\n$err"
msg="$([[ $err == "" ]] && printf "%s" "$msg")\n$_ErrChoice"
if [[ -e $DBG && $TERM == 'linux' ]]; then
msg="$([[ $err == "" ]] && printf "%s" "$msg")\n$_ErrChoiceConsole"
yesno "$_ErrTitle" "$msg" "Exit & Open Log" "Ignore & Continue" && { more $DBG; die; }
if [[ $err != "" ]]; then
msgbox "$_ErrTitle" "\nThe command exited abnormally: $1\n\nWith the following error message:\n\n$err"
else
yesno "$_ErrTitle" "$msg" "Exit" "Ignore & Continue" && die
msgbox "$_ErrTitle" "\nThe command exited abnormally: $1\n\nWith the no error message.\n"
fi
if [[ -e $DBG && $TERM == 'linux' ]]; then
more $DBG
fi
die 1
return 0
}
@ -206,13 +232,6 @@ debug()
set -x
exec 3>| $DBG
BASH_XTRACEFD=3
if [[ $DISPLAY && $TERM != 'linux' ]]; then
if hash 'termite' >/dev/null 2>&1; then
termite -e "tail -f $DBG" &
else
xterm -e "tail -f $DBG" &
fi
fi
export DEBUG=true
}