Allow Choice of package group presets when provisioning

Choice is presented at beginning of provisioning and can choose from 3 different package groups (desktop, laptop, headless) with emphasis on different deployment functionality. Additional packages to run installation against can also be passed in as command option with -f "/path/to/packages.csv /path/to/more.csv" which will get installed alongside the selected package group. When choosing -F the packages will get installed as the only packages instead.
This commit is contained in:
Marty Oehme 2019-03-11 20:24:06 +00:00
parent c768aa9983
commit cf00dabeb0
9 changed files with 105 additions and 49 deletions

View file

@ -5,17 +5,22 @@
### OPTIONS AND VARIABLES ###
while getopts ":a:r:p:h" o; do case "${o}" in
# unset our temp variables, just in case they were used for something else in shell
unset pkgfiles dotfilesrepo targetuser targetpassword targetdeployment quietmode aurhelper
while getopts ":a:r:p:u:U:f:F:hq" o; do case "${o}" in
h) printf "Optional arguments for custom use:\\n -r: Dotfiles repository (local file or url)\\n -p: Dependencies and programs csv (local file or url)\\n -a: AUR helper (must have pacman-like syntax)\\n -h: Show this message\\n" && exit ;;
r) dotfilesrepo=${OPTARG} && git ls-remote "$dotfilesrepo" || exit ;;
p) progsfile=${OPTARG} ;;
a) aurhelper=${OPTARG} ;;
f) pkgfiles=${OPTARG} ;;
F) pkgfiles=${OPTARG} && exclusivepkgfiles=true ;;
t) targetdeployment=${OPTARG} ;;
*) printf "Invalid option: -%s\\n" "$OPTARG" && exit ;;
esac done
# DEFAULTS:
[ -z "$dotfilesrepo" ] && dotfilesrepo="https://gitlab.com/marty-oehme/dotfiles.git"
[ -z "$progsfile" ] && progsfile="https://gitlab.com/marty-oehme/dotfiles/snippets/1828258/raw"
[ -z "$pkgfiles" ] && pkgfiles=""
[ -z "$aurhelper" ] && aurhelper="yay"
### FUNCTIONS ###
@ -57,6 +62,10 @@ adduserandpass() { \
echo "$name:$pass1" | chpasswd
unset pass1 pass2 ;}
deploydialog() {
targetdeployment=$(dialog --title "Deployment Configuration" --radiolist "Select a target package configuration." 0 0 5 desktop "base, network, shell, gui, multimedia, development" on laptop "base, network, shell, gui, multimedia, development, battery, touchpad" off headless "base, network, shell" off none "Installs no packages." off 3>&1 1>&2 2>&3 3>&1)
}
refreshkeys() { \
dialog --infobox "Refreshing Arch Keyring..." 4 40
pacman --noconfirm -Sy archlinux-keyring >/dev/null 2>&1
@ -97,9 +106,29 @@ aurinstall() { \
sudo -u "$name" $aurhelper -S --noconfirm "$1" >/dev/null 2>&1
}
# get the link to the package collection
getpackagegrouplink() {
case "$1" in
"none") pkggroup="";;
"desktop") pkggroup="https://gitlab.com/marty-oehme/dotfiles/snippets/1828258/raw" ;;
"laptop") pkggroup="https://gitlab.com/marty-oehme/dotfiles/snippets/1834307/raw" ;;
"headless") pkggroup="https://gitlab.com/marty-oehme/dotfiles/snippets/1834308/raw" ;;
esac
}
# can be called with as many csv files filled with packages as necessary
# appends them all to one temporary file for the installation
gatherpackages() {
concfile=$1
shift
touch $concfile
for progs in "$@"; do
([ -f "$progs" ] && cat "$progs" >> $concfile) || curl -Ls "$progs" | sed '/^#/d' >> $concfile
done
}
installationloop() { \
([ -f "$progsfile" ] && cp "$progsfile" /tmp/progs.csv) || curl -Ls "$progsfile" | sed '/^#/d' > /tmp/progs.csv
total=$(wc -l < /tmp/progs.csv)
total=$(wc -l < $1)
aurinstalled=$(pacman -Qm | awk '{print $1}')
while IFS=, read -r tag program comment; do
n=$((n+1))
@ -109,7 +138,7 @@ installationloop() { \
"A") aurinstall "$program" "$comment" ;;
"G") gitmakeinstall "$program" "$comment" ;;
esac
done < /tmp/progs.csv ;}
done < $1 ;}
dotfiles() { \
gpath=$1
@ -144,7 +173,7 @@ serviceinit() { for service in "$@"; do
systemctl start "$service"
done ;}
systembeepoff() { dialog --infobox "Getting rid of that retarded error beep sound..." 10 50
systembeepoff() { dialog --infobox "Getting rid of error beep sound..." 10 50
rmmod pcspkr
echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf ;}
@ -173,6 +202,11 @@ getuserandpass || error "User exited."
# Give warning if user already exists.
usercheck || error "User exited."
# Let user select groups of packages to pre-install.
if [ -z "$targetdeployment" ]; then
deploydialog || error "User exited."
fi
# Last chance for user to back out before install.
preinstallmsg || error "User exited."
@ -199,11 +233,23 @@ sed -i "s/-j2/-j$(nproc)/;s/^#MAKEFLAGS/MAKEFLAGS/" /etc/makepkg.conf
manualinstall $aurhelper || error "Failed to install AUR helper."
# the command that sets the correct link to gather our package files from
# correct link depends on target deployment: desktop, laptop, server,..
getpackagegrouplink $targetdeployment
# append the default packages to whatever custom package csv links were passed in or
# only use the custom packages if forced with -F
[ ! "$exclusivepkgfiles" ] && pkgfiles="$(curl -Ls $pkggroup | cat ) $pkgfiles"
tmpfile=/tmp/pkgs.csv
# actually gather the individual package installation lines from the various links and files
gatherpackages $tmpfile $pkgfiles
# The command that does all the installing. Reads the progs.csv file and
# installs each needed program the way required. Be sure to run this only after
# the user has been created and has priviledges to run sudo without a password
# the user has been created and has privileges to run sudo without a password
# and all build dependencies are installed.
installationloop
installationloop $tmpfile
# Install the dotfiles in the user's home directory
putgitrepo "$dotfilesrepo" "/home/$name"
@ -212,11 +258,6 @@ rm "/home/$name/README.md"
# Pulseaudio, if/when initially installed, often needs a restart to work immediately.
[ -f /usr/bin/pulseaudio ] && resetpulse
# Install vim `plugged` plugins.
dialog --infobox "Installing (neo)vim plugins..." 4 50
(sleep 30 && killall nvim) &
sudo -u "$name" nvim -E -c "PlugUpdate|visual|q|q" >/dev/null 2>&1
# Enable services here.
serviceinit NetworkManager cronie
@ -228,6 +269,11 @@ systembeepoff
newperms "%wheel ALL=(ALL) ALL #LARBS
%wheel ALL=(ALL) NOPASSWD: /usr/bin/shutdown,/usr/bin/reboot,/usr/bin/systemctl suspend,/usr/bin/wifi-menu,/usr/bin/mount,/usr/bin/umount,/usr/bin/pacman -Syu,/usr/bin/pacman -Syyu,/usr/bin/packer -Syu,/usr/bin/packer -Syyu,/usr/bin/systemctl restart NetworkManager,/usr/bin/rc-service NetworkManager restart,/usr/bin/pacman -Syyu --noconfirm,/usr/bin/loadkeys,/usr/bin/yay,/usr/bin/pacman -Syyuw --noconfirm"
# Install vim `plugged` plugins.
dialog --infobox "Installing (neo)vim plugins..." 4 50
(sleep 30 && killall nvim) &
sudo -u "$name" nvim -E -c "PlugUpdate|visual|q|q" >/dev/null 2>&1
# Last message! Install complete!
finalize
clear
clear