diff --git a/functions/check.sh b/functions/check.sh index 150a8e138..ca50777cc 100644 --- a/functions/check.sh +++ b/functions/check.sh @@ -2,7 +2,7 @@ # LGSM fn_check function # Author: Daniel Gibbs # Website: http://gameservermanagers.com -lgsm_version="060116" +lgsm_version="170116" # Description: Overall function for managing checks. # Runs checks that will either halt on or fix an issue. @@ -33,6 +33,14 @@ do fi done +local allowed_commands_array=( command_debug.sh command_start.sh command_stop.sh ) +for allowed_command in "${allowed_commands_array[@]}" +do + if [ "${allowed_command}" == "${function_selfname}" ]; then + check_deps.sh + fi +done + local allowed_commands_array=( command_debug.sh command_details.sh command_monitor.sh command_start.sh command_stop.sh ) for allowed_command in "${allowed_commands_array[@]}" do diff --git a/functions/check_deps.sh b/functions/check_deps.sh new file mode 100644 index 000000000..1e2e99fee --- /dev/null +++ b/functions/check_deps.sh @@ -0,0 +1,200 @@ +#!/bin/bash +# LGSM check_deps.sh function +# Author: Daniel Gibbs +# Website: http://gameservermanagers.com +lgsm_version="310116" + +# Description: Checks that the requires dependencies are installed for LGSM. + + +fn_deps_detector(){ +# Checks if dependency is missing +if [ -n "$(command -v dpkg-query)" ]; then + dpkg-query -W -f='${Status}' ${deptocheck} 2>/dev/null| grep -q -P '^install ok installed$' + depstatus=$? +elif [ -n "$(command -v yum)" ]; then + yum -q list installed ${deptocheck} > /dev/null 2>&1 + depstatus=$? +fi +if [ "${depstatus}" == "0" ]; then + missingdep=0 + if [ "${function_selfname}" == "command_install.sh" ]; then + echo -e "\e[0;32m${deptocheck}\e[0m" + sleep 0.5 + fi +else + # if missing dependency is found + missingdep=1 + if [ "${function_selfname}" == "command_install.sh" ]; then + echo -e "\e[0;31m${deptocheck}\e[0m" + sleep 0.5 + fi +fi + +# Missing dependencies are added to array_deps_missing +if [ "${missingdep}" == "1" ]; then + array_deps_missing+=("${deptocheck}") +fi +} + +fn_deps_email(){ +# Adds postfix to required dependencies if email notification is enabled +if [ "${emailnotification}" == "on" ]; then + if [ -n "$(command -v dpkg-query)" ]; then + array_deps_required+=( mailutils postfix ) + elif [ -n "$(command -v yum)" ]; then + array_deps_required+=( mailx postfix ) + fi +fi +} + +fn_found_missing_deps(){ +if [ "${#array_deps_missing[@]}" != "0" ]; then + fn_printdots "Checking dependencies" + sleep 2 + fn_printwarn "Checking dependencies: Dependency missing: \e[0;31m${array_deps_missing[@]}\e[0m" + sleep 1 + echo -e "" + sudo -n true > /dev/null 2>&1 + if [ $? -eq 0 ]; then + fn_printinfonl "Attempting to install missing dependencies automatically" + echo -en ".\r" + sleep 1 + echo -en "..\r" + sleep 1 + echo -en "...\r" + sleep 1 + echo -en " \r" + if [ -n "$(command -v dpkg-query)" ]; then + echo "sudo dpkg --add-architecture i386; sudo apt-get install ${array_deps_missing[@]}" + elif [ -n "$(command -v yum)" ]; then + echo "yum install ${array_deps_missing[@]}" + fi + else + echo "" + fn_printinfomationnl "$(whoami) does not have sudo access. manually install dependencies" + echo "" + if [ -n "$(command -v dpkg-query)" ]; then + echo "sudo dpkg --add-architecture i386; sudo apt-get install ${array_deps_missing[@]}" + elif [ -n "$(command -v yum)" ]; then + echo "yum install ${array_deps_missing[@]}" + fi + echo "" + fi + if [ "${function_selfname}" == "command_install.sh" ]; then + sleep 5 + fi +fi +} + +fn_check_loop(){ + # Loop though required depenencies + for deptocheck in "${array_deps_required[@]}" + do + fn_deps_detector + done + + # user to be informaed of any missing dependecies + fn_found_missing_deps +} + +if [ "${function_selfname}" == "command_install.sh" ]; then + echo "" + echo "Checking Dependecies" + echo "=================================" +fi + + +# Check will only run if using apt-get or yum +if [ -n "$(command -v dpkg-query)" ]; then + # Generate array of missing deps + array_deps_missing=() + + # LGSM requirement for curl + array_deps_required=( curl ca-certificates ) + + # All servers except ts3 require tmux + if [ "${executable}" != "./ts3server_startscript.sh" ]; then + array_deps_required+=( tmux ) + fi + + # All servers excelts ts3 & mumble require libstdc++6,lib32gcc1 + if [ "${executable}" != "./ts3server_startscript.sh" ]||[ "${executable}" != "./murmur.x86" ]; then + array_deps_required+=( lib32gcc1 libstdc++6:i386 ) + fi + + # Game Specific requirements + + # Spark + if [ "${engine}" == "spark" ]; then + array_deps_required+=( speex:i386 libtbb2 ) + # 7 Days to Die + elif [ "${executable}" == "./7DaysToDie.sh" ]; then + array_deps_required+=( telnet expect ) + # No More Room in Hell + elif [ "${gamename}" == "No More Room in Hell" ]; then + array_deps_required+=( lib32tinfo5 ) + # Brainbread 2 and Don't Starve Together + elif [ "${gamename}" == "Brainbread 2" ]||[ "${gamename}" == "Don't Starve Together" ]; then + array_deps_required+=( libcurl4-gnutls-dev:i386 ) + elif [ "${engine}" == "projectzomboid" ]; then + array_deps_required+=( openjdk-7-jre ) + # Unreal engine + elif [ "${executable}" == "./ucc-bin" ]; then + #UT2K4 + if [ -f "${executabledir}/ut2004-bin" ]; then + array_deps_required+=( libsdl1.2debian libstdc++5:i386 bzip2 unzip ) + #UT99 + else + array_deps_required+=( libsdl1.2debian bzip2 ) + fi + fi + fn_deps_email + fn_check_loop + +elif [ -n "$(command -v yum)" ]; then + # Generate array of missing deps + array_deps_missing=() + + # LGSM requirement for curl + array_deps_required=( curl ) + + # All servers except ts3 require tmux + if [ "${executable}" != "./ts3server_startscript.sh" ]; then + array_deps_required+=( tmux ) + fi + + # All servers excelts ts3 & mumble require libstdc++6,lib32gcc1 + if [ "${executable}" != "./ts3server_startscript.sh" ]||[ "${executable}" != "./murmur.x86" ]; then + array_deps_required+=( glibc.i686 libstdc++.i686 ) + fi + + # Game Specific requirements + + # Spark + if [ "${engine}" == "spark" ]; then + array_deps_required+=( speex.i686 tbb.i686 ) + # 7 Days to Die + elif [ "${executable}" == "./7DaysToDie.sh" ]; then + array_deps_required+=( telnet expect ) + # No More Room in Hell + elif [ "${gamename}" == "No More Room in Hell" ]; then + array_deps_required+=( ncurses-libs.i686 ) + # Brainbread 2 and Don't Starve Together + elif [ "${gamename}" == "Brainbread 2" ]||[ "${gamename}" == "Don't Starve Together" ]; then + array_deps_required+=( libcurl.i686 ) + elif [ "${engine}" == "projectzomboid" ]; then + array_deps_required+=( java-1.7.0-openjdk ) + # Unreal engine + elif [ "${executable}" == "./ucc-bin" ]; then + #UT2K4 + if [ -f "${executabledir}/ut2004-bin" ]; then + array_deps_required+=( compat-libstdc++-33.i686 SDL.i686 bzip2 unzip ) + #UT99 + else + array_deps_required+=( SDL.i686 bzip2 ) + fi + fi + fn_deps_email + fn_check_loop +fi \ No newline at end of file diff --git a/functions/command_dev_detect_deps.sh b/functions/command_dev_detect_deps.sh index 30f89157d..f6d1da766 100644 --- a/functions/command_dev_detect_deps.sh +++ b/functions/command_dev_detect_deps.sh @@ -35,10 +35,12 @@ elif [ "${executable}" == "./ts3server_startscript.sh" ]; then executable=ts3server_linux_amd64 fi -if [ -n "$(command -v eu-readelf)" ]; then +if [ "$(command -v eu-readelf)" ]; then readelf=eu-readelf -else +elif [ "$(command -v readelf)" ]; readelf=readelf +else + echo "readelf/eu-readelf not installed" fi ${readelf} -d ${executable} |grep NEEDED|awk '{ print $5 }'|sed 's/\[//g'|sed 's/\]//g' > "${rootdir}/.depdetect_readelf" diff --git a/functions/command_install.sh b/functions/command_install.sh index f2021f071..791cb160d 100644 --- a/functions/command_install.sh +++ b/functions/command_install.sh @@ -9,7 +9,7 @@ function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))" check.sh install_header.sh install_serverdir.sh - +check_deps.sh # Download and install if [ "${gamename}" == "Unreal Tournament 2004" ]; then install_dl_ut2k4.sh diff --git a/functions/core_functions.sh b/functions/core_functions.sh index 560a2ee26..7b0f148cd 100644 --- a/functions/core_functions.sh +++ b/functions/core_functions.sh @@ -2,7 +2,7 @@ # LGSM core_functions.sh function # Author: Daniel Gibbs # Website: http://gameservermanagers.com -lgsm_version="060116" +lgsm_version="170116" # Description: Defines all functions to allow download and execution of functions using fn_runfunction. # This function is called first before any other function. Without this file other functions would not load. @@ -111,6 +111,11 @@ functionfile="${FUNCNAME}" fn_runfunction } +check_deps.sh(){ +functionfile="${FUNCNAME}" +fn_runfunction +} + check_ip.sh(){ functionfile="${FUNCNAME}" fn_runfunction diff --git a/functions/fn_update_functions b/functions/fn_update_functions index 185f44f5e..2de9afd6d 100644 --- a/functions/fn_update_functions +++ b/functions/fn_update_functions @@ -2,7 +2,7 @@ # LGSM update_functions.sh function # Author: Daniel Gibbs # Website: http://gameservermanagers.com -lgsm_version="271215" +lgsm_version="230116" # Description: LEGACY FUNCTION Deletes the functions dir to allow re-downloading of functions from GitHub. @@ -14,9 +14,9 @@ rm -rfv "${rootdir}/functions/"* exitcode=$? if [ "${exitcode}" == "0" ]; then fn_printok "Updating functions" - fn_scriptlog "Successfull! Updating functions" + fn_scriptlog "Success! Updating functions" else - fn_printokfail "Updating functions" + fn_printfail "Updating functions" fn_scriptlog "Failure! Updating functions" fi echo -ne "\n" \ No newline at end of file diff --git a/functions/update_check.sh b/functions/update_check.sh index e0ba3ea96..38e786544 100644 --- a/functions/update_check.sh +++ b/functions/update_check.sh @@ -188,7 +188,6 @@ sleep 1 # Checks currentbuild info is available, if fails a server restart will be forced to generate logs if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then fn_printfail "Checking for update: teamspeak.com" - fn_scriptlog "Checking for update: teamspeak.com" sleep 1 fn_printfailnl "Checking for update: teamspeak.com: No logs with server version found" fn_scriptlog "Failure! Checking for update: teamspeak.com: No logs with server version found" diff --git a/functions/update_functions.sh b/functions/update_functions.sh index 350714ed0..196b90f75 100644 --- a/functions/update_functions.sh +++ b/functions/update_functions.sh @@ -2,7 +2,7 @@ # LGSM update_functions.sh function # Author: Daniel Gibbs # Website: http://gameservermanagers.com -lgsm_version="271215" +lgsm_version="230116" # Description: Deletes the functions dir to allow re-downloading of functions from GitHub. @@ -16,9 +16,9 @@ rm -rfv "${rootdir}/functions/"* exitcode=$? if [ "${exitcode}" == "0" ]; then fn_printok "Updating functions" - fn_scriptlog "Successfull! Updating functions" + fn_scriptlog "Success! Updating functions" else - fn_printokfail "Updating functions" + fn_printfail "Updating functions" fn_scriptlog "Failure! Updating functions" fi echo -ne "\n" \ No newline at end of file