Daniel Gibbs 9 лет назад
Родитель
Сommit
6da1a1a4c8
1 измененных файлов с 216 добавлено и 172 удалено
  1. 216 172
      lgsminstall.sh

+ 216 - 172
lgsminstall.sh

@@ -37,144 +37,6 @@ githubuser="GameServerManagers"
 githubrepo="LinuxGSM"
 githubbranch="feature/config"
 
-
-fn_print_center() {
-	columns="$(tput cols)"
-	line="$@"
-	printf "%*s\n" $(( (${#line} + columns) / 2)) "$line"
-}
-# Print horizontal line
-fn_print_horizontal(){
-	char="${1:-=}"
-	printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "${char}"
-}
-
-# Display simple Bash menu
-fn_menu_bash() {
-	local resultvar=$1
-	title=$2
-	caption=$3
-	options=$4
-	fn_print_horizontal
-	fn_print_center $title
-	fn_print_center $caption
-	fn_print_horizontal
-	menu_options=()
-	while read -r line || [[ -n "$line" ]]; do
-		var=$(echo $line | awk -F "," '{print $2 " - " $3}')
-		menu_options+=( "${var}" )
-	done <  $options
-	menu_options+=( "Cancel" )
-	select option in "${menu_options[@]}"; do
-		if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then
-			eval "$resultvar=\"${option/%\ */}\""
-		fi
-		break
-	done
-}
-
-fn_menu() {
-	local resultvar=$1
-	local selection=""
-	title=$2
-	caption=$3
-	options=$4
-	# If this is a list of options as a string, dump it to a file so we can process it
-	if [ ! -e "${options}" ]; then
-		echo -ne "${options}\n" > "${cachedir}/menu.options"
-		options="${cachedir}/menu.options"
-	fi
-
-	# Get menu command
-#	for menucmd in whiptail dialog bash; do
-#		if [ -x $(which $menucmd) ]; then
-#			menucmd=$(which $menucmd)
-#			break
-#		fi
-#	done
-	case "$(basename $menucmd)" in
-		whiptail|dialog)
-			fn_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30
-			;;
-		*)
-			fn_menu_bash selection "${title}" "${caption}" "${options}"
-			;;
-	esac
-	eval "$resultvar=\"${selection}\""
-	echo "$resultvar"
-}
-
-fn_serverlist(){
-	IFS=","
-	if [ -f "lgsm/data/serverlist.csv" ]; then
-		serverlist="lgsm/data/serverlist.csv"
-		server_info_array=($(awk '{ print $2 }' "${serverlist}" | grep "${userinput}" ))
-	else
-		serverlist="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv"
-		server_info_array=($(awk '{ print $2 }' <(curl -s "${serverlist}") | grep "${userinput}"))
-	fi
-	shortname="${server_info_array[0]}"
-	servername="${server_info_array[1]}"
-	gamename="${server_info_array[2]}"
-	echo "$server_info_array"
-	echo "shortname: $shortname"
-	echo "servername: $servername"
-	echo "gamename: $gamename"
-}
-
-fn_install_getopt(){
-	userinput="empty"
-	echo "Usage: $0 [option]"
-	echo -e ""
-	echo "Installer - Linux Game Server Manager - Version ${version}"
-	echo "https://gameservermanagers.com"
-	echo -e ""
-	echo -e "Commands"
-	echo -e "install |Select server to install."
-	echo -e "servername |e.g $0 csgoserver. Enter the required servername will install it."
-	echo -e "list |List all servers available for install."
-	exit
-}
-
-# LinuxGSM installer
-if [ "${shortname}" == "core" ]; then
-	userinput=$1
-	if [ -z "${userinput}" ]; then
-		fn_install_getopt
-	elif [ "${userinput}" == "list" ]; then
-		fn_serverlist
-		{
-		if [ -f "lgsm/data/serverlist.csv" ]; then
-			awk -F "," '{print $2 "\t" $3}' "${serverlist}"
-		else
-			awk -F "," '{print $2 "\t" $3}' <(curl -s "${serverlist}")
-		fi
-		} | column -s $'\t' -t | more
-		exit
-	elif [ "${userinput}" == "install" ]; then
-	fn_menu result "Linux Game Server Manager" "Select game to install" "lgsm/data/serverlist.csv"
-	else
-		fn_serverlist
-		if [ "${userinput}" == "${server_info_array[1]}" ]; then
-
-			if [ -e "${servername}" ]; then
-				i=2
-			while [ -e "$servername-$i" ] ; do
-				let i++
-			done
-				servername="${servername}-$i"
-			fi
-			cp "${selfname}" "${servername}"
-			sed -i -e "s/shortname=\"core\"/shortname=\"${shortname}\"/g" "${servername}"
-			sed -i -e "s/servername=\"core\"/servername=\"${servername}\"/g" "${servername}"
-			sed -i -e "s/gamename=\"core\"/gamename=\"${gamename}\"/g" "${servername}"
-			exit
-		else
-			fn_install_getopt
-		fi
-	fi
-fi
-
 # Bootstrap
 
 # Fetches bootstrap files (configs and core functions)
@@ -260,36 +122,227 @@ fn_boostrap_fetch_config(){
 	fn_boostrap_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"
 }
 
-# Load the default config. If missing download it. If changed reload it.
-if [ ! -f "${tmpdir}/config/${servername}/_default.cfg" ];then
-	fn_boostrap_fetch_config "lgsm/config/${servername}" "_default.cfg" "${tmpdir}/config/${servername}" "_default.cfg" "noexecutecmd" "norun" "noforce" "nomd5"
-fi
-if [ ! -f "${gameconfigdir}/_default.cfg" ];then
-	echo "hello"
-	cp "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg"
-else
-	function_file_diff=$(diff -q ${tmpdir}/config/${servername}/_default.cfg ${gameconfigdir}/_default.cfg)
-	if [ "${function_file_diff}" != "" ]; then
-		echo "config different onverwriting"
-		cp "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg"
+fn_print_center() {
+	columns="$(tput cols)"
+	line="$@"
+	printf "%*s\n" $(( (${#line} + columns) / 2)) "${line}"
+}
+# Print horizontal line
+fn_print_horizontal(){
+	char="${1:-=}"
+	printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "${char}"
+}
+
+# Bash Menu
+fn_install_menu_bash() {
+	local resultvar=$1
+	title=$2
+	caption=$3
+	options=$4
+	fn_print_horizontal
+	fn_print_center $title
+	fn_print_center $caption
+	fn_print_horizontal
+	menu_options=()
+	while read -r line || [[ -n "${line}" ]]; do
+		var=$(echo "${line}" | awk -F "," '{print $2 " - " $3}')
+		menu_options+=( "${var}" )
+	done <  $options
+	menu_options+=( "Cancel" )
+	select option in "${menu_options[@]}"; do
+		if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then
+			eval "$resultvar=\"${option/%\ */}\""
+		fi
+		break
+	done
+}
+
+# Whiptail/Dialog Menu
+fn_install_menu_whiptail() {
+	local menucmd=$1
+	local resultvar=$2
+	title=$3
+	caption=$4
+	options=$5
+	height=${6:-40}
+	width=${7:-80}
+	menuheight=${8:-30}
+	IFS=","
+	menu_options=()
+	while read -r line; do
+		key=$(echo "${line}" | awk -F "," '{print $3}')
+		val=$(echo "${line}" | awk -F "," '{print $2}')
+		menu_options+=( ${val//\"} "${key//\"}" )
+	done < $options
+	OPTION=$(${menucmd} --title "${title}" --menu "${caption}" ${height} ${width} ${menuheight} "${menu_options[@]}" 3>&1 1>&2 2>&3)
+	if [ $? = 0 ]; then
+		eval "$resultvar=\"${OPTION}\""
+	else
+		eval "$resultvar="
 	fi
-	source lgsm/config/${servername}/_default.cfg
-fi
+}
 
-if [ ! -f "${gameconfigdir}/common.cfg" ];then
-	fn_boostrap_fetch_config "lgsm/config" "common-template.cfg" "${lgsmdir}/config/${servername}" "common.cfg" "${executecmd}" "noexecutecmd" "norun" "noforce" "nomd5"
-	source lgsm/config/${servername}/common.cfg
-else
-	source lgsm/config/${servername}/common.cfg
+# Menu selector
+fn_install_menu() {
+	local resultvar=$1
+	local selection=""
+	title=$2
+	caption=$3
+	options=$4
+	# Get menu command
+	for menucmd in whiptail dialog bash; do
+		if [ -x $(which ${menucmd}) ]; then
+			menucmd=$(which ${menucmd})
+			break
+		fi
+	done
+	case "$(basename ${menucmd})" in
+		whiptail|dialog)
+			fn_install_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30;;
+		*)
+			fn_install_menu_bash selection "${title}" "${caption}" "${options}";;
+	esac
+	eval "$resultvar=\"${selection}\""
+}
+
+# Gets server info from serverlist.csv and puts in to array
+fn_server_info(){
+	IFS=","
+	server_info_array=($(grep -a "${userinput}" "${serverlist}"))
+	shortname="${server_info_array[0]}" # csgo
+	servername="${server_info_array[1]}" # csgoserver
+	gamename="${server_info_array[2]}" # Counter Strike: Global Offensive
+	echo "shortname: $shortname"
+	echo "servername: $servername"
+	echo "gamename: $gamename"
+}
+
+fn_install_getopt(){
+	userinput="empty"
+	echo "Usage: $0 [option]"
+	echo -e ""
+	echo "Installer - Linux Game Server Managers - Version ${version}"
+	echo "https://gameservermanagers.com"
+	echo -e ""
+	echo -e "Commands"
+	echo -e "install |Select server to install."
+	echo -e "servername |e.g $0 csgoserver. Enter the required servername will install it."
+	echo -e "list |List all servers available for install."
+	exit
+}
+
+fn_install_file(){
+	filename="${servername}"
+	if [ -e "${filename}" ]; then
+		i=2
+	while [ -e "${filename}-${i}" ] ; do
+		let i++
+	done
+		filename="${filename}-${i}"
+	fi
+	cp -R "${selfname}" "${filename}"
+	sed -i -e "s/shortname=\"core\"/shortname=\"${shortname}\"/g" "${filename}"
+	sed -i -e "s/servername=\"core\"/servername=\"${servername}\"/g" "${filename}"
+	sed -i -e "s/gamename=\"core\"/gamename=\"${gamename}\"/g" "${filename}"
+	exit
+}
+
+# Prevent from running this script as root.
+if [ "$(whoami)" = "root" ]; then
+	if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]; then
+		echo "[ FAIL ] Do NOT run this script as root!"
+		exit 1
+	else
+		core_functions.sh
+		check_root.sh
+	fi
 fi
 
-if [ ! -f "${gameconfigdir}/${servicename}.cfg" ];then
-	fn_boostrap_fetch_config "lgsm/config" "instance-template.cfg" "${lgsmdir}/config/${servername}" "${servicename}.cfg" "noexecutecmd" "norun" "noforce" "nomd5"
-	source lgsm/config/${servername}/${servicename}.cfg
+# LinuxGSM installer mode
+if [ "${shortname}" == "core" ]; then
+	userinput=$1
+	datadir="${lgsmdir}/data"
+	serverlist="${datadir}/serverlist.csv"
+	serverlist_tmp="${tmpdir}/data/serverlist.csv"
+
+	# Download the serverlist. This is the complete list of all supported servers.
+	# Download to tmp dir
+	fn_boostrap_fetch_config "lgsm/data" "serverlist.csv" "${tmpdir}/data" "serverlist.csv" "noexecutecmd" "norun" "noforce" "nomd5"
+	# if missing in lgsm dir copy it accross
+	if [ ! -f "${serverlist}" ]; then
+		mkdir -p "${datadir}"
+		cp -R "${serverlist_tmp}" "${serverlist}"
+	# check if the files are different.
+	else
+		file_diff=$(diff -q "${serverlist_tmp}" "${serverlist}")
+		if [ "${file_diff}" != "" ]; then
+			cp -Rf "${serverlist_tmp}" "${serverlist}"
+		fi
+	fi
+
+	if [ ! -f "${serverlist}" ];then
+		echo "[ FAIL ] serverlist.csv could not be loaded."
+		exit 1
+	fi
+
+	if [ "${userinput}" == "list" ]; then
+		{
+			awk -F "," '{print $2 "\t" $3}' "${serverlist}"
+		} | column -s $'\t' -t | more
+		exit
+	elif [ "${userinput}" == "install" ]; then
+		fn_install_menu result "LinuxGSM" "Select game to install" "lgsm/data/serverlist.csv"
+		userinput="${result}"
+		fn_server_info
+		echo "result is ${result}"
+		echo "RESULT: ${result}"
+		echo "VALIDATE: ${servername}"
+		if [ "${result}" == "${servername}" ]; then
+			fn_install_file
+		else
+			echo "[ FAIL ] menu result does not match servername"
+		fi
+	elif [ -n "${userinput}" ]; then
+		fn_server_info
+		if [ "${userinput}" == "${servername}" ]; then
+			fn_install_file
+		fi
+	else
+		fn_install_getopt
+	fi
+# LinuxGSM Server Mode
 else
-	source lgsm/config/${servername}/${servicename}.cfg
+	# Load LinuxGSM configs
+	# These are required to get all the default variables for the specific server.
+	# Load the default config. If missing download it. If changed reload it.
+	if [ ! -f "${tmpdir}/config/${servername}/_default.cfg" ];then
+		fn_boostrap_fetch_config "lgsm/config/${servername}" "_default.cfg" "${tmpdir}/config/${servername}" "_default.cfg" "noexecutecmd" "norun" "noforce" "nomd5"
+	fi
+	if [ ! -f "${gameconfigdir}/_default.cfg" ];then
+		cp -R "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg"
+	else
+		function_file_diff=$(diff -q ${tmpdir}/config/${servername}/_default.cfg ${gameconfigdir}/_default.cfg)
+		if [ "${function_file_diff}" != "" ]; then
+			echo "config different onverwriting"
+			cp -R "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg"
+		fi
+		source lgsm/config/${servername}/_default.cfg
+	fi
+	# Load the common.cfg config. If missing download it
+	if [ ! -f "${gameconfigdir}/common.cfg" ];then
+		fn_boostrap_fetch_config "lgsm/config" "common-template.cfg" "${lgsmdir}/config/${servername}" "common.cfg" "${executecmd}" "noexecutecmd" "norun" "noforce" "nomd5"
+		source lgsm/config/${servername}/common.cfg
+	else
+		source lgsm/config/${servername}/common.cfg
+	fi
+	# Load the instance.cfg config. If missing download it
+	if [ ! -f "${gameconfigdir}/${servicename}.cfg" ];then
+		fn_boostrap_fetch_config "lgsm/config" "instance-template.cfg" "${lgsmdir}/config/${servername}" "${servicename}.cfg" "noexecutecmd" "norun" "noforce" "nomd5"
+		source lgsm/config/${servername}/${servicename}.cfg
+	else
+		source lgsm/config/${servername}/${servicename}.cfg
+	fi
 fi
-
 ########################
 ######## Script ########
 ###### Do not edit #####
@@ -307,16 +360,7 @@ functionfile="${FUNCNAME}"
 fn_boostrap_fetch_function
 }
 
-# Prevent from running this script as root.
-if [ "$(whoami)" = "root" ]; then
-	if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]||[ ! -f "${functionsdir}/exit 1" ]; then
-		echo "[ FAIL ] Do NOT run this script as root!"
-		exit 1
-	else
-		core_functions.sh
-		check_root.sh
-	fi
-fi
+
 
 core_dl.sh
 core_functions.sh