From 26d661fa01df5cb2569432413ad91df891d088f2 Mon Sep 17 00:00:00 2001 From: Spacelord Date: Sun, 8 Mar 2020 21:08:42 +0100 Subject: Implement argument parsing. Implement forceupdate argument (Closes #49). --- installer.sh | 160 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 119 insertions(+), 41 deletions(-) (limited to 'installer.sh') diff --git a/installer.sh b/installer.sh index 15ad203..7cf389d 100755 --- a/installer.sh +++ b/installer.sh @@ -12,25 +12,81 @@ latest_version=$(curl --silent "https://api.github.com/repos/cbdevnet/midimonste makeargs=all # Build args +normal=$(tput sgr0) +bold=$(tput bold) +bold2=$(tput smso) +c_red=$(tput setaf 1) +c_green=$(tput setaf 2) + VAR_DESTDIR="" # Unused VAR_PREFIX="/usr" VAR_PLUGINS="$VAR_PREFIX/lib/midimonster" VAR_DEFAULT_CFG="/etc/midimonster/midimonster.cfg" VAR_EXAMPLE_CFGS="$VAR_PREFIX/share/midimonster" -bold=$(tput bold) -normal=$(tput sgr0) ################################################ SETUP ################################################ ############################################## FUNCTIONS ############################################## -INSTALL-DEPS () { ##Install deps from array "$deps" +ARGS () { + for i in "$@" + do + case $i in + --prefix=*) + VAR_PREFIX="${i#*=}" + VAR_PREFIX_I="1" + ;; + --plugins=*) + VAR_PLUGINS="${i#*=}" + VAR_PLUGINS_I="1" + ;; + --defcfg=*) + VAR_DEFAULT_CFG="${i#*=}" + VAR_DEFAULT_CFG_I="1" + ;; + --examples=*) + VAR_EXAMPLE_CFGS="${i#*=}" + VAR_EXAMPLE_CFGS_I="1" + ;; + --dev) + NIGHTLY=1 + NIGHTLY_I="1" + ;; + -d|--default) + VAR_PREFIX_I="1" + VAR_PLUGINS_I="1" + VAR_DEFAULT_CFG_I="1" + VAR_EXAMPLE_CFGS_I="1" + NIGHTLY_I="1" + NIGHTLY=1 + ;; + -fu|--forceupdate) + UPDATER_FORCE="1" + ;; + -h|--help|*) # [WIP messages] + printf "${bold}Usage:${normal} ${0} ${c_green}[OPTIONS]${normal}" + printf "\n ${c_green}--prefix${normal} ${c_red}${normal} Sets the prefix" + printf "\n ${c_green}--plugins${normal} ${c_red}${normal} Sets the plugin path" + printf "\n ${c_green}--defcfg${normal} ${c_red}${normal} Sets the config path" + printf "\n ${c_green}--examples${normal} ${c_red}${normal} Sets the example configs path\n" + printf "\n ${c_green}--dev${normal} Install nightly version (combine with --forceupdate to upgrade to nightly version)" + printf "\n ${c_green}-d, --default${normal} Use default values to install" + printf "\n ${c_green}-fu, --forceupdate${normal} Force the updater to update without a version check (Can be used to upgrade to the nightly version)" + printf "\n ${c_green}-h, --help${normal} Show this message\n" + exit 1 + ;; + esac + shift + done +} + +INSTALL-DEPS () { # Install deps from array "$deps" for t in ${deps[@]}; do if [ $(dpkg-query -W -f='${Status}' $t 2>/dev/null | grep -c "ok installed") -eq 0 ]; then printf "Installing %s\n" "$t" apt-get install $t; - printf "Done\n"; + printf "Done.\n"; else printf "%s already installed!\n" "$t" fi @@ -38,26 +94,28 @@ INSTALL-DEPS () { ##Install deps from array "$deps" printf "\n" } -NIGHTLY_CHECK () { - #Asks for nightly version - read -p "Do you want to install the latest development version? (y/n)? " magic - case "$magic" in - y|Y) - printf "OK! You´re a risky person ;D\n" - NIGHTLY=1 - ;; - n|N) - printf "That´s OK - installing the latest stable version for you ;-)\n" - NIGHTLY=0 - ;; - *) - printf "Invalid input\n" - ERROR - ;; - esac +NIGHTLY_CHECK () { # Asks for nightly version + if [ -z "$NIGHTLY_I" ]; then + read -p "Do you want to install the latest development version? (y/n)? " magic + case "$magic" in + y|Y) + printf "OK! You´re a risky person ;D\n" + NIGHTLY=1 + ;; + n|N) + printf "That´s OK - installing the latest stable version for you ;-)\n" + NIGHTLY=0 + ;; + *) + printf "${bold}Invalid input -- INSTALLING LATEST STABLE VERSION!${normal}\n" + NIGHTLY=0 + ;; + esac + fi # Roll back to last tag if we're not on a nightly build if [ "$NIGHTLY" != 1 ]; then + cd "$tmp_path" printf "Finding latest stable version...\n" Iversion=$(git describe --abbrev=0) printf "Starting Git checkout to %s...\n" "$Iversion" @@ -75,20 +133,27 @@ INSTALL-PREP () { printf "\n" ) NIGHTLY_CHECK - printf "Preparation successful\n\n" - printf "${bold}If you don't know what you're doing, just hit enter 4 times.${normal}\n" - - read -e -i "$VAR_PREFIX" -p "PREFIX (Install root directory): " input # Reads VAR_PREFIX - VAR_PREFIX="${input:-$VAR_PREFIX}" + printf "Preparation done.\n\n" + printf "${bold}If you don't know what you're doing, just hit enter.${normal}\n\n" + if [ -z "$VAR_PREFIX_I" ]; then + read -e -i "$VAR_PREFIX" -p "PREFIX (Install root directory): " input # Reads VAR_PREFIX + VAR_PREFIX="${input:-$VAR_PREFIX}" + fi - read -e -i "$VAR_PLUGINS" -p "PLUGINS (Plugin directory): " input # Reads VAR_PLUGINS - VAR_PLUGINS="${input:-$VAR_PLUGINS}" + if [ -z "$VAR_PLUGINS_I" ]; then + read -e -i "$VAR_PLUGINS" -p "PLUGINS (Plugin directory): " input # Reads VAR_PLUGINS + VAR_PLUGINS="${input:-$VAR_PLUGINS}" + fi - read -e -i "$VAR_DEFAULT_CFG" -p "Default config path: " input # Reads VAR_DEFAULT_CFG - VAR_DEFAULT_CFG="${input:-$VAR_DEFAULT_CFG}" + if [ -z "$VAR_DEFAULT_CFG_I" ]; then + read -e -i "$VAR_DEFAULT_CFG" -p "Default config path: " input # Reads VAR_DEFAULT_CFG + VAR_DEFAULT_CFG="${input:-$VAR_DEFAULT_CFG}" + fi - read -e -i "$VAR_EXAMPLE_CFGS" -p "Example config directory: " input # Reads VAR_EXAMPLE_CFGS - VAR_EXAMPLE_CFGS="${input:-$VAR_EXAMPLE_CFGS}" + if [ -z "$VAR_EXAMPLE_CFGS_I" ]; then + read -e -i "$VAR_EXAMPLE_CFGS" -p "Example config directory: " input # Reads VAR_EXAMPLE_CFGS + VAR_EXAMPLE_CFGS="${input:-$VAR_EXAMPLE_CFGS}" + fi UPDATER_SAVE @@ -106,12 +171,9 @@ UPDATER-PREP () { printf "\nInitializing repository...\n" cd $tmp_path git init $tmp_path - printf "Successfully imported settings from %s\n" "$updater_file" ) NIGHTLY_CHECK - printf "Preparation successful\n\n" - - rm -f "$VAR_PREFIX/bin/midimonster" + printf "Preparation done.\n\n" rm -rf "$VAR_PLUGINS/" UPDATER_SAVE @@ -125,12 +187,12 @@ UPDATER-PREP () { UPDATER () { installed_version="$(midimonster --version)" - #installed_version="MIDIMonster v0.3-40-gafed325" # FOR TESTING ONLY! (or bypassing updater version check) + #installed_version="MIDIMonster v0.3-40-gafed325" # FOR TESTING ONLY! if [[ "$installed_version" =~ "$latest_version" ]]; then printf "Newest Version is already installed! ${bold}($installed_version)${normal}\n\n" ERROR else - printf "The installed Version ${bold}´$installed_version´${normal} equals not the newest stable version ${bold}´$latest_version´${normal} (Maybe you are running a development version?)\n\n" + printf "The installed Version ${bold}´$installed_version´${normal} equals not the newest stable version ${bold}´$latest_version´${normal} (Maybe you are running a development(NIGHTLY) version?)\n\n" fi UPDATER-PREP @@ -180,6 +242,7 @@ CLEAN () { ################################################ Main ################################################# trap ERROR SIGINT SIGTERM SIGKILL +ARGS "$@" # Parse arguments clear # Check if $user = root! @@ -189,16 +252,31 @@ if [ "$user" != "root" ]; then fi if [ $(wget -q --spider http://github.com) $? -eq 1 ]; then - printf "You need connection to the internet\n" + printf "You need a connection to the internet\n" ERROR fi +# Forceupdate # Now only with default config because source imports all and overwrites the args.. [WIP!] +if [ "$UPDATER_FORCE" -eq "1" ]; then + printf "Forcing the updater to start...\n\n" + if [ -f $updater_file ]; then + . $updater_file + ARGS "$@" # Parse arguments again to compensate overwrite from source /\ + fi + + UPDATER-PREP + INSTALL-RUN + DONE +fi + # Check if updater config file exist and import it (overwrites default values!) if [ -f $updater_file ]; then printf "Starting updater...\n\n" . $updater_file + ARGS "$@" # Parse arguments again to compensate overwrite from source /\ + printf "Successfully imported settings from %s\n" "$updater_file" - # Check if binary $updater/bin/midimonster exist. If yes start updater else skip. + # Check if binary $VAR_PREFIX/bin/midimonster exist. If yes start updater else skip. if [ -x "$VAR_PREFIX/bin/midimonster" ]; then UPDATER else @@ -206,8 +284,8 @@ if [ -f $updater_file ]; then fi fi +#Normal install INSTALL-DEPS INSTALL-PREP -printf "\n" INSTALL-RUN DONE -- cgit v1.2.3