#!/bin/bash ##### # # This script will: # - Identify the type type of file being passed as an argument # - Install that file # # USAGE - # # sudo ./install # # opts: # -n Nextcloud # -k KeePass # -f Firefox # -h Help File # -v Version # ###### helpFunction() { echo " " echo "Installs Nextcloud and KeePass AppImages, as well as Firefox Tarballs, in a consistent manner." echo "Requires a manually created .desktop file placed in an assets/ folder in the application installation directory at /home/USER/Software/APPLICATION" echo "Requires a folder apps in the application installation folder for receiving application AppImages or Tarballs." echo "Must run with root privileges." echo " " echo "Usage: sudo $0 [opts] [filename]" echo " -n Nextcloud" echo " -k KeePass" echo " -f Firefox" echo " -h Help File" echo " -v Version" echo " " } ## VARIABLES ## projectdir="/home/mike/Software" #imagepath="$projectdir/apps" executablelink="/usr/local/bin" desktoppath="/usr/local/share/applications" #assetspath="$projectdir/assets" version="0.1" ## Applications Permitted ## applications_array=("Nextcloud" "KeePass" "Firefox") echo "TG Generic Installer Script v$version" # Check Arguments # if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then helpFunction exit 0 fi # Check if user is root # if [ "$USER" != "root" ]; then echo "Must be running as root to install new software. Use sudo or root user" helpFunction exit 1 fi # Check if user-provided file is valid # if [ -z "$1" ]; then echo " " echo "No filename given. Aborting." helpFunction exit 1 fi # Check if the string is a valid file # if ! [ -f "$1" ]; then echo "$1 not found." helpFunction exit 1 else # Set filename now that we have a good file # filename=$(basename $1) ##Take Basename in case file in case user is in unusual directory when cal> echo "$filename appears valid." fi # Check what application this is # for app in "${applications_array[@]}"; do if [[ "${filename,,}" == *"${app,,}"* ]]; then application_formal=$app application=${app,,} echo "Configuring to install: $app" projectdir=$projectdir/$application imagepath=$projectdir/apps assetspath=$projectdir/assets fi done # Check if projectdir exists echo "Checking Project Directory" if ! [ -d $projectdir ]; then echo "Folder $projectdir not found. Creating folder structure..." mkdir $projectdir mkdir $projectdir/apps mkdir $projectdir/assets chown -R mike:mike $projectdir echo "Project directory is created." echo "WARNING! You must create a .desktop file and icon in assets/ folder!" else echo "Done" fi # Move file, if required echo "Checking App Location" if ! [ -f "$projectdir/apps/$filename" ]; then echo "Moving $1 to $imagepath/" mv $1 $projectdir/apps/$filename echo "Done." else echo "Done" fi #### # # INSTALL # ### echo "Installing $application_formal" if [ $application == 'firefox' ]; then echo "Checking for old installations" if [ -d "/opt/$application.OLD" ]; then read -p "$application.OLD already exists? Should I delete it? ENTER to continue or CTRL+C to abort." input fi echo "Deleting existing $application.OLD folder" rm -rf /opt/$application.OLD echo "Moving Existing $application to $application.OLD" mv /opt/$application /opt/$application.OLD echo "Making new $application directory" mkdir /opt/$application echo "unpacking "$filename" to /opt/$application" ## Check file type and unpack accordingly ## if [[ "$filename" == *.tar.xz ]]; then echo "Unpacking as tar.xz file" tar -xvf "$projectdir/apps/$filename" -C "/opt/" elif [[ "$filename" == *.tar.bz2 ]]; then echo "Unpacking as tar.bz2 file" tar -xjvf "$projectdir/apps/$filename" -C "/opt/" else echo "WARNING: Unknown Compression Type. Aborting." exit 1 fi applink='/opt/$application/$application' chowm mike:mike /opt/firefox # Write permissions needed for firefox to check for updates elif [[ $application == 'nextcloud' || $application == 'keepass' ]]; then echo "Setting $filename as executable" sudo chmod +x $projectdir/apps/$filename echo "Done." applink=$projectdir/apps/$filename else echo "Unknown Application. Unable to Install. Aborting." exit 1 fi # Install as Required # AppImage - ensure executable # # Ensure symlink is set and executable echo "Setting symlink /usr/local/bin/$application" ln -fs $applink $executablelink/$application echo "Done." # Ensure desktop file is set and executable if ! [ -f "$projectdir/assets/$application.desktop" ]; then echo "WARNING: $application.desktop file not found!" echo "WARNING: Desktop file not set!" exit 1 fi echo "Setting $application.desktop in /usr/local/share/applications and verifying permissions" ln -fs $assetspath/$application.desktop $desktoppath/ chmod +x $assetspath/$application.desktop echo "Done." # FINISHED SUCCESSFULLY # echo "Update Complete. Done." exit 0