Browse Source

Merge pull request #667 from dgibbs64/deps-detect

feature: deps detect #433
Daniel Gibbs 10 years ago
parent
commit
b4dea07479

+ 9 - 1
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

+ 200 - 0
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

+ 4 - 2
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"

+ 1 - 1
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

+ 6 - 1
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

+ 3 - 3
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"

+ 0 - 1
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"

+ 3 - 3
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"