Browse Source

refactor: remove legacy code

core_functsions.sh is no longer required

refactor: remove legacy code

A lot of time has passed on many of these changes. Moving old legacy code conversions

refactor: remove unused alert modules

This commit removes the unused alert modules `alert.sh`, `alert_discord.sh`, and `alert_email.sh`. These modules were not being used in the codebase and were therefore deleted.
Daniel Gibbs 2 years ago
parent
commit
069e3bd4e1
100 changed files with 0 additions and 10004 deletions
  1. 0 17
      lgsm/functions/README.md
  2. 0 238
      lgsm/functions/alert.sh
  3. 0 59
      lgsm/functions/alert_discord.sh
  4. 0 25
      lgsm/functions/alert_email.sh
  5. 0 30
      lgsm/functions/alert_gotify.sh
  6. 0 29
      lgsm/functions/alert_ifttt.sh
  7. 0 32
      lgsm/functions/alert_mailgun.sh
  8. 0 30
      lgsm/functions/alert_pushbullet.sh
  9. 0 33
      lgsm/functions/alert_pushover.sh
  10. 0 50
      lgsm/functions/alert_rocketchat.sh
  11. 0 75
      lgsm/functions/alert_slack.sh
  12. 0 30
      lgsm/functions/alert_telegram.sh
  13. 0 101
      lgsm/functions/check.sh
  14. 0 35
      lgsm/functions/check_config.sh
  15. 0 363
      lgsm/functions/check_deps.sh
  16. 0 20
      lgsm/functions/check_executable.sh
  17. 0 29
      lgsm/functions/check_glibc.sh
  18. 0 63
      lgsm/functions/check_ip.sh
  19. 0 26
      lgsm/functions/check_last_update.sh
  20. 0 26
      lgsm/functions/check_logs.sh
  21. 0 233
      lgsm/functions/check_permissions.sh
  22. 0 21
      lgsm/functions/check_root.sh
  23. 0 10
      lgsm/functions/check_status.sh
  24. 0 22
      lgsm/functions/check_steamcmd.sh
  25. 0 22
      lgsm/functions/check_system_dir.sh
  26. 0 55
      lgsm/functions/check_system_requirements.sh
  27. 0 33
      lgsm/functions/check_tmuxception.sh
  28. 0 23
      lgsm/functions/check_version.sh
  29. 0 268
      lgsm/functions/command_backup.sh
  30. 0 39
      lgsm/functions/command_check_update.sh
  31. 0 58
      lgsm/functions/command_console.sh
  32. 0 142
      lgsm/functions/command_debug.sh
  33. 0 41
      lgsm/functions/command_details.sh
  34. 0 24
      lgsm/functions/command_dev_clear_functions.sh
  35. 0 23
      lgsm/functions/command_dev_debug.sh
  36. 0 231
      lgsm/functions/command_dev_detect_deps.sh
  37. 0 92
      lgsm/functions/command_dev_detect_glibc.sh
  38. 0 61
      lgsm/functions/command_dev_detect_ldd.sh
  39. 0 280
      lgsm/functions/command_dev_query_raw.sh
  40. 0 26
      lgsm/functions/command_donate.sh
  41. 0 442
      lgsm/functions/command_fastdl.sh
  42. 0 52
      lgsm/functions/command_install.sh
  43. 0 32
      lgsm/functions/command_install_resources_mta.sh
  44. 0 135
      lgsm/functions/command_mods_install.sh
  45. 0 153
      lgsm/functions/command_mods_remove.sh
  46. 0 109
      lgsm/functions/command_mods_update.sh
  47. 0 245
      lgsm/functions/command_monitor.sh
  48. 0 78
      lgsm/functions/command_postdetails.sh
  49. 0 18
      lgsm/functions/command_restart.sh
  50. 0 41
      lgsm/functions/command_send.sh
  51. 0 23
      lgsm/functions/command_skeleton.sh
  52. 0 224
      lgsm/functions/command_start.sh
  53. 0 283
      lgsm/functions/command_stop.sh
  54. 0 19
      lgsm/functions/command_test_alert.sh
  55. 0 57
      lgsm/functions/command_ts3_server_pass.sh
  56. 0 40
      lgsm/functions/command_update.sh
  57. 0 236
      lgsm/functions/command_update_linuxgsm.sh
  58. 0 49
      lgsm/functions/command_validate.sh
  59. 0 183
      lgsm/functions/command_wipe.sh
  60. 0 35
      lgsm/functions/compress_unreal2_maps.sh
  61. 0 35
      lgsm/functions/compress_ut99_maps.sh
  62. 0 625
      lgsm/functions/core_dl.sh
  63. 0 61
      lgsm/functions/core_exit.sh
  64. 0 816
      lgsm/functions/core_functions.sh
  65. 0 215
      lgsm/functions/core_getopt.sh
  66. 0 114
      lgsm/functions/core_github.sh
  67. 0 84
      lgsm/functions/core_legacy.sh
  68. 0 110
      lgsm/functions/core_logs.sh
  69. 0 598
      lgsm/functions/core_messages.sh
  70. 0 816
      lgsm/functions/core_modules.sh
  71. 0 334
      lgsm/functions/core_steamcmd.sh
  72. 0 22
      lgsm/functions/core_trap.sh
  73. 0 88
      lgsm/functions/fix.sh
  74. 0 62
      lgsm/functions/fix_ark.sh
  75. 0 16
      lgsm/functions/fix_arma3.sh
  76. 0 17
      lgsm/functions/fix_armar.sh
  77. 0 19
      lgsm/functions/fix_av.sh
  78. 0 10
      lgsm/functions/fix_bo.sh
  79. 0 24
      lgsm/functions/fix_bt.sh
  80. 0 23
      lgsm/functions/fix_cmw.sh
  81. 0 42
      lgsm/functions/fix_csgo.sh
  82. 0 17
      lgsm/functions/fix_dst.sh
  83. 0 10
      lgsm/functions/fix_hw.sh
  84. 0 20
      lgsm/functions/fix_ins.sh
  85. 0 36
      lgsm/functions/fix_kf.sh
  86. 0 20
      lgsm/functions/fix_kf2.sh
  87. 0 17
      lgsm/functions/fix_lo.sh
  88. 0 11
      lgsm/functions/fix_mcb.sh
  89. 0 16
      lgsm/functions/fix_mta.sh
  90. 0 17
      lgsm/functions/fix_nmrih.sh
  91. 0 19
      lgsm/functions/fix_onset.sh
  92. 0 39
      lgsm/functions/fix_ro.sh
  93. 0 32
      lgsm/functions/fix_rust.sh
  94. 0 10
      lgsm/functions/fix_rw.sh
  95. 0 34
      lgsm/functions/fix_samp.sh
  96. 0 10
      lgsm/functions/fix_sdtd.sh
  97. 0 48
      lgsm/functions/fix_sfc.sh
  98. 0 11
      lgsm/functions/fix_sof2.sh
  99. 0 26
      lgsm/functions/fix_squad.sh
  100. 0 11
      lgsm/functions/fix_st.sh

+ 0 - 17
lgsm/functions/README.md

@@ -1,17 +0,0 @@
-# LinuxGSM - Modules
-
-These modules are scripts that are called upon by the primary script linuxgsm.sh
-
-## Module Names
-
-Modules have been named to give an idea of what the function does.
-
--   core: Essential modules that will always run first.
--   command: Primary command function.
--   check: Runs checks that will either halt on or fix an issue.
--   dev: development modules.
--   fix: Applies a game server specific fix.
--   info: retrieves information from a source such as config file or the OS.
--   install: modules related to the installer.
--   monitor: modules related to monitor.
--   update: modules that update the game server.

+ 0 - 238
lgsm/functions/alert.sh

@@ -1,238 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Overall function for managing alerts.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Generates alert log of the details at the time of the alert.
-# Used with email alerts.
-fn_alert_log() {
-	info_distro.sh
-	info_game.sh
-	info_messages.sh
-	if [ -f "${alertlog}" ]; then
-		rm -f "${alertlog:?}"
-	fi
-
-	{
-		fn_info_message_head
-		fn_info_message_distro
-		fn_info_message_server_resource
-		fn_info_message_gameserver_resource
-		fn_info_message_gameserver
-		fn_info_logs
-	} | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | tee -a "${alertlog}" > /dev/null 2>&1
-}
-
-fn_alert_test() {
-	fn_script_log_info "Sending test alert"
-	alertsubject="Alert - ${selfname} - Test"
-	alertemoji="🚧"
-	alertsound="1"
-	alerturl="not enabled"
-	alertbody="Testing LinuxGSM Alert. No action to be taken."
-}
-
-fn_alert_restart() {
-	fn_script_log_info "Sending alert: Restarted: ${executable} not running"
-	alertsubject="Alert - ${selfname} - Restarted"
-	alertemoji="🚨"
-	alertsound="2"
-	alerturl="not enabled"
-	alertbody="${selfname} ${executable} not running"
-}
-
-fn_alert_restart_query() {
-	fn_script_log_info "Sending alert: Restarted: ${selfname}"
-	alertsubject="Alert - ${selfname} - Restarted"
-	alertemoji="🚨"
-	alertsound="2"
-	alerturl="not enabled"
-	alertbody="Unable to query: ${selfname}"
-}
-
-fn_alert_update() {
-	fn_script_log_info "Sending alert: Updated"
-	alertsubject="Alert - ${selfname} - Updated"
-	alertemoji="🎮"
-	alertsound="1"
-	alerturl="not enabled"
-	alertbody="${gamename} received update: ${remotebuildversion}"
-}
-
-fn_alert_check_update() {
-	fn_script_log_info "Sending alert: Update available"
-	alertsubject="Alert - ${selfname} - Update available"
-	alertemoji="🎮"
-	alertsound="1"
-	alerturl="not enabled"
-	alertbody="${gamename} update available: ${remotebuildversion}"
-}
-
-fn_alert_permissions() {
-	fn_script_log_info "Sending alert: Permissions error"
-	alertsubject="Alert - ${selfname}: Permissions error"
-	alertemoji="❗"
-	alertsound="2"
-	alerturl="not enabled"
-	alertbody="${selfname} has permissions issues"
-}
-
-fn_alert_config() {
-	fn_script_log_info "Sending alert: New _default.cfg"
-	alertsubject="Alert - ${selfname} - New _default.cfg"
-	alertemoji="🎮"
-	alertsound="1"
-	alerturl="not enabled"
-	alertbody="${selfname} has received a new _default.cfg. Check file for changes."
-}
-
-if [ "${alert}" == "permissions" ]; then
-	fn_alert_permissions
-elif [ "${alert}" == "restart" ]; then
-	fn_alert_restart
-elif [ "${alert}" == "restartquery" ]; then
-	fn_alert_restart_query
-elif [ "${alert}" == "test" ]; then
-	fn_alert_test
-elif [ "${alert}" == "update" ]; then
-	fn_alert_update
-elif [ "${alert}" == "check-update" ]; then
-	fn_alert_check_update
-elif [ "${alert}" == "config" ]; then
-	fn_alert_config
-fi
-
-# Generate alert log.
-fn_alert_log
-
-# Generates the more info link.
-if [ "${postalert}" == "on" ] && [ -n "${postalert}" ]; then
-	exitbypass=1
-	command_postdetails.sh
-	fn_firstcommand_reset
-	unset exitbypass
-elif [ "${postalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "More Info not enabled"
-	fn_script_log_warn "More Info alerts not enabled"
-fi
-
-if [ "${discordalert}" == "on" ] && [ -n "${discordalert}" ]; then
-	alert_discord.sh
-elif [ "${discordalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Discord alerts not enabled"
-	fn_script_log_warn "Discord alerts not enabled"
-elif [ -z "${discordtoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Discord token not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/discord"
-	fn_script_error "Discord token not set"
-fi
-
-if [ "${emailalert}" == "on" ] && [ -n "${email}" ]; then
-	alert_email.sh
-elif [ "${emailalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Email alerts not enabled"
-	fn_script_log_warn "Email alerts not enabled"
-elif [ -z "${email}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Email not set"
-	fn_script_log_error "Email not set"
-fi
-
-if [ "${gotifyalert}" == "on" ] && [ -n "${gotifyalert}" ]; then
-	alert_gotify.sh
-elif [ "${gotifyalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Gotify alerts not enabled"
-	fn_script_log_warn "Gotify alerts not enabled"
-elif [ -z "${gotifytoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Gotify token not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/gotify"
-	fn_script_error "Gotify token not set"
-elif [ -z "${gotifywebhook}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Gotify webhook not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/gotify"
-	fn_script_error "Gotify webhook not set"
-fi
-
-if [ "${iftttalert}" == "on" ] && [ -n "${iftttalert}" ]; then
-	alert_ifttt.sh
-elif [ "${iftttalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "IFTTT alerts not enabled"
-	fn_script_log_warn "IFTTT alerts not enabled"
-elif [ -z "${ifttttoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "IFTTT token not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/ifttt"
-	fn_script_error "IFTTT token not set"
-fi
-
-if [ "${mailgunalert}" == "on" ] && [ -n "${mailgunalert}" ]; then
-	alert_mailgun.sh
-elif [ "${mailgunalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Mailgun alerts not enabled"
-	fn_script_log_warn "Mailgun alerts not enabled"
-elif [ -z "${mailguntoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Mailgun token not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/mailgun"
-	fn_script_error "Mailgun token not set"
-fi
-
-if [ "${pushbulletalert}" == "on" ] && [ -n "${pushbullettoken}" ]; then
-	alert_pushbullet.sh
-elif [ "${pushbulletalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Pushbullet alerts not enabled"
-	fn_script_log_warn "Pushbullet alerts not enabled"
-elif [ -z "${pushbullettoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Pushbullet token not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/pushbullet"
-	fn_script_error "Pushbullet token not set"
-fi
-
-if [ "${pushoveralert}" == "on" ] && [ -n "${pushoveralert}" ]; then
-	alert_pushover.sh
-elif [ "${pushoveralert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Pushover alerts not enabled"
-	fn_script_log_warn "Pushover alerts not enabled"
-elif [ -z "${pushovertoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Pushover token not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/pushover"
-	fn_script_error "Pushover token not set"
-fi
-
-if [ "${telegramalert}" == "on" ] && [ -n "${telegramtoken}" ]; then
-	alert_telegram.sh
-elif [ "${telegramalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Telegram Messages not enabled"
-	fn_script_log_warn "Telegram Messages not enabled"
-elif [ -z "${telegramtoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Telegram token not set."
-	echo -e "* https://docs.linuxgsm.com/alerts/telegram"
-	fn_script_error "Telegram token not set."
-elif [ -z "${telegramchatid}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Telegram chat id not set."
-	echo -e "* https://docs.linuxgsm.com/alerts/telegram"
-	fn_script_error "Telegram chat id not set."
-fi
-
-if [ "${rocketchatalert}" == "on" ] && [ -n "${rocketchatalert}" ]; then
-	alert_rocketchat.sh
-elif [ "${rocketchatalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Rocketchat alerts not enabled"
-	fn_script_log_warn "Rocketchat alerts not enabled"
-elif [ -z "${rocketchattoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Rocketchat token not set"
-	#echo -e "* https://docs.linuxgsm.com/alerts/slack"
-	fn_script_error "Rocketchat token not set"
-fi
-
-if [ "${slackalert}" == "on" ] && [ -n "${slackalert}" ]; then
-	alert_slack.sh
-elif [ "${slackalert}" != "on" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_warn_nl "Slack alerts not enabled"
-	fn_script_log_warn "Slack alerts not enabled"
-elif [ -z "${slacktoken}" ] && [ "${commandname}" == "TEST-ALERT" ]; then
-	fn_print_error_nl "Slack token not set"
-	echo -e "* https://docs.linuxgsm.com/alerts/slack"
-	fn_script_error "Slack token not set"
-fi

+ 0 - 59
lgsm/functions/alert_discord.sh

@@ -1,59 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_discord.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Discord alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-json=$(
-	cat << EOF
-{
-	"username":"LinuxGSM",
-	"avatar_url":"https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/alert_discord_logo.jpg",
-	"file":"content",
-	"embeds": [{
-		"color": "2067276",
-		"author": {
-			"name": "${alertemoji} ${alertsubject} ${alertemoji}",
-			"icon_url": "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/alert_discord_logo.jpg"
-		},
-		"title": "${servername}",
-		"description": "${alertbody} \n More info: ${alerturl}",
-		"url": "",
-		"type": "content",
-		"thumbnail": {},
-		"fields": [
-			{
-				"name": "Game",
-				"value": "${gamename}",
-				"inline": true
-			},
-			{
-				"name": "Server IP",
-				"value": "[${alertip}:${port}](https://www.gametracker.com/server_info/${alertip}:${port})",
-				"inline": true
-			},
-			{
-				"name": "Hostname",
-				"value": "${HOSTNAME}",
-				"inline": true
-			}
-		]
-	}]
-}
-EOF
-)
-
-fn_print_dots "Sending Discord alert"
-
-discordsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" "${discordwebhook}")
-
-if [ -n "${discordsend}" ]; then
-	fn_print_fail_nl "Sending Discord alert: ${discordsend}"
-	fn_script_log_fatal "Sending Discord alert: ${discordsend}"
-else
-	fn_print_ok_nl "Sending Discord alert"
-	fn_script_log_pass "Sending Discord alert"
-fi

+ 0 - 25
lgsm/functions/alert_email.sh

@@ -1,25 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_email.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends email alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_print_dots "Sending Email alert: ${email}"
-fn_sleep_time
-
-if [ -n "${emailfrom}" ]; then
-	mail -s "${alertsubject}" -r "${emailfrom}" "${email}" < "${alertlog}"
-else
-	mail -s "${alertsubject}" "${email}" < "${alertlog}"
-fi
-exitcode=$?
-if [ "${exitcode}" == "0" ]; then
-	fn_print_ok_nl "Sending Email alert: ${email}"
-	fn_script_log_pass "Sending Email alert: ${email}"
-else
-	fn_print_fail_nl "Sending Email alert: ${email}"
-	fn_script_log_fatal "Sending Email alert: ${email}"
-fi

+ 0 - 30
lgsm/functions/alert_gotify.sh

@@ -1,30 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_gotify.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Gotify alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-json=$(
-	cat << EOF
-{
-	"title": "${alertemoji} ${alertsubject} ${alertemoji}",
-	"message": "Server name\n${servername}\n\nMessage\n${alertbody}\n\nGame\n${gamename}\n\nServer IP\n${alertip}:${port}\n\nHostname\n${HOSTNAME}\n\nMore info\n${alerturl}",
-	"priority": 5
-}
-EOF
-)
-
-fn_print_dots "Sending Gotify alert"
-
-gotifysend=$(curl --connect-timeout 10 -sSL "${gotifywebhook}/message"?token="${gotifytoken}" -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)")
-
-if [ -n "${gotifysend}" ]; then
-	fn_print_ok_nl "Sending Gotify alert"
-	fn_script_log_pass "Sending Gotify alert"
-else
-	fn_print_fail_nl "Sending Gotify alert: ${gotifysend}"
-	fn_script_log_fatal "Sending Gotify alert: ${gotifysend}"
-fi

+ 0 - 29
lgsm/functions/alert_ifttt.sh

@@ -1,29 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_ifttt.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends IFTTT alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-json=$(
-	cat << EOF
-{
-	"value1": "${selfname}",
-	"value2": "${alertemoji} ${alertsubject} ${alertemoji}",
-	"value3": "Message: \n${alertbody}\n\nGame: \n${gamename}\n\nServer name: \n${servername}\n\nHostname: \n${HOSTNAME}\n\nServer IP: \n${alertip}:${port}\n\nMore info: \n${alerturl}"
-}
-EOF
-)
-
-fn_print_dots "Sending IFTTT alert"
-iftttsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" "https://maker.ifttt.com/trigger/${iftttevent}/with/key/${ifttttoken}" | grep "Bad Request")
-
-if [ -n "${iftttsend}" ]; then
-	fn_print_fail_nl "Sending IFTTT alert: ${pushbulletsend}"
-	fn_script_log_fatal "Sending IFTTT alert: ${pushbulletsend}"
-else
-	fn_print_ok_nl "Sending IFTTT alert"
-	fn_script_log_pass "Sent IFTTT alert"
-fi

+ 0 - 32
lgsm/functions/alert_mailgun.sh

@@ -1,32 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_mailgun.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Mailgun Email alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ "${mailgunapiregion}" == "eu" ]; then
-	mailgunapiurl="https://api.eu.mailgun.net"
-else
-	mailgunapiurl="https://api.mailgun.net"
-fi
-
-fn_print_dots "Sending Email alert: Mailgun: ${mailgunemail}"
-
-mailgunsend=$(curl --connect-timeout 10 -s --user "api:${mailguntoken}" \
-	-F from="LinuxGSM <${mailgunemailfrom}>" \
-	-F to="LinuxGSM Admin <${mailgunemail}>" \
-	-F subject="${alertemoji} ${alertsubject} ${alertemoji}" \
-	-F o:tag='alert' \
-	-F o:tag='LinuxGSM' \
-	-F text="$(cat "${alertlog}")" "${mailgunapiurl}/v3/${mailgundomain}/messages")
-
-if [ -z "${mailgunsend}" ]; then
-	fn_print_fail_nl "Sending Email alert: Mailgun: ${mailgunemail}"
-	fn_script_log_fatal "Sending Email alert: Mailgun: ${mailgunemail}"
-else
-	fn_print_ok_nl "Sending Email alert: Mailgun: ${mailgunemail}"
-	fn_script_log_pass "Sending Email alert: Mailgun: ${mailgunemail}"
-fi

+ 0 - 30
lgsm/functions/alert_pushbullet.sh

@@ -1,30 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_pushbullet.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Pushbullet Messenger alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-json=$(
-	cat << EOF
-{
-	"channel_tag": "${channeltag}",
-	"type": "note",
-	"title": "${alertemoji} ${alertsubject} ${alertemoji}",
-	"body": "Server name\n${servername}\n\nMessage\n${alertbody}\n\nGame\n${gamename}\n\nServer IP\n${alertip}:${port}\n\nHostname\n${HOSTNAME}\n\nMore info\n${alerturl}"
-}
-EOF
-)
-
-fn_print_dots "Sending Pushbullet alert"
-pushbulletsend=$(curl --connect-timeout 10 -sSL -u """${pushbullettoken}"":" -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" "https://api.pushbullet.com/v2/pushes" | grep "error_code")
-
-if [ -n "${pushbulletsend}" ]; then
-	fn_print_fail_nl "Sending Pushbullet alert: ${pushbulletsend}"
-	fn_script_log_fatal "Sending Pushbullet alert: ${pushbulletsend}"
-else
-	fn_print_ok_nl "Sending Pushbullet alert"
-	fn_script_log_pass "Sent Pushbullet alert"
-fi

+ 0 - 33
lgsm/functions/alert_pushover.sh

@@ -1,33 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_pushover.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Pushover alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_print_dots "Sending Pushover alert"
-
-# Different alerts are given different priorities and notification sounds.
-if [ "${alertsound}" == "1" ]; then
-	alertsound=""
-	alertpriority="0"
-elif [ "${alertsound}" == "2" ]; then
-	# restarted.
-	alertsound="siren"
-	alertpriority="1"
-else
-	alertsound=""
-	alertpriority="0"
-fi
-
-pushoversend=$(curl --connect-timeout 10 -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alertemoji} ${alertsubject} ${alertemoji}" -F message=" <b>Server name</b><br>${servername}<br><br><b>Message</b><br>${alertbody}<br><br><b>Game</b><br>${gamename}<br><br><b>Server IP</b><br><a href='https://www.gametracker.com/server_info/${alertip}:${port}'>${alertip}:${port}</a><br><br><b>Hostname</b><br>${HOSTNAME}<br><br><b>More info</b><br><a href='${alerturl}'>${alerturl}</a>" "https://api.pushover.net/1/messages.json" | grep errors)
-
-if [ -n "${pushoversend}" ]; then
-	fn_print_fail_nl "Sending Pushover alert: ${pushoversend}"
-	fn_script_log_fatal "Sending Pushover alert: ${pushoversend}"
-else
-	fn_print_ok_nl "Sending Pushover alert"
-	fn_script_log_pass "Sent Pushover alert"
-fi

+ 0 - 50
lgsm/functions/alert_rocketchat.sh

@@ -1,50 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_rocketchat.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Rocketchat alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-json=$(
-	cat << EOF
-{
-	"alias": "LinuxGSM",
-	"text": "*${alertemoji} ${alertsubject} ${alertemoji}* \n *${servername}* \n ${alertbody} \n More info: ${alerturl}",
-	"attachments": [
-		{
-			"fields": [
-				{
-					"short": true,
-					"title": "Game:",
-					"value": "${gamename}"
-				},
-				{
-					"short": true,
-					"title": "Server IP:",
-					"value": "${alertip}:${port}"
-				},
-				{
-					"short": true,
-					"title": "Hostname:",
-					"value": "${HOSTNAME}"
-				}
-			]
-		}
-	]
-}
-EOF
-)
-
-fn_print_dots "Sending Rocketchat alert"
-
-rocketchatsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" "${rocketchatwebhook}")
-
-if [ -n "${rocketchatsend}" ]; then
-	fn_print_ok_nl "Sending Rocketchat alert"
-	fn_script_log_pass "Sending Rocketchat alert"
-else
-	fn_print_fail_nl "Sending Rocketchat alert: ${rocketchatsend}"
-	fn_script_log_fatal "Sending Rocketchat alert: ${rocketchatsend}"
-fi

+ 0 - 75
lgsm/functions/alert_slack.sh

@@ -1,75 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_slack.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Slack alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-json=$(
-	cat << EOF
-{
-		"attachments": [
-			{
-				"color": "#36a64f",
-				"blocks": [
-					{
-										"type": "section",
-										"text": {
-												"type": "mrkdwn",
-												"text": "*LinuxGSM Alert*"
-										}
-								},
-								{
-										"type": "section",
-										"text": {
-												"type": "mrkdwn",
-												"text": "*${alertemoji} ${alertsubject}* \n ${alertbody}"
-										}
-								},
-								{
-										"type": "divider"
-								},
-								{
-										"type": "section",
-										"fields": [
-												{
-														"type": "mrkdwn",
-														"text": "*Game:* \n ${gamename}"
-												},
-												{
-														"type": "mrkdwn",
-														"text": "*Server IP:* \n ${alertip}:${port}"
-												},
-												{
-														"type": "mrkdwn",
-														"text": "*Server Name:* \n ${servername}"
-												}
-										]
-								},
-					 {
-										"type": "section",
-										"text": {
-														"type": "mrkdwn",
-														"text": "Hostname: ${HOSTNAME} / More info: ${alerturl}"
-										}
-								}
-						]
-			}
-		]
-}
-EOF
-)
-
-fn_print_dots "Sending Slack alert"
-
-slacksend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" "${slackwebhook}")
-
-if [ "${slacksend}" == "ok" ]; then
-	fn_print_ok_nl "Sending Slack alert"
-	fn_script_log_pass "Sending Slack alert"
-else
-	fn_print_fail_nl "Sending Slack alert: ${slacksend}"
-	fn_script_log_fatal "Sending Slack alert: ${slacksend}"
-fi

+ 0 - 30
lgsm/functions/alert_telegram.sh

@@ -1,30 +0,0 @@
-#!/bin/bash
-# LinuxGSM alert_telegram.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends Telegram Messenger alert.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-json=$(
-	cat << EOF
-{
-	"chat_id": "${telegramchatid}",
-	"parse_mode": "HTML",
-	"text": "<b>${alertemoji} ${alertsubject} ${alertemoji}</b>\n\n<b>Server name</b>\n${servername}\n\n<b>Message</b>\n${alertbody}\n\n<b>Game</b>\n${gamename}\n\n<b>Server IP</b>\n<a href='https://www.gametracker.com/server_info/${alertip}:${port}'>${alertip}:${port}</a>\n\n<b>Hostname</b>\n${HOSTNAME}\n\n<b>More info</b>\n<a href='${alerturl}'>${alerturl}</a>",
-	"disable_web_page_preview": "yes"
-}
-EOF
-)
-
-fn_print_dots "Sending Telegram alert"
-telegramsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" ${curlcustomstring} "https://${telegramapi}/bot${telegramtoken}/sendMessage" | grep "error_code")
-
-if [ -n "${telegramsend}" ]; then
-	fn_print_fail_nl "Sending Telegram alert: ${telegramsend}"
-	fn_script_log_fatal "Sending Telegram alert: ${telegramsend}"
-else
-	fn_print_ok_nl "Sending Telegram alert"
-	fn_script_log_pass "Sent Telegram alert"
-fi

+ 0 - 101
lgsm/functions/check.sh

@@ -1,101 +0,0 @@
-#!/bin/bash
-# LinuxGSM check.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Overall function for managing checks.
-# Runs checks that will either halt on or fix an issue.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Every command that requires checks just references check.sh.
-# check.sh selects which checks to run by using arrays.
-
-if [ "${commandname}" != "INSTALL" ]; then
-	check_root.sh
-fi
-
-if [ "${commandname}" != "UPDATE-LGSM" ]; then
-	check_version.sh
-fi
-
-check_tmuxception.sh
-
-if [ "$(whoami)" != "root" ] || [ -f /.dockerenv ]; then
-	if [ "${commandname}" != "MONITOR" ]; then
-		check_permissions.sh
-	fi
-fi
-
-if [ "${commandname}" != "INSTALL" ] && [ "${commandname}" != "UPDATE-LGSM" ] && [ "${commandname}" != "DETAILS" ] && [ "${commandname}" != "POST-DETAILS" ]; then
-	check_system_dir.sh
-fi
-
-allowed_commands_array=(DEBUG START)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		check_executable.sh
-	fi
-done
-
-if [ "$(whoami)" != "root" ] || [ -f /.dockerenv ]; then
-	allowed_commands_array=(DEBUG START INSTALL)
-	for allowed_command in "${allowed_commands_array[@]}"; do
-		if [ "${allowed_command}" == "${commandname}" ]; then
-			check_glibc.sh
-		fi
-	done
-fi
-
-allowed_commands_array=(BACKUP CHANGE-PASSWORD CONSOLE DEBUG DETAILS FASTDL MAP-COMPRESSOR MODS-INSTALL MODS-REMOVE MODS-UPDATE MONITOR POST-DETAILS RESTART START STOP TEST-ALERT UPDATE UPDATE-LGSM VALIDATE WIPE)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		check_logs.sh
-	fi
-done
-
-allowed_commands_array=(DEBUG START)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		check_deps.sh
-	fi
-done
-
-allowed_commands_array=(CONSOLE DEBUG MONITOR START STOP)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		check_config.sh
-	fi
-done
-
-allowed_commands_array=(DEBUG DETAILS DEV-QUERY-RAW MONITOR POST-DETAILS START STOP)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		if [ -z "${installflag}" ]; then
-			check_ip.sh
-		fi
-	fi
-done
-
-allowed_commands_array=(CHECK-UPDATE DEBUG MONITOR START UPDATE VALIDATE)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		if [ "${appid}" ]; then
-			check_steamcmd.sh
-		fi
-	fi
-done
-
-allowed_commands_array=(CHANGE-PASSWORD DETAILS MONITOR POST-DETAILS START STOP UPDATE VALIDATE)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		check_status.sh
-	fi
-done
-
-allowed_commands_array=(DEBUG START INSTALL)
-for allowed_command in "${allowed_commands_array[@]}"; do
-	if [ "${allowed_command}" == "${commandname}" ]; then
-		check_system_requirements.sh
-	fi
-done

+ 0 - 35
lgsm/functions/check_config.sh

@@ -1,35 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_config.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if the server config is missing and warns the user if needed.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ -n "${servercfgfullpath}" ] && [ ! -f "${servercfgfullpath}" ]; then
-	fn_print_dots ""
-	fn_print_warn_nl "Configuration file missing!"
-	echo -e "${servercfgfullpath}"
-	fn_script_log_warn "Configuration file missing!"
-	fn_script_log_warn "${servercfgfullpath}"
-	install_config.sh
-fi
-
-if [ "${shortname}" == "rust" ] && [ -v rconpassword ] && [ -z "${rconpassword}" ]; then
-	fn_print_dots ""
-	fn_print_fail_nl "RCON password is not set"
-	fn_script_log_warn "RCON password is not set"
-elif [ -v rconpassword ] && [ "${rconpassword}" == "CHANGE_ME" ]; then
-	fn_print_dots ""
-	fn_print_warn_nl "Default RCON Password detected"
-	fn_script_log_warn "Default RCON Password detected"
-fi
-
-if [ "${shortname}" == "vh" ] && [ -z "${serverpassword}" ]; then
-	fn_print_fail_nl "serverpassword is not set"
-	fn_script_log_fatal "serverpassword is not set"
-elif [ "${shortname}" == "vh" ] && [ "${#serverpassword}" -le "4" ]; then
-	fn_print_fail_nl "serverpassword is to short (min 5 chars)"
-	fn_script_log_fatal "serverpassword is to short (min 5 chars)"
-fi

+ 0 - 363
lgsm/functions/check_deps.sh

@@ -1,363 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_deps.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks and installs missing dependencies.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_install_mono_repo() {
-	if [ "${autodepinstall}" == "0" ]; then
-		fn_print_information_nl "Automatically adding Mono repository."
-		fn_script_log_info "Automatically adding Mono repository."
-		echo -en ".\r"
-		sleep 1
-		echo -en "..\r"
-		sleep 1
-		echo -en "...\r"
-		sleep 1
-		echo -en "   \r"
-		if [ "${distroid}" == "ubuntu" ]; then
-			if [ "${distroversion}" == "20.04" ]; then
-				cmd="sudo apt install gnupg ca-certificates;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;echo 'deb https://download.mono-project.com/repo/ubuntu stable-focal main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
-			elif [ "${distroversion}" == "18.04" ]; then
-				cmd="sudo apt install gnupg ca-certificates;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;echo 'deb https://download.mono-project.com/repo/ubuntu stable-bionic main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
-			elif [ "${distroversion}" == "16.04" ]; then
-				cmd="sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;sudo apt install apt-transport-https ca-certificates;echo 'deb https://download.mono-project.com/repo/ubuntu stable-xenial main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
-			else
-				monoautoinstall="1"
-			fi
-		elif [ "${distroid}" == "debian" ]; then
-			if [ "${distroversion}" == "10" ]; then
-				cmd="sudo apt install apt-transport-https dirmngr gnupg ca-certificates;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;echo 'deb https://download.mono-project.com/repo/debian stable-buster main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
-			elif [ "${distroversion}" == "9" ]; then
-				cmd="sudo apt install apt-transport-https dirmngr gnupg ca-certificates;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;echo 'deb https://download.mono-project.com/repo/debian stable-stretch main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
-			else
-				monoautoinstall="1"
-			fi
-		elif [ "${distroid}" == "centos" ] || [ "${distroid}" == "almalinux" ] || [ "${distroid}" == "rocky" ]; then
-			if [ "${distroversion}" == "8" ]; then
-				cmd="sudo rpmkeys --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos8-stable.repo | tee /etc/yum.repos.d/mono-centos8-stable.repo'"
-			elif [ "${distroversion}" == "7" ]; then
-				cmd="sudo rpmkeys --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'"
-			else
-				monoautoinstall="1"
-			fi
-		elif [ "${distroid}" == "fedora" ]; then
-			if [ "${distroversion}" -ge "29" ]; then
-				cmd="sudo rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos8-stable.repo | tee /etc/yum.repos.d/mono-centos8-stable.repo';dnf update"
-			else
-				cmd="sudo rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo';dnf update"
-			fi
-		else
-			monoautoinstall="1"
-		fi
-
-		# Run the mono repo install.
-		eval "${cmd}"
-
-		# Did Mono repo install correctly?
-		if [ "${monoautoinstall}" != "1" ]; then
-			if [ $? != 0 ]; then
-				fn_print_failure_nl "Unable to install Mono repository."
-				fn_script_log_fatal "Unable to install Mono repository."
-			else
-				fn_print_complete_nl "Installing Mono repository completed."
-				fn_script_log_pass "Installing Mono repository completed."
-			fi
-		fi
-
-		# Mono can not be auto installed with this distro.
-		if [ "${monoautoinstall}" == "1" ]; then
-			fn_print_warning_nl "Mono auto install not available for ${distroname}."
-			echo -e "Follow instructions on Mono website to install."
-			echo -e "https://www.mono-project.com/download/stable/#download-lin"
-			fn_script_log_warn "Unable to install Mono repository. Mono auto install not available for ${distroname}."
-		fi
-
-	else
-		fn_print_information_nl "Installing Mono repository."
-		fn_print_warning_nl "$(whoami) does not have sudo access."
-		echo -e "Follow instructions on Mono website to install."
-		echo -e "https://www.mono-project.com/download/stable/#download-lin"
-		fn_script_log_warn "Unable to install Mono repository. $(whoami) does not have sudo access."
-	fi
-}
-
-fn_deps_email() {
-	# Adds postfix to required dependencies if email alert is enabled.
-	if [ "${emailalert}" == "on" ]; then
-		if [ -f /usr/bin/mailx ]; then
-			if [ -d /etc/exim4 ]; then
-				array_deps_required+=(exim4)
-			elif [ -d /etc/sendmail ]; then
-				array_deps_required+=(sendmail)
-			elif [ "$(command -v dpkg-query 2> /dev/null)" ]; then
-				array_deps_required+=(mailutils postfix)
-			elif [ "$(command -v rpm 2> /dev/null)" ]; then
-				array_deps_required+=(mailx postfix)
-			fi
-		else
-			if [ "$(command -v dpkg-query 2> /dev/null)" ]; then
-				array_deps_required+=(mailutils postfix)
-			elif [ "$(command -v rpm 2> /dev/null)" ]; then
-				array_deps_required+=(mailx postfix)
-			fi
-		fi
-	fi
-}
-
-fn_install_missing_deps() {
-	# If any dependencies are not installed.
-	if [ "${#array_deps_missing[*]}" != "0" ]; then
-		if [ "${commandname}" == "INSTALL" ]; then
-			fn_print_warning_nl "Missing dependencies: ${red}${array_deps_missing[*]}${default}"
-			fn_script_log_warn "Missing dependencies: ${array_deps_missing[*]}"
-		else
-			fn_print_dots "Missing dependencies"
-			fn_print_warn "Missing dependencies: ${red}${array_deps_missing[*]}${default}"
-			fn_script_log_warn "Missing dependencies: ${array_deps_missing[*]}"
-		fi
-		fn_sleep_time
-
-		# Attempt automatic dependency installation
-		if [ "${autoinstall}" == "1" ]; then
-			sudo -n true > /dev/null 2>&1
-		else
-			sudo -v > /dev/null 2>&1
-		fi
-		autodepinstall="$?"
-
-		if [ "${monostatus}" == "1" ]; then
-			fn_install_mono_repo
-		fi
-
-		if [ "${commandname}" == "INSTALL" ]; then
-			if [ "${autodepinstall}" == "0" ]; then
-				fn_print_information_nl "$(whoami) has sudo access."
-				fn_script_log_info "$(whoami) has sudo access."
-			else
-				fn_print_warning_nl "$(whoami) does not have sudo access. Manually install dependencies."
-				fn_script_log_warn "$(whoami) does not have sudo access. Manually install dependencies."
-			fi
-		fi
-
-		# Add sudo dpkg --add-architecture i386 if using i386 packages.
-		if [ "$(command -v dpkg-query 2> /dev/null)" ]; then
-			if printf '%s\n' "${array_deps_required[@]}" | grep -q -P 'i386'; then
-				i386installcommand="sudo dpkg --add-architecture i386; "
-			fi
-		fi
-
-		# If automatic dependency install is available
-		if [ "${autodepinstall}" == "0" ]; then
-			fn_print_information_nl "Automatically installing missing dependencies."
-			fn_script_log_info "Automatically installing missing dependencies."
-			echo -en ".\r"
-			sleep 1
-			echo -en "..\r"
-			sleep 1
-			echo -en "...\r"
-			sleep 1
-			echo -en "   \r"
-			if [ "$(command -v dpkg-query 2> /dev/null)" ]; then
-				cmd="echo steamcmd steam/question select \"I AGREE\" | sudo debconf-set-selections; echo steamcmd steam/license note '' | sudo debconf-set-selections; ${i386installcommand}sudo apt-get update; sudo apt-get -y install ${array_deps_missing[*]}"
-				eval "${cmd}"
-			elif [ "$(command -v dnf 2> /dev/null)" ]; then
-				cmd="sudo dnf -y install ${array_deps_missing[*]}"
-				eval "${cmd}"
-			elif [ "$(command -v yum 2> /dev/null)" ]; then
-				cmd="sudo yum -y install ${array_deps_missing[*]}"
-				eval "${cmd}"
-			fi
-			autodepinstall="$?"
-
-			# If auto install passes remove steamcmd install failure.
-			if [ "${autodepinstall}" == "0" ]; then
-				unset steamcmdfail
-			fi
-		fi
-
-		# If automatic dependency install is unavailable.
-		if [ "${autodepinstall}" != "0" ]; then
-			if [ "$(command -v dpkg-query 2> /dev/null)" ]; then
-				echo -e "${i386installcommand}sudo apt update; sudo apt install ${array_deps_missing[*]}"
-			elif [ "$(command -v dnf 2> /dev/null)" ]; then
-				echo -e "sudo dnf install ${array_deps_missing[*]}"
-			elif [ "$(command -v yum 2> /dev/null)" ]; then
-				echo -e "sudo yum install ${array_deps_missing[*]}"
-			fi
-		fi
-
-		if [ "${steamcmdfail}" ]; then
-			if [ "${commandname}" == "INSTALL" ]; then
-				fn_print_failure_nl "Missing dependencies required to run SteamCMD."
-				fn_script_log_fatal "Missing dependencies required to run SteamCMD."
-				core_exit.sh
-			else
-				fn_print_error_nl "Missing dependencies required to run SteamCMD."
-				fn_script_log_error "Missing dependencies required to run SteamCMD."
-			fi
-		fi
-
-	else
-		if [ "${commandname}" == "INSTALL" ]; then
-			fn_print_information_nl "Required dependencies already installed."
-			fn_script_log_info "Required dependencies already installed."
-		fi
-	fi
-}
-
-fn_check_loop() {
-	# Loop though required depenencies checking if they are installed.
-	for deptocheck in ${array_deps_required[*]}; do
-		fn_deps_detector
-	done
-
-	# user will be informed of any missing dependencies.
-	fn_install_missing_deps
-}
-
-# Checks if dependency is installed or not.
-fn_deps_detector() {
-	## Check.
-	# SteamCMD: Will be removed from required array if no appid is present or non-free repo is not available.
-	# This will cause SteamCMD to be installed using tar.
-	if [ "${deptocheck}" == "libsdl2-2.0-0:i386" ] && [ -z "${appid}" ]; then
-		array_deps_required=("${array_deps_required[@]/libsdl2-2.0-0:i386/}")
-		steamcmdstatus=1
-	elif [ "${deptocheck}" == "steamcmd" ] && [ -z "${appid}" ]; then
-		array_deps_required=("${array_deps_required[@]/steamcmd/}")
-		steamcmdstatus=1
-	elif [ "${deptocheck}" == "steamcmd" ] && [ "${distroid}" == "debian" ] && ! grep -qE "^deb .*non-free" /etc/apt/sources.list; then
-		array_deps_required=("${array_deps_required[@]/steamcmd/}")
-		steamcmdstatus=1
-	# Java: Added for users using Oracle JRE to bypass check.
-	elif [[ ${deptocheck} == "openjdk"* ]] || [[ ${deptocheck} == "java"* ]]; then
-		# Is java already installed?
-		if [ -n "${javaversion}" ]; then
-			# Added for users using Oracle JRE to bypass check.
-			depstatus=0
-			deptocheck="${javaversion}"
-		else
-			depstatus=1
-		fi
-	# Mono: A Mono repo needs to be installed.
-	elif [ "${deptocheck}" == "mono-complete" ]; then
-		if [ -n "${monoversion}" ] && [ "${monoversion}" -ge "5" ]; then
-			# Mono >= 5.0.0 already installed.
-			depstatus=0
-			monostatus=0
-		else
-			# Mono not installed or installed Mono < 5.0.0.
-			depstatus=1
-			monostatus=1
-		fi
-	elif [ "$(command -v dpkg-query 2> /dev/null)" ]; then
-		dpkg-query -W -f='${Status}' "${deptocheck}" 2> /dev/null | grep -q -P '^install ok installed'
-		depstatus=$?
-	elif [ "$(command -v dnf 2> /dev/null)" ]; then
-		dnf list installed "${deptocheck}" > /dev/null 2>&1
-		depstatus=$?
-	elif [ "$(command -v rpm 2> /dev/null)" ]; then
-		rpm -q "${deptocheck}" > /dev/null 2>&1
-		depstatus=$?
-	fi
-
-	# Outcome of Check.
-	if [ "${steamcmdstatus}" == "1" ]; then
-		# If SteamCMD is not available in repo dont check for it.
-		unset steamcmdstatus
-	elif [ "${depstatus}" == "0" ]; then
-		# If dependency is found.
-		missingdep=0
-		if [ "${commandname}" == "INSTALL" ]; then
-			echo -e "${green}${deptocheck}${default}"
-			sleep 0.1
-		fi
-	elif [ "${depstatus}" != "0" ]; then
-		# If dependency is not found.
-		missingdep=1
-		if [ "${commandname}" == "INSTALL" ]; then
-			echo -e "${red}${deptocheck}${default}"
-			sleep 0.1
-		fi
-		# If SteamCMD requirements are not met install will fail.
-		if [ -n "${appid}" ]; then
-			for steamcmddeptocheck in ${array_deps_required_steamcmd[*]}; do
-				if [ "${deptocheck}" != "steamcmd" ] && [ "${deptocheck}" == "${steamcmddeptocheck}" ]; then
-					steamcmdfail=1
-				fi
-			done
-		fi
-	fi
-	unset depstatus
-
-	# Missing dependencies are added to array_deps_missing.
-	if [ "${missingdep}" == "1" ]; then
-		array_deps_missing+=("${deptocheck}")
-	fi
-}
-
-if [ "${commandname}" == "INSTALL" ]; then
-	if [ "$(whoami)" == "root" ] && [ ! -f /.dockerenv ]; then
-		echo -e ""
-		echo -e "${lightyellow}Checking Dependencies as root${default}"
-		echo -e "================================="
-		fn_print_information_nl "Checking any missing dependencies for ${gamename} server only."
-		fn_print_information_nl "This will NOT install a ${gamename} server."
-		fn_sleep_time
-	else
-		echo -e ""
-		echo -e "${lightyellow}Checking Dependencies${default}"
-		echo -e "================================="
-	fi
-fi
-
-# Will warn user if their distro is no longer supported by the vendor.
-if [ -n "${distrosupport}" ]; then
-	if [ "${distrosupport}" == "unsupported" ]; then
-		fn_print_warning_nl "${distroname} is no longer supported by the vendor. Upgrading is recommended."
-		fn_script_log_warn "${distroname} is no longer supported by the vendor. Upgrading is recommended."
-	fi
-fi
-
-info_distro.sh
-
-if [ ! -f "${tmpdir}/dependency-no-check.tmp" ] && [ ! -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then
-	# Check that the distro dependency csv file exists.
-	fn_check_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv"
-	if [ -n "${checkflag}" ] && [ "${checkflag}" == "0" ]; then
-		fn_fetch_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv" "lgsm/data" "chmodx" "norun" "noforce" "nohash"
-	fi
-fi
-
-# If the file successfully downloaded run the dependency check.
-if [ -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then
-	depall=$(awk -F, '$1=="all" {$1=""; print $0}' "${datadir}/${distroid}-${distroversioncsv}.csv")
-	depsteamcmd=$(awk -F, '$1=="steamcmd" {$1=""; print $0}' "${datadir}/${distroid}-${distroversioncsv}.csv")
-	depshortname=$(awk -v shortname="${shortname}" -F, '$1==shortname {$1=""; print $0}' "${datadir}/${distroid}-${distroversioncsv}.csv")
-
-	# Generate array of missing deps.
-	array_deps_missing=()
-
-	array_deps_required=("${depall} ${depsteamcmd} ${depshortname}")
-	array_deps_required_steamcmd=("${depsteamcmd}")
-	fn_deps_email
-	# Unique sort dependency array.
-	IFS=" " read -r -a array_deps_required <<< "$(echo "${array_deps_required[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')"
-
-	fn_check_loop
-# Warn the user that dependency checking is unavailable for their distro.
-elif [ "${commandname}" == "INSTALL" ] || [ -n "${checkflag}" ] && [ "${checkflag}" != "0" ]; then
-	fn_print_warning_nl "LinuxGSM dependency checking currently unavailable for ${distroname}."
-	# Prevent future dependency checking if unavailable for the distro.
-	echo "${version}" > "${tmpdir}/dependency-no-check.tmp"
-elif [ -f "${tmpdir}/dependency-no-check.tmp" ]; then
-	# Allow LinuxGSM to try a dependency check if LinuxGSM has been recently updated.
-	nocheckversion=$(cat "${tmpdir}/dependency-no-check.tmp")
-	if [ "${version}" != "${nocheckversion}" ]; then
-		rm -f "${tmpdir:?}/dependency-no-check.tmp"
-	fi
-fi

+ 0 - 20
lgsm/functions/check_executable.sh

@@ -1,20 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_executable.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if server executable exists.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Check if executable exists
-execname=$(basename "${executable}")
-if [ ! -f "${executabledir}/${execname}" ]; then
-	fn_print_fail_nl "executable was not found"
-	echo -e "* ${executabledir}/${execname}"
-	if [ -d "${lgsmlogdir}" ]; then
-		fn_script_log_fatal "Executable was not found: ${executabledir}/${execname}"
-	fi
-	unset exitbypass
-	core_exit.sh
-fi

+ 0 - 29
lgsm/functions/check_glibc.sh

@@ -1,29 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_glibc.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if the server has the correct Glibc version.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-info_distro.sh
-
-if [ "${glibc}" == "null" ]; then
-	# Glibc is not required.
-	:
-elif [ -z "${glibc}" ]; then
-	fn_print_dots "glibc"
-	fn_print_error_nl "glibc requirement unknown"
-	fn_script_log_error "glibc requirement unknown"
-elif [ "$(printf '%s\n'${glibc}'\n' "${glibcversion}" | sort -V | head -n 1)" != "${glibc}" ]; then
-	fn_print_dots "glibc"
-	fn_print_error_nl "glibc requirements not met"
-	fn_script_log_error "glibc requirements not met"
-	echo -en "\n"
-	echo -e "	* glibc required: ${glibc}"
-	echo -e "	* glibc installed: ${red}${glibcversion}${default}"
-	echo -en "\n"
-	fn_print_information_nl "distro upgrade is required"
-	fn_script_log_info "distro upgrade is required"
-fi

+ 0 - 63
lgsm/functions/check_ip.sh

@@ -1,63 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_ip.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Automatically identifies the server interface IP.
-# If multiple interfaces are detected the user will need to manually set using ip="0.0.0.0".
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-info_game.sh
-
-ip_commands_array=("/bin/ip" "/usr/sbin/ip" "ip")
-for ip_command in "${ip_commands_array[@]}"; do
-	if [ "$(command -v "${ip_command}" 2> /dev/null)" ]; then
-		ipcommand="${ip_command}"
-		break
-	fi
-done
-
-ethtool_commands_array=("/bin/ethtool" "/usr/sbin/ethtool" "ethtool")
-for ethtool_command in "${ethtool_commands_array[@]}"; do
-	if [ "$(command -v "${ethtool_command}" 2> /dev/null)" ]; then
-		ethtoolcommand="${ethtool_command}"
-		break
-	fi
-done
-
-mapfile -t current_ips < <(${ipcommand} -o -4 addr | awk '{print $4}' | grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}' | sort -u | grep -v 127.0.0)
-
-function fn_is_valid_ip() {
-	local ip="${1}"
-	# excluding 0.* ips also
-	grep -qEe '^[1-9]+[0-9]*\.[0-9]+\.[0-9]+\.[0-9]+$' <<< "${ip}"
-}
-
-# Check if server has multiple IP addresses
-
-# If the IP variable has been set by user.
-if fn_is_valid_ip "${ip}"; then
-	queryips=("${ip}")
-	webadminip=("${ip}")
-	telnetip=("${ip}")
-# If game config does have an IP set.
-elif fn_is_valid_ip "${configip}"; then
-	queryips=("${configip}")
-	ip="${configip}"
-	webadminip=("${configip}")
-	telnetip=("${configip}")
-# If there is only 1 server IP address.
-# Some IP details can automaticly use the one IP
-elif [ "${#current_ips[@]}" == "1" ]; then
-	queryips=("127.0.0.1" "${current_ips[@]}")
-	ip="0.0.0.0"
-	webadminip=("${current_ips[@]}")
-	telnetip=("${current_ips[@]}")
-# If no ip is set by the user and server has more than one IP.
-else
-	queryips=("127.0.0.1" "${current_ips[@]}")
-	ip="0.0.0.0"
-	webadminip=("${ip}")
-	telnetip=("${ip}")
-fi

+ 0 - 26
lgsm/functions/check_last_update.sh

@@ -1,26 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_last_update.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks lock file to see when last update happened.
-# Will reboot server if instance not rebooted since update.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ -f "${lockdir}/${selfname}-laststart.lock" ]; then
-	laststart=$(cat "${lockdir}/${selfname}-laststart.lock")
-fi
-if [ -f "${lockdir}/lastupdate.lock" ]; then
-	lastupdate=$(cat "${lockdir}/lastupdate.lock")
-fi
-
-check_status.sh
-if [ -f "${lockdir}/lastupdate.lock" ] && [ "${status}" != "0" ]; then
-	if [ ! -f "${lockdir}/${selfname}-laststart.lock" ] || [ "${laststart}" -lt "${lastupdate}" ]; then
-		fn_print_info "${selfname} has not been restarted since last update"
-		fn_script_log_info "${selfname} has not been restarted since last update"
-		command_restart.sh
-		fn_firstcommand_reset
-	fi
-fi

+ 0 - 26
lgsm/functions/check_logs.sh

@@ -1,26 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_logs.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if log files exist.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_check_logs() {
-	fn_print_dots "Checking for log files"
-	fn_print_info_nl "Checking for log files: Creating log files"
-	checklogs=1
-	install_logs.sh
-}
-
-# Create directories for the script and console logs.
-if [ ! -d "${lgsmlogdir}" ] || [ ! -d "${consolelogdir}" ]; then
-	fn_check_logs
-fi
-
-# Create gamelogdir.
-# If variable exists gamelogdir exists and log/server does not.
-if [ "${gamelogdir}" ] && [ -d "${gamelogdir}" ] && [ ! -d "${logdir}/server" ]; then
-	fn_check_logs
-fi

+ 0 - 233
lgsm/functions/check_permissions.sh

@@ -1,233 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_permissions.sh
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks ownership & permissions of scripts, files and directories.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_check_ownership() {
-	if [ -f "${rootdir}/${selfname}" ]; then
-		if [ "$(find "${rootdir}/${selfname}" -not -user "$(whoami)" | wc -l)" -ne "0" ]; then
-			selfownissue=1
-		fi
-	fi
-	if [ -d "${functionsdir}" ]; then
-		if [ "$(find "${functionsdir}" -not -user "$(whoami)" | wc -l)" -ne "0" ]; then
-			funcownissue=1
-		fi
-	fi
-	if [ -d "${serverfiles}" ]; then
-		if [ "$(find "${serverfiles}" -not -user "$(whoami)" | wc -l)" -ne "0" ]; then
-			filesownissue=1
-		fi
-	fi
-	if [ "${selfownissue}" == "1" ] || [ "${funcownissue}" == "1" ] || [ "${filesownissue}" == "1" ]; then
-		fn_print_fail_nl "Ownership issues found"
-		fn_script_log_fatal "Ownership issues found"
-		fn_print_information_nl "The current user ($(whoami)) does not have ownership of the following files:"
-		fn_script_log_info "The current user ($(whoami)) does not have ownership of the following files:"
-		{
-			echo -e "User\tGroup\tFile\n"
-			if [ "${selfownissue}" == "1" ]; then
-				find "${rootdir}/${selfname}" -not -user "$(whoami)" -printf "%u\t%g\t%p\n"
-			fi
-			if [ "${funcownissue}" == "1" ]; then
-				find "${functionsdir}" -not -user "$(whoami)" -printf "%u\t%g\t%p\n"
-			fi
-			if [ "${filesownissue}" == "1" ]; then
-				find "${serverfiles}" -not -user "$(whoami)" -printf "%u\t%g\t%p\n"
-			fi
-
-		} | column -s $'\t' -t | tee -a "${lgsmlog}"
-		echo -e ""
-		fn_print_information_nl "please see https://docs.linuxgsm.com/support/faq#fail-starting-game-server-permission-issues-found"
-		fn_script_log "For more information, please see https://docs.linuxgsm.com/support/faq#fail-starting-game-server-permission-issues-found"
-		if [ "${monitorflag}" == 1 ]; then
-			alert="permissions"
-			alert.sh
-		fi
-		core_exit.sh
-	fi
-}
-
-fn_check_permissions() {
-	if [ -d "${functionsdir}" ]; then
-		if [ "$(find "${functionsdir}" -type f -not -executable | wc -l)" -ne "0" ]; then
-			fn_print_fail_nl "Permissions issues found"
-			fn_script_log_fatal "Permissions issues found"
-			fn_print_information_nl "The following files are not executable:"
-			fn_script_log_info "The following files are not executable:"
-			{
-				echo -e "File\n"
-				find "${functionsdir}" -type f -not -executable -printf "%p\n"
-			} | column -s $'\t' -t | tee -a "${lgsmlog}"
-			if [ "${monitorflag}" == 1 ]; then
-				alert="permissions"
-				alert.sh
-			fi
-			core_exit.sh
-		fi
-	fi
-
-	# Check rootdir permissions.
-	if [ "${rootdir}" ]; then
-		# Get permission numbers on directory under the form 775.
-		rootdirperm=$(stat -c %a "${rootdir}")
-		# Grab the first and second digit for user and group permission.
-		userrootdirperm="${rootdirperm:0:1}"
-		grouprootdirperm="${rootdirperm:1:1}"
-		if [ "${userrootdirperm}" != "7" ] && [ "${grouprootdirperm}" != "7" ]; then
-			fn_print_fail_nl "Permissions issues found"
-			fn_script_log_fatal "Permissions issues found"
-			fn_print_information_nl "The following directory does not have the correct permissions:"
-			fn_script_log_info "The following directory does not have the correct permissions:"
-			fn_script_log_info "${rootdir}"
-			ls -l "${rootdir}"
-			if [ "${monitorflag}" == 1 ]; then
-				alert="permissions"
-				alert.sh
-			fi
-			core_exit.sh
-		fi
-	fi
-	# Check if executable is executable and attempt to fix it.
-	# First get executable name.
-	execname=$(basename "${executable}")
-	if [ -f "${executabledir}/${execname}" ]; then
-		# Get permission numbers on file under the form 775.
-		execperm=$(stat -c %a "${executabledir}/${execname}")
-		# Grab the first and second digit for user and group permission.
-		userexecperm="${execperm:0:1}"
-		groupexecperm="${execperm:1:1}"
-		# Check for invalid user permission.
-		if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ] || [ "${userexecperm}" == "6" ]; then
-			# If user permission is invalid, then check for invalid group permissions.
-			if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ] || [ "${groupexecperm}" == "6" ]; then
-				# If permission issues are found.
-				fn_print_warn_nl "Permissions issue found"
-				fn_script_log_warn "Permissions issue found"
-				fn_print_information_nl "The following file is not executable:"
-				ls -l "${executabledir}/${execname}"
-				fn_script_log_info "The following file is not executable:"
-				fn_script_log_info "${executabledir}/${execname}"
-				fn_print_information_nl "Applying chmod u+x,g+x ${executabledir}/${execname}"
-				fn_script_log_info "Applying chmod u+x,g+x ${execperm}"
-				# Make the executable executable.
-				chmod u+x,g+x "${executabledir}/${execname}"
-				# Second check to see if it's been successfully applied.
-				# Get permission numbers on file under the form 775.
-				execperm=$(stat -c %a "${executabledir}/${execname}")
-				# Grab the first and second digit for user and group permission.
-				userexecperm="${execperm:0:1}"
-				groupexecperm="${execperm:1:1}"
-				if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ] || [ "${userexecperm}" == "6" ]; then
-					if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ] || [ "${groupexecperm}" == "6" ]; then
-						# If errors are still found.
-						fn_print_fail_nl "The following file could not be set executable:"
-						ls -l "${executabledir}/${execname}"
-						fn_script_log_warn "The following file could not be set executable:"
-						fn_script_log_info "${executabledir}/${execname}"
-						if [ "${monitorflag}" == "1" ]; then
-							alert="permissions"
-							alert.sh
-						fi
-						core_exit.sh
-					fi
-				fi
-			fi
-		fi
-	fi
-}
-
-## The following fn_sys_perm_* functions checks for permission errors in /sys directory.
-
-# Checks for permission errors in /sys directory.
-fn_sys_perm_errors_detect() {
-	# Reset test variables.
-	sysdirpermerror="0"
-	classdirpermerror="0"
-	netdirpermerror="0"
-	# Check permissions.
-	# /sys, /sys/class and /sys/class/net should be readable & executable.
-	if [ ! -r "/sys" ] || [ ! -x "/sys" ]; then
-		sysdirpermerror="1"
-	fi
-	if [ ! -r "/sys/class" ] || [ ! -x "/sys/class" ]; then
-		classdirpermerror="1"
-	fi
-	if [ ! -r "/sys/class/net" ] || [ ! -x "/sys/class/net" ]; then
-		netdirpermerror="1"
-	fi
-}
-
-# Display a message on how to fix the issue manually.
-fn_sys_perm_fix_manually_msg() {
-	echo -e ""
-	fn_print_information_nl "This error causes servers to fail starting properly"
-	fn_script_log_info "This error causes servers to fail starting properly."
-	echo -e "	* To fix this issue, run the following command as root:"
-	fn_script_log_info "To fix this issue, run the following command as root:"
-	echo -e "	  chmod a+rx /sys /sys/class /sys/class/net"
-	fn_script_log "chmod a+rx /sys /sys/class /sys/class/net"
-	fn_sleep_time
-	if [ "${monitorflag}" == 1 ]; then
-		alert="permissions"
-		alert.sh
-	fi
-	core_exit.sh
-}
-
-# Attempt to fix /sys related permission errors if sudo is available, exits otherwise.
-fn_sys_perm_errors_fix() {
-	if sudo -n true > /dev/null 2>&1; then
-		fn_print_dots "Automatically fixing /sys permissions"
-		fn_script_log_info "Automatically fixing /sys permissions."
-		if [ "${sysdirpermerror}" == "1" ]; then
-			sudo chmod a+rx "/sys"
-		fi
-		if [ "${classdirpermerror}" == "1" ]; then
-			sudo chmod a+rx "/sys/class"
-		fi
-		if [ "${netdirpermerror}" == "1" ]; then
-			sudo chmod a+rx "/sys/class/net"
-		fi
-		# Run check again to see if it's fixed.
-		fn_sys_perm_errors_detect
-		if [ "${sysdirpermerror}" == "1" ] || [ "${classdirpermerror}" == "1" ] || [ "${netdirpermerror}" == "1" ]; then
-			fn_print_error "Could not fix /sys permissions"
-			fn_script_log_error "Could not fix /sys permissions."
-			fn_sleep_time
-			# Show the user how to fix.
-			fn_sys_perm_fix_manually_msg
-		else
-			fn_print_ok_nl "Automatically fixing /sys permissions"
-			fn_script_log_pass "Permissions in /sys fixed"
-		fi
-	else
-		# Show the user how to fix.
-		fn_sys_perm_fix_manually_msg
-	fi
-}
-
-# Processes to the /sys related permission errors check & fix/info.
-fn_sys_perm_error_process() {
-	fn_sys_perm_errors_detect
-	# If any error was found.
-	if [ "${sysdirpermerror}" == "1" ] || [ "${classdirpermerror}" == "1" ] || [ "${netdirpermerror}" == "1" ]; then
-		fn_print_error_nl "Permission error(s) found in /sys"
-		fn_script_log_error "Permission error(s) found in /sys"
-		# Run the fix
-		fn_sys_perm_errors_fix
-	fi
-}
-
-## Run permisions checks when not root or docker.
-if [ "$(whoami)" != "root" ] && [ ! -f /.dockerenv ]; then
-	fn_check_ownership
-	fn_check_permissions
-	if [ "${commandname}" == "START" ]; then
-		fn_sys_perm_error_process
-	fi
-fi

+ 0 - 21
lgsm/functions/check_root.sh

@@ -1,21 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_root.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if the user tried to run the script as root.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ "$(whoami)" == "root" ] && [ ! -f /.dockerenv ]; then
-	if [ "${commandname}" != "INSTALL" ]; then
-		fn_print_fail_nl "Do NOT run this script as root!"
-		if [ -d "${lgsmlogdir}" ]; then
-			fn_script_log_fatal "${selfname} attempted to run as root."
-		else
-			# Forces exit code is log does not yet exist.
-			exitcode=1
-		fi
-		core_exit.sh
-	fi
-fi

+ 0 - 10
lgsm/functions/check_status.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_status.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks the process status of the server. Either online or offline.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-status=$(tmux -L "${sessionname}" list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}")

+ 0 - 22
lgsm/functions/check_steamcmd.sh

@@ -1,22 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_steamcmd.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if SteamCMD is installed correctly.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# init steamcmd functions
-core_steamcmd.sh
-
-fn_check_steamcmd_clear
-fn_check_steamcmd
-if [ "${shortname}" == "ark" ]; then
-	fn_check_steamcmd_ark
-fi
-fn_check_steamcmd_dir
-fn_check_steamcmd_dir_legacy
-fn_check_steamcmd_steamapp
-fn_check_steamcmd_user
-fn_check_steamcmd_exec

+ 0 - 22
lgsm/functions/check_system_dir.sh

@@ -1,22 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_system_dir.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if systemdir/serverfiles is accessible.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ "${commandname}" != "VALIDATE" ]; then
-	checkdir="${serverfiles}"
-else
-	checkdir="${systemdir}"
-fi
-
-if [ ! -d "${checkdir}" ]; then
-	fn_print_fail_nl "Cannot access ${checkdir}: No such directory"
-	if [ -d "${lgsmlogdir}" ]; then
-		fn_script_log_fatal "Cannot access ${checkdir}: No such directory."
-	fi
-	core_exit.sh
-fi

+ 0 - 55
lgsm/functions/check_system_requirements.sh

@@ -1,55 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_system_requirements.sh
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks RAM requirements.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-info_distro.sh
-
-# RAM requirements in megabytes for each game or engine.
-
-if [ "${shortname}" == "ark" ]; then
-	ramrequirementmb="4000"
-	ramrequirementgb="4"
-elif [ "${shortname}" == "bt" ]; then
-	ramrequirementmb="1000"
-	ramrequirementgb="1"
-elif [ "${shortname}" == "mh" ]; then
-	ramrequirementmb="4000"
-	ramrequirementgb="4"
-elif [ "${shortname}" == "arma3" ]; then
-	ramrequirementmb="1000"
-	ramrequirementgb="1"
-elif [ "${shortname}" == "rust" ]; then
-	ramrequirementmb="4000"
-	ramrequirementgb="4"
-elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "pmc" ] || [ "${shortname}" == "wmc" ]; then
-	ramrequirementmb="1000"
-	ramrequirementgb="1"
-elif [ "${shortname}" == "pstbs" ]; then
-	ramrequirementmb="2000"
-	ramrequirementgb="2"
-elif [ "${shortname}" == "ns2" ] || [ "${shortname}" == "ns2c" ]; then
-	ramrequirementmb="1000"
-	ramrequirementgb="1"
-elif [ "${shortname}" == "st" ]; then
-	ramrequirementmb="1000"
-	ramrequirementgb="1"
-elif [ "${shortname}" == "pvr" ]; then
-	ramrequirementmb="2000"
-	ramrequirementgb="2"
-fi
-
-# If the game or engine has a minimum RAM Requirement, compare it to system's available RAM.
-if [ "${ramrequirementmb}" ]; then
-	if [ "${physmemtotalmb}" -lt "${ramrequirementmb}" ]; then
-		fn_print_dots "Check RAM"
-		# Warn the user.
-		fn_print_warn_nl "Check RAM: ${ramrequirementgb}G required, ${physmemtotal} available"
-		echo "* ${gamename} server may fail to run or experience poor performance."
-		fn_sleep_time
-	fi
-fi

+ 0 - 33
lgsm/functions/check_tmuxception.sh

@@ -1,33 +0,0 @@
-#!/bin/bash
-# LinuxGSM check_config.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Checks if run from tmux or screen.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_check_is_in_tmux() {
-	if [ "${TMUX}" ]; then
-		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a tmux session."
-		fn_script_log_fatal "Tmuxception error: Attempted to start a tmux session inside of a tmux session."
-		fn_print_information_nl "LinuxGSM creates a tmux session when starting the server."
-		echo -e "It is not possible to run a tmux session inside another tmux session"
-		echo -e "https://docs.linuxgsm.com/requirements/tmux#tmuxception"
-		core_exit.sh
-	fi
-}
-
-fn_check_is_in_screen() {
-	if [ "${STY}" ]; then
-		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a screen session."
-		fn_script_log_fatal "Tmuxception error: Attempted to start a tmux session inside of a screen session."
-		fn_print_information_nl "LinuxGSM creates a tmux session when starting the server."
-		echo -e "It is not possible to run a tmux session inside screen session"
-		echo -e "https://docs.linuxgsm.com/requirements/tmux#tmuxception"
-		core_exit.sh
-	fi
-}
-
-fn_check_is_in_tmux
-fn_check_is_in_screen

+ 0 - 23
lgsm/functions/check_version.sh

@@ -1,23 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_version.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Will run update-lgsm if gameserver.sh and modules version does not match
-# this will allow gameserver.sh to update - useful for multi instance servers.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ -n "${modulesversion}" ] && [ -n "${version}" ] && [ "${version}" != "${modulesversion}" ]; then
-	exitbypass=1
-	echo -e ""
-	fn_print_error_nl "LinuxGSM version mismatch"
-	echo -e ""
-	echo -e "* ${selfname}: ${version}"
-	echo -e "* modules: ${modulesversion}"
-	echo -e ""
-	fn_sleep_time
-	fn_script_log_error "LinuxGSM Version mismatch: ${selfname}: ${version}: modules: ${modulesversion}"
-	command_update_linuxgsm.sh
-	fn_firstcommand_reset
-fi

+ 0 - 268
lgsm/functions/command_backup.sh

@@ -1,268 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_backup.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Creates a .tar.gz file in the backup directory.
-
-commandname="BACKUP"
-commandaction="Backing up"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-
-# Trap to remove lockfile on quit.
-fn_backup_trap() {
-	echo -e ""
-	echo -en "backup ${backupname}.tar.gz..."
-	fn_print_canceled_eol_nl
-	fn_script_log_info "Backup ${backupname}.tar.gz: CANCELED"
-	rm -f "${backupdir:?}/${backupname}.tar.gz" | tee -a "${lgsmlog}"
-	echo -en "backup ${backupname}.tar.gz..."
-	fn_print_removed_eol_nl
-	fn_script_log_info "Backup ${backupname}.tar.gz: REMOVED"
-	# Remove lock file.
-	rm -f "${lockdir:?}/backup.lock"
-	fn_backup_start_server
-	unset exitbypass
-	core_exit.sh
-}
-
-# Check if a backup is pending or has been aborted using backup.lock.
-fn_backup_check_lockfile() {
-	if [ -f "${lockdir}/backup.lock" ]; then
-		fn_print_info_nl "Lock file found: Backup is currently running"
-		fn_script_log_error "Lock file found: Backup is currently running: ${lockdir}/backup.lock"
-		core_exit.sh
-	fi
-}
-
-# Initialisation.
-fn_backup_init() {
-	# Backup file name with selfname and current date.
-	backupname="${selfname}-$(date '+%Y-%m-%d-%H%M%S')"
-
-	info_distro.sh
-	fn_print_dots "Backup starting"
-	fn_script_log_info "Backup starting"
-	fn_print_ok_nl "Backup starting"
-	if [ ! -d "${backupdir}" ] || [ "${backupcount}" == "0" ]; then
-		fn_print_info_nl "There are no previous backups"
-	else
-		if [ "${lastbackupdaysago}" == "0" ]; then
-			daysago="less than 1 day ago"
-		elif [ "${lastbackupdaysago}" == "1" ]; then
-			daysago="1 day ago"
-		else
-			daysago="${lastbackupdaysago} days ago"
-		fi
-		echo -e "* Previous backup was created ${daysago}, total size ${lastbackupsize}"
-	fi
-}
-
-# Check if server is started and whether to stop it.
-fn_backup_stop_server() {
-	check_status.sh
-	# Server is running but will not be stopped.
-	if [ "${stoponbackup}" == "off" ]; then
-		fn_print_warn_nl "${selfname} is currently running"
-		echo -e "* Although unlikely; creating a backup while ${selfname} is running might corrupt the backup."
-		fn_script_log_warn "${selfname} is currently running"
-		fn_script_log_warn "Although unlikely; creating a backup while ${selfname} is running might corrupt the backup"
-	# Server is running and will be stopped if stoponbackup=on or unset.
-	# If server is started
-	elif [ "${status}" != "0" ]; then
-		fn_print_restart_warning
-		startserver="1"
-		exitbypass=1
-		command_stop.sh
-		fn_firstcommand_reset
-	fi
-}
-
-# Create required folders.
-fn_backup_dir() {
-	# Create backupdir if it doesn't exist.
-	if [ ! -d "${backupdir}" ]; then
-		mkdir -p "${backupdir}"
-	fi
-}
-
-# Migrate Backups from old dir before refactor
-fn_backup_migrate_olddir() {
-	# Check if old backup dir is there before the refactor and move the backups
-	if [ -d "${rootdir}/backups" ]; then
-		if [ "${rootdir}/backups" != "${backupdir}" ]; then
-			fn_print_dots "Backup directory is being migrated"
-			fn_script_log_info "Backup directory is being migrated"
-			fn_script_log_info "${rootdir}/backups > ${backupdir}"
-			mv "${rootdir}/backups/"* "${backupdir}" 2> /dev/null
-			exitcode=$?
-			if [ "${exitcode}" == 0 ]; then
-				rmdir "${rootdir}/backups" 2> /dev/null
-				exitcode=$?
-			fi
-			if [ "${exitcode}" != 0 ]; then
-				fn_print_error_nl "Backup directory is being migrated"
-				fn_script_log_error "Backup directory is being migrated"
-			else
-
-				fn_print_ok_nl "Backup directory is being migrated"
-				fn_script_log_pass "Backup directory is being migrated"
-			fi
-		fi
-	fi
-}
-
-fn_backup_create_lockfile() {
-	# Create lockfile.
-	date '+%s' > "${lockdir}/backup.lock"
-	fn_script_log_info "Lockfile generated"
-	fn_script_log_info "${lockdir}/backup.lock"
-	# trap to remove lockfile on quit.
-	trap fn_backup_trap INT
-}
-
-# Compressing files.
-fn_backup_compression() {
-	# Tells how much will be compressed using rootdirduexbackup value from info_distro and prompt for continue.
-	fn_print_info "A total of ${rootdirduexbackup} will be compressed."
-	fn_script_log_info "A total of ${rootdirduexbackup} will be compressed: ${backupdir}/${backupname}.tar.gz"
-	fn_print_dots "Backup (${rootdirduexbackup}) ${backupname}.tar.gz, in progress..."
-	fn_script_log_info "backup ${rootdirduexbackup} ${backupname}.tar.gz, in progress"
-	excludedir=$(fn_backup_relpath)
-
-	# Check that excludedir is a valid path.
-	if [ ! -d "${excludedir}" ]; then
-		fn_print_fail_nl "Problem identifying the previous backup directory for exclusion."
-		fn_script_log_fatal "Problem identifying the previous backup directory for exclusion"
-		core_exit.sh
-	fi
-
-	tar -czf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}/backup.lock" ./.
-	local exitcode=$?
-	if [ "${exitcode}" != 0 ]; then
-		fn_print_fail_eol
-		fn_script_log_fatal "Backup in progress: FAIL"
-		echo -e "${extractcmd}" | tee -a "${lgsmlog}"
-		fn_print_fail_nl "Starting backup"
-		fn_script_log_fatal "Starting backup"
-	else
-		fn_print_ok_eol
-		fn_print_ok_nl "Completed: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')"
-		fn_script_log_pass "Backup created: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')"
-	fi
-	# Remove lock file
-	rm -f "${lockdir:?}/backup.lock"
-}
-
-# Clear old backups according to maxbackups and maxbackupdays variables.
-fn_backup_prune() {
-	# Clear if backup variables are set.
-	if [ "${maxbackups}" ] && [ -n "${maxbackupdays}" ]; then
-		# How many backups there are.
-		info_distro.sh
-		# How many backups exceed maxbackups.
-		backupquotadiff=$((backupcount - maxbackups))
-		# How many backups exceed maxbackupdays.
-		backupsoudatedcount=$(find "${backupdir}"/ -type f -name "*.tar.gz" -mtime +"${maxbackupdays}" | wc -l)
-		# If anything can be cleared.
-		if [ "${backupquotadiff}" -gt "0" ] || [ "${backupsoudatedcount}" -gt "0" ]; then
-			fn_print_dots "Pruning"
-			fn_script_log_info "Backup pruning activated"
-			fn_print_ok_nl "Pruning"
-			# If maxbackups greater or equal to backupsoutdatedcount, then it is over maxbackupdays.
-			if [ "${backupquotadiff}" -ge "${backupsoudatedcount}" ]; then
-				# Display how many backups will be cleared.
-				echo -e "* Pruning: ${backupquotadiff} backup(s) has exceeded the ${maxbackups} backups limit"
-				fn_script_log_info "Pruning: ${backupquotadiff} backup(s) has exceeded the ${maxbackups} backups limit"
-				fn_sleep_time
-				fn_print_dots "Pruning: Clearing ${backupquotadiff} backup(s)"
-				fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)"
-				# Clear backups over quota.
-				find "${backupdir}"/ -type f -name "*.tar.gz" -printf '%T@ %p\n' | sort -rn | tail -${backupquotadiff} | cut -f2- -d" " | xargs rm
-				fn_print_ok_nl "Pruning: Clearing ${backupquotadiff} backup(s)"
-				fn_script_log_pass "Pruning: Cleared ${backupquotadiff} backup(s)"
-			# If maxbackupdays is used over maxbackups.
-			elif [ "${backupquotadiff}" -lt "${backupsoudatedcount}" ]; then
-				# Display how many backups will be cleared.
-				echo -e "* Pruning: ${backupsoudatedcount} backup(s) are older than ${maxbackupdays} days."
-				fn_script_log_info "Pruning: ${backupsoudatedcount} backup(s) older than ${maxbackupdays} days."
-				fn_sleep_time
-				fn_print_dots "Pruning: Clearing ${backupquotadiff} backup(s)."
-				fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)"
-				# Clear backups over quota
-				find "${backupdir}"/ -type f -mtime +"${maxbackupdays}" -exec rm -f {} \;
-				fn_print_ok_nl "Pruning: Clearing ${backupquotadiff} backup(s)"
-				fn_script_log_pass "Pruning: Cleared ${backupquotadiff} backup(s)"
-			fi
-		fi
-	fi
-}
-
-fn_backup_relpath() {
-	# Written by CedarLUG as a "realpath --relative-to" alternative in bash.
-	# Populate an array of tokens initialized from the rootdir components.
-	declare -a rdirtoks=($(readlink -f "${rootdir}" | sed "s/\// /g"))
-	if [ ${#rdirtoks[@]} -eq 0 ]; then
-		fn_print_fail_nl "Problem assessing rootdir during relative path assessment"
-		fn_script_log_fatal "Problem assessing rootdir during relative path assessment: ${rootdir}"
-		core_exit.sh
-	fi
-
-	# Populate an array of tokens initialized from the backupdir components.
-	declare -a bdirtoks=($(readlink -f "${backupdir}" | sed "s/\// /g"))
-	if [ ${#bdirtoks[@]} -eq 0 ]; then
-		fn_print_fail_nl "Problem assessing backupdir during relative path assessment"
-		fn_script_log_fatal "Problem assessing backupdir during relative path assessment: ${rootdir}"
-		core_exit.sh
-	fi
-
-	# Compare the leading entries of each array.  These common elements will be clipped off.
-	# for the relative path output.
-	for ((base = 0; base < ${#rdirtoks[@]}; base++)); do
-		[[ "${rdirtoks[$base]}" != "${bdirtoks[$base]}" ]] && break
-	done
-
-	# Next, climb out of the remaining rootdir location with updir references.
-	for ((x = base; x < ${#rdirtoks[@]}; x++)); do
-		echo -n "../"
-	done
-
-	# Climb down the remaining components of the backupdir location.
-	for ((x = base; x < $((${#bdirtoks[@]} - 1)); x++)); do
-		echo -n "${bdirtoks[$x]}/"
-	done
-
-	# In the event there were no directories left in the backupdir above to
-	# traverse down, just add a newline. Otherwise at this point, there is
-	# one remaining directory component in the backupdir to navigate.
-	if (("$base" < "${#bdirtoks[@]}")); then
-		echo -e "${bdirtoks[$((${#bdirtoks[@]} - 1))]}"
-	else
-		echo
-	fi
-}
-
-# Start the server if it was stopped for the backup.
-fn_backup_start_server() {
-	if [ -n "${startserver}" ]; then
-		exitbypass=1
-		command_start.sh
-		fn_firstcommand_reset
-	fi
-}
-
-# Run functions.
-fn_backup_check_lockfile
-fn_backup_init
-fn_backup_stop_server
-fn_backup_dir
-fn_backup_migrate_olddir
-fn_backup_create_lockfile
-fn_backup_compression
-fn_backup_prune
-fn_backup_start_server
-
-core_exit.sh

+ 0 - 39
lgsm/functions/command_check_update.sh

@@ -1,39 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_check_update.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Handles updating of servers.
-
-commandname="CHECK-UPDATE"
-commandaction="Check for Update"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_print_dots ""
-check.sh
-core_logs.sh
-
-if [ "${shortname}" == "ts3" ]; then
-	update_ts3.sh
-elif [ "${shortname}" == "mc" ]; then
-	update_minecraft.sh
-elif [ "${shortname}" == "mcb" ]; then
-	update_minecraft_bedrock.sh
-elif [ "${shortname}" == "pmc" ] || [ "${shortname}" == "vpmc" ] || [ "${shortname}" == "wmc" ]; then
-	update_papermc.sh
-elif [ "${shortname}" == "fctr" ]; then
-	update_factorio.sh
-elif [ "${shortname}" == "mta" ]; then
-	update_mta.sh
-elif [ "${shortname}" == "jk2" ]; then
-	update_jediknight2.sh
-elif [ "${shortname}" == "vints" ]; then
-	update_vintagestory.sh
-elif [ "${shortname}" == "ut99" ]; then
-	update_ut99.sh
-else
-	update_steamcmd.sh
-fi
-
-core_exit.sh

+ 0 - 58
lgsm/functions/command_console.sh

@@ -1,58 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_console.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Gives access to the server tmux console.
-
-commandname="CONSOLE"
-commandaction="Access console"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-fn_print_header
-
-if [ "${consoleverbose}" == "yes" ]; then
-	echo -e "* Verbose output: ${lightgreen}yes${default}"
-elif [ "${consoleverbose}" == "no" ]; then
-	echo -e "* Verbose output: ${red}no${default}"
-else
-	echo -e "* Verbose output: ${red}unknown${default}"
-fi
-
-if [ "${consoleinteract}" == "yes" ]; then
-	echo -e "* Interactive output: ${lightgreen}yes${default}"
-elif [ "${consoleinteract}" == "no" ]; then
-	echo -e "* Interactive output: ${red}no${default}"
-else
-	echo -e "* Interactive output: ${red}unknown${default}"
-fi
-echo ""
-fn_print_information_nl "Press \"CTRL+b\" then \"d\" to exit console."
-fn_print_warning_nl "Do NOT press CTRL+c to exit."
-echo -e "* https://docs.linuxgsm.com/commands/console"
-echo -e ""
-if ! fn_prompt_yn "Continue?" Y; then
-	exitcode=0
-	core_exit.sh
-fi
-fn_print_dots "Accessing console"
-check_status.sh
-if [ "${status}" != "0" ]; then
-	fn_print_ok_nl "Accessing console"
-	fn_script_log_pass "Console accessed"
-	tmux -L "${sessionname}" attach-session -t "${sessionname}"
-	fn_print_ok_nl "Closing console"
-	fn_script_log_pass "Console closed"
-else
-	fn_print_error_nl "Server not running"
-	fn_script_log_error "Failed to access: Server not running"
-	if fn_prompt_yn "Do you want to start the server?" Y; then
-		exitbypass=1
-		command_start.sh
-		fn_firstcommand_reset
-	fi
-fi
-
-core_exit.sh

+ 0 - 142
lgsm/functions/command_debug.sh

@@ -1,142 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_debug.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Runs the server without tmux and directly from the terminal.
-
-commandname="DEBUG"
-commandaction="Debuging"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-# Trap to remove lockfile on quit.
-fn_lockfile_trap() {
-	# Remove lockfile.
-	rm -f "${lockdir:?}/${selfname}.lock"
-	# resets terminal. Servers can sometimes mess up the terminal on exit.
-	reset
-	fn_print_dots "Stopping debug"
-	fn_print_ok_nl "Stopping debug"
-	fn_script_log_pass "Stopping debug"
-	# remove trap.
-	trap - INT
-	core_exit.sh
-}
-
-check.sh
-fix.sh
-info_distro.sh
-info_game.sh
-fn_print_header
-{
-	echo -e "${lightblue}Distro:\t\t${default}${distroname}"
-	echo -e "${lightblue}Architecture:\t\t${default}${arch}"
-	echo -e "${lightblue}Kernel:\t\t${default}${kernel}"
-	echo -e "${lightblue}Hostname:\t\t${default}${HOSTNAME}"
-	echo -e "${lightblue}tmux:\t\t${default}${tmuxv}"
-	echo -e "${lightblue}Avg Load:\t\t${default}${load}"
-	echo -e "${lightblue}Free Memory:\t\t${default}${physmemfree}"
-	echo -e "${lightblue}Free Disk:\t\t${default}${availspace}"
-} | column -s $'\t' -t
-
-# glibc required.
-if [ -n "${glibc}" ]; then
-	if [ "${glibc}" == "null" ]; then
-		# Glibc is not required.
-		:
-	elif [ -z "${glibc}" ]; then
-		echo -e "${lightblue}glibc required:\t${red}UNKNOWN${default}"
-	elif [ "$(printf '%s\n'${glibc}'\n' ${glibcversion} | sort -V | head -n 1)" != "${glibc}" ]; then
-		echo -e "${lightblue}glibc required:\t${red}${glibc} ${default}(${red}distro glibc ${glibcversion} too old${default})"
-	else
-		echo -e "${lightblue}glibc required:\t${green}${glibc}${default}"
-	fi
-fi
-
-# Server IP.
-echo -e "${lightblue}Game Server IP:\t${default}${ip}:${port}"
-
-# External server IP.
-if [ "${extip}" ]; then
-	if [ "${ip}" != "${extip}" ]; then
-		echo -e "${lightblue}Internet IP:\t${default}${extip}:${port}"
-	fi
-fi
-
-# Server password.
-if [ "${serverpassword}" ]; then
-	echo -e "${lightblue}Server password:\t${default}${serverpassword}"
-fi
-
-fn_reload_startparameters
-echo -e "${lightblue}Start parameters:${default}"
-if [ "${engine}" == "source" ] || [ "${engine}" == "goldsrc" ]; then
-	echo -e "${executable} ${startparameters} -debug"
-elif [ "${engine}" == "quake" ]; then
-	echo -e "${executable} ${startparameters} -condebug"
-else
-	echo -e "${preexecutable} ${executable} ${startparameters}"
-fi
-echo -e ""
-echo -e "Use debug for identifying server issues only!"
-echo -e "Press CTRL+c to drop out of debug mode."
-fn_print_warning_nl "If ${selfname} is already running it will be stopped."
-echo -e ""
-if ! fn_prompt_yn "Continue?" Y; then
-	exitcode=0
-	core_exit.sh
-fi
-
-fn_print_info_nl "Stopping any running servers"
-fn_script_log_info "Stopping any running servers"
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset
-unset exitbypass
-fn_print_dots "Starting debug"
-fn_script_log_info "Starting debug"
-fn_print_ok_nl "Starting debug"
-
-# Create lockfile.
-date '+%s' > "${lockdir}/${selfname}.lock"
-echo "${version}" >> "${lockdir}/${selfname}.lock"
-echo "${port}" >> "${lockdir}/${selfname}.lock"
-fn_script_log_info "Lockfile generated"
-fn_script_log_info "${lockdir}/${selfname}.lock"
-
-if [ "${shortname}" == "av" ]; then
-	cd "${systemdir}" || exit
-else
-	cd "${executabledir}" || exit
-fi
-
-# Note: do not add double quotes to ${executable} ${startparameters}.
-if [ "${engine}" == "source" ] || [ "${engine}" == "goldsrc" ]; then
-	eval "${executable} ${startparameters} -debug"
-elif [ "${engine}" == "quake" ]; then
-	eval "${executable} ${startparameters} -condebug"
-else
-	# shellcheck disable=SC2086
-	eval "${preexecutable} ${executable} ${startparameters}"
-fi
-
-if [ $? -ne 0 ]; then
-	fn_print_error_nl "Server has stopped: exit code: $?"
-	fn_script_log_error "Server has stopped: exit code: $?"
-	fn_print_error_nl "Press ENTER to exit debug mode"
-	read -r
-else
-	fn_print_ok_nl "Server has stopped"
-	fn_script_log_pass "Server has stopped"
-	fn_print_ok_nl "Press ENTER to exit debug mode"
-	read -r
-fi
-
-fn_lockfile_trap
-
-fn_print_dots "Stopping debug"
-fn_print_ok_nl "Stopping debug"
-fn_script_log_info "Stopping debug"
-
-core_exit.sh

+ 0 - 41
lgsm/functions/command_details.sh

@@ -1,41 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_details.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Displays server information.
-
-commandname="DETAILS"
-commandaction="Viewing details"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-# Run checks and gathers details to display.
-check.sh
-info_distro.sh
-info_game.sh
-info_messages.sh
-if [ "${querymode}" == "2" ] || [ "${querymode}" == "3" ]; then
-	for queryip in "${queryips[@]}"; do
-		query_gamedig.sh
-		if [ "${querystatus}" == "0" ]; then
-			break
-		fi
-	done
-fi
-fn_info_message_distro
-fn_info_message_server_resource
-fn_info_message_gameserver_resource
-fn_info_message_gameserver
-fn_info_message_script
-fn_info_message_backup
-# Some game servers do not have parms.
-if [ "${shortname}" != "jc2" ] && [ "${shortname}" != "dst" ] && [ "${shortname}" != "pz" ] && [ "${engine}" != "renderware" ]; then
-	fn_info_message_commandlineparms
-fi
-fn_info_message_ports_edit
-fn_info_message_ports
-fn_info_message_select_engine
-fn_info_message_statusbottom
-
-core_exit.sh

+ 0 - 24
lgsm/functions/command_dev_clear_functions.sh

@@ -1,24 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_dev_clear_functions.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Deletes the contents of the functions dir.
-
-commandname="DEV-CLEAR-MODULES"
-commandaction="Clearing modules"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-echo -e "================================="
-echo -e "Clear Functions"
-echo -e "================================="
-echo -e ""
-if fn_prompt_yn "Do you want to delete all functions?" Y; then
-	rm -rfv "${functionsdir:?}/"*
-	rm -rfv "${configdirdefault:?}/"*
-	fn_script_log_info "Cleared modules directory"
-	fn_script_log_info "Cleared default config directory"
-fi
-
-core_exit.sh

+ 0 - 23
lgsm/functions/command_dev_debug.sh

@@ -1,23 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_dev_debug.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Dev only: Enables debugging log to be saved to dev-debug.log.
-
-commandname="DEV-DEBUG"
-commandaction="Developer debug"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_reset
-
-if [ -f "${rootdir}/.dev-debug" ]; then
-	rm -f "${rootdir:?}/.dev-debug"
-	fn_print_ok_nl "Disabled dev-debug"
-	fn_script_log_info "Disabled dev-debug"
-else
-	date '+%s' > "${rootdir}/.dev-debug"
-	fn_print_ok_nl "Enabled dev-debug"
-	fn_script_log_info "Enabled dev-debug"
-fi
-
-core_exit.sh

+ 0 - 231
lgsm/functions/command_dev_detect_deps.sh

@@ -1,231 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_dev_detect_deps.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Detects dependencies the server binary requires.
-
-commandname="DEV-DETECT-DEPS"
-commandaction="Developer detect deps"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-echo -e "================================="
-echo -e "Dependencies Checker"
-echo -e "================================="
-echo -e "Checking directory: "
-echo -e "${serverfiles}"
-if [ "$(command -v eu-readelf 2> /dev/null)" ]; then
-	readelf=eu-readelf
-elif [ "$(command -v readelf 2> /dev/null)" ]; then
-	readelf=readelf
-else
-	echo -e "readelf/eu-readelf not installed"
-fi
-files=$(find "${serverfiles}" | wc -l)
-find "${serverfiles}" -type f -print0 \
-	| while IFS= read -r -d $'\0' line; do
-		if [ "${readelf}" == "eu-readelf" ]; then
-			${readelf} -d "${line}" 2> /dev/null | grep NEEDED | awk '{ print $4 }' | sed 's/\[//g;s/\]//g' >> "${tmpdir}/.depdetect_readelf"
-		else
-			${readelf} -d "${line}" 2> /dev/null | grep NEEDED | awk '{ print $5 }' | sed 's/\[//g;s/\]//g' >> "${tmpdir}/.depdetect_readelf"
-		fi
-		echo -n "${i} / ${files}" $'\r'
-		((i++))
-	done
-
-sort "${tmpdir}/.depdetect_readelf" | uniq > "${tmpdir}/.depdetect_readelf_uniq"
-
-touch "${tmpdir}/.depdetect_centos_list"
-touch "${tmpdir}/.depdetect_ubuntu_list"
-touch "${tmpdir}/.depdetect_debian_list"
-
-while read -r lib; do
-	echo -e "${lib}"
-	libs_array=(libm.so.6 libc.so.6 libtcmalloc_minimal.so.4 libpthread.so.0 libdl.so.2 libnsl.so.1 libgcc_s.so.1 librt.so.1 ld-linux.so.2 libdbus-glib-1.so.2 libgio-2.0.so.0 libglib-2.0.so.0 libGL.so.1 libgobject-2.0.so.0 libnm-glib.so.4 libnm-util.so.2)
-	for lib_file in "${libs_array[@]}"; do
-		if [ "${lib}" == "${lib_file}" ]; then
-			echo -e "glibc.i686" >> "${tmpdir}/.depdetect_centos_list"
-			echo -e "lib32gcc1" >> "${tmpdir}/.depdetect_ubuntu_list"
-			echo -e "lib32gcc1" >> "${tmpdir}/.depdetect_debian_list"
-			libdetected=1
-		fi
-	done
-
-	libs_array=(libawt.so libjava.so libjli.so libjvm.so libnet.so libnio.so libverify.so)
-	for lib_file in "${libs_array[@]}"; do
-		if [ "${lib}" == "${lib_file}" ]; then
-			echo -e "java-1.8.0-openjdk" >> "${tmpdir}/.depdetect_centos_list"
-			echo -e "default-jre" >> "${tmpdir}/.depdetect_ubuntu_list"
-			echo -e "default-jre" >> "${tmpdir}/.depdetect_debian_list"
-			libdetected=1
-		fi
-	done
-
-	libs_array=(libtier0.so libtier0_srv.so libvstdlib_srv.so Core.so libvstdlib.so libtier0_s.so Editor.so Engine.so liblua.so libsteam_api.so ld-linux-x86-64.so.2 libPhysX3_x86.so libPhysX3Common_x86.so libPhysX3Cooking_x86.so)
-	for lib_file in "${libs_array[@]}"; do
-		# Known shared libs what dont requires dependencies.
-		if [ "${lib}" == "${lib_file}" ]; then
-			libdetected=1
-		fi
-	done
-
-	if [ "${lib}" == "libstdc++.so.6" ]; then
-		echo -e "libstdc++.i686" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libstdc++6:i386" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libstdc++6:i386" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libstdc++.so.5" ]; then
-		echo -e "compat-libstdc++-33.i686" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libstdc++5:i386" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libstdc++5:i386" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libcurl-gnutls.so.4" ]; then
-		echo -e "libcurl.i686" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libcurl4-gnutls-dev:i386" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libcurl4-gnutls-dev:i386" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libspeex.so.1" ] || [ "${lib}" == "libspeexdsp.so.1" ]; then
-		echo -e "speex.i686" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "speex:i386" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "speex:i386" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "./libSDL-1.2.so.0" ] || [ "${lib}" == "libSDL-1.2.so.0" ]; then
-		echo -e "SDL.i686" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libsdl1.2debian" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libsdl1.2debian" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libtbb.so.2" ]; then
-		echo -e "tbb.i686" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libtbb2" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libtbb2" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-
-	elif [ "${lib}" == "libXrandr.so.2" ]; then
-		echo -e "libXrandr" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libxrandr2" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libxrandr2" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libXext.so.6" ]; then
-		echo -e "libXext" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libxext6" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libxext6" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libXtst.so.6" ]; then
-		echo -e "libXtst" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libxtst6" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libxtst6" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libpulse.so.0" ]; then
-		echo -e "pulseaudio-libs" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libpulse0" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libpulse0" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libopenal.so.1" ]; then
-		echo -e "" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libopenal1" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libopenal1" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libgconf-2.so.4" ]; then
-		echo -e "GConf2" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libgconf2-4" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libgconf2-4" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libz.so.1" ]; then
-		echo -e "zlib" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "zlib1g" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "zlib1g" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libatk-1.0.so.0" ]; then
-		echo -e "atk" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libatk1.0-0" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libatk1.0-0" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libcairo.so.2" ]; then
-		echo -e "cairo" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libcairo2" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libcairo2" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libfontconfig.so.1" ]; then
-		echo -e "fontconfig" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libfontconfig1" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libfontconfig1" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libfreetype.so.6" ]; then
-		echo -e "freetype" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libfreetype6" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libfreetype6" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	elif [ "${lib}" == "libc++.so.1" ]; then
-		echo -e "libcxx" >> "${tmpdir}/.depdetect_centos_list"
-		echo -e "libc++1" >> "${tmpdir}/.depdetect_ubuntu_list"
-		echo -e "libc++1" >> "${tmpdir}/.depdetect_debian_list"
-		libdetected=1
-	fi
-
-	if [ "${libdetected}" != "1" ]; then
-		unknownlib=1
-		echo -e "${lib}" >> "${tmpdir}/.depdetect_unknown"
-	fi
-	unset libdetected
-done < "${tmpdir}/.depdetect_readelf_uniq"
-
-sort "${tmpdir}/.depdetect_centos_list" | uniq >> "${tmpdir}/.depdetect_centos_list_uniq"
-sort "${tmpdir}/.depdetect_ubuntu_list" | uniq >> "${tmpdir}/.depdetect_ubuntu_list_uniq"
-sort "${tmpdir}/.depdetect_debian_list" | uniq >> "${tmpdir}/.depdetect_debian_list_uniq"
-if [ "${unknownlib}" == "1" ]; then
-	sort "${tmpdir}/.depdetect_unknown" | uniq >> "${tmpdir}/.depdetect_unknown_uniq"
-fi
-
-awk -vORS='' '{ print $1,$2 }' "${tmpdir}/.depdetect_centos_list_uniq" > "${tmpdir}/.depdetect_centos_line"
-awk -vORS='' '{ print $1,$2 }' "${tmpdir}/.depdetect_ubuntu_list_uniq" > "${tmpdir}/.depdetect_ubuntu_line"
-awk -vORS='' '{ print $1,$2 }' "${tmpdir}/.depdetect_debian_list_uniq" > "${tmpdir}/.depdetect_debian_line"
-echo -e ""
-echo -e ""
-echo -e "Required Dependencies"
-echo -e "================================="
-echo -e "${executable}"
-echo -e ""
-echo -e "CentOS"
-echo -e "================================="
-cat "${tmpdir}/.depdetect_centos_line"
-echo -e ""
-echo -e ""
-echo -e "Ubuntu"
-echo -e "================================="
-cat "${tmpdir}/.depdetect_ubuntu_line"
-echo -e ""
-echo -e ""
-echo -e "Debian"
-echo -e "================================="
-cat "${tmpdir}/.depdetect_debian_line"
-echo -e ""
-if [ "${unknownlib}" == "1" ]; then
-	echo -e ""
-	echo -e "Unknown shared Library"
-	echo -e "================================="
-	cat "${tmpdir}/.depdetect_unknown"
-fi
-echo -e ""
-echo -e "Required Librarys"
-echo -e "================================="
-sort "${tmpdir}/.depdetect_readelf" | uniq
-echo -en "\n"
-rm -f "${tmpdir:?}/.depdetect_centos_line"
-rm -f "${tmpdir:?}/.depdetect_centos_list"
-rm -f "${tmpdir:?}/.depdetect_centos_list_uniq"
-
-rm -f "${tmpdir:?}/.depdetect_debian_line"
-rm -f "${tmpdir:?}/.depdetect_debian_list"
-rm -f "${tmpdir:?}/.depdetect_debian_list_uniq"
-
-rm -f "${tmpdir:?}/.depdetect_ubuntu_line"
-rm -f "${tmpdir:?}/.depdetect_ubuntu_list"
-rm -f "${tmpdir:?}/.depdetect_ubuntu_list_uniq"
-
-rm -f "${tmpdir:?}/.depdetect_readelf"
-rm -f "${tmpdir:?}/.depdetect_readelf_uniq"
-rm -f "${tmpdir:?}/.depdetect_unknown"
-rm -f "${tmpdir:?}/.depdetect_unknown_uniq"
-
-core_exit.sh

+ 0 - 92
lgsm/functions/command_dev_detect_glibc.sh

@@ -1,92 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_dev_detect_glibc.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Automatically detects the version of GLIBC that is required.
-# Can check a file or directory recursively.
-
-commandname="DEV-DETECT-GLIBC"
-commandaction="Developer detect glibc"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-echo -e "================================="
-echo -e "glibc Requirements Checker"
-echo -e "================================="
-
-if [ ! "$(command -v objdump)" ]; then
-	fn_print_failure_nl "objdump is missing"
-	fn_script_log_fatal "objdump is missing"
-	core_exit.sh
-fi
-
-if [ -z "${serverfiles}" ]; then
-	dir=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
-fi
-
-if [ -d "${serverfiles}" ]; then
-	echo -e "Checking directory: "
-	echo -e "${serverfiles}"
-elif [ -f "${serverfiles}" ]; then
-	echo -e "Checking file: "
-	echo -e "${serverfiles}"
-fi
-echo -e ""
-
-glibc_check_dir_array=(steamcmddir serverfiles)
-for glibc_check_var in "${glibc_check_dir_array[@]}"; do
-	if [ "${glibc_check_var}" == "serverfiles" ]; then
-		glibc_check_dir="${serverfiles}"
-		glibc_check_name="${gamename}"
-	elif [ "${glibc_check_var}" == "steamcmddir" ]; then
-		glibc_check_dir="${steamcmddir}"
-		glibc_check_name="SteamCMD"
-	fi
-
-	if [ -d "${glibc_check_dir}" ]; then
-		glibc_check_files=$(find "${glibc_check_dir}" | wc -l)
-		find "${glibc_check_dir}" -type f -print0 \
-			| while IFS= read -r -d $'\0' line; do
-				glibcversion=$(objdump -T "${line}" 2> /dev/null | grep -oP "GLIBC[^ ]+" | grep -v GLIBCXX | sort | uniq | sort -r --version-sort | head -n 1)
-				if [ "${glibcversion}" ]; then
-					echo -e "${glibcversion}: ${line}" >> "${tmpdir}/detect_glibc_files_${glibc_check_var}.tmp"
-				fi
-				objdump -T "${line}" 2> /dev/null | grep -oP "GLIBC[^ ]+" >> "${tmpdir}/detect_glibc_${glibc_check_var}.tmp"
-				echo -n "${i} / ${glibc_check_files}" $'\r'
-				((i++))
-			done
-		echo -e ""
-		echo -e ""
-		echo -e "${glibc_check_name} glibc Requirements"
-		echo -e "================================="
-		if [ -f "${tmpdir}/detect_glibc_files_${glibc_check_var}.tmp" ]; then
-			echo -e "Required glibc"
-			cat "${tmpdir}/detect_glibc_${glibc_check_var}.tmp" | sort | uniq | sort -r --version-sort | head -1 | tee -a "${tmpdir}/detect_glibc_highest.tmp"
-			echo -e ""
-			echo -e "Files requiring GLIBC"
-			echo -e "Highest verion required: filename"
-			cat "${tmpdir}/detect_glibc_files_${glibc_check_var}.tmp"
-			echo -e ""
-			echo -e "All required GLIBC versions"
-			cat "${tmpdir}/detect_glibc_${glibc_check_var}.tmp" | sort | uniq | sort -r --version-sort
-			rm -f "${tmpdir:?}/detect_glibc_${glibc_check_var}.tmp"
-			rm -f "${tmpdir:?}/detect_glibc_files_${glibc_check_var}.tmp"
-		else
-			fn_print_information_nl "glibc is not required"
-		fi
-	else
-		fn_print_information_nl "${glibc_check_name} is not installed"
-	fi
-done
-echo -e ""
-echo -e "Final glibc Requirement"
-echo -e "================================="
-if [ -f "${tmpdir}/detect_glibc_highest.tmp" ]; then
-	cat "${tmpdir}/detect_glibc_highest.tmp" | sort | uniq | sort -r --version-sort | head -1
-	rm -f "${tmpdir:?}/detect_glibc_highest.tmp"
-else
-	fn_print_information_nl "glibc is not required"
-fi
-
-core_exit.sh

+ 0 - 61
lgsm/functions/command_dev_detect_ldd.sh

@@ -1,61 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_dev_detect_ldd.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Automatically detects required deps using ldd.
-# Can check a file or directory recursively.
-
-commandname="DEV-DETECT-LDD"
-commandaction="Developer detect ldd"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-echo -e "================================="
-echo -e "Shared Object dependencies Checker"
-echo -e "================================="
-
-if [ -z "${serverfiles}" ]; then
-	dir=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
-fi
-
-if [ -d "${serverfiles}" ]; then
-	echo -e "Checking directory: "
-	echo -e "${serverfiles}"
-elif [ -f "${serverfiles}" ]; then
-	echo -e "Checking file: "
-	echo -e "${serverfiles}"
-fi
-echo -e ""
-touch "${tmpdir}/detect_ldd.tmp"
-touch "${tmpdir}/detect_ldd_not_found.tmp"
-
-files=$(find "${serverfiles}" | wc -l)
-find "${serverfiles}" -type f -print0 \
-	| while IFS= read -r -d $'\0' line; do
-		if ldd "${line}" 2> /dev/null | grep -v "not a dynamic executable"; then
-			echo -e "${line}" >> "${tmpdir}/detect_ldd.tmp"
-			ldd "${line}" 2> /dev/null | grep -v "not a dynamic executable" >> "${tmpdir}/detect_ldd.tmp"
-			if ldd "${line}" 2> /dev/null | grep -v "not a dynamic executable" | grep "not found"; then
-				echo -e "${line}" >> "${tmpdir}/detect_ldd_not_found.tmp"
-				ldd "${line}" 2> /dev/null | grep -v "not a dynamic executable" | grep "not found" >> "${tmpdir}/detect_ldd_not_found.tmp"
-			fi
-		fi
-		echo -n "$i / $files" $'\r'
-		((i++))
-	done
-echo -e ""
-echo -e ""
-echo -e "All"
-echo -e "================================="
-cat "${tmpdir}/detect_ldd.tmp"
-
-echo -e ""
-echo -e "Not Found"
-echo -e "================================="
-cat "${tmpdir}/detect_ldd_not_found.tmp"
-
-rm -f "${tmpdir:?}/detect_ldd.tmp"
-rm -f "${tmpdir:?}/detect_ldd_not_found.tmp"
-
-core_exit.sh

+ 0 - 280
lgsm/functions/command_dev_query_raw.sh

@@ -1,280 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_dev_query_raw.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Raw gamedig output of the server.
-
-commandname="DEV-QUERY-RAW"
-commandaction="Developer query raw"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-info_game.sh
-info_distro.sh
-info_messages.sh
-
-echo -e ""
-echo -e "${lightgreen}Query IP Addresses${default}"
-echo -e "=================================================================="
-echo -e ""
-for queryip in "${queryips[@]}"; do
-	echo -e "${queryip}"
-done
-echo -e ""
-echo -e "${lightgreen}Game Server Ports${default}"
-echo -e "=================================================================="
-{
-	echo -e "${lightblue}Port Name \tPort Number \tStatus \tTCP \tUDP${default}"
-	if [ -v port ]; then
-		echo -e "Game: \t${port} \t$(ss -tupl | grep -c ${port}) \t$(ss -tupl | grep ${port} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${port} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Game:"
-	fi
-	if [ "${shortname}" == "rw" ]; then
-		if [ -v port2 ]; then
-			echo -e "Game+1: \t${port2} \t$(ss -tupl | grep -c ${port}) \t$(ss -tupl | grep ${port2} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${port2} | grep udp | awk '{ print $2 }')"
-		else
-			echo -e "Game+1:"
-		fi
-
-		if [ -v port3 ]; then
-			echo -e "Game+2: \t${port3} \t$(ss -tupl | grep -c ${port}) \t$(ss -tupl | grep ${port3} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${port3} | grep udp | awk '{ print $2 }')"
-		else
-			echo -e "Game+2:"
-		fi
-
-		if [ -v port4 ]; then
-			echo -e "Game+3: \t${port4} \t$(ss -tupl | grep -c ${port}) \t$(ss -tupl | grep ${port4} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${port4} | grep udp | awk '{ print $2 }')"
-		else
-			echo -e "Game+3:"
-		fi
-	fi
-
-	if [ -v port401 ]; then
-		echo -e "Game+400: \t${port401} \t$(ss -tupl | grep -c ${port401}) \t$(ss -tupl | grep ${port401} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${port401} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Game+400:"
-	fi
-
-	if [ -v portipv6 ]; then
-		echo -e "Game ipv6: \t${portipv6} \t$(ss -tupl | grep -c ${portipv6}) \t$(ss -tupl | grep ${portipv6} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${portipv6} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Game ipv6:"
-	fi
-
-	if [ -v queryport ]; then
-		echo -e "Query: \t${queryport} \t$(ss -tupl | grep -c ${queryport}) \t$(ss -tupl | grep ${queryport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${queryport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Query:"
-	fi
-
-	if [ -v httpport ]; then
-		echo -e "HTTP: \t${httpport} \t$(ss -tupl | grep -c ${httpport}) \t$(ss -tupl | grep ${httpport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${httpport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "HTTP:"
-	fi
-
-	if [ -v httpqueryport ]; then
-		echo -e "HTTP Query: \t${httpqueryport} \t$(ss -tupl | grep -c ${httpqueryport}) \t$(ss -tupl | grep ${httpqueryport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${httpqueryport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "HTTP Query:"
-	fi
-
-	if [ -v webadminport ]; then
-		echo -e "Web Admin: \t${webadminport} \t$(ss -tupl | grep -c ${webadminport}) \t$(ss -tupl | grep ${webadminport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${webadminport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Web Admin:"
-	fi
-
-	if [ -v clientport ]; then
-		echo -e "Client: \t${clientport} \t$(ss -tupl | grep -c ${clientport}) \t$(ss -tupl | grep ${clientport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${clientport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Client:"
-	fi
-
-	if [ -v rconport ]; then
-		echo -e "RCON: \t${rconport} \t$(ss -tupl | grep -c ${rconport}) \t$(ss -tupl | grep ${rconport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${rconport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "RCON:"
-	fi
-
-	if [ -v rawport ]; then
-		echo -e "RAW UDP Socket: \t${rawport} \t$(ss -tupl | grep -c ${rawport}) \t$(ss -tupl | grep ${rawport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${rawport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "RAW UDP Socket:"
-	fi
-
-	if [ -v masterport ]; then
-		echo -e "Game: Master: \t${masterport} \t$(ss -tupl | grep -c ${masterport}) \t$(ss -tupl | grep ${masterport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${masterport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Game: Master:"
-	fi
-
-	if [ -v steamport ]; then
-		echo -e "Steam: \t${steamport} \t$(ss -tupl | grep -c ${steamport}) \t$(ss -tupl | grep ${steamport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${steamport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Steam:"
-	fi
-
-	if [ -v steamauthport ]; then
-		echo -e "Steam: Auth: \t${steamauthport} \t$(ss -tupl | grep -c ${steamauthport}) \t$(ss -tupl | grep ${steamauthport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${steamauthport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Steam: Auth:"
-	fi
-
-	if [ -v steammasterport ]; then
-		echo -e "Steam: Master: \t${steammasterport} \t$(ss -tupl | grep -c ${steammasterport}) \t$(ss -tupl | grep ${steammasterport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${steammasterport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Steam: Master:"
-	fi
-
-	if [ -v steamqueryport ]; then
-		echo -e "Steam: Query: \t${steamqueryport} \t$(ss -tupl | grep -c ${steamqueryport}) \t$(ss -tupl | grep ${steamqueryport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${steamqueryport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Steam: Query:"
-	fi
-	if [ -v beaconport ]; then
-		echo -e "Beacon: \t${beaconport} \t$(ss -tupl | grep -c ${beaconport}) \t$(ss -tupl | grep ${beaconport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${beaconport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Beacon:"
-	fi
-
-	if [ -v appport ]; then
-		echo -e "App: \t${appport} \t$(ss -tupl | grep -c ${appport}) \t$(ss -tupl | grep ${appport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${appport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "App:"
-	fi
-
-	if [ -v telnetport ]; then
-		echo -e "Telnet: \t${telnetport} \t$(ss -tupl | grep -c ${telnetport}) \t$(ss -tupl | grep ${telnetport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${telnetport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Telnet:"
-	fi
-
-	if [ -v sourcetvport ]; then
-		echo -e "SourceTV: \t${sourcetvport} \t$(ss -tupl | grep -c ${sourcetvport}) \t$(ss -tupl | grep ${sourcetvport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${sourcetvport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "SourceTV:"
-	fi
-
-	if [ -v fileport ]; then
-		echo -e "File: \t${fileport} \t$(ss -tupl | grep -c ${fileport}) \t$(ss -tupl | grep ${fileport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${fileport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "File:"
-	fi
-
-	if [ -v udplinkport ]; then
-		echo -e "UDP Link: \t${udplinkport} \t$(ss -tupl | grep -c ${udplinkport}) \t$(ss -tupl | grep ${udplinkport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${udplinkport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "UDP Link:"
-	fi
-
-	if [ -v voiceport ]; then
-		echo -e "Voice: \t${voiceport} \t$(ss -tupl | grep -c ${voiceport}) \t$(ss -tupl | grep ${voiceport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${voiceport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Voice:"
-	fi
-
-	if [ -v voiceunusedport ]; then
-		echo -e "Voice (Unused): \t${voiceunusedport} \t$(ss -tupl | grep -c ${voiceunusedport}) \t$(ss -tupl | grep ${voiceunusedport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${voiceunusedport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Voice (Unused):"
-	fi
-
-	if [ -v battleeyeport ]; then
-		echo -e "BattleEye: \t${battleeyeport} \t$(ss -tupl | grep -c ${battleeyeport}) \t$(ss -tupl | grep ${battleeyeport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${battleeyeport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "BattleEye:"
-	fi
-
-	if [ -v statsport ]; then
-		echo -e "Stats: \t${battleeyeport} \t$(ss -tupl | grep -c ${statsport}) \t$(ss -tupl | grep ${statsport} | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep ${statsport} | grep udp | awk '{ print $2 }')"
-	else
-		echo -e "Stats:"
-	fi
-
-} | column -s $'\t' -t
-echo -e ""
-echo -e "${lightgreen}SS Output${default}"
-echo -e "================================="
-fn_info_message_ports
-echo -e ""
-echo -e "${lightgreen}Query Port - Raw Output${default}"
-echo -e "=================================================================="
-echo -e ""
-echo -e "PORT: ${port}"
-echo -e "QUERY PORT: ${queryport}"
-echo -e ""
-echo -e "${lightgreen}Gamedig Raw Output${default}"
-echo -e "================================="
-echo -e ""
-if [ ! "$(command -v gamedig 2> /dev/null)" ]; then
-	fn_print_failure_nl "gamedig not installed"
-fi
-if [ ! "$(command -v jq 2> /dev/null)" ]; then
-	fn_print_failure_nl "jq not installed"
-fi
-for queryip in "${queryips[@]}"; do
-	query_gamedig.sh
-	echo -e "${gamedigcmd}"
-	echo""
-	echo "${gamedigraw}" | jq
-done
-echo -e ""
-echo -e "${lightgreen}gsquery Raw Output${default}"
-echo -e "================================="
-echo -e ""
-for queryip in "${queryips[@]}"; do
-	echo -e "./query_gsquery.py -a \"${queryip}\" -p \"${queryport}\" -e \"${querytype}\""
-	echo -e ""
-	if [ ! -f "${functionsdir}/query_gsquery.py" ]; then
-		fn_fetch_file_github "lgsm/functions" "query_gsquery.py" "${functionsdir}" "chmodx" "norun" "noforce" "nohash"
-	fi
-	"${functionsdir}"/query_gsquery.py -a "${queryip}" -p "${queryport}" -e "${querytype}"
-done
-echo -e ""
-echo -e "${lightgreen}TCP Raw Output${default}"
-echo -e "================================="
-echo -e ""
-for queryip in "${queryips[@]}"; do
-	echo -e "bash -c 'exec 3<> /dev/tcp/'${queryip}'/'${queryport}''"
-	echo -e ""
-	timeout 3 bash -c 'exec 3<> /dev/tcp/'${queryip}'/'${queryport}''
-	querystatus="$?"
-	echo -e ""
-	if [ "${querystatus}" == "0" ]; then
-		echo -e "TCP query PASS"
-	else
-		echo -e "TCP query FAIL"
-	fi
-done
-echo -e ""
-echo -e "${lightgreen}Game Port - Raw Output${default}"
-echo -e "=================================================================="
-echo -e ""
-echo -e "${lightgreen}TCP Raw Output${default}"
-echo -e "================================="
-echo -e ""
-for queryip in "${queryips[@]}"; do
-	echo -e "bash -c 'exec 3<> /dev/tcp/'${queryip}'/'${port}''"
-	echo -e ""
-	timeout 3 bash -c 'exec 3<> /dev/tcp/'${queryip}'/'${port}''
-	querystatus="$?"
-	echo -e ""
-	if [ "${querystatus}" == "0" ]; then
-		echo -e "TCP query PASS"
-	else
-		echo -e "TCP query FAIL"
-	fi
-done
-echo -e ""
-echo -e "${lightgreen}Steam Master Server Response${default}"
-echo -e "=================================================================="
-echo -e ""
-echo -e "Response: ${displaymasterserver}"
-echo -e ""
-
-exitcode=0
-core_exit.sh

+ 0 - 26
lgsm/functions/command_donate.sh

@@ -1,26 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_donate.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Shows ways to donate.
-
-commandname="DONATE"
-commandaction="Donate"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_print_ascii_logo
-echo -e "${lightyellow}Support LinuxGSM${default}"
-echo -e "================================="
-echo -e ""
-echo -e "Been using LinuxGSM?"
-echo -e "Consider donating to support development."
-echo -e ""
-echo -e "* ${lightblue}Patreon:${default} https://linuxgsm.com/patreon"
-echo -e "* ${lightblue}GitHub:${default} https://github.com/sponsors/dgibbs64"
-echo -e "* ${lightblue}PayPal:${default} https://linuxgsm.com/paypal"
-echo -e ""
-echo -e "LinuxGSM est. 2012"
-
-core_exit.sh

+ 0 - 442
lgsm/functions/command_fastdl.sh

@@ -1,442 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_fastdl.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Creates a FastDL directory.
-
-commandname="FASTDL"
-commandaction="Fastdl"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-
-# Directories.
-if [ -z "${webdir}" ]; then
-	webdir="${rootdir}/public_html"
-fi
-fastdldir="${webdir}/fastdl"
-addonsdir="${systemdir}/addons"
-# Server lua autorun dir, used to autorun lua on client connect to the server.
-luasvautorundir="${systemdir}/lua/autorun/server"
-luafastdlfile="lgsm_cl_force_fastdl.lua"
-luafastdlfullpath="${luasvautorundir}/${luafastdlfile}"
-
-# Check if bzip2 is installed.
-if [ ! "$(command -v bzip2 2> /dev/null)" ]; then
-	fn_print_fail "bzip2 is not installed"
-	fn_script_log_fatal "bzip2 is not installed"
-	core_exit.sh
-fi
-
-# Header
-fn_print_header
-echo -e "More info: https://docs.linuxgsm.com/commands/fastdl"
-echo -e ""
-
-# Prompts user for FastDL creation settings.
-echo -e "${commandaction} setup"
-echo -e "================================="
-
-# Prompt for clearing old files if directory was already here.
-if [ -d "${fastdldir}" ]; then
-	fn_print_warning_nl "FastDL directory already exists."
-	echo -e "${fastdldir}"
-	echo -e ""
-	if fn_prompt_yn "Overwrite existing directory?" Y; then
-		fn_script_log_info "Overwrite existing directory: YES"
-	else
-		core_exit.sh
-	fi
-fi
-
-# Garry's Mod Specific.
-if [ "${shortname}" == "gmod" ]; then
-	# Prompt for download enforcer, which is using a .lua addfile resource generator.
-	if fn_prompt_yn "Force clients to download files?" Y; then
-		luaresource="on"
-		fn_script_log_info "Force clients to download files: YES"
-	else
-		luaresource="off"
-		fn_script_log_info "Force clients to download filesr: NO"
-	fi
-fi
-
-# Clears any fastdl directory content.
-fn_clear_old_fastdl() {
-	# Clearing old FastDL.
-	if [ -d "${fastdldir}" ]; then
-		echo -en "clearing existing FastDL directory ${fastdldir}..."
-		rm -rf "${fastdldir:?}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Clearing existing FastDL directory ${fastdldir}"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Clearing existing FastDL directory ${fastdldir}"
-		fi
-	fi
-}
-
-fn_fastdl_dirs() {
-	# Check and create directories.
-	if [ ! -d "${webdir}" ]; then
-		echo -en "creating web directory ${webdir}..."
-		mkdir -p "${webdir}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Creating web directory ${webdir}"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Creating web directory ${webdir}"
-		fi
-	fi
-	if [ ! -d "${fastdldir}" ]; then
-		echo -en "creating fastdl directory ${fastdldir}..."
-		mkdir -p "${fastdldir}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Creating fastdl directory ${fastdldir}"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Creating fastdl directory ${fastdldir}"
-		fi
-	fi
-}
-
-# Using this gist https://gist.github.com/agunnerson-ibm/efca449565a3e7356906
-fn_human_readable_file_size() {
-	local abbrevs=(
-		$((1 << 60)):ZB
-		$((1 << 50)):EB
-		$((1 << 40)):TB
-		$((1 << 30)):GB
-		$((1 << 20)):MB
-		$((1 << 10)):KB
-		$((1)):bytes
-	)
-
-	local bytes="${1}"
-	local precision="${2}"
-
-	if [[ "${bytes}" == "1" ]]; then
-		echo -e "1 byte"
-	else
-		for item in "${abbrevs[@]}"; do
-			local factor="${item%:*}"
-			local abbrev="${item#*:}"
-			if [[ "${bytes}" -ge "${factor}" ]]; then
-				size=$(bc -l <<< "${bytes} / ${factor}")
-				printf "%.*f %s\n" "${precision}" "${size}" "${abbrev}"
-				break
-			fi
-		done
-	fi
-}
-
-# Provides info about the fastdl directory content and prompts for confirmation.
-fn_fastdl_preview() {
-	# Remove any file list.
-	if [ -f "${tmpdir}/fastdl_files_to_compress.txt" ]; then
-		rm -f "${tmpdir:?}/fastdl_files_to_compress.txt"
-	fi
-	echo -e "analysing required files"
-	fn_script_log_info "Analysing required files"
-	# Garry's Mod
-	if [ "${shortname}" == "gmod" ]; then
-		cd "${systemdir}" || exit
-		allowed_extentions_array=("*.ain" "*.bsp" "*.mdl" "*.mp3" "*.ogg" "*.otf" "*.pcf" "*.phy" "*.png" "*.svg" "*.vtf" "*.vmt" "*.vtx" "*.vvd" "*.ttf" "*.wav")
-		for allowed_extention in "${allowed_extentions_array[@]}"; do
-			fileswc=0
-			tput sc
-			while read -r ext; do
-				((fileswc++))
-				tput rc
-				tput el
-				echo -e "gathering ${allowed_extention} : ${fileswc}..."
-				echo -e "${ext}" >> "${tmpdir}/fastdl_files_to_compress.txt"
-			done < <(find . -type f -iname "${allowed_extention}")
-			if [ ${fileswc} != 0 ]; then
-				fn_print_ok_eol_nl
-			else
-				fn_print_info_eol_nl
-			fi
-		done
-	# Source engine
-	else
-		fastdl_directories_array=("maps" "materials" "models" "particles" "sound" "resources")
-		for directory in "${fastdl_directories_array[@]}"; do
-			if [ -d "${systemdir}/${directory}" ]; then
-				if [ "${directory}" == "maps" ]; then
-					local allowed_extentions_array=("*.bsp" "*.ain" "*.nav" "*.jpg" "*.txt")
-				elif [ "${directory}" == "materials" ]; then
-					local allowed_extentions_array=("*.vtf" "*.vmt" "*.vbf" "*.png" "*.svg")
-				elif [ "${directory}" == "models" ]; then
-					local allowed_extentions_array=("*.vtx" "*.vvd" "*.mdl" "*.phy" "*.jpg" "*.png" "*.vmt" "*.vtf")
-				elif [ "${directory}" == "particles" ]; then
-					local allowed_extentions_array=("*.pcf")
-				elif [ "${directory}" == "sound" ]; then
-					local allowed_extentions_array=("*.wav" "*.mp3" "*.ogg")
-				fi
-				for allowed_extention in "${allowed_extentions_array[@]}"; do
-					fileswc=0
-					tput sc
-					while read -r ext; do
-						((fileswc++))
-						tput rc
-						tput el
-						echo -e "gathering ${directory} ${allowed_extention} : ${fileswc}..."
-						echo -e "${ext}" >> "${tmpdir}/fastdl_files_to_compress.txt"
-					done < <(find "${systemdir}/${directory}" -type f -iname "${allowed_extention}")
-					tput rc
-					tput el
-					echo -e "gathering ${directory} ${allowed_extention} : ${fileswc}..."
-					if [ ${fileswc} != 0 ]; then
-						fn_print_ok_eol_nl
-					else
-						fn_print_info_eol_nl
-					fi
-				done
-			fi
-		done
-	fi
-	if [ -f "${tmpdir}/fastdl_files_to_compress.txt" ]; then
-		echo -e "calculating total file size..."
-		fn_sleep_time
-		totalfiles=$(wc -l < "${tmpdir}/fastdl_files_to_compress.txt")
-		# Calculates total file size.
-		while read -r dufile; do
-			filesize=$(stat -c %s "${dufile}")
-			filesizetotal=$((filesizetotal + filesize))
-			exitcode=$?
-			if [ "${exitcode}" != 0 ]; then
-				fn_print_fail_eol_nl
-				fn_script_log_fatal "Calculating total file size."
-				core_exit.sh
-			fi
-		done < "${tmpdir}/fastdl_files_to_compress.txt"
-	else
-		fn_print_fail_eol_nl "generating file list"
-		fn_script_log_fatal "Generating file list."
-		core_exit.sh
-	fi
-	echo -e "about to compress ${totalfiles} files, total size $(fn_human_readable_file_size ${filesizetotal} 0)"
-	fn_script_log_info "${totalfiles} files, total size $(fn_human_readable_file_size ${filesizetotal} 0)"
-	rm -f "${tmpdir:?}/fastdl_files_to_compress.txt"
-	if ! fn_prompt_yn "Continue?" Y; then
-		fn_script_log "User exited"
-		core_exit.sh
-	fi
-}
-
-# Builds Garry's Mod fastdl directory content.
-fn_fastdl_gmod() {
-	cd "${systemdir}" || exit
-	for allowed_extention in "${allowed_extentions_array[@]}"; do
-		fileswc=0
-		tput sc
-		while read -r fastdlfile; do
-			((fileswc++))
-			tput rc
-			tput el
-			echo -e "copying ${allowed_extention} : ${fileswc}..."
-			cp --parents "${fastdlfile}" "${fastdldir}"
-			exitcode=$?
-			if [ "${exitcode}" != 0 ]; then
-				fn_print_fail_eol_nl
-				fn_script_log_fatal "Copying ${fastdlfile} > ${fastdldir}"
-				core_exit.sh
-			else
-				fn_script_log_pass "Copying ${fastdlfile} > ${fastdldir}"
-			fi
-		done < <(find . -type f -iname "${allowed_extention}")
-		if [ ${fileswc} != 0 ]; then
-			fn_print_ok_eol_nl
-		fi
-	done
-	# Correct addons directory structure for FastDL.
-	if [ -d "${fastdldir}/addons" ]; then
-		echo -en "updating addons file structure..."
-		cp -Rf "${fastdldir}"/addons/*/* "${fastdldir}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Updating addons file structure"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Updating addons file structure"
-		fi
-		# Clear addons directory in fastdl.
-		echo -en "clearing addons dir from fastdl dir..."
-		fn_sleep_time
-		rm -rf "${fastdldir:?}/addons"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Clearing addons dir from fastdl dir"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Clearing addons dir from fastdl dir"
-		fi
-	fi
-	# Correct content that may be into a lua directory by mistake like some darkrpmodification addons.
-	if [ -d "${fastdldir}/lua" ]; then
-		echo -en "correcting DarkRP files..."
-		fn_sleep_time
-		cp -Rf "${fastdldir}/lua/"* "${fastdldir}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Correcting DarkRP files"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Correcting DarkRP files"
-		fi
-	fi
-	if [ -f "${tmpdir}/fastdl_files_to_compress.txt" ]; then
-		totalfiles=$(wc -l < "${tmpdir}/fastdl_files_to_compress.txt")
-		# Calculates total file size.
-		while read -r dufile; do
-			filesize=$(du -b "${dufile}" | awk '{ print $1 }')
-			filesizetotal=$((filesizetotal + filesize))
-		done < "${tmpdir}/fastdl_files_to_compress.txt"
-	fi
-}
-
-fn_fastdl_source() {
-	for directory in "${fastdl_directories_array[@]}"; do
-		if [ -d "${systemdir}/${directory}" ]; then
-			if [ "${directory}" == "maps" ]; then
-				local allowed_extentions_array=("*.bsp" "*.ain" "*.nav" "*.jpg" "*.txt")
-			elif [ "${directory}" == "materials" ]; then
-				local allowed_extentions_array=("*.vtf" "*.vmt" "*.vbf" "*.png" "*.svg")
-			elif [ "${directory}" == "models" ]; then
-				local allowed_extentions_array=("*.vtx" "*.vvd" "*.mdl" "*.phy" "*.jpg" "*.png")
-			elif [ "${directory}" == "particles" ]; then
-				local allowed_extentions_array=("*.pcf")
-			elif [ "${directory}" == "sound" ]; then
-				local allowed_extentions_array=("*.wav" "*.mp3" "*.ogg")
-			fi
-			for allowed_extention in "${allowed_extentions_array[@]}"; do
-				fileswc=0
-				tput sc
-				while read -r fastdlfile; do
-					((fileswc++))
-					tput rc
-					tput el
-					echo -e "copying ${directory} ${allowed_extention} : ${fileswc}..."
-					fn_sleep_time
-					# get relative path of file in the dir
-					tmprelfilepath="${fastdlfile#"${systemdir}/"}"
-					copytodir="${tmprelfilepath%/*}"
-					# create relative path for fastdl
-					if [ ! -d "${fastdldir}/${copytodir}" ]; then
-						mkdir -p "${fastdldir}/${copytodir}"
-					fi
-					cp "${fastdlfile}" "${fastdldir}/${copytodir}"
-					exitcode=$?
-					if [ "${exitcode}" != 0 ]; then
-						fn_print_fail_eol_nl
-						fn_script_log_fatal "Copying ${fastdlfile} > ${fastdldir}/${copytodir}"
-						core_exit.sh
-					else
-						fn_script_log_pass "Copying ${fastdlfile} > ${fastdldir}/${copytodir}"
-					fi
-				done < <(find "${systemdir}/${directory}" -type f -iname "${allowed_extention}")
-				if [ ${fileswc} != 0 ]; then
-					fn_print_ok_eol_nl
-				fi
-			done
-		fi
-	done
-}
-
-# Builds the fastdl directory content.
-fn_fastdl_build() {
-	# Copy all needed files for FastDL.
-	echo -e "copying files to ${fastdldir}"
-	fn_script_log_info "Copying files to ${fastdldir}"
-	if [ "${shortname}" == "gmod" ]; then
-		fn_fastdl_gmod
-		fn_fastdl_gmod_dl_enforcer
-	else
-		fn_fastdl_source
-	fi
-}
-
-# Generate lua file that will force download any file into the FastDL directory.
-fn_fastdl_gmod_dl_enforcer() {
-	# Clear old lua file.
-	if [ -f "${luafastdlfullpath}" ]; then
-		echo -en "removing existing download enforcer: ${luafastdlfile}..."
-		rm -f "${luafastdlfullpath:?}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Removing existing download enforcer ${luafastdlfullpath}"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Removing existing download enforcer ${luafastdlfullpath}"
-		fi
-	fi
-	# Generate new one if user said yes.
-	if [ "${luaresource}" == "on" ]; then
-		echo -en "creating new download enforcer: ${luafastdlfile}..."
-		touch "${luafastdlfullpath}"
-		# Read all filenames and put them into a lua file at the right path.
-		while read -r line; do
-			echo -e "resource.AddFile( \"${line}\" )" >> "${luafastdlfullpath}"
-		done < <(find "${fastdldir:?}" \( -type f ! -name "*.bz2" \) -printf '%P\n')
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Creating new download enforcer ${luafastdlfullpath}"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Creating new download enforcer ${luafastdlfullpath}"
-		fi
-	fi
-}
-
-# Compresses FastDL files using bzip2.
-fn_fastdl_bzip2() {
-	while read -r filetocompress; do
-		echo -en "\r\033[Kcompressing ${filetocompress}..."
-		bzip2 -f "${filetocompress}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_fail_eol_nl
-			fn_script_log_fatal "Compressing ${filetocompress}"
-			core_exit.sh
-		else
-			fn_script_log_pass "Compressing ${filetocompress}"
-		fi
-	done < <(find "${fastdldir:?}" \( -type f ! -name "*.bz2" \))
-	fn_print_ok_eol_nl
-}
-
-# Run functions.
-fn_fastdl_preview
-fn_clear_old_fastdl
-fn_fastdl_dirs
-fn_fastdl_build
-fn_fastdl_bzip2
-# Finished message.
-echo -e "FastDL files are located in:"
-echo -e "${fastdldir}"
-echo -e "FastDL completed"
-fn_script_log_info "FastDL completed"
-
-core_exit.sh

+ 0 - 52
lgsm/functions/command_install.sh

@@ -1,52 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_install.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Overall function for the installer.
-
-commandname="INSTALL"
-commandaction="Installing"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-if [ "$(whoami)" == "root" ] && [ ! -f /.dockerenv ]; then
-	check_deps.sh
-else
-	install_header.sh
-	install_server_dir.sh
-	install_logs.sh
-	check_deps.sh
-	installflag=1
-	# Download and install.
-	if [ "${shortname}" == "ut2k4" ]; then
-		install_server_files.sh
-		install_ut2k4_key.sh
-	elif [ -z "${appid}" ]; then
-		install_server_files.sh
-	elif [ "${appid}" ]; then
-		install_steamcmd.sh
-		install_server_files.sh
-	fi
-
-	# Configuration.
-	install_config.sh
-	if [ -v gslt ]; then
-		install_gslt.sh
-	elif [ "${shortname}" == "dst" ]; then
-		install_dst_token.sh
-	elif [ "${shortname}" == "squad" ]; then
-		install_squad_license.sh
-	elif [ "${shortname}" == "ts3" ]; then
-		install_ts3db.sh
-	elif [ "${shortname}" == "mta" ]; then
-		command_install_resources_mta.sh
-		fn_firstcommand_reset
-	fi
-
-	fix.sh
-	install_stats.sh
-	install_complete.sh
-fi
-core_exit.sh

+ 0 - 32
lgsm/functions/command_install_resources_mta.sh

@@ -1,32 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_install_resources_mta.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Installs the default resources for Multi Theft Auto.
-
-commandname="DEFAULT-RESOURCES"
-commandaction="Default Resources"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_install_resources() {
-	echo -e ""
-	echo -e "${lightyellow}Installing Default Resources${default}"
-	echo -e "================================="
-	fn_fetch_file "http://mirror.mtasa.com/mtasa/resources/mtasa-resources-latest.zip" "" "" "" "${tmpdir}" "mtasa-resources-latest.zip" "nochmodx" "norun" "noforce" "nohash"
-	fn_dl_extract "${tmpdir}" "mtasa-resources-latest.zip" "${resourcesdir}"
-	echo -e "Default Resources Installed."
-}
-
-fn_print_header
-
-if [ -z "${autoinstall}" ]; then
-	fn_print_warning_nl "Installing the default resources with existing resources may cause issues."
-	if fn_prompt_yn "Do you want to install MTA default resources?" Y; then
-		fn_install_resources
-	fi
-else
-	fn_print_warning_nl "Default resources are not installed when using ./${selfname} auto-install."
-	fn_print_information_nl "To install default resources use ./${selfname} install"
-fi

+ 0 - 135
lgsm/functions/command_mods_install.sh

@@ -1,135 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_mods_install.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: List and installs available mods along with mods_list.sh and mods_core.sh.
-
-commandname="MODS-INSTALL"
-commandaction="Installing mods"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-mods_core.sh
-
-fn_print_header
-
-# Displays a list of installed mods.
-fn_mods_installed_list
-if [ "${installedmodscount}" -gt "0" ]; then
-	echo -e "Installed addons/mods"
-	echo -e "================================="
-	# Go through all available commands, get details and display them to the user.
-	for ((llindex = 0; llindex < ${#installedmodslist[@]}; llindex++)); do
-		# Current mod is the "llindex" value of the array we're going through.
-		currentmod="${installedmodslist[llindex]}"
-		fn_mod_get_info
-		# Display mod info to the user.
-		echo -e " * ${green}${modcommand}${default}${default}"
-	done
-	echo -e ""
-fi
-
-echo -e "Available addons/mods"
-echo -e "================================="
-# Display available mods from mods_list.sh.
-# Set and reset vars
-compatiblemodslistindex=0
-# As long as we're within index values.
-while [ "${compatiblemodslistindex}" -lt "${#compatiblemodslist[@]}" ]; do
-	# Set values for convenience.
-	displayedmodname="${compatiblemodslist[compatiblemodslistindex]}"
-	displayedmodcommand="${compatiblemodslist[compatiblemodslistindex + 1]}"
-	displayedmodsite="${compatiblemodslist[compatiblemodslistindex + 2]}"
-	displayedmoddescription="${compatiblemodslist[compatiblemodslistindex + 3]}"
-	# Output mods to the user.
-	echo -e "${displayedmodname} - ${displayedmoddescription} - ${displayedmodsite}"
-	echo -e " * ${cyan}${displayedmodcommand}${default}"
-	# Increment index from the amount of values we just displayed.
-	let "compatiblemodslistindex+=4"
-	((totalmodsavailable++))
-done
-
-# If no mods are available for a specific game.
-if [ -z "${compatiblemodslist}" ]; then
-	fn_print_fail_nl "No mods are currently available for ${gamename}."
-	fn_script_log_info "No mods are currently available for ${gamename}."
-	core_exit.sh
-fi
-fn_script_log_info "${totalmodsavailable} addons/mods are available for install"
-
-## User selects a mod.
-echo -e ""
-while [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; do
-	echo -en "Enter an ${cyan}addon/mod${default} to ${green}install${default} (or exit to abort): "
-	read -r usermodselect
-	# Exit if user says exit or abort.
-	if [ "${usermodselect}" == "exit" ] || [ "${usermodselect}" == "abort" ]; then
-		core_exit.sh
-	# Supplementary output upon invalid user input.
-	elif [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; then
-		fn_print_error2_nl "${usermodselect} is not a valid addon/mod."
-	fi
-done
-# Get mod info.
-currentmod="${usermodselect}"
-fn_mod_get_info
-
-echo -e ""
-echo -e "Installing ${modprettyname}"
-echo -e "================================="
-fn_script_log_info "${modprettyname} selected for install"
-
-# Check if the mod is already installed and warn the user.
-if [ -f "${modsinstalledlistfullpath}" ]; then
-	if [ "$(sed -n "/^${modcommand}$/p" "${modsinstalledlistfullpath}")" ]; then
-		fn_print_warning_nl "${modprettyname} is already installed"
-		fn_script_log_warn "${modprettyname} is already installed"
-		echo -e " * Any configs may be overwritten."
-		if ! fn_prompt_yn "Continue?" Y; then
-			core_exit.sh
-		fi
-		fn_script_log_info "User selected to continue"
-	fi
-fi
-
-## Installation.
-# If amxmodx check if metamod exists first
-if [ "${modcommand}" == "amxmodx" ]; then
-	fn_mod_exist "metamod"
-fi
-
-if [ "${modcommand}" == "amxmodxcs" ] \
-	|| [ "${modcommand}" == "amxmodxdod" ] \
-	|| [ "${modcommand}" == "amxmodxtfc" ] \
-	|| [ "${modcommand}" == "amxmodxns" ] \
-	|| [ "${modcommand}" == "amxmodxts" ]; then
-	fn_mod_exist "amxmodx"
-fi
-
-fn_create_mods_dir
-fn_mods_clear_tmp_dir
-fn_mods_create_tmp_dir
-fn_mod_install_files
-fn_mod_lowercase
-fn_mod_create_filelist
-fn_mod_copy_destination
-fn_mod_add_list
-fn_mod_tidy_files_list
-fn_mods_clear_tmp_dir
-
-# Create/modify existing liblist.gam file for Metamod
-if [ "${modcommand}" == "metamod" ]; then
-	fn_mod_install_liblist_gam_file
-fi
-
-# Create/modify plugins.ini file for Metamod
-if [ "${modcommand}" == "amxmodx" ]; then
-	fn_mod_install_amxmodx_file
-fi
-
-echo -e "${modprettyname} installed"
-fn_script_log_pass "${modprettyname} installed."
-
-core_exit.sh

+ 0 - 153
lgsm/functions/command_mods_remove.sh

@@ -1,153 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_mods_uninstall.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Uninstall mods along with mods_list.sh and mods_core.sh.
-
-commandname="MODS-REMOVE"
-commandaction="Removing mods"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-mods_core.sh
-fn_mods_check_installed
-
-fn_print_header
-echo -e "Remove addons/mods"
-echo -e "================================="
-
-# Displays list of installed mods.
-# Generates list to display to user.
-fn_mods_installed_list
-for ((mlindex = 0; mlindex < ${#installedmodslist[@]}; mlindex++)); do
-	# Current mod is the "mlindex" value of the array we are going through.
-	currentmod="${installedmodslist[mlindex]}"
-	# Get mod info.
-	fn_mod_get_info
-	# Display mod info to the user.
-	echo -e "${red}${modcommand}${default} - ${modprettyname} - ${moddescription}"
-done
-
-echo -e ""
-# Keep prompting as long as the user input doesn't correspond to an available mod.
-while [[ ! " ${installedmodslist[@]} " =~ " ${usermodselect} " ]]; do
-	echo -en "Enter an ${cyan}addon/mod${default} to ${red}remove${default} (or exit to abort): "
-	read -r usermodselect
-	# Exit if user says exit or abort.
-	if [ "${usermodselect}" == "exit" ] || [ "${usermodselect}" == "abort" ]; then
-		core_exit.sh
-	# Supplementary output upon invalid user input.
-	elif [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; then
-		fn_print_error2_nl "${usermodselect} is not a valid addon/mod."
-	fi
-done
-
-fn_print_warning_nl "You are about to remove ${cyan}${usermodselect}${default}."
-echo -e " * Any custom files/configuration will be removed."
-if ! fn_prompt_yn "Continue?" Y; then
-	core_exit.sh
-fi
-
-currentmod="${usermodselect}"
-fn_mod_get_info
-fn_check_mod_files_list
-
-# Uninstall the mod.
-fn_script_log_info "Removing ${modsfilelistsize} files from ${modprettyname}"
-echo -e "removing ${modprettyname}"
-echo -e "* ${modsfilelistsize} files to be removed"
-echo -e "* location: ${modinstalldir}"
-fn_sleep_time
-# Go through every file and remove it.
-modfileline="1"
-tput sc
-while [ "${modfileline}" -le "${modsfilelistsize}" ]; do
-	# Current line defines current file to remove.
-	currentfileremove=$(sed "${modfileline}q;d" "${modsdir}/${modcommand}-files.txt")
-	# If file or directory exists, then remove it.
-
-	if [ -f "${modinstalldir}/${currentfileremove}" ] || [ -d "${modinstalldir}/${currentfileremove}" ]; then
-		rm -rf "${modinstalldir:?}/${currentfileremove:?}"
-		((exitcode = $?))
-		if [ "${exitcode}" != 0 ]; then
-			fn_script_log_fatal "Removing ${modinstalldir}/${currentfileremove}"
-			break
-		else
-			fn_script_log_pass "Removing ${modinstalldir}/${currentfileremove}"
-		fi
-	fi
-	tput rc
-	tput el
-	echo -e "removing ${modprettyname} ${modfileline} / ${modsfilelistsize} : ${currentfileremove}..."
-	((modfileline++))
-done
-
-# Added logic not to fail since removing game specific mods (amxmodxcs) removes files that will
-# not be found when removing the base (amxmodx) mod
-if [ "${modcommand}" != "amxmodx" ]; then
-	if [ "${exitcode}" != 0 ]; then
-		fn_print_fail_eol_nl
-		core_exit.sh
-	else
-		fn_print_ok_eol_nl
-	fi
-else
-	fn_print_ok_eol_nl
-fi
-
-# Remove file list.
-echo -en "removing ${modcommand}-files.txt..."
-fn_sleep_time
-rm -rf "${modsdir:?}/${modcommand}-files.txt"
-exitcode=$?
-if [ "${exitcode}" != 0 ]; then
-	fn_script_log_fatal "Removing ${modsdir}/${modcommand}-files.txt"
-	fn_print_fail_eol_nl
-	core_exit.sh
-else
-	fn_script_log_pass "Removing ${modsdir}/${modcommand}-files.txt"
-	fn_print_ok_eol_nl
-fi
-
-# Remove mods from installed mods list.
-echo -en "removing ${modcommand} from ${modsinstalledlist}..."
-fn_sleep_time
-
-sed -i "/^${modcommand}$/d" "${modsinstalledlistfullpath}"
-exitcode=$?
-if [ "${exitcode}" != 0 ]; then
-	fn_script_log_fatal "Removing ${modcommand} from ${modsinstalledlist}"
-	fn_print_fail_eol_nl
-	core_exit.sh
-else
-	fn_script_log_pass "Removing ${modcommand} from ${modsinstalledlist}"
-	fn_print_ok_eol_nl
-fi
-
-# Oxide fix
-# Oxide replaces server files, so a validate is required after uninstall.
-if [ "${engine}" == "unity3d" ] && [[ "${modprettyname}" == *"Oxide"* ]]; then
-	fn_print_information_nl "Validating to restore original ${gamename} files replaced by Oxide"
-	fn_script_log "Validating to restore original ${gamename} files replaced by Oxide"
-	exitbypass="1"
-	command_validate.sh
-	fn_firstcommand_reset
-	unset exitbypass
-fi
-
-# Remove/modify existing liblist.gam file for Metamod
-if [ "${modcommand}" == "metamod" ]; then
-	fn_mod_remove_liblist_gam_file
-fi
-
-# Remove/modify plugins.ini file for AMX Mod X
-if [ "${modcommand}" == "amxmodx" ]; then
-	fn_mod_remove_amxmodx_file
-fi
-
-echo -e "${modprettyname} removed"
-fn_script_log "${modprettyname} removed"
-
-core_exit.sh

+ 0 - 109
lgsm/functions/command_mods_update.sh

@@ -1,109 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_mods_update.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Updates installed mods along with mods_list.sh and mods_core.sh.
-
-commandname="MODS-UPDATE"
-commandaction="Updating mods"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-mods_core.sh
-
-# Prevents specific files being overwritten upon update (set by ${modkeepfiles}).
-# For that matter, remove cfg files after extraction before copying them to destination.
-fn_remove_cfg_files() {
-	if [ "${modkeepfiles}" != "OVERWRITE" ] && [ "${modkeepfiles}" != "NOUPDATE" ]; then
-		echo -e "the following files/directories will be preserved:"
-		fn_sleep_time
-		# Count how many files there are to remove.
-		filestopreserve=$(echo -e "${modkeepfiles}" | awk -F ';' '{ print NF }')
-		# Test all subvalues of "modkeepfiles" using the ";" separator.
-		for ((preservefilesindex = 1; preservefilesindex < filestopreserve; preservefilesindex++)); do
-			# Put the current file we are looking for into a variable.
-			filetopreserve=$(echo -e "${modkeepfiles}" | awk -F ';' -v x=${preservefilesindex} '{ print $x }')
-			echo -e "	* serverfiles/${filetopreserve}"
-			# If it matches an existing file that have been extracted delete the file.
-			if [ -f "${extractdest}/${filetopreserve}" ] || [ -d "${extractdest}/${filetopreserve}" ]; then
-				rm -r "${extractdest:?}/${filetopreserve}"
-				# Write the file path in a tmp file, to rebuild a full file list as it is rebuilt upon update.
-				if [ ! -f "${modsdir}/.removedfiles.tmp" ]; then
-					touch "${modsdir}/.removedfiles.tmp"
-				fi
-				echo -e "${filetopreserve}" >> "${modsdir}/.removedfiles.tmp"
-			fi
-		done
-	fi
-}
-
-fn_print_dots "Update addons/mods"
-fn_mods_check_installed
-fn_print_info_nl "Update addons/mods: ${installedmodscount} addons/mods will be updated"
-fn_script_log_info "${installedmodscount} mods or addons will be updated"
-fn_mods_installed_list
-# Go through all available commands, get details and display them to the user.
-for ((ulindex = 0; ulindex < ${#installedmodslist[@]}; ulindex++)); do
-	# Current mod is the "ulindex" value of the array we're going through.
-	currentmod="${installedmodslist[ulindex]}"
-	fn_mod_get_info
-	# Display installed mods and the update policy.
-	if [ -z "${modkeepfiles}" ]; then
-		# If modkeepfiles is not set for some reason, that's a problem.
-		fn_script_log_error "Could not find update policy for ${modprettyname}"
-		fn_print_error_nl "Could not find update policy for ${modprettyname}"
-		exitcode="1"
-		core_exit.sh
-	# If the mod won't get updated.
-	elif [ "${modkeepfiles}" == "NOUPDATE" ]; then
-		echo -e "	* ${red}{modprettyname}${default} (won't be updated)"
-	# If the mode is just overwritten.
-	elif [ "${modkeepfiles}" == "OVERWRITE" ]; then
-		echo -e "	* ${modprettyname} (overwrite)"
-	else
-		echo -e "	* ${yellow}${modprettyname}${default} (retain common custom files)"
-	fi
-done
-
-## Update
-# List all installed mods and apply update.
-# Reset line value.
-installedmodsline="1"
-while [ "${installedmodsline}" -le "${installedmodscount}" ]; do
-	currentmod=$(sed "${installedmodsline}q;d" "${modsinstalledlistfullpath}")
-	if [ "${currentmod}" ]; then
-		fn_mod_get_info
-		# Don not update mod if the policy is set to "NOUPDATE".
-		if [ "${modkeepfiles}" == "NOUPDATE" ]; then
-			fn_print_info "${modprettyname} will not be updated to preserve custom files"
-			fn_script_log_info "${modprettyname} will not be updated to preserve custom files"
-		else
-			echo -e ""
-			echo -e "==> Updating ${modprettyname}"
-			fn_create_mods_dir
-			fn_mods_clear_tmp_dir
-			fn_mods_create_tmp_dir
-			fn_mod_install_files
-			fn_mod_lowercase
-			fn_remove_cfg_files
-			fn_mod_create_filelist
-			fn_mod_copy_destination
-			fn_mod_add_list
-			fn_mod_tidy_files_list
-			fn_mods_clear_tmp_dir
-		fi
-		((installedmodsline++))
-	else
-		fn_print_fail "No mod was selected"
-		fn_script_log_fatal "No mod was selected"
-		exitcode="1"
-		core_exit.sh
-	fi
-done
-echo -e ""
-fn_print_ok_nl "Mods update complete"
-fn_script_log_info "Mods update complete"
-
-core_exit.sh

+ 0 - 245
lgsm/functions/command_monitor.sh

@@ -1,245 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_monitor.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Monitors server by checking for running processes
-# then passes to gamedig and gsquery.
-
-commandname="MONITOR"
-commandaction="Monitoring"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_monitor_check_lockfile() {
-	# Monitor does not run it lockfile is not found.
-	if [ ! -f "${lockdir}/${selfname}.lock" ]; then
-		fn_print_dots "Checking lockfile: "
-		fn_print_checking_eol
-		fn_script_log_info "Checking lockfile: CHECKING"
-		fn_print_error "Checking lockfile: No lockfile found: "
-		fn_print_error_eol_nl
-		fn_script_log_error "Checking lockfile: No lockfile found: ERROR"
-		echo -e "* Start ${selfname} to run monitor."
-		core_exit.sh
-	fi
-
-	# Fix if lockfile is not unix time or contains letters
-	if [ -f "${lockdir}/${selfname}.lock" ] && [[ "$(head -n 1 "${lockdir}/${selfname}.lock")" =~ [A-Za-z] ]]; then
-		date '+%s' > "${lockdir}/${selfname}.lock"
-		echo "${version}" >> "${lockdir}/${selfname}.lock"
-		echo "${port}" >> "${lockdir}/${selfname}.lock"
-	fi
-}
-
-fn_monitor_check_update() {
-	# Monitor will check if update is already running.
-	if [ "$(pgrep "${selfname} update" | wc -l)" != "0" ]; then
-		fn_print_dots "Checking active updates: "
-		fn_print_checking_eol
-		fn_script_log_info "Checking active updates: CHECKING"
-		fn_print_error_nl "Checking active updates: SteamCMD is currently checking for updates: "
-		fn_print_error_eol
-		fn_script_log_error "Checking active updates: SteamCMD is currently checking for updates: ERROR"
-		core_exit.sh
-	fi
-}
-
-fn_monitor_check_session() {
-	fn_print_dots "Checking session: "
-	fn_print_checking_eol
-	fn_script_log_info "Checking session: CHECKING"
-	# uses status var from check_status.sh
-	if [ "${status}" != "0" ]; then
-		fn_print_ok "Checking session: "
-		fn_print_ok_eol_nl
-		fn_script_log_pass "Checking session: OK"
-	else
-		fn_print_error "Checking session: "
-		fn_print_fail_eol_nl
-		fn_script_log_fatal "Checking session: FAIL"
-		alert="restart"
-		alert.sh
-		fn_script_log_info "Checking session: Monitor is restarting ${selfname}"
-		command_restart.sh
-		core_exit.sh
-	fi
-}
-
-fn_monitor_check_queryport() {
-	# Monitor will check queryport is set before continuing.
-	if [ -z "${queryport}" ] || [ "${queryport}" == "0" ]; then
-		fn_print_dots "Checking port: "
-		fn_print_checking_eol
-		fn_script_log_info "Checking port: CHECKING"
-		if [ -n "${rconenabled}" ] && [ "${rconenabled}" != "true" ] && [ "${shortname}" == "av" ]; then
-			fn_print_warn "Checking port: Unable to query, rcon is not enabled"
-			fn_script_log_warn "Checking port: Unable to query, rcon is not enabled"
-		else
-			fn_print_error "Checking port: Unable to query, queryport is not set"
-			fn_script_log_error "Checking port: Unable to query, queryport is not set"
-		fi
-		core_exit.sh
-	fi
-}
-
-fn_query_gsquery() {
-	if [ ! -f "${functionsdir}/query_gsquery.py" ]; then
-		fn_fetch_file_github "lgsm/functions" "query_gsquery.py" "${functionsdir}" "chmodx" "norun" "noforce" "nohash"
-	fi
-	"${functionsdir}"/query_gsquery.py -a "${queryip}" -p "${queryport}" -e "${querytype}" > /dev/null 2>&1
-	querystatus="$?"
-}
-
-fn_query_tcp() {
-	bash -c 'exec 3<> /dev/tcp/'${queryip}'/'${queryport}'' > /dev/null 2>&1
-	querystatus="$?"
-}
-
-fn_monitor_query() {
-	# Will loop and query up to 5 times every 15 seconds.
-	# Query will wait up to 60 seconds to confirm server is down as server can become non-responsive during map changes.
-	totalseconds=0
-	for queryattempt in {1..5}; do
-		for queryip in "${queryips[@]}"; do
-			fn_print_dots "Querying port: ${querymethod}: ${queryip}:${queryport} : ${totalseconds}/${queryattempt}: "
-			fn_print_querying_eol
-			fn_script_log_info "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : QUERYING"
-			# querydelay
-			if [ "$(head -n 1 "${lockdir}/${selfname}.lock")" -gt "$(date "+%s" -d "${querydelay} mins ago")" ]; then
-				fn_print_ok "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: "
-				fn_print_delay_eol_nl
-				fn_script_log_info "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt} : DELAY"
-				fn_script_log_info "Query bypassed: ${gameservername} started less than ${querydelay} minutes ago"
-				fn_script_log_info "Server started: $(date -d @$(head -n 1 "${lockdir}/${selfname}.lock"))"
-				fn_script_log_info "Current time: $(date)"
-				monitorpass=1
-				core_exit.sh
-			# will use query method selected in fn_monitor_loop
-			# gamedig
-			elif [ "${querymethod}" == "gamedig" ]; then
-				query_gamedig.sh
-			# gsquery
-			elif [ "${querymethod}" == "gsquery" ]; then
-				fn_query_gsquery
-			#tcp query
-			elif [ "${querymethod}" == "tcp" ]; then
-				fn_query_tcp
-			fi
-
-			if [ "${querystatus}" == "0" ]; then
-				# Server query OK.
-				fn_print_ok "Querying port: ${querymethod}: ${queryip}:${queryport} : ${totalseconds}/${queryattempt}: "
-				fn_print_ok_eol_nl
-				fn_script_log_pass "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : OK"
-				monitorpass=1
-				if [ "${querystatus}" == "0" ]; then
-					# Add query data to log.
-					if [ "${gdname}" ]; then
-						fn_script_log_info "Server name: ${gdname}"
-					fi
-					if [ "${gdplayers}" ]; then
-						fn_script_log_info "Players: ${gdplayers}/${gdmaxplayers}"
-					fi
-					if [ "${gdbots}" ]; then
-						fn_script_log_info "Bots: ${gdbots}"
-					fi
-					if [ "${gdmap}" ]; then
-						fn_script_log_info "Map: ${gdmap}"
-					fi
-					if [ "${gdgamemode}" ]; then
-						fn_script_log_info "Game Mode: ${gdgamemode}"
-					fi
-
-					# send LinuxGSM stats if monitor is OK.
-					if [ "${stats}" == "on" ] || [ "${stats}" == "y" ]; then
-						info_stats.sh
-					fi
-				fi
-				core_exit.sh
-			else
-				# Server query FAIL.
-				fn_print_fail "Querying port: ${querymethod}: ${queryip}:${queryport} : ${totalseconds}/${queryattempt}: "
-				fn_print_fail_eol
-				fn_script_log_warn "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : FAIL"
-				# Monitor will try gamedig (if supported) for first 30s then gsquery before restarting.
-				# gsquery will fail if longer than 60s
-				if [ "${totalseconds}" -ge "59" ]; then
-					# Monitor will FAIL if over 60s and trigger gane server reboot.
-					fn_print_fail "Querying port: ${querymethod}: ${queryip}:${queryport} : ${totalseconds}/${queryattempt}: "
-					fn_print_fail_eol_nl
-					fn_script_log_warn "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : FAIL"
-					# Send alert if enabled.
-					alert="restartquery"
-					alert.sh
-					command_restart.sh
-					fn_firstcommand_reset
-					core_exit.sh
-				fi
-			fi
-		done
-		# Second counter will wait for 15s before breaking loop.
-		for seconds in {1..15}; do
-			fn_print_fail "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt} : ${cyan}WAIT${default}"
-			sleep 0.5
-			totalseconds=$((totalseconds + 1))
-			if [ "${seconds}" == "15" ]; then
-				break
-			fi
-		done
-	done
-}
-
-fn_monitor_loop() {
-	# loop though query methods selected by querymode.
-	totalseconds=0
-	if [ "${querymode}" == "2" ]; then
-		local query_methods_array=(gamedig gsquery)
-	elif [ "${querymode}" == "3" ]; then
-		local query_methods_array=(gamedig)
-	elif [ "${querymode}" == "4" ]; then
-		local query_methods_array=(gsquery)
-	elif [ "${querymode}" == "5" ]; then
-		local query_methods_array=(tcp)
-	fi
-	for querymethod in "${query_methods_array[@]}"; do
-		# Will check if gamedig is installed and bypass if not.
-		if [ "${querymethod}" == "gamedig" ]; then
-			if [ "$(command -v gamedig 2> /dev/null)" ] && [ "$(command -v jq 2> /dev/null)" ]; then
-				if [ -z "${monitorpass}" ]; then
-					fn_monitor_query
-				fi
-			else
-				fn_script_log_info "gamedig is not installed"
-				fn_script_log_info "https://docs.linuxgsm.com/requirements/gamedig"
-			fi
-		else
-			# will not query if query already passed.
-			if [ -z "${monitorpass}" ]; then
-				fn_monitor_query
-			fi
-		fi
-	done
-}
-
-monitorflag=1
-check.sh
-core_logs.sh
-info_game.sh
-
-# query pre-checks
-fn_monitor_check_lockfile
-fn_monitor_check_update
-fn_monitor_check_session
-# Monitor will not continue if session only check.
-if [ "${querymode}" != "1" ]; then
-	fn_monitor_check_queryport
-
-	# Add a querydelay of 1 min if var missing.
-	if [ -z "${querydelay}" ]; then
-		querydelay="1"
-	fi
-
-	fn_monitor_loop
-fi
-core_exit.sh

+ 0 - 78
lgsm/functions/command_postdetails.sh

@@ -1,78 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_postdetails.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Strips sensitive information out of Details output.
-
-commandname="POST-DETAILS"
-commandaction="Posting details"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-posttarget="https://termbin.com"
-
-# source all of the functions defined in the details command.
-info_messages.sh
-
-fn_bad_postdetailslog() {
-	fn_print_fail_nl "Unable to create temporary file ${postdetailslog}."
-	core_exit.sh
-}
-
-# Remove any existing postdetails.log file.
-if [ -f "${postdetailslog}" ]; then
-	rm -f "${postdetailslog:?}"
-fi
-
-# Rather than a one-pass sed parser, default to using a temporary directory.
-if [ "${exitbypass}" ]; then
-	postdetailslog="${alertlog}"
-else
-	# Run checks and gathers details to display.
-	check.sh
-	info_game.sh
-	info_distro.sh
-	info_messages.sh
-	for queryip in "${queryips[@]}"; do
-		query_gamedig.sh
-		if [ "${querystatus}" == "0" ]; then
-			break
-		fi
-	done
-	touch "${postdetailslog}" || fn_bad_postdetailslog
-	{
-		fn_info_message_distro
-		fn_info_message_server_resource
-		fn_info_message_gameserver_resource
-		fn_info_message_gameserver
-		fn_info_message_script
-		fn_info_message_backup
-		# Some game servers do not have parms.
-		if [ "${shortname}" != "jc2" ] && [ "${shortname}" != "jc3" ] && [ "${shortname}" != "dst" ] && [ "${shortname}" != "pz" ] && [ "${engine}" != "renderware" ]; then
-			fn_info_message_commandlineparms
-		fi
-		fn_info_message_ports_edit
-		fn_info_message_ports
-		fn_info_message_select_engine
-		fn_info_message_statusbottom
-	} | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | tee -a "${postdetailslog}" > /dev/null 2>&1
-fi
-
-fn_print_dots "termbin.com"
-link=$(cat "${postdetailslog}" | nc termbin.com 9999 | tr -d '\n\0')
-fn_print_ok_nl "termbin.com for 30D"
-fn_script_log_pass "termbin.com for 30D"
-pdurl="${link}"
-
-if [ "${firstcommandname}" == "POST-DETAILS" ]; then
-	echo -e ""
-	echo -e "Please share the following url for support: "
-	echo -e "${pdurl}"
-fi
-fn_script_log_info "${pdurl}"
-alerturl="${pdurl}"
-
-if [ -z "${exitbypass}" ]; then
-	core_exit.sh
-fi

+ 0 - 18
lgsm/functions/command_restart.sh

@@ -1,18 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_restart.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Restarts the server.
-
-commandname="MODS-INSTALL"
-commandaction="Restarting"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-info_game.sh
-exitbypass=1
-command_stop.sh
-command_start.sh
-fn_firstcommand_reset
-core_exit.sh

+ 0 - 41
lgsm/functions/command_send.sh

@@ -1,41 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_send.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Send command to the server tmux console.
-
-commandname="SEND"
-commandaction="Send"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-if [ -z "${userinput2}" ]; then
-	fn_print_header
-	fn_print_information_nl "Send a command to the console."
-fi
-
-check_status.sh
-if [ "${status}" != "0" ]; then
-	if [ -n "${userinput2}" ]; then
-		commandtosend="${userinput2}"
-	else
-		echo ""
-		commandtosend=$(fn_prompt_message "send: ")
-	fi
-	echo ""
-	fn_print_dots "Sending command to console: \"${commandtosend}\""
-	tmux -L "${sessionname}" send-keys -t "${servicename}" "${commandtosend}" ENTER
-	fn_print_ok_nl "Sending command to console: \"${commandtosend}\""
-	fn_script_log_pass "Command \"${commandtosend}\" sent to console"
-else
-	fn_print_error_nl "Server not running"
-	fn_script_log_error "Failed to access: Server not running"
-	if fn_prompt_yn "Do you want to start the server?" Y; then
-		exitbypass=1
-		command_start.sh
-	fi
-fi
-
-core_exit.sh

+ 0 - 23
lgsm/functions/command_skeleton.sh

@@ -1,23 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_skeleton.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Creates an copy of a game servers directorys.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_print_dots "Creating skeleton directory"
-check.sh
-
-# Find all directorys and create them in the skel directory
-find "${rootdir}" -type d -not \( -path ./skel -prune \) | cpio -pdvm skel 2> /dev/null
-exitcode=$?
-if [ "${exitcode}" != 0 ]; then
-	fn_print_fail_nl "Creating skeleton directory"
-	fn_script_log_fatal "Creating skeleton directory"
-else
-	fn_print_ok_nl "Creating skeleton directory: ./skel"
-	fn_script_log_pass "Creating skeleton directory: ./skel"
-fi
-core_exit.sh

+ 0 - 224
lgsm/functions/command_start.sh

@@ -1,224 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_start.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Starts the server.
-
-commandname="START"
-commandaction="Starting"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-addtimestamp="gawk '{ print strftime(\\\"[$logtimestampformat]\\\"), \\\$0 }'"
-fn_firstcommand_set
-
-fn_start_teamspeak3() {
-	if [ ! -f "${servercfgfullpath}" ]; then
-		fn_print_warn_nl "${servercfgfullpath} is missing"
-		fn_script_log_warn "${servercfgfullpath} is missing"
-		echo "	* Creating blank ${servercfg}"
-		fn_script_log_info "Creating blank ${servercfg}"
-		fn_sleep_time
-		echo "	* ${servercfg} can remain blank by default."
-		fn_script_log_info "${servercfgfullpath} can remain blank by default."
-		fn_sleep_time
-		echo "	* ${servercfg} is located in ${servercfgfullpath}."
-		fn_script_log_info "${servercfg} is located in ${servercfgfullpath}."
-		sleep 5
-		touch "${servercfgfullpath}"
-	fi
-	# Accept license.
-	if [ ! -f "${executabledir}/.ts3server_license_accepted" ]; then
-		install_eula.sh
-	fi
-	fn_start_tmux
-}
-
-# This will allow the Jedi Knight 2 version to be printed in console on start.
-# Used to allow update to detect JK2MV server version.
-fn_start_jk2() {
-	fn_start_tmux
-	tmux -L "${sessionname}" send -t "${sessionname}" version ENTER > /dev/null 2>&1
-}
-
-fn_start_tmux() {
-	if [ "${parmsbypass}" ]; then
-		startparameters=""
-	fi
-	# check for tmux size variables.
-	if [[ "${servercfgtmuxwidth}" =~ ^[0-9]+$ ]]; then
-		sessionwidth="${servercfgtmuxwidth}"
-	else
-		sessionwidth="80"
-	fi
-	if [[ "${servercfgtmuxheight}" =~ ^[0-9]+$ ]]; then
-		sessionheight="${servercfgtmuxheight}"
-	else
-		sessionheight="23"
-	fi
-
-	# Log rotation.
-	fn_script_log_info "Rotating log files"
-	if [ "${engine}" == "unreal2" ] && [ -f "${gamelog}" ]; then
-		mv "${gamelog}" "${gamelogdate}"
-	fi
-	if [ -f "${lgsmlog}" ]; then
-		mv "${lgsmlog}" "${lgsmlogdate}"
-	fi
-	if [ -f "${consolelog}" ]; then
-		mv "${consolelog}" "${consolelogdate}"
-	fi
-
-	# Create lockfile
-	date '+%s' > "${lockdir}/${selfname}.lock"
-	echo "${version}" >> "${lockdir}/${selfname}.lock"
-	echo "${port}" >> "${lockdir}/${selfname}.lock"
-	fn_reload_startparameters
-
-	if [ "${shortname}" == "av" ]; then
-		cd "${systemdir}" || exit
-	else
-		cd "${executabledir}" || exit
-	fi
-
-	tmux -L "${sessionname}" new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${preexecutable} ${executable} ${startparameters}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp"
-
-	# Create logfile.
-	touch "${consolelog}"
-
-	# Create last start lock file
-	date +%s > "${lockdir}/${selfname}-laststart.lock"
-
-	# tmux compiled from source will return "master", therefore ignore it.
-	if [ "${tmuxv}" == "master" ]; then
-		fn_script_log "tmux version: master (user compiled)"
-		echo -e "tmux version: master (user compiled)" >> "${consolelog}"
-		if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
-			if [ "$logtimestamp" == "on" ]; then
-				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
-			else
-				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
-			fi
-		fi
-
-	elif [ -n "${tmuxv}" ]; then
-		# tmux pipe-pane not supported in tmux versions < 1.6.
-		if [ "${tmuxvdigit}" -lt "16" ]; then
-			echo -e "Console logging disabled: tmux => 1.6 required
-			https://linuxgsm.com/tmux-upgrade
-			Currently installed: $(tmux -V)" > "${consolelog}"
-
-		# Console logging disabled: Bug in tmux 1.8 breaks logging.
-		elif [ "${tmuxvdigit}" -eq "18" ]; then
-			echo -e "Console logging disabled: Bug in tmux 1.8 breaks logging
-			https://linuxgsm.com/tmux-upgrade
-			Currently installed: $(tmux -V)" > "${consolelog}"
-		# Console logging enable or not set.
-		elif [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
-			if [ "$logtimestamp" == "on" ]; then
-				tmux pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
-			else
-				tmux pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
-			fi
-		fi
-	else
-		echo -e "Unable to detect tmux version" >> "${consolelog}"
-		fn_script_log_warn "Unable to detect tmux version"
-	fi
-
-	# Console logging disabled.
-	if [ "${consolelogging}" == "off" ]; then
-		echo -e "Console logging disabled by user" >> "${consolelog}"
-		fn_script_log_info "Console logging disabled by user"
-	fi
-	fn_sleep_time
-
-	# If the server fails to start.
-	check_status.sh
-	if [ "${status}" == "0" ]; then
-		fn_print_fail_nl "Unable to start ${servername}"
-		fn_script_log_fatal "Unable to start ${servername}"
-		if [ -s "${lgsmlogdir}/.${selfname}-tmux-error.tmp" ]; then
-			fn_print_fail_nl "Unable to start ${servername}: tmux error:"
-			fn_script_log_fatal "Unable to start ${servername}: tmux error:"
-			echo -e ""
-			echo -e "Command"
-			echo -e "================================="
-			echo -e "tmux -L \"${sessionname}\" new-session -d -s \"${sessionname}\" \"${preexecutable} ${executable} ${startparameters}\"" | tee -a "${lgsmlog}"
-			echo -e ""
-			echo -e "Error"
-			echo -e "================================="
-			tee -a "${lgsmlog}" < "${lgsmlogdir}/.${selfname}-tmux-error.tmp"
-
-			# Detected error https://linuxgsm.com/support
-			if grep -c "Operation not permitted" "${lgsmlogdir}/.${selfname}-tmux-error.tmp"; then
-				echo -e ""
-				echo -e "Fix"
-				echo -e "================================="
-				if ! grep "tty:" /etc/group | grep "$(whoami)"; then
-					echo -e "$(whoami) is not part of the tty group."
-					fn_script_log_info "$(whoami) is not part of the tty group."
-					group=$(grep tty /etc/group)
-					echo -e ""
-					echo -e "	${group}"
-					fn_script_log_info "${group}"
-					echo -e ""
-					echo -e "Run the following command with root privileges."
-					echo -e ""
-					echo -e "	usermod -G tty $(whoami)"
-					echo -e ""
-					echo -e "https://linuxgsm.com/tmux-op-perm"
-					fn_script_log_info "https://linuxgsm.com/tmux-op-perm"
-				else
-					echo -e "No known fix currently. Please log an issue."
-					fn_script_log_info "No known fix currently. Please log an issue."
-					echo -e "https://linuxgsm.com/support"
-					fn_script_log_info "https://linuxgsm.com/support"
-				fi
-			fi
-		fi
-		core_exit.sh
-	else
-		fn_print_ok "${servername}"
-		fn_script_log_pass "Started ${servername}"
-	fi
-	rm -f "${lgsmlogdir:?}/.${selfname}-tmux-error.tmp" 2> /dev/null
-	echo -en "\n"
-}
-
-check.sh
-
-# Is the server already started.
-# $status comes from check_status.sh, which is run by check.sh for this command
-if [ "${status}" != "0" ]; then
-	fn_print_dots "${servername}"
-	fn_print_info_nl "${servername} is already running"
-	fn_script_log_error "${servername} is already running"
-	if [ -z "${exitbypass}" ]; then
-		core_exit.sh
-	fi
-fi
-if [ -z "${fixbypass}" ]; then
-	fix.sh
-fi
-info_game.sh
-core_logs.sh
-
-# Will check for updates is updateonstart is yes.
-if [ "${updateonstart}" == "yes" ] || [ "${updateonstart}" == "1" ] || [ "${updateonstart}" == "on" ]; then
-	exitbypass=1
-	unset updateonstart
-	command_update.sh
-	fn_firstcommand_reset
-fi
-
-fn_print_dots "${servername}"
-
-if [ "${shortname}" == "ts3" ]; then
-	fn_start_teamspeak3
-elif [ "${shortname}" == "jk2" ]; then
-	fn_start_jk2
-else
-	fn_start_tmux
-fi
-
-core_exit.sh

+ 0 - 283
lgsm/functions/command_stop.sh

@@ -1,283 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_stop.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Stops the server.
-
-commandname="STOP"
-commandaction="Stopping"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-# Attempts graceful shutdown by sending 'CTRL+c'.
-fn_stop_graceful_ctrlc() {
-	fn_print_dots "Graceful: CTRL+c"
-	fn_script_log_info "Graceful: CTRL+c"
-	# Sends quit.
-	tmux -L "${sessionname}" send-keys -t "${sessionname}" C-c > /dev/null 2>&1
-	# Waits up to 30 seconds giving the server time to shutdown gracefuly.
-	for seconds in {1..30}; do
-		check_status.sh
-		if [ "${status}" == "0" ]; then
-			fn_print_ok "Graceful: CTRL+c: ${seconds}: "
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Graceful: CTRL+c: OK: ${seconds} seconds"
-			break
-		fi
-		sleep 1
-		fn_print_dots "Graceful: CTRL+c: ${seconds}"
-	done
-	check_status.sh
-	if [ "${status}" != "0" ]; then
-		fn_print_error "Graceful: CTRL+c: "
-		fn_print_fail_eol_nl
-		fn_script_log_error "Graceful: CTRL+c: FAIL"
-	fi
-}
-
-# Attempts graceful shutdown by sending a specified command.
-# Usage: fn_stop_graceful_cmd "console_command" "timeout_in_seconds"
-# e.g.: fn_stop_graceful_cmd "quit" "30"
-fn_stop_graceful_cmd() {
-	fn_print_dots "Graceful: sending \"${1}\""
-	fn_script_log_info "Graceful: sending \"${1}\""
-	# Sends specific stop command.
-	tmux -L "${sessionname}" send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1
-	# Waits up to ${seconds} seconds giving the server time to shutdown gracefully.
-	for ((seconds = 1; seconds <= ${2}; seconds++)); do
-		check_status.sh
-		if [ "${status}" == "0" ]; then
-			fn_print_ok "Graceful: sending \"${1}\": ${seconds}: "
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Graceful: sending \"${1}\": OK: ${seconds} seconds"
-			break
-		fi
-		sleep 1
-		fn_print_dots "Graceful: sending \"${1}\": ${seconds}"
-	done
-	check_status.sh
-	if [ "${status}" != "0" ]; then
-		fn_print_error "Graceful: sending \"${1}\": "
-		fn_print_fail_eol_nl
-		fn_script_log_error "Graceful: sending \"${1}\": FAIL"
-	fi
-}
-
-# Attempts graceful shutdown of goldsrc using rcon 'quit' command.
-# There is only a 3 second delay before a forced a tmux shutdown
-# as GoldSrc servers 'quit' command does a restart rather than shutdown.
-fn_stop_graceful_goldsrc() {
-	fn_print_dots "Graceful: sending \"quit\""
-	fn_script_log_info "Graceful: sending \"quit\""
-	# sends quit
-	tmux -L "${sessionname}" send -t "${sessionname}" quit ENTER > /dev/null 2>&1
-	# Waits 3 seconds as goldsrc servers restart with the quit command.
-	for seconds in {1..3}; do
-		sleep 1
-		fn_print_dots "Graceful: sending \"quit\": ${seconds}"
-	done
-	fn_print_ok "Graceful: sending \"quit\": ${seconds}: "
-	fn_print_ok_eol_nl
-	fn_script_log_pass "Graceful: sending \"quit\": OK: ${seconds} seconds"
-}
-
-# telnet command for sdtd graceful shutdown.
-fn_stop_graceful_sdtd_telnet() {
-	if [ -z "${telnetpass}" ] || [ "${telnetpass}" == "NOT SET" ]; then
-		sdtd_telnet_shutdown=$(expect -c '
-		proc abort {} {
-			puts "Timeout or EOF\n"
-			exit 1
-		}
-		spawn telnet '"${telnetip}"' '"${telnetport}"'
-		expect {
-			"session."  { send "shutdown\r" }
-			default         abort
-		}
-		expect { eof }
-		puts "Completed.\n"
-		')
-	else
-		sdtd_telnet_shutdown=$(expect -c '
-		proc abort {} {
-			puts "Timeout or EOF\n"
-			exit 1
-		}
-		spawn telnet '"${telnetip}"' '"${telnetport}"'
-		expect {
-			"password:"     { send "'"${telnetpass}"'\r" }
-			default         abort
-		}
-		expect {
-			"session."  { send "shutdown\r" }
-			default         abort
-		}
-		expect { eof }
-		puts "Completed.\n"
-		')
-	fi
-}
-
-# Attempts graceful shutdown of 7 Days To Die using telnet.
-fn_stop_graceful_sdtd() {
-	fn_print_dots "Graceful: telnet"
-	fn_script_log_info "Graceful: telnet"
-	if [ "${telnetenabled}" == "false" ]; then
-		fn_print_info_nl "Graceful: telnet: DISABLED: Enable in ${servercfg}"
-	elif [ "$(command -v expect 2> /dev/null)" ]; then
-		# Tries to shutdown with both localhost and server IP.
-		for telnetip in 127.0.0.1 ${ip}; do
-			fn_print_dots "Graceful: telnet: ${telnetip}:${telnetport}"
-			fn_script_log_info "Graceful: telnet: ${telnetip}:${telnetport}"
-			fn_stop_graceful_sdtd_telnet
-			completed=$(echo -en "\n ${sdtd_telnet_shutdown}" | grep "Completed.")
-			refused=$(echo -en "\n ${sdtd_telnet_shutdown}" | grep "Timeout or EOF")
-			if [ "${refused}" ]; then
-				fn_print_error "Graceful: telnet: ${telnetip}:${telnetport} : "
-				fn_print_fail_eol_nl
-				fn_script_log_error "Graceful: telnet:  ${telnetip}:${telnetport} : FAIL"
-			elif [ "${completed}" ]; then
-				break
-			fi
-		done
-
-		# If telnet shutdown was successful will use telnet again to check
-		# the connection has closed, confirming that the tmux session can now be killed.
-		if [ "${completed}" ]; then
-			for seconds in {1..30}; do
-				fn_stop_graceful_sdtd_telnet
-				refused=$(echo -en "\n ${sdtd_telnet_shutdown}" | grep "Timeout or EOF")
-				if [ "${refused}" ]; then
-					fn_print_ok "Graceful: telnet: ${telnetip}:${telnetport} : "
-					fn_print_ok_eol_nl
-					fn_script_log_pass "Graceful: telnet: ${telnetip}:${telnetport} : ${seconds} seconds"
-					break
-				fi
-				sleep 1
-				fn_print_dots "Graceful: telnet: ${seconds}"
-			done
-		# If telnet shutdown fails tmux shutdown will be used, this risks loss of world save.
-		else
-			if [ "${refused}" ]; then
-				fn_print_error "Graceful: telnet: "
-				fn_print_fail_eol_nl
-				fn_script_log_error "Graceful: telnet: ${telnetip}:${telnetport} : FAIL"
-			else
-				fn_print_error_nl "Graceful: telnet: Unknown error"
-				fn_script_log_error "Graceful: telnet: Unknown error"
-			fi
-			echo -en "\n" | tee -a "${lgsmlog}"
-			echo -en "Telnet output:" | tee -a "${lgsmlog}"
-			echo -en "\n ${sdtd_telnet_shutdown}" | tee -a "${lgsmlog}"
-			echo -en "\n\n" | tee -a "${lgsmlog}"
-		fi
-	else
-		fn_print_warn "Graceful: telnet: expect not installed: "
-		fn_print_fail_eol_nl
-		fn_script_log_warn "Graceful: telnet: expect not installed: FAIL"
-	fi
-}
-
-# Attempts graceful shutdown by sending /save /stop.
-fn_stop_graceful_avorion() {
-	fn_print_dots "Graceful: /save /stop"
-	fn_script_log_info "Graceful: /save /stop"
-	# Sends /save.
-	tmux -L "${sessionname}" send-keys -t "${sessionname}" /save ENTER > /dev/null 2>&1
-	sleep 5
-	# Sends /quit.
-	tmux -L "${sessionname}" send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1
-	# Waits up to 30 seconds giving the server time to shutdown gracefuly.
-	for seconds in {1..30}; do
-		check_status.sh
-		if [ "${status}" == "0" ]; then
-			fn_print_ok "Graceful: /save /stop: ${seconds}: "
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Graceful: /save /stop: OK: ${seconds} seconds"
-			break
-		fi
-		sleep 1
-		fn_print_dots "Graceful: /save /stop: ${seconds}"
-	done
-	check_status.sh
-	if [ "${status}" != "0" ]; then
-		fn_print_error "Graceful: /save /stop: "
-		fn_print_fail_eol_nl
-		fn_script_log_error "Graceful: /save /stop: FAIL"
-	fi
-}
-
-fn_stop_graceful_select() {
-	if [ "${stopmode}" == "1" ]; then
-		fn_stop_tmux
-	elif [ "${stopmode}" == "2" ]; then
-		fn_stop_graceful_ctrlc
-	elif [ "${stopmode}" == "3" ]; then
-		fn_stop_graceful_cmd "quit" 30
-	elif [ "${stopmode}" == "4" ]; then
-		fn_stop_graceful_cmd "quit" 120
-	elif [ "${stopmode}" == "5" ]; then
-		fn_stop_graceful_cmd "stop" 30
-	elif [ "${stopmode}" == "6" ]; then
-		fn_stop_graceful_cmd "q" 30
-	elif [ "${stopmode}" == "7" ]; then
-		fn_stop_graceful_cmd "exit" 30
-	elif [ "${stopmode}" == "8" ]; then
-		fn_stop_graceful_sdtd
-	elif [ "${stopmode}" == "9" ]; then
-		fn_stop_graceful_goldsrc
-	elif [ "${stopmode}" == "10" ]; then
-		fn_stop_graceful_avorion
-	elif [ "${stopmode}" == "11" ]; then
-		fn_stop_graceful_cmd "end" 30
-	elif [ "${stopmode}" == "12" ]; then
-		fn_stop_graceful_cmd "shutdown" 30
-	fi
-}
-
-fn_stop_tmux() {
-	fn_print_dots "${servername}"
-	fn_script_log_info "tmux kill-session: ${sessionname}: ${servername}"
-	# Kill tmux session.
-	tmux -L "${sessionname}" kill-session -t "${sessionname}" > /dev/null 2>&1
-	sleep 0.5
-	check_status.sh
-	if [ "${status}" == "0" ]; then
-		fn_print_ok_nl "${servername}"
-		fn_script_log_pass "Stopped ${servername}"
-	else
-		fn_print_fail_nl "Unable to stop ${servername}"
-		fn_script_log_fatal "Unable to stop ${servername}"
-	fi
-}
-
-# Checks if the server is already stopped.
-fn_stop_pre_check() {
-	if [ "${status}" == "0" ]; then
-		fn_print_info_nl "${servername} is already stopped"
-		fn_script_log_error "${servername} is already stopped"
-	else
-		# Select graceful shutdown.
-		fn_stop_graceful_select
-	fi
-	# Check status again, a kill tmux session if graceful shutdown failed.
-	check_status.sh
-	if [ "${status}" != "0" ]; then
-		fn_stop_tmux
-	fi
-}
-
-check.sh
-fn_print_dots "${servername}"
-
-info_game.sh
-fn_stop_pre_check
-# Remove lockfile.
-if [ -f "${lockdir}/${selfname}.lock" ]; then
-	rm -f "${lockdir:?}/${selfname}.lock"
-fi
-
-if [ -z "${exitbypass}" ]; then
-	core_exit.sh
-fi

+ 0 - 19
lgsm/functions/command_test_alert.sh

@@ -1,19 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_test_alert.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Sends a test alert.
-
-commandname="TEST-ALERT"
-commandaction="Sending Alert"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_print_dots "${servername}"
-check.sh
-info_game.sh
-alert="test"
-alert.sh
-
-core_exit.sh

+ 0 - 57
lgsm/functions/command_ts3_server_pass.sh

@@ -1,57 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_ts3_server_pass.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Changes TS3 serveradmin password.
-
-commandname="CHANGE-PASSWORD"
-commandaction="Changing password"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_serveradmin_password_prompt() {
-	fn_print_header
-	fn_print_information_nl "You are about to change the ${gamename} ServerAdmin password."
-	fn_print_warning_nl "${gamename} will restart during this process."
-	echo -e ""
-	if ! fn_prompt_yn "Continue?" Y; then
-		exitcode=0
-		core_exit.sh
-	fi
-	fn_script_log_info "Initiating ${gamename} ServerAdmin password change"
-	read -rp "Enter new password: " newpassword
-	fn_print_info_nl "Changing password"
-	fn_script_log_info "Changing password"
-}
-
-fn_serveradmin_password_set() {
-	# Start server in "new password mode".
-	ts3serverpass="1"
-	exitbypass="1"
-	command_start.sh
-	fn_firstcommand_reset
-	fn_print_ok_nl "New password applied"
-	fn_script_log_pass "New ServerAdmin password applied"
-}
-
-# Running functions.
-check.sh
-fn_serveradmin_password_prompt
-if [ "${status}" != "0" ]; then
-	# Stop any running server.
-	exitbypass="1"
-	command_stop.sh
-	fn_firstcommand_reset
-	fn_serveradmin_password_set
-	parms="serveradmin_password=\"${newpassword}\" inifile=\"${servercfgfullpath}\" > /dev/null 2>&1"
-	ts3serverpass="0"
-	command_restart.sh
-	fn_firstcommand_reset
-else
-	fn_serveradmin_password_set
-	command_stop.sh
-	fn_firstcommand_reset
-fi
-
-core_exit.sh

+ 0 - 40
lgsm/functions/command_update.sh

@@ -1,40 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_update.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Handles updating of servers.
-
-commandname="UPDATE"
-commandaction="Updating"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_print_dots ""
-check.sh
-core_logs.sh
-check_last_update.sh
-
-if [ "${shortname}" == "ts3" ]; then
-	update_ts3.sh
-elif [ "${shortname}" == "mc" ]; then
-	update_minecraft.sh
-elif [ "${shortname}" == "mcb" ]; then
-	update_minecraft_bedrock.sh
-elif [ "${shortname}" == "pmc" ] || [ "${shortname}" == "vpmc" ] || [ "${shortname}" == "wmc" ]; then
-	update_papermc.sh
-elif [ "${shortname}" == "fctr" ]; then
-	update_factorio.sh
-elif [ "${shortname}" == "mta" ]; then
-	update_mta.sh
-elif [ "${shortname}" == "jk2" ]; then
-	update_jediknight2.sh
-elif [ "${shortname}" == "vints" ]; then
-	update_vintagestory.sh
-elif [ "${shortname}" == "ut99" ]; then
-	update_ut99.sh
-else
-	update_steamcmd.sh
-fi
-
-core_exit.sh

+ 0 - 236
lgsm/functions/command_update_linuxgsm.sh

@@ -1,236 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_update_linuxgsm.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Deletes the functions dir to allow re-downloading of functions from GitHub.
-
-commandname="UPDATE-LGSM"
-commandaction="Updating LinuxGSM"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-info_distro.sh
-
-fn_print_dots ""
-fn_script_log_info "Updating LinuxGSM"
-
-fn_print_dots "Selecting repo"
-fn_script_log_info "Selecting repo"
-# Select remotereponame
-curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh" 1> /dev/null
-if [ $? != "0" ]; then
-	curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh" 1> /dev/null
-	if [ $? != "0" ]; then
-		fn_print_fail_nl "Selecting repo: Unable to to access GitHub or Bitbucket repositories"
-		fn_script_log_fatal "Selecting repo: Unable to to access GitHub or Bitbucket repositories"
-		core_exit.sh
-	else
-		remotereponame="Bitbucket"
-		fn_print_ok_nl "Selecting repo: ${remotereponame}"
-	fi
-else
-	remotereponame="GitHub"
-	fn_print_ok_nl "Selecting repo: ${remotereponame}"
-fi
-
-# Check linuxsm.sh
-echo -en "checking ${remotereponame} linuxgsm.sh...\c"
-if [ "${remotereponame}" == "GitHub" ]; then
-	curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh" 1> /dev/null
-else
-	curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh" 1> /dev/null
-fi
-if [ $? != "0" ]; then
-	fn_print_fail_eol_nl
-	fn_script_log_fatal "Checking ${remotereponame} linuxgsm.sh"
-	fn_script_log_fatal "Curl returned error: $?"
-	core_exit.sh
-fi
-
-if [ "${remotereponame}" == "GitHub" ]; then
-	tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh"))
-else
-	tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh"))
-fi
-
-if [ "${tmp_script_diff}" != "" ]; then
-	fn_print_update_eol_nl
-	fn_script_log_update "Checking ${remotereponame} linuxgsm.sh"
-	rm -f "${tmpdir:?}/linuxgsm.sh"
-	fn_fetch_file_github "" "linuxgsm.sh" "${tmpdir}" "nochmodx" "norun" "noforcedl" "nohash"
-else
-	fn_print_ok_eol_nl
-	fn_script_log_pass "Checking ${remotereponame} linuxgsm.sh"
-fi
-
-# Check gameserver.sh
-# Compare gameserver.sh against linuxgsm.sh in the tmp dir.
-# Ignoring server specific vars.
-echo -en "checking ${selfname}...\c"
-fn_script_log_info "Checking ${selfname}"
-script_diff=$(diff <(sed '\/shortname/d;\/gameservername/d;\/gamename/d;\/githubuser/d;\/githubrepo/d;\/githubbranch/d' "${tmpdir}/linuxgsm.sh") <(sed '\/shortname/d;\/gameservername/d;\/gamename/d;\/githubuser/d;\/githubrepo/d;\/githubbranch/d' "${rootdir}/${selfname}"))
-if [ "${script_diff}" != "" ]; then
-	fn_print_update_eol_nl
-	fn_script_log_update "Checking ${selfname}"
-	echo -en "backup ${selfname}...\c"
-	fn_script_log_info "Backup ${selfname}"
-	if [ ! -d "${backupdir}/script" ]; then
-		mkdir -p "${backupdir}/script"
-	fi
-	cp "${rootdir}/${selfname}" "${backupdir}/script/${selfname}-$(date +"%m_%d_%Y_%M").bak"
-	if [ $? != 0 ]; then
-		fn_print_fail_eol_nl
-		fn_script_log_fatal "Backup ${selfname}"
-		core_exit.sh
-	else
-		fn_print_ok_eol_nl
-		fn_script_log_pass "Backup ${selfname}"
-		echo -e "backup location ${backupdir}/script/${selfname}-$(date +"%m_%d_%Y_%M").bak"
-		fn_script_log_pass "Backup location ${backupdir}/script/${selfname}-$(date +"%m_%d_%Y_%M").bak"
-	fi
-
-	echo -en "copying ${selfname}...\c"
-	fn_script_log_info "copying ${selfname}"
-	cp "${tmpdir}/linuxgsm.sh" "${rootdir}/${selfname}"
-	sed -i "s+shortname=\"core\"+shortname=\"${shortname}\"+g" "${rootdir}/${selfname}"
-	sed -i "s+gameservername=\"core\"+gameservername=\"${gameservername}\"+g" "${rootdir}/${selfname}"
-	sed -i "s+gamename=\"core\"+gamename=\"${gamename}\"+g" "${rootdir}/${selfname}"
-	sed -i "s+githubuser=\"GameServerManagers\"+githubuser=\"${githubuser}\"+g" "${rootdir}/${selfname}"
-	sed -i "s+githubrepo=\"LinuxGSM\"+githubrepo=\"${githubrepo}\"+g" "${rootdir}/${selfname}"
-	sed -i "s+githubbranch=\"master\"+githubbranch=\"${githubbranch}\"+g" "${rootdir}/${selfname}"
-
-	if [ $? != "0" ]; then
-		fn_print_fail_eol_nl
-		fn_script_log_fatal "copying ${selfname}"
-		core_exit.sh
-	else
-		fn_print_ok_eol_nl
-		fn_script_log_pass "copying ${selfname}"
-	fi
-else
-	fn_print_ok_eol_nl
-	fn_script_log_info "Checking ${selfname}"
-fi
-
-# Check _default.cfg.
-echo -en "checking ${remotereponame} config _default.cfg...\c"
-fn_script_log_info "Checking ${remotereponame} config _default.cfg"
-if [ "${remotereponame}" == "GitHub" ]; then
-	curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg" 1> /dev/null
-else
-	curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg" 1> /dev/null
-fi
-if [ $? != "0" ]; then
-	fn_print_fail_eol_nl
-	fn_script_log_fatal "Checking ${remotereponame} config _default.cfg"
-	fn_script_log_fatal "Curl returned error: $?"
-	core_exit.sh
-fi
-
-if [ "${remotereponame}" == "GitHub" ]; then
-	config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg"))
-else
-	config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg"))
-fi
-
-if [ "${config_file_diff}" != "" ]; then
-	fn_print_update_eol_nl
-	fn_script_log_update "Checking ${remotereponame} config _default.cfg"
-	rm -f "${configdirdefault:?}/config-lgsm/${gameservername:?}/_default.cfg"
-	fn_fetch_file_github "lgsm/config-default/config-lgsm/${gameservername}" "_default.cfg" "${configdirdefault}/config-lgsm/${gameservername}" "nochmodx" "norun" "noforce" "nohash"
-	alert="config"
-	alert.sh
-else
-	fn_print_ok_eol_nl
-	fn_script_log_pass "Checking ${remotereponame} config _default.cfg"
-fi
-
-# Check distro csv. ${datadir}/${distroid}-${distroversioncsv}.csv
-if [ -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then
-	echo -en "checking ${remotereponame} config ${distroid}-${distroversioncsv}.csv...\c"
-	fn_script_log_info "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
-	if [ "${remotereponame}" == "GitHub" ]; then
-		curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv" 1> /dev/null
-	else
-		curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv" 1> /dev/null
-	fi
-	if [ $? != "0" ]; then
-		fn_print_fail_eol_nl
-		fn_script_log_fatal "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
-		fn_script_log_fatal "Curl returned error: $?"
-		core_exit.sh
-	fi
-
-	if [ "${remotereponame}" == "GitHub" ]; then
-		config_file_diff=$(diff "${datadir}/${distroid}-${distroversioncsv}.csv" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv"))
-	else
-		config_file_diff=$(diff "${datadir}/${distroid}-${distroversioncsv}.csv" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv"))
-	fi
-
-	if [ "${config_file_diff}" != "" ]; then
-		fn_print_update_eol_nl
-		fn_script_log_update "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
-		rm -f "${datadir:?}/${distroid}-${distroversioncsv}.csv"
-		fn_fetch_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv" "${datadir}" "nochmodx" "norun" "noforce" "nohash"
-	else
-		fn_print_ok_eol_nl
-		fn_script_log_pass "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
-	fi
-fi
-# Check and update modules.
-if [ -n "${functionsdir}" ]; then
-	if [ -d "${functionsdir}" ]; then
-		(
-			cd "${functionsdir}" || exit
-			for functionfile in *; do
-				# check if module exists in the repo and remove if missing.
-				# commonly used if module names change.
-				echo -en "checking ${remotereponame} module ${functionfile}...\c"
-				github_file_url_dir="lgsm/functions"
-				if [ "${remotereponame}" == "GitHub" ]; then
-					curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${functionfile}" 1> /dev/null
-				else
-					curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${functionfile}" 1> /dev/null
-				fi
-				if [ $? != 0 ]; then
-					fn_print_error_eol_nl
-					fn_script_log_error "Checking ${remotereponame} module ${functionfile}"
-					echo -en "removing module ${functionfile}...\c"
-					if ! rm -f "${functionfile:?}"; then
-						fn_print_fail_eol_nl
-						fn_script_log_fatal "Removing module ${functionfile}"
-						core_exit.sh
-					else
-						fn_print_ok_eol_nl
-						fn_script_log_pass "Removing module ${functionfile}"
-					fi
-				else
-					# compare file
-					if [ "${remotereponame}" == "GitHub" ]; then
-						function_file_diff=$(diff "${functionsdir}/${functionfile}" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${functionfile}"))
-					else
-						function_file_diff=$(diff "${functionsdir}/${functionfile}" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${functionfile}"))
-					fi
-
-					# results
-					if [ "${function_file_diff}" != "" ]; then
-						fn_print_update_eol_nl
-						fn_script_log_update "Checking ${remotereponame} module ${functionfile}"
-						rm -rf "${functionsdir:?}/${functionfile}"
-						fn_update_function
-					else
-						fn_print_ok_eol_nl
-						fn_script_log_pass "Checking ${remotereponame} module ${functionfile}"
-					fi
-				fi
-			done
-		)
-	fi
-fi
-
-fn_print_ok_nl "Updating functions"
-fn_script_log_pass "Updating functions"
-
-core_exit.sh

+ 0 - 49
lgsm/functions/command_validate.sh

@@ -1,49 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_validate.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Runs a server validation.
-
-commandname="VALIDATE"
-commandaction="Validating"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-fn_validate() {
-	fn_print_warn "Validate might overwrite some customised files"
-	fn_script_log_warn "${commandaction} server: Validate might overwrite some customised files"
-	totalseconds=3
-	for seconds in {3..1}; do
-		fn_print_warn "Validate might overwrite some customised files: ${totalseconds}"
-		totalseconds=$((totalseconds - 1))
-		sleep 1
-		if [ "${seconds}" == "0" ]; then
-			break
-		fi
-	done
-	fn_print_warn_nl "Validate might overwrite some customised files"
-
-	fn_dl_steamcmd
-}
-
-# The location where the builds are checked and downloaded.
-remotelocation="SteamCMD"
-check.sh
-
-fn_print_dots "${remotelocation}"
-
-if [ "${status}" != "0" ]; then
-	fn_print_restart_warning
-	exitbypass=1
-	command_stop.sh
-	fn_firstcommand_reset
-	fn_validate
-	exitbypass=1
-	command_start.sh
-	fn_firstcommand_reset
-else
-	fn_validate
-fi
-
-core_exit.sh

+ 0 - 183
lgsm/functions/command_wipe.sh

@@ -1,183 +0,0 @@
-#!/bin/bash
-# LinuxGSM command_backup.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Wipes server data, useful after updates for some games like Rust.
-
-commandname="WIPE"
-commandaction="Wiping"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-# Provides an exit code upon error.
-fn_wipe_exit_code() {
-	exitcode=$?
-	if [ "${exitcode}" != 0 ]; then
-		fn_print_fail_eol_nl
-		core_exit.sh
-	else
-		fn_print_ok_eol_nl
-	fi
-}
-
-# Removes files to wipe server.
-fn_wipe_files() {
-	fn_print_start_nl "${wipetype}"
-	fn_script_log_info "${wipetype}"
-
-	# Remove Map files
-	if [ -n "${serverwipe}" ] || [ -n "${mapwipe}" ]; then
-		if [ -n "$(find "${serveridentitydir}" -type f -name "*.map")" ]; then
-			echo -en "removing .map file(s)..."
-			fn_script_log_info "removing *.map file(s)"
-			fn_sleep_time
-			find "${serveridentitydir:?}" -type f -name "*.map" -printf "%f\n" >> "${lgsmlog}"
-			find "${serveridentitydir:?}" -type f -name "*.map" -delete | tee -a "${lgsmlog}"
-			fn_wipe_exit_code
-		else
-			echo -e "no .map file(s) to remove"
-			fn_sleep_time
-			fn_script_log_pass "no .map file(s) to remove"
-		fi
-	fi
-	# Remove Save files.
-	if [ -n "${serverwipe}" ] || [ -n "${mapwipe}" ]; then
-		if [ -n "$(find "${serveridentitydir}" -type f -name "*.sav*")" ]; then
-			echo -en "removing .sav file(s)..."
-			fn_script_log_info "removing .sav file(s)"
-			fn_sleep_time
-			find "${serveridentitydir:?}" -type f -name "*.sav*" -printf "%f\n" >> "${lgsmlog}"
-			find "${serveridentitydir:?}" -type f -name "*.sav*" -delete
-			fn_wipe_exit_code
-		else
-			echo -e "no .sav file(s) to remove"
-			fn_script_log_pass "no .sav file(s) to remove"
-			fn_sleep_time
-		fi
-	fi
-	# Remove db files for full wipe.
-	# Excluding player.tokens.db for Rust+.
-	if [ -n "${serverwipe}" ]; then
-		if [ -n "$(find "${serveridentitydir}" -type f ! -name 'player.tokens.db' -name "*.db")" ]; then
-			echo -en "removing .db file(s)..."
-			fn_script_log_info "removing .db file(s)"
-			fn_sleep_time
-			find "${serveridentitydir:?}" -type f ! -name 'player.tokens.db' -name "*.db" -printf "%f\n" >> "${lgsmlog}"
-			find "${serveridentitydir:?}" -type f ! -name 'player.tokens.db' -name "*.db" -delete
-			fn_wipe_exit_code
-		else
-			echo -e "no .db file(s) to remove"
-			fn_sleep_time
-			fn_script_log_pass "no .db file(s) to remove"
-		fi
-	fi
-}
-
-fn_map_wipe_warning() {
-	fn_print_warn "Map wipe will reset the map data and keep blueprint data"
-	fn_script_log_warn "Map wipe will reset the map data and keep blueprint data"
-	totalseconds=3
-	for seconds in {3..1}; do
-		fn_print_warn "Map wipe will reset the map data and keep blueprint data: ${totalseconds}"
-		totalseconds=$((totalseconds - 1))
-		sleep 1
-		if [ "${seconds}" == "0" ]; then
-			break
-		fi
-	done
-	fn_print_warn_nl "Map wipe will reset the map data and keep blueprint data"
-}
-
-fn_full_wipe_warning() {
-	fn_print_warn "Server wipe will reset the map data and remove blueprint data"
-	fn_script_log_warn "Server wipe will reset the map data and remove blueprint data"
-	totalseconds=3
-	for seconds in {3..1}; do
-		fn_print_warn "Server wipe will reset the map data and remove blueprint data: ${totalseconds}"
-		totalseconds=$((totalseconds - 1))
-		sleep 1
-		if [ "${seconds}" == "0" ]; then
-			break
-		fi
-	done
-	fn_print_warn_nl "Server wipe will reset the map data and remove blueprint data"
-}
-
-# Will change the seed if the seed is not defined by the user.
-fn_wipe_random_seed() {
-	if [ -f "${datadir}/${selfname}-seed.txt" ] && [ -n "${randomseed}" ]; then
-		shuf -i 1-2147483647 -n 1 > "${datadir}/${selfname}-seed.txt"
-		seed=$(cat "${datadir}/${selfname}-seed.txt")
-		randomseed=1
-		echo -en "generating new random seed (${cyan}${seed}${default})..."
-		fn_script_log_pass "Generating new random seed (${cyan}${seed}${default})"
-		fn_sleep_time
-		fn_print_ok_eol_nl
-	fi
-}
-
-# A summary of what wipe is going to do.
-fn_wipe_details() {
-	fn_print_information_nl "Wipe does not remove Rust+ data."
-	echo -en "* Wipe map data: "
-	if [ -n "${serverwipe}" ] || [ -n "${mapwipe}" ]; then
-		fn_print_yes_eol_nl
-	else
-		fn_print_no_eol_nl
-	fi
-
-	echo -en "* Wipe blueprint data: "
-	if [ -n "${serverwipe}" ]; then
-		fn_print_yes_eol_nl
-	else
-		fn_print_no_eol_nl
-	fi
-
-	echo -en "* Change Procedural Map seed: "
-	if [ -n "${randomseed}" ]; then
-		fn_print_yes_eol_nl
-	else
-		fn_print_no_eol_nl
-	fi
-}
-
-fn_print_dots ""
-check.sh
-fix_rust.sh
-
-# Check if there is something to wipe.
-if [ -n "$(find "${serveridentitydir}" -type f -name "*.map")" ] || [ -n "$(find "${serveridentitydir}" -type f -name "*.sav*")" ] && [ -n "$(find "${serveridentitydir}" -type f ! -name 'player.tokens.db' -name "*.db")" ]; then
-	if [ -n "${serverwipe}" ]; then
-		wipetype="Full wipe"
-		fn_full_wipe_warning
-		fn_wipe_details
-	elif [ -n "${mapwipe}" ]; then
-		wipetype="Map wipe"
-		fn_map_wipe_warning
-		fn_wipe_details
-	fi
-	check_status.sh
-	if [ "${status}" != "0" ]; then
-		fn_print_restart_warning
-		exitbypass=1
-		command_stop.sh
-		fn_firstcommand_reset
-		fn_wipe_files
-		fn_wipe_random_seed
-		fn_print_complete_nl "${wipetype}"
-		fn_script_log_pass "${wipetype}"
-		exitbypass=1
-		command_start.sh
-		fn_firstcommand_reset
-	else
-		fn_wipe_files
-		fn_wipe_random_seed
-		fn_print_complete_nl "${wipetype}"
-		fn_script_log_pass "${wipetype}"
-	fi
-else
-	fn_print_ok_nl "Wipe not required"
-	fn_script_log_pass "Wipe not required"
-fi
-core_exit.sh

+ 0 - 35
lgsm/functions/compress_unreal2_maps.sh

@@ -1,35 +0,0 @@
-#!/bin/bash
-# LinuxGSM compress_unreal2_maps.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Compresses unreal maps.
-
-commandname="MAP-COMPRESSOR"
-commandaction="Compressing maps"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-fn_print_header
-echo -e "Will compress all maps in:"
-echo -e ""
-pwd
-echo -e ""
-echo -e "Compressed maps saved to:"
-echo -e ""
-echo -e "${compressedmapsdir}"
-echo -e ""
-if ! fn_prompt_yn "Start compression?" Y; then
-	exitcode=0
-	core_exit.sh
-fi
-mkdir -pv "${compressedmapsdir}" > /dev/null 2>&1
-rm -rfv "${serverfiles:?}/Maps/"*.ut2.uz2
-cd "${systemdir}" || exit
-for map in "${serverfiles}/Maps/"*; do
-	./ucc-bin compress "${map}" --nohomedir
-done
-mv -fv "${serverfiles}/Maps/"*.ut2.uz2 "${compressedmapsdir}"
-
-core_exit.sh

+ 0 - 35
lgsm/functions/compress_ut99_maps.sh

@@ -1,35 +0,0 @@
-#!/bin/bash
-# LinuxGSM compress_ut99_maps.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Compresses unreal maps.
-
-commandname="MAP-COMPRESSOR"
-commandaction="Compressing maps"
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-fn_firstcommand_set
-
-check.sh
-fn_print_header
-echo -e "Will compress all maps in:"
-echo -e ""
-pwd
-echo -e ""
-echo -e "Compressed maps saved to:"
-echo -e ""
-echo -e "${compressedmapsdir}"
-echo -e ""
-if ! fn_prompt_yn "Start compression?" Y; then
-	exitcode=0
-	core_exit.sh
-fi
-mkdir -pv "${compressedmapsdir}" > /dev/null 2>&1
-rm -rfv "${serverfiles:?}/Maps/"*.unr.uz
-cd "${systemdir}" || exit
-for map in "${serverfiles}/Maps/"*; do
-	./ucc-bin compress "${map}" --nohomedir
-done
-mv -fv "${serverfiles}/Maps/"*.unr.uz "${compressedmapsdir}"
-
-core_exit.sh

+ 0 - 625
lgsm/functions/core_dl.sh

@@ -1,625 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_dl.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Deals with all downloads for LinuxGSM.
-
-# remote_fileurl: The URL of the file: http://example.com/dl/File.tar.bz2
-# local_filedir: location the file is to be saved: /home/server/lgsm/tmp
-# local_filename: name of file (this can be different from the url name): file.tar.bz2
-# chmodx: Optional, set to "chmodx" to make file executable using chmod +x
-# run: Optional, set run to execute the file after download
-# forcedl: Optional, force re-download of file even if exists
-# hash: Optional, set an hash sum and will compare it against the file.
-#
-# Downloads can be defined in code like so:
-# fn_fetch_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${hash}"
-# fn_fetch_file "http://example.com/file.tar.bz2" "http://example.com/file2.tar.bz2" "file.tar.bz2" "file2.tar.bz2" "/some/dir" "file.tar.bz2" "chmodx" "run" "forcedl" "10cd7353aa9d758a075c600a6dd193fd"
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_dl_steamcmd() {
-	fn_print_start_nl "${remotelocation}"
-	fn_script_log_info "${commandaction} ${selfname}: ${remotelocation}"
-	if [ -n "${branch}" ]; then
-		echo -e "Branch: ${branch}"
-		fn_script_log_info "Branch: ${branch}"
-	fi
-	if [ -n "${betapassword}" ]; then
-		echo -e "Branch password: ${betapassword}"
-		fn_script_log_info "Branch password: ${betapassword}"
-	fi
-	if [ -d "${steamcmddir}" ]; then
-		cd "${steamcmddir}" || exit
-	fi
-
-	# Unbuffer will allow the output of steamcmd not buffer allowing a smooth output.
-	# unbuffer us part of the expect package.
-	if [ "$(command -v unbuffer)" ]; then
-		unbuffer="unbuffer"
-	fi
-
-	# Validate will be added as a parameter if required.
-	if [ "${commandname}" == "VALIDATE" ] || [ "${commandname}" == "INSTALL" ]; then
-		validate="validate"
-	fi
-
-	# To do error checking for SteamCMD the output of steamcmd will be saved to a log.
-	steamcmdlog="${lgsmlogdir}/${selfname}-steamcmd.log"
-
-	# clear previous steamcmd log
-	if [ -f "${steamcmdlog}" ]; then
-		rm -f "${steamcmdlog:?}"
-	fi
-	counter=0
-	while [ "${counter}" == "0" ] || [ "${exitcode}" != "0" ]; do
-		counter=$((counter + 1))
-		# Select SteamCMD parameters
-		# If GoldSrc (appid 90) servers. GoldSrc (appid 90) require extra commands.
-		if [ "${appid}" == "90" ]; then
-			# If using a specific branch.
-			if [ -n "${branch}" ] && [ -n "${betapassword}" ]; then
-				${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			elif [ -n "${branch}" ]; then
-				${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			else
-				${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			fi
-		# Force Windows Platform type.
-		elif [ "${steamcmdforcewindows}" == "yes" ]; then
-			if [ -n "${branch}" ] && [ -n "${betapassword}" ]; then
-				${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			elif [ -n "${branch}" ]; then
-				${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			else
-				${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			fi
-		# All other servers.
-		else
-			if [ -n "${branch}" ] && [ -n "${betapassword}" ]; then
-				${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			elif [ -n "${branch}" ]; then
-				${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			else
-				${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
-			fi
-		fi
-
-		# Error checking for SteamCMD. Some errors will loop to try again and some will just exit.
-		# Check also if we have more errors than retries to be sure that we do not loop to many times and error out.
-		exitcode=$?
-		if [ -n "$(grep -i "Error!" "${steamcmdlog}" | tail -1)" ] && [ "$(grep -ic "Error!" "${steamcmdlog}")" -ge "${counter}" ]; then
-			# Not enough space.
-			if [ -n "$(grep "0x202" "${steamcmdlog}" | tail -1)" ]; then
-				fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Not enough disk space to download server files"
-				fn_script_log_fatal "${commandaction} ${selfname}: ${remotelocation}: Not enough disk space to download server files"
-				core_exit.sh
-				# Not enough space.
-			elif [ -n "$(grep "0x212" "${steamcmdlog}" | tail -1)" ]; then
-				fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Not enough disk space to download server files"
-				fn_script_log_fatal "${commandaction} ${selfname}: ${remotelocation}: Not enough disk space to download server files"
-				core_exit.sh
-			# Need tp purchase game.
-			elif [ -n "$(grep "No subscription" "${steamcmdlog}" | tail -1)" ]; then
-				fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Steam account does not have a license for the required game"
-				fn_script_log_fatal "${commandaction} ${selfname}: ${remotelocation}: Steam account does not have a license for the required game"
-				core_exit.sh
-			# Two-factor authentication failure
-			elif [ -n "$(grep "Two-factor code mismatch" "${steamcmdlog}" | tail -1)" ]; then
-				fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Two-factor authentication failure"
-				fn_script_log_fatal "${commandaction} ${selfname}: ${remotelocation}: Two-factor authentication failure"
-				core_exit.sh
-			# Incorrect Branch password
-			elif [ -n "$(grep "Password check for AppId" "${steamcmdlog}" | tail -1)" ]; then
-				fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: betapassword is incorrect"
-				fn_script_log_fatal "${commandaction} ${selfname}: ${remotelocation}: betapassword is incorrect"
-				core_exit.sh
-			# Update did not finish.
-			elif [ -n "$(grep "0x402" "${steamcmdlog}" | tail -1)" ] || [ -n "$(grep "0x602" "${steamcmdlog}" | tail -1)" ]; then
-				fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Update required but not completed - check network"
-				fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Update required but not completed - check network"
-			else
-				fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Unknown error occured"
-				echo -en "Please provide content log to LinuxGSM developers https://linuxgsm.com/steamcmd-error"
-				fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Unknown error occured"
-			fi
-		elif [ "${exitcode}" != 0 ]; then
-			fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Exit code: ${exitcode}"
-			fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Exit code: ${exitcode}"
-		else
-			fn_print_complete_nl "${commandaction} ${selfname}: ${remotelocation}"
-			fn_script_log_pass "${commandaction} ${selfname}: ${remotelocation}"
-		fi
-
-		if [ "${counter}" -gt "10" ]; then
-			fn_print_failure_nl "${commandaction} ${selfname}: ${remotelocation}: Did not complete the download, too many retrys"
-			fn_script_log_fatal "${commandaction} ${selfname}: ${remotelocation}: Did not complete the download, too many retrys"
-			core_exit.sh
-		fi
-	done
-}
-
-# Emptys contents of the LinuxGSM tmpdir.
-fn_clear_tmp() {
-	echo -en "clearing LinuxGSM tmp directory..."
-	if [ -d "${tmpdir}" ]; then
-		rm -rf "${tmpdir:?}/"*
-		local exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_print_error_eol_nl
-			fn_script_log_error "clearing LinuxGSM tmp directory"
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "clearing LinuxGSM tmp directory"
-		fi
-	fi
-}
-
-fn_dl_hash() {
-	# Runs Hash Check if available.
-	if [ "${hash}" != "0" ] && [ "${hash}" != "nohash" ] && [ "${hash}" != "nomd5" ]; then
-		# MD5
-		if [ "${#hash}" == "32" ]; then
-			hashbin="md5sum"
-			hashtype="MD5"
-		# SHA1
-		elif [ "${#hash}" == "40" ]; then
-			hashbin="sha1sum"
-			hashtype="SHA1"
-		# SHA256
-		elif [ "${#hash}" == "64" ]; then
-			hashbin="sha256sum"
-			hashtype="SHA256"
-		# SHA512
-		elif [ "${#hash}" == "128" ]; then
-			hashbin="sha512sum"
-			hashtype="SHA512"
-		else
-			fn_script_log_error "hash lengh not known for hash type"
-			fn_print_error_nl "hash lengh not known for hash type"
-			core_exit.sh
-		fi
-		echo -en "verifying ${local_filename} with ${hashtype}..."
-		fn_sleep_time
-		hashsumcmd=$(${hashbin} "${local_filedir}/${local_filename}" | awk '{print $1}')
-		if [ "${hashsumcmd}" != "${hash}" ]; then
-			fn_print_fail_eol_nl
-			echo -e "${local_filename} returned ${hashtype} checksum: ${hashsumcmd}"
-			echo -e "expected ${hashtype} checksum: ${hash}"
-			fn_script_log_fatal "Verifying ${local_filename} with ${hashtype}"
-			fn_script_log_info "${local_filename} returned ${hashtype} checksum: ${hashsumcmd}"
-			fn_script_log_info "Expected ${hashtype} checksum: ${hash}"
-			core_exit.sh
-		else
-			fn_print_ok_eol_nl
-			fn_script_log_pass "Verifying ${local_filename} with ${hashtype}"
-			fn_script_log_info "${local_filename} returned ${hashtype} checksum: ${hashsumcmd}"
-			fn_script_log_info "Expected ${hashtype} checksum: ${hash}"
-		fi
-	fi
-}
-
-# Extracts bzip2, gzip or zip files.
-# Extracts can be defined in code like so:
-# fn_dl_extract "${local_filedir}" "${local_filename}" "${extractdest}" "${extractsrc}"
-# fn_dl_extract "/home/gameserver/lgsm/tmp" "file.tar.bz2" "/home/gamserver/serverfiles"
-fn_dl_extract() {
-	local_filedir="${1}"
-	local_filename="${2}"
-	extractdest="${3}"
-	extractsrc="${4}"
-	# Extracts archives.
-	echo -en "extracting ${local_filename}..."
-
-	if [ ! -d "${extractdest}" ]; then
-		mkdir "${extractdest}"
-	fi
-	if [ ! -f "${local_filedir}/${local_filename}" ]; then
-		fn_print_fail_eol_nl
-		echo -en "file ${local_filedir}/${local_filename} not found"
-		fn_script_log_fatal "Extracting ${local_filename}"
-		fn_script_log_fatal "File ${local_filedir}/${local_filename} not found"
-		core_exit.sh
-	fi
-	mime=$(file -b --mime-type "${local_filedir}/${local_filename}")
-	if [ "${mime}" == "application/gzip" ] || [ "${mime}" == "application/x-gzip" ]; then
-		if [ -n "${extractsrc}" ]; then
-			extractcmd=$(tar -zxf "${local_filedir}/${local_filename}" -C "${extractdest}" --strip-components=1 "${extractsrc}")
-		else
-			extractcmd=$(tar -zxf "${local_filedir}/${local_filename}" -C "${extractdest}")
-		fi
-	elif [ "${mime}" == "application/x-bzip2" ]; then
-		if [ -n "${extractsrc}" ]; then
-			extractcmd=$(tar -jxf "${local_filedir}/${local_filename}" -C "${extractdest}" --strip-components=1 "${extractsrc}")
-		else
-			extractcmd=$(tar -jxf "${local_filedir}/${local_filename}" -C "${extractdest}")
-		fi
-	elif [ "${mime}" == "application/x-xz" ]; then
-		if [ -n "${extractsrc}" ]; then
-			extractcmd=$(tar -Jxf "${local_filedir}/${local_filename}" -C "${extractdest}" --strip-components=1 "${extractsrc}")
-		else
-			extractcmd=$(tar -Jxf "${local_filedir}/${local_filename}" -C "${extractdest}")
-		fi
-	elif [ "${mime}" == "application/zip" ]; then
-		if [ -n "${extractsrc}" ]; then
-			extractcmd=$(unzip -qoj -d "${extractdest}" "${local_filedir}/${local_filename}" "${extractsrc}"/*)
-		else
-			extractcmd=$(unzip -qo -d "${extractdest}" "${local_filedir}/${local_filename}")
-		fi
-	fi
-	local exitcode=$?
-	if [ "${exitcode}" != 0 ]; then
-		fn_print_fail_eol_nl
-		fn_script_log_fatal "Extracting ${local_filename}"
-		if [ -f "${lgsmlog}" ]; then
-			echo -e "${extractcmd}" >> "${lgsmlog}"
-		fi
-		echo -e "${extractcmd}"
-		core_exit.sh
-	else
-		fn_print_ok_eol_nl
-		fn_script_log_pass "Extracting ${local_filename}"
-	fi
-}
-
-# Trap to remove file download if canceled before completed.
-fn_fetch_trap() {
-	echo -e ""
-	echo -en "downloading ${local_filename}..."
-	fn_print_canceled_eol_nl
-	fn_script_log_info "Downloading ${local_filename}...CANCELED"
-	fn_sleep_time
-	rm -f "${local_filedir:?}/${local_filename}"
-	echo -en "downloading ${local_filename}..."
-	fn_print_removed_eol_nl
-	fn_script_log_info "Downloading ${local_filename}...REMOVED"
-	core_exit.sh
-}
-
-# Will check a file exists and download it. Will not exit if fails to download.
-fn_check_file() {
-	remote_fileurl="${1}"
-	remote_fileurl_backup="${2}"
-	remote_fileurl_name="${3}"
-	remote_fileurl_backup_name="${4}"
-	remote_filename="${5}"
-	# If backup fileurl exists include it.
-	if [ -n "${remote_fileurl_backup}" ]; then
-		# counter set to 0 to allow second try
-		counter=0
-		remote_fileurls_array=(remote_fileurl remote_fileurl_backup)
-	else
-		# counter set to 1 to not allow second try
-		counter=1
-		remote_fileurls_array=(remote_fileurl)
-	fi
-	for remote_fileurl_array in "${remote_fileurls_array[@]}"; do
-		if [ "${remote_fileurl_array}" == "remote_fileurl" ]; then
-			fileurl="${remote_fileurl}"
-			fileurl_name="${remote_fileurl_name}"
-		elif [ "${remote_fileurl_array}" == "remote_fileurl_backup" ]; then
-			fileurl="${remote_fileurl_backup}"
-			fileurl_name="${remote_fileurl_backup_name}"
-		fi
-		counter=$((counter + 1))
-		echo -en "checking ${fileurl_name} ${remote_filename}...\c"
-		curlcmd=$(curl --output /dev/null --silent --head --fail "${fileurl}" 2>&1)
-		local exitcode=$?
-
-		# On first try will error. On second try will fail.
-		if [ "${exitcode}" != 0 ]; then
-			if [ ${counter} -ge 2 ]; then
-				fn_print_fail_eol_nl
-				if [ -f "${lgsmlog}" ]; then
-					fn_script_log_fatal "Checking ${remote_filename}"
-					fn_script_log_fatal "${fileurl}"
-					checkflag=1
-				fi
-			else
-				fn_print_error_eol_nl
-				if [ -f "${lgsmlog}" ]; then
-					fn_script_log_error "Checking ${remote_filename}"
-					fn_script_log_error "${fileurl}"
-					checkflag=2
-				fi
-			fi
-		else
-			fn_print_ok_eol
-			echo -en "\033[2K\\r"
-			if [ -f "${lgsmlog}" ]; then
-				fn_script_log_pass "Checking ${remote_filename}"
-				checkflag=0
-			fi
-			break
-		fi
-	done
-
-	if [ -f "${local_filedir}/${local_filename}" ]; then
-		fn_dl_hash
-		# Execute file if run is set.
-		if [ "${run}" == "run" ]; then
-			# shellcheck source=/dev/null
-			source "${local_filedir}/${local_filename}"
-		fi
-	fi
-}
-
-fn_fetch_file() {
-	remote_fileurl="${1}"
-	remote_fileurl_backup="${2}"
-	remote_fileurl_name="${3}"
-	remote_fileurl_backup_name="${4}"
-	local_filedir="${5}"
-	local_filename="${6}"
-	chmodx="${7:-0}"
-	run="${8:-0}"
-	forcedl="${9:-0}"
-	hash="${10:-0}"
-
-	# Download file if missing or download forced.
-	if [ ! -f "${local_filedir}/${local_filename}" ] || [ "${forcedl}" == "forcedl" ]; then
-		# If backup fileurl exists include it.
-		if [ -n "${remote_fileurl_backup}" ]; then
-			# counter set to 0 to allow second try
-			counter=0
-			remote_fileurls_array=(remote_fileurl remote_fileurl_backup)
-		else
-			# counter set to 1 to not allow second try
-			counter=1
-			remote_fileurls_array=(remote_fileurl)
-		fi
-		for remote_fileurl_array in "${remote_fileurls_array[@]}"; do
-			if [ "${remote_fileurl_array}" == "remote_fileurl" ]; then
-				fileurl="${remote_fileurl}"
-				fileurl_name="${remote_fileurl_name}"
-			elif [ "${remote_fileurl_array}" == "remote_fileurl_backup" ]; then
-				fileurl="${remote_fileurl_backup}"
-				fileurl_name="${remote_fileurl_backup_name}"
-			fi
-			counter=$((counter + 1))
-			if [ ! -d "${local_filedir}" ]; then
-				mkdir -p "${local_filedir}"
-			fi
-			# Trap will remove part downloaded files if canceled.
-			trap fn_fetch_trap INT
-			curlcmd=(curl --connect-timeout 10 --fail -L -o "${local_filedir}/${local_filename}" --retry 2)
-
-			# if is large file show progress, else be silent
-			local exitcode=""
-			large_files=("bz2" "gz" "zip" "jar" "xz")
-			if grep -qE "(^|\s)${local_filename##*.}(\s|$)" <<< "${large_files[@]}"; then
-				echo -en "downloading ${local_filename}..."
-				fn_sleep_time
-				echo -en "\033[1K"
-				"${curlcmd[@]}" --progress-bar "${fileurl}" 2>&1
-				exitcode="$?"
-			else
-				echo -en "fetching ${fileurl_name} ${local_filename}...\c"
-				"${curlcmd[@]}" --silent --show-error "${fileurl}" 2>&1
-				exitcode="$?"
-			fi
-
-			# Download will fail if downloads a html file.
-			if [ -f "${local_filedir}/${local_filename}" ]; then
-				if head -n 1 "${local_filedir}/${local_filename}" | grep -q "DOCTYPE"; then
-					rm "${local_filedir:?}/${local_filename:?}"
-					local exitcode=2
-				fi
-			fi
-
-			# On first try will error. On second try will fail.
-			if [ "${exitcode}" != 0 ]; then
-				if [ ${counter} -ge 2 ]; then
-					fn_print_fail_eol_nl
-					if [ -f "${lgsmlog}" ]; then
-						fn_script_log_fatal "Downloading ${local_filename}..."
-						fn_script_log_fatal "${fileurl}"
-					fi
-					core_exit.sh
-				else
-					fn_print_error_eol_nl
-					if [ -f "${lgsmlog}" ]; then
-						fn_script_log_error "Downloading ${local_filename}..."
-						fn_script_log_error "${fileurl}"
-					fi
-				fi
-			else
-				fn_print_ok_eol_nl
-				if [ -f "${lgsmlog}" ]; then
-					fn_script_log_pass "Downloading ${local_filename}..."
-				fi
-
-				# Make file executable if chmodx is set.
-				if [ "${chmodx}" == "chmodx" ]; then
-					chmod +x "${local_filedir}/${local_filename}"
-				fi
-
-				# Remove trap.
-				trap - INT
-
-				break
-			fi
-		done
-	fi
-
-	if [ -f "${local_filedir}/${local_filename}" ]; then
-		fn_dl_hash
-		# Execute file if run is set.
-		if [ "${run}" == "run" ]; then
-			# shellcheck source=/dev/null
-			source "${local_filedir}/${local_filename}"
-		fi
-	fi
-}
-
-# GitHub file download functions.
-# Used to simplify downloading specific files from GitHub.
-
-# github_fileurl_dir: the directory of the file in the GitHub: lgsm/functions
-# github_fileurl_name: the filename of the file to download from GitHub: core_messages.sh
-# githuburl: the full GitHub url
-
-# remote_fileurl: The URL of the file: http://example.com/dl/File.tar.bz2
-# local_filedir: location the file is to be saved: /home/server/lgsm/tmp
-# local_filename: name of file (this can be different from the url name): file.tar.bz2
-# chmodx: Optional, set to "chmodx" to make file executable using chmod +x
-# run: Optional, set run to execute the file after download
-# forcedl: Optional, force re-download of file even if exists
-# hash: Optional, set an hash sum and will compare it against the file.
-
-# Fetches files from the Git repo.
-fn_fetch_file_github() {
-	github_fileurl_dir="${1}"
-	github_fileurl_name="${2}"
-	# For legacy versions - code can be removed at a future date
-	if [ "${legacymode}" == "1" ]; then
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-	# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
-	elif [ "${githubbranch}" == "master" ] && [ "${githubuser}" == "GameServerManager" ] && [ "${commandname}" != "UPDATE-LGSM" ]; then
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-	else
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-	fi
-	remote_fileurl_name="GitHub"
-	remote_fileurl_backup_name="Bitbucket"
-	local_filedir="${3}"
-	local_filename="${github_fileurl_name}"
-	chmodx="${4:-0}"
-	run="${5:-0}"
-	forcedl="${6:-0}"
-	hash="${7:-0}"
-	# Passes vars to the file download function.
-	fn_fetch_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${hash}"
-}
-
-fn_check_file_github() {
-	github_fileurl_dir="${1}"
-	github_fileurl_name="${2}"
-	if [ "${githubbranch}" == "master" ] && [ "${githubuser}" == "GameServerManager" ] && [ "${commandname}" != "UPDATE-LGSM" ]; then
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-	else
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-	fi
-	remote_fileurl_name="GitHub"
-	remote_fileurl_backup_name="Bitbucket"
-	fn_check_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${github_fileurl_name}"
-}
-
-# Fetches config files from the Git repo.
-fn_fetch_config() {
-	github_fileurl_dir="${1}"
-	github_fileurl_name="${2}"
-	# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
-	if [ "${githubbranch}" == "master" ] && [ "${githubuser}" == "GameServerManager" ] && [ "${commandname}" != "UPDATE-LGSM" ]; then
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-	else
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-	fi
-	remote_fileurl_name="GitHub"
-	remote_fileurl_backup_name="Bitbucket"
-	local_filedir="${3}"
-	local_filename="${4}"
-	chmodx="nochmodx"
-	run="norun"
-	forcedl="noforce"
-	hash="nohash"
-	# Passes vars to the file download function.
-	fn_fetch_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${hash}"
-}
-
-# Fetches modules from the Git repo during first download.
-fn_fetch_function() {
-	github_fileurl_dir="lgsm/functions"
-	github_fileurl_name="${functionfile}"
-	# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
-	if [ "${githubbranch}" == "master" ] && [ "${githubuser}" == "GameServerManager" ] && [ "${commandname}" != "UPDATE-LGSM" ]; then
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-	else
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-	fi
-	remote_fileurl_name="GitHub"
-	remote_fileurl_backup_name="Bitbucket"
-	local_filedir="${functionsdir}"
-	local_filename="${github_fileurl_name}"
-	chmodx="chmodx"
-	run="run"
-	forcedl="noforce"
-	hash="nohash"
-	# Passes vars to the file download function.
-	fn_fetch_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${hash}"
-}
-
-# Fetches modules from the Git repo during update-lgsm.
-fn_update_function() {
-	github_fileurl_dir="lgsm/functions"
-	github_fileurl_name="${functionfile}"
-	# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
-	if [ "${githubbranch}" == "master" ] && [ "${githubuser}" == "GameServerManager" ] && [ "${commandname}" != "UPDATE-LGSM" ]; then
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
-	else
-		remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-		remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
-	fi
-	remote_fileurl_name="GitHub"
-	remote_fileurl_backup_name="Bitbucket"
-	local_filedir="${functionsdir}"
-	local_filename="${github_fileurl_name}"
-	chmodx="chmodx"
-	run="norun"
-	forcedl="noforce"
-	hash="nohash"
-	# Passes vars to the file download function.
-	fn_fetch_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${hash}"
-
-}
-
-# Function to download latest github release.
-# $1 GitHub user / organisation.
-# $2 Repo name.
-# $3 Destination for download.
-# $4 Search string in releases (needed if there are more files that can be downloaded from the release pages).
-fn_dl_latest_release_github() {
-	local githubreleaseuser="${1}"
-	local githubreleaserepo="${2}"
-	local githubreleasedownloadpath="${3}"
-	local githubreleasesearch="${4}"
-	local githublatestreleaseurl="https://api.github.com/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
-
-	# Get last github release.
-	# If no search for the release filename is set, just get the first file from the latest release.
-	if [ -z "${githubreleasesearch}" ]; then
-		githubreleaseassets=$(curl -s "${githublatestreleaseurl}" | jq '[ .assets[] ]')
-	else
-		githubreleaseassets=$(curl -s "${githublatestreleaseurl}" | jq "[ .assets[]|select(.browser_download_url | contains(\"${githubreleasesearch}\")) ]")
-	fi
-
-	# Check how many releases we got from the api and exit if we have more then one.
-	if [ "$(echo -e "${githubreleaseassets}" | jq '. | length')" -gt 1 ]; then
-		fn_print_fatal_nl "Found more than one release to download - Please report this to the LinuxGSM issue tracker"
-		fn_script_log_fatal "Found more than one release to download - Please report this to the LinuxGSM issue tracker"
-	else
-		# Set variables for download via fn_fetch_file.
-		githubreleasefilename=$(echo -e "${githubreleaseassets}" | jq -r '.[]name')
-		githubreleasedownloadlink=$(echo -e "${githubreleaseassets}" | jq -r '.[]browser_download_url')
-
-		# Error if no version is there.
-		if [ -z "${githubreleasefilename}" ]; then
-			fn_print_fail_nl "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
-			fn_script_log_fatal "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
-		else
-			# Fetch file from the remote location from the existing function to the ${tmpdir} for now.
-			fn_fetch_file "${githubreleasedownloadlink}" "" "${githubreleasefilename}" "" "${githubreleasedownloadpath}" "${githubreleasefilename}"
-		fi
-	fi
-}

+ 0 - 61
lgsm/functions/core_exit.sh

@@ -1,61 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_exit.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Handles exiting of LinuxGSM by running and reporting an exit code.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_exit_dev_debug() {
-	if [ -f "${rootdir}/.dev-debug" ]; then
-		echo -e ""
-		echo -e "${functionselfname} exiting with code: ${exitcode}"
-		if [ -f "${rootdir}/dev-debug.log" ]; then
-			grep "functionfile=" "${rootdir}/dev-debug.log" | sed 's/functionfile=//g' > "${rootdir}/dev-debug-function-order.log"
-		fi
-	fi
-}
-
-# If running dependency check as root will remove any files that belong to root user.
-if [ "$(whoami)" == "root" ] && [ ! -f /.dockerenv ]; then
-	find "${lgsmdir}"/ -group root -prune -exec rm -rf {} + > /dev/null 2>&1
-	find "${logdir}"/ -group root -prune -exec rm -rf {} + > /dev/null 2>&1
-fi
-
-if [ "${exitbypass}" ]; then
-	unset exitbypass
-elif [ "${exitcode}" != "0" ]; then
-	# List LinuxGSM version in logs
-	fn_script_log_info "LinuxGSM version: ${version}"
-	if [ "${exitcode}" == "1" ]; then
-		fn_script_log_fatal "${functionselfname} exiting with code: ${exitcode}"
-	elif [ "${exitcode}" == "2" ]; then
-		fn_script_log_error "${functionselfname} exiting with code: ${exitcode}"
-	elif [ "${exitcode}" == "3" ]; then
-		fn_script_log_warn "${functionselfname} exiting with code: ${exitcode}"
-	else
-		fn_script_log_warn "${functionselfname} exiting with code: ${exitcode}"
-	fi
-	fn_exit_dev_debug
-	# remove trap.
-	trap - INT
-	exit "${exitcode}"
-elif [ "${exitcode}" ] && [ "${exitcode}" == "0" ]; then
-	# List LinuxGSM version in logs
-	fn_script_log_info "LinuxGSM version: ${version}"
-	fn_script_log_pass "${functionselfname} exiting with code: ${exitcode}"
-	fn_exit_dev_debug
-	# remove trap.
-	trap - INT
-	exit "${exitcode}"
-else
-	# List LinuxGSM version in logs
-	fn_script_log_info "LinuxGSM version: ${version}"
-	fn_print_error "No exit code set"
-	fn_script_log_pass "${functionselfname} exiting with code: NOT SET"
-	fn_exit_dev_debug
-	# remove trap.
-	trap - INT
-	exit "${exitcode}"
-fi

+ 0 - 816
lgsm/functions/core_functions.sh

@@ -1,816 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_functions.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Defines all functions to allow download and execution of functions using fn_fetch_function.
-# This function is called first before any other function. Without this file other functions will not load.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-modulesversion="v23.2.3"
-
-# Core
-
-core_dl.sh() {
-	functionfile="${FUNCNAME[0]}"
-	if [ "$(type fn_fetch_core_dl 2> /dev/null)" ]; then
-		fn_fetch_core_dl "lgsm/functions" "core_dl.sh" "${functionsdir}" "chmodx" "run" "noforcedl" "nohash"
-	else
-		fn_bootstrap_fetch_file_github "lgsm/functions" "core_dl.sh" "${functionsdir}" "chmodx" "run" "noforcedl" "nohash"
-	fi
-}
-
-core_messages.sh() {
-	functionfile="${FUNCNAME[0]}"
-	if [ "$(type fn_fetch_core_dl 2> /dev/null)" ]; then
-		fn_fetch_core_dl "lgsm/functions" "core_messages.sh" "${functionsdir}" "chmodx" "run" "noforcedl" "nohash"
-	else
-		fn_bootstrap_fetch_file_github "lgsm/functions" "core_messages.sh" "${functionsdir}" "chmodx" "run" "noforcedl" "nohash"
-	fi
-}
-
-core_legacy.sh() {
-	functionfile="${FUNCNAME[0]}"
-	if [ "$(type fn_fetch_core_dl 2> /dev/null)" ]; then
-		fn_fetch_core_dl "lgsm/functions" "core_legacy.sh" "${functionsdir}" "chmodx" "run" "noforcedl" "nohash"
-	else
-		fn_bootstrap_fetch_file_github "lgsm/functions" "core_legacy.sh" "${functionsdir}" "chmodx" "run" "noforcedl" "nohash"
-	fi
-}
-
-core_exit.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-core_getopt.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-core_trap.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-core_steamcmd.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-core_github.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Commands
-
-command_backup.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_console.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_debug.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_details.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_donate.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_postdetails.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_test_alert.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_monitor.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_start.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_stop.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_validate.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_install.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_install_resources_mta.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_squad_license.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_mods_install.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_mods_update.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_mods_remove.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_fastdl.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_ts3_server_pass.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_restart.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_skeleton.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_wipe.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_send.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Checks
-
-check.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_config.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_deps.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_executable.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_glibc.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_ip.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_last_update.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_logs.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_permissions.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_root.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_status.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_steamcmd.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_system_dir.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_system_requirements.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_tmuxception.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-check_version.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Compress
-
-compress_unreal2_maps.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-compress_ut99_maps.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Mods
-
-mods_list.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-mods_core.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Dev
-
-command_dev_clear_functions.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_dev_debug.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_dev_detect_deps.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_dev_detect_glibc.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_dev_detect_ldd.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_dev_query_raw.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Fix
-
-fix.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_ark.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_av.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_arma3.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_armar.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_bt.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_bo.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_cmw.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_csgo.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_dst.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_hw.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_ins.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_kf.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_kf2.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_lo.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_mcb.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_mta.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_nmrih.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_onset.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_ro.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_rust.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_rw.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_sfc.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_st.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_steamcmd.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_terraria.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_tf2.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_ut3.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_rust.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_samp.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_sdtd.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_sof2.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_squad.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_ts3.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_ut2k4.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_ut.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_unt.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_vh.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_wurm.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fix_zmr.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Info
-
-info_distro.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-info_game.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-info_messages.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-info_stats.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Alert
-
-alert.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_discord.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_email.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_ifttt.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_mailgun.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_pushbullet.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_pushover.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_gotify.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_telegram.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_rocketchat.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-alert_slack.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-# Logs
-
-core_logs.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Query
-
-query_gamedig.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Update
-
-command_update_functions.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_update_linuxgsm.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_update.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-command_check_update.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_ts3.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_minecraft.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_minecraft_bedrock.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_papermc.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_mta.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_factorio.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_jediknight2.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_steamcmd.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_vintagestory.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-update_ut99.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-fn_update_functions.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-#
-## Installer functions
-#
-
-fn_autoinstall() {
-	autoinstall=1
-	command_install.sh
-}
-
-install_complete.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_config.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_factorio_save.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_dst_token.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_eula.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_gsquery.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_gslt.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_header.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_logs.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_retry.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_server_dir.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-install_server_files.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_stats.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_steamcmd.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_ts3.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_ts3db.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_ut2k4.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_dl_ut2k4.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-install_ut2k4_key.sh() {
-	functionfile="${FUNCNAME[0]}"
-	fn_fetch_function
-}
-
-# Calls code required for legacy servers
-core_legacy.sh
-
-# Creates tmp dir if missing
-if [ ! -d "${tmpdir}" ]; then
-	mkdir -p "${tmpdir}"
-fi
-
-# Creates lock dir if missing
-if [ ! -d "${lockdir}" ]; then
-	mkdir -p "${lockdir}"
-fi
-
-# Calls on-screen messages (bootstrap)
-core_messages.sh
-
-#Calls file downloader (bootstrap)
-core_dl.sh
-
-# Calls the global Ctrl-C trap
-core_trap.sh

+ 0 - 215
lgsm/functions/core_getopt.sh

@@ -1,215 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_getopt.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: getopt arguments.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-### Define all commands here.
-## User commands | Trigger commands | Description
-# Standard commands.
-cmd_install=("i;install" "command_install.sh" "Install the server.")
-cmd_auto_install=("ai;auto-install" "fn_autoinstall" "Install the server without prompts.")
-cmd_start=("st;start" "command_start.sh" "Start the server.")
-cmd_stop=("sp;stop" "command_stop.sh" "Stop the server.")
-cmd_restart=("r;restart" "command_restart.sh" "Restart the server.")
-cmd_details=("dt;details" "command_details.sh" "Display server information.")
-cmd_postdetails=("pd;postdetails" "command_postdetails.sh" "Post details to termbin.com (removing passwords).")
-cmd_backup=("b;backup" "command_backup.sh" "Create backup archives of the server.")
-cmd_update_linuxgsm=("ul;update-lgsm;uf;update-functions" "command_update_linuxgsm.sh" "Check and apply any LinuxGSM updates.")
-cmd_test_alert=("ta;test-alert" "command_test_alert.sh" "Send a test alert.")
-cmd_monitor=("m;monitor" "command_monitor.sh" "Check server status and restart if crashed.")
-cmd_skeleton=("sk;skeleton" "command_skeleton.sh" "Create a skeleton directory.")
-cmd_donate=("do;donate" "command_donate.sh" "Donation options.")
-cmd_send=("sd;send" "command_send.sh" "Send command to game server console.")
-# Console servers only.
-cmd_console=("c;console" "command_console.sh" "Access server console.")
-cmd_debug=("d;debug" "command_debug.sh" "Start server directly in your terminal.")
-# Update servers only.
-cmd_update=("u;update" "command_update.sh" "Check and apply any server updates.")
-cmd_check_update=("cu;check-update" "command_check_update.sh" "Check if a gameserver update is available")
-cmd_force_update=("fu;force-update;update-restart;ur" "forceupdate=1; command_update.sh" "Apply server updates bypassing check.")
-# SteamCMD servers only.
-cmd_validate=("v;validate" "command_validate.sh" "Validate server files with SteamCMD.")
-# Server with mods-install.
-cmd_mods_install=("mi;mods-install" "command_mods_install.sh" "View and install available mods/addons.")
-cmd_mods_remove=("mr;mods-remove" "command_mods_remove.sh" "View and remove an installed mod/addon.")
-cmd_mods_update=("mu;mods-update" "command_mods_update.sh" "Update installed mods/addons.")
-# Server specific.
-cmd_change_password=("pw;change-password" "command_ts3_server_pass.sh" "Change TS3 serveradmin password.")
-cmd_install_default_resources=("ir;install-default-resources" "command_install_resources_mta.sh" "Install the MTA default resources.")
-cmd_fullwipe=("fw;full-wipe;wa;wipeall" "serverwipe=1; command_wipe.sh" "Reset the map and remove blueprint data.")
-cmd_mapwipe=("mw;map-wipe;w;wipe;wi" "mapwipe=1; command_wipe.sh" "Reset the map and keep blueprint data.")
-cmd_map_compressor_u99=("mc;map-compressor" "compress_ut99_maps.sh" "Compresses all ${gamename} server maps.")
-cmd_map_compressor_u2=("mc;map-compressor" "compress_unreal2_maps.sh" "Compresses all ${gamename} server maps.")
-cmd_install_cdkey=("cd;server-cd-key" "install_ut2k4_key.sh" "Add your server cd key.")
-cmd_install_dst_token=("ct;cluster-token" "install_dst_token.sh" "Configure cluster token.")
-cmd_install_squad_license=("li;license" "install_squad_license.sh" "Add your Squad server license.")
-cmd_fastdl=("fd;fastdl" "command_fastdl.sh" "Build a FastDL directory.")
-# Dev commands.
-cmd_dev_debug=("dev;developer" "command_dev_debug.sh" "Enable developer Mode.")
-cmd_dev_detect_deps=("dd;detect-deps" "command_dev_detect_deps.sh" "Detect required dependencies.")
-cmd_dev_detect_glibc=("dg;detect-glibc" "command_dev_detect_glibc.sh" "Detect required glibc.")
-cmd_dev_detect_ldd=("dl;detect-ldd" "command_dev_detect_ldd.sh" "Detect required dynamic dependencies.")
-cmd_dev_query_raw=("qr;query-raw" "command_dev_query_raw.sh" "The raw output of gamedig and gsquery.")
-cmd_dev_clear_functions=("cf;clear-functions" "command_dev_clear_functions.sh" "Delete the contents of the functions dir.")
-
-### Set specific opt here.
-
-currentopt=("${cmd_start[@]}" "${cmd_stop[@]}" "${cmd_restart[@]}" "${cmd_monitor[@]}" "${cmd_test_alert[@]}" "${cmd_details[@]}" "${cmd_postdetails[@]}" "${cmd_skeleton[@]}")
-
-# Update LinuxGSM.
-currentopt+=("${cmd_update_linuxgsm[@]}")
-
-# Exclude noupdate games here.
-if [ "${shortname}" == "jk2" ] || [ "${engine}" != "idtech3" ]; then
-	if [ "${shortname}" != "bf1942" ] && [ "${shortname}" != "bfv" ] && [ "${engine}" != "idtech2" ] && [ "${engine}" != "iw2.0" ] && [ "${engine}" != "iw3.0" ] && [ "${engine}" != "quake" ] && [ "${shortname}" != "samp" ] && [ "${shortname}" != "ut2k4" ]; then
-		currentopt+=("${cmd_update[@]}" "${cmd_check_update[@]}")
-		# force update for SteamCMD or Multi Theft Auto only.
-		if [ "${appid}" ] || [ "${shortname}" == "mta" ]; then
-			currentopt+=("${cmd_force_update[@]}")
-		fi
-	fi
-fi
-
-# Validate and check-update command.
-if [ "${appid}" ]; then
-	currentopt+=("${cmd_validate[@]}")
-fi
-
-# Backup.
-currentopt+=("${cmd_backup[@]}")
-
-# Console & Debug.
-currentopt+=("${cmd_console[@]}" "${cmd_debug[@]}")
-
-# Console send.
-if [ "${consoleinteract}" == "yes" ]; then
-	currentopt+=("${cmd_send[@]}")
-fi
-
-## Game server exclusive commands.
-
-# FastDL command.
-if [ "${engine}" == "source" ]; then
-	currentopt+=("${cmd_fastdl[@]}")
-fi
-
-# TeamSpeak exclusive.
-if [ "${shortname}" == "ts3" ]; then
-	currentopt+=("${cmd_change_password[@]}")
-fi
-
-# Rust exclusive.
-if [ "${shortname}" == "rust" ]; then
-	currentopt+=("${cmd_fullwipe[@]}" "${cmd_mapwipe[@]}")
-fi
-
-# Unreal exclusive.
-if [ "${engine}" == "unreal2" ]; then
-	if [ "${shortname}" == "ut2k4" ]; then
-		currentopt+=("${cmd_install_cdkey[@]}" "${cmd_map_compressor_u2[@]}")
-	else
-		currentopt+=("${cmd_map_compressor_u2[@]}")
-	fi
-fi
-if [ "${engine}" == "unreal" ]; then
-	currentopt+=("${cmd_map_compressor_u99[@]}")
-fi
-
-# DST exclusive.
-if [ "${shortname}" == "dst" ]; then
-	currentopt+=("${cmd_install_dst_token[@]}")
-fi
-
-# MTA exclusive.
-if [ "${shortname}" == "mta" ]; then
-	currentopt+=("${cmd_install_default_resources[@]}")
-fi
-
-# Squad license exclusive.
-if [ "${shortname}" == "squad" ]; then
-	currentopt+=("${cmd_install_squad_license[@]}")
-fi
-
-## Mods commands.
-if [ "${engine}" == "source" ] || [ "${shortname}" == "rust" ] || [ "${shortname}" == "hq" ] || [ "${shortname}" == "sdtd" ] || [ "${shortname}" == "cs" ] || [ "${shortname}" == "dod" ] || [ "${shortname}" == "tfc" ] || [ "${shortname}" == "ns" ] || [ "${shortname}" == "ts" ] || [ "${shortname}" == "hldm" ] || [ "${shortname}" == "vh" ]; then
-	currentopt+=("${cmd_mods_install[@]}" "${cmd_mods_remove[@]}" "${cmd_mods_update[@]}")
-fi
-
-## Installer.
-currentopt+=("${cmd_install[@]}" "${cmd_auto_install[@]}")
-
-## Developer commands.
-currentopt+=("${cmd_dev_debug[@]}")
-if [ -f ".dev-debug" ]; then
-	currentopt+=("${cmd_dev_detect_deps[@]}" "${cmd_dev_detect_glibc[@]}" "${cmd_dev_detect_ldd[@]}" "${cmd_dev_query_raw[@]}" "${cmd_dev_clear_functions[@]}")
-fi
-
-## Donate.
-currentopt+=("${cmd_donate[@]}")
-
-### Build list of available commands.
-optcommands=()
-index="0"
-for ((index = "0"; index < ${#currentopt[@]}; index += 3)); do
-	cmdamount=$(echo -e "${currentopt[index]}" | awk -F ';' '{ print NF }')
-	for ((cmdindex = 1; cmdindex <= cmdamount; cmdindex++)); do
-		optcommands+=("$(echo -e "${currentopt[index]}" | awk -F ';' -v x=${cmdindex} '{ print $x }')")
-	done
-done
-
-# Shows LinuxGSM usage.
-fn_opt_usage() {
-	echo -e "Usage: $0 [option]"
-	echo -e ""
-	echo -e "LinuxGSM - ${gamename} - Version ${version}"
-	echo -e "https://linuxgsm.com/${gameservername}"
-	echo -e ""
-	echo -e "${lightyellow}Commands${default}"
-	# Display available commands.
-	index="0"
-	{
-		for ((index = "0"; index < ${#currentopt[@]}; index += 3)); do
-			# Hide developer commands.
-			if [ "${currentopt[index + 2]}" != "DEVCOMMAND" ]; then
-				echo -e "${cyan}$(echo -e "${currentopt[index]}" | awk -F ';' '{ print $2 }')\t${default}$(echo -e "${currentopt[index]}" | awk -F ';' '{ print $1 }')\t| ${currentopt[index + 2]}"
-			fi
-		done
-	} | column -s $'\t' -t
-	fn_script_log_pass "Display commands"
-	core_exit.sh
-}
-
-# Check if command existw and run corresponding scripts, or display script usage.
-if [ -z "${getopt}" ]; then
-	fn_opt_usage
-fi
-# If command exists.
-for i in "${optcommands[@]}"; do
-	if [ "${i}" == "${getopt}" ]; then
-		# Seek and run command.
-		index="0"
-		for ((index = "0"; index < ${#currentopt[@]}; index += 3)); do
-			currcmdamount=$(echo -e "${currentopt[index]}" | awk -F ';' '{ print NF }')
-			for ((currcmdindex = 1; currcmdindex <= currcmdamount; currcmdindex++)); do
-				if [ "$(echo -e "${currentopt[index]}" | awk -F ';' -v x=${currcmdindex} '{ print $x }')" == "${getopt}" ]; then
-					# Run command.
-					eval "${currentopt[index + 1]}"
-					# Exit should occur in modules. Should this not happen print an error
-					fn_print_error2_nl "Command did not exit correctly: ${getopt}"
-					fn_script_log_error "Command did not exit correctly: ${getopt}"
-					core_exit.sh
-				fi
-			done
-		done
-	fi
-done
-
-# If we're executing this, it means command was not found.
-fn_print_error2_nl "Unknown command: $0 ${getopt}"
-fn_script_log_error "Unknown command: $0 ${getopt}"
-fn_opt_usage
-core_exit.sh

+ 0 - 114
lgsm/functions/core_github.sh

@@ -1,114 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_github.sh function
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: core function file for updates via github
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-github_api="https://api.github.com"
-
-fn_githublocalversionfile() {
-	local githubreleaseuser="${1}"
-	local githubreleaserepo="${2}"
-
-	githublocalversionfile="${datadir}/github-${githubreleaseuser}-${githubreleaserepo}-version"
-}
-
-# $1 githubuser/group
-# $2 github repo name
-fn_github_get_latest_release_version() {
-	local githubreleaseuser="${1}"
-	local githubreleaserepo="${2}"
-	local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
-
-	githubreleaseversion=$(curl -s --connect-timeout 10 "${githublatestreleaseurl}" | jq '.tag_name')
-
-	# error if no version is there
-	if [ -z "${githubreleaseversion}" ]; then
-		fn_print_fail_nl "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
-		fn_script_log_fatal "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
-	fi
-}
-
-# $1 githubuser/group
-# $2 github repo name
-fn_github_set_latest_release_version() {
-	local githubreleaseuser="${1}"
-	local githubreleaserepo="${2}"
-
-	fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
-
-	local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
-	githubreleaseversion=$(curl -s "${githublatestreleaseurl}" | jq -r '.tag_name')
-
-	# error if no version is there
-	if [ -z "${githubreleaseversion}" ]; then
-		fn_print_fail_nl "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
-		fn_script_log_fatal "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
-	else
-		echo "${githubreleaseversion}" > "${githublocalversionfile}"
-	fi
-}
-
-# $1 githubuser/group
-# $2 github repo name
-fn_github_get_installed_version() {
-	local githubreleaseuser="${1}"
-	local githubreleaserepo="${2}"
-
-	fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
-
-	githublocalversion=$(cat "${githublocalversionfile}")
-}
-
-# $1 githubuser/group
-# $2 github repo name
-# if a update needs to be downloaded - updateneeded is set to 1
-fn_github_compare_version() {
-	local githubreleaseuser="${1}"
-	local githubreleaserepo="${2}"
-	exitcode=0
-	updateneeded=0
-
-	fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
-	local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
-
-	githublocalversion=$(cat "${githublocalversionfile}")
-	githubreleaseversion=$(curl -s "${githublatestreleaseurl}" | jq '.tag_name')
-
-	# error if no version is there
-	if [ -z "${githubreleaseversion}" ]; then
-		fn_print_fail_nl "Can not get version from Github Api for ${githubreleaseuser}/${githubreleaserepo}"
-		fn_script_log_fatal "Can not get version from Github Api for ${githubreleaseuser}/${githubreleaserepo}"
-	else
-		if [ "${githublocalversion}" == "${githubreleaseversion}" ]; then
-			echo -en "\n"
-			echo -e "No update from github.com/${githubreleaseuser}/${githubreleaserepo}/ available:"
-			echo -e "* Local build: ${red}${githublocalversion}${default}"
-			echo -e "* Remote build: ${green}${githubreleaseversion}${default}"
-			echo -en "\n"
-		else
-			# check if version that is installed is higher than the remote version to not override it
-			last_version=$(echo -e "${githublocalversion}\n${githubreleaseversion}" | sort -V | head -n1)
-			if [ "${githubreleaseversion}" == "${last_version}" ]; then
-				echo -en "\n"
-				echo -e "Update from github.com/${githubreleaseuser}/${githubreleaserepo}/ available:"
-				echo -e "* Local build: ${red}${githublocalversion}${default}"
-				echo -e "* Remote build: ${green}${githubreleaseversion}${default}"
-				echo -en "\n"
-				updateneeded=1
-			else
-				# local version is higher than the remote version output this to the user
-				# strange case but could be possible, as a release could be removed from github
-				echo -en "\n"
-				echo -e "Local version is newer than the remote version"
-				echo -e "* Local version: ${green}${githublocalversion}${default}"
-				echo -e "* Remote version: ${green}${githubreleaseversion}${default}"
-				echo -en "\n"
-				exitcode=1
-			fi
-		fi
-	fi
-}

+ 0 - 84
lgsm/functions/core_legacy.sh

@@ -1,84 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_legacy.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Code for backwards compatability with older versions of LinuxGSM.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# This is to help the transition to v20.3.0 and above
-legacy_versions_array=(v20.2.1 v20.2.0 v20.1.5 v20.1.4 v20.1.3 v20.1.2 v20.1.1 v20.1.0 v19.12.5 v19.12.4 v19.12.3 v19.12.2 v19.12.1 v19.12.0)
-for legacy_version in "${legacy_versions_array[@]}"; do
-	if [ "${version}" == "${legacy_version}" ]; then
-		legacymode=1
-	fi
-done
-
-if [ -z "${serverfiles}" ]; then
-	serverfiles="${filesdir}"
-fi
-
-if [ -z "${logdir}" ]; then
-	[ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log"
-fi
-
-if [ -z "${lgsmlogdir}" ]; then
-	lgsmlogdir="${scriptlogdir}"
-fi
-
-if [ -z "${lgsmlog}" ]; then
-	lgsmlog="${scriptlog}"
-fi
-
-if [ -z "${lgsmlogdate}" ]; then
-	lgsmlogdate="${scriptlogdate}"
-fi
-
-if [ -z "${steamcmddir}" ]; then
-	steamcmddir="${HOME}/.steam/steamcmd"
-fi
-
-if [ -z "${lgsmdir}" ]; then
-	lgsmdir="${rootdir}/lgsm"
-fi
-
-if [ -z "${tmpdir}" ]; then
-	tmpdir="${lgsmdir}/tmp"
-fi
-
-if [ -z "${alertlog}" ]; then
-	alertlog="${emaillog}"
-fi
-
-if [ -z "${servicename}" ]; then
-	servicename="${selfname}"
-fi
-
-# Alternations to workshop variables.
-if [ -z "${wsapikey}" ]; then
-	if [ "${workshopauth}" ]; then
-		wsapikey="${workshopauth}"
-	elif [ "${authkey}" ]; then
-		wsapikey="${authkey}"
-	fi
-fi
-
-if [ -z "${wscollectionid}" ]; then
-	if [ "${workshopauth}" ]; then
-		wscollectionid="${ws_collection_id}"
-	elif [ "${authkey}" ]; then
-		wscollectionid="${workshopcollectionid}"
-	fi
-fi
-
-if [ -z "${wsstartmap}" ]; then
-	if [ "${ws_start_map}" ]; then
-		wscollectionid="${ws_start_map}"
-	fi
-fi
-
-fn_parms() {
-	fn_reload_startparameters
-	parms="${startparameters}"
-}

+ 0 - 110
lgsm/functions/core_logs.sh

@@ -1,110 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_logs.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Acts as a log rotator, removing old logs.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Check if logfile variable and file exist, create logfile if it doesn't exist.
-if [ "${consolelog}" ]; then
-	if [ ! -f "${consolelog}" ]; then
-		touch "${consolelog}"
-	fi
-fi
-
-# For games not displaying a console, and having logs into their game directory.
-check_status.sh
-if [ "${status}" != "0" ] && [ "${commandname}" == "START" ] && [ -n "${gamelogfile}" ]; then
-	if [ "$(find "${systemdir}" -name "gamelog*.log")" ]; then
-		fn_print_info "Moving game logs to ${gamelogdir}"
-		fn_script_log_info "Moving game logs to ${gamelogdir}"
-		echo -en "\n"
-		fn_sleep_time
-		mv "${systemdir}"/gamelog*.log "${gamelogdir}"
-	fi
-fi
-
-# Log manager will start the cleanup if it finds logs older than "${logdays}".
-if [ "$(find "${lgsmlogdir}"/ -type f -mtime +"${logdays}" | wc -l)" -ne "0" ]; then
-	fn_print_dots "Starting"
-	# Set common logs directories
-	commonlogs="${systemdir}/logs"
-	commonsourcelogs="${systemdir}/*/logs"
-	# Set addon logs directories
-	sourcemodlogdir="${systemdir}/addons/sourcemod/logs"
-	ulxlogdir="${systemdir}/data/ulx_logs"
-	darkrplogdir="${systemdir}/data/darkrp_logs"
-	legacyserverlogdir="${logdir}/server"
-	# Setting up counting variables
-	scriptcount="0"
-	consolecount="0"
-	gamecount="0"
-	srcdscount="0"
-	smcount="0"
-	ulxcount="0"
-	darkrpcount="0"
-	legacycount="0"
-	fn_sleep_time
-	fn_print_info "Removing logs older than ${logdays} days"
-	fn_script_log_info "Removing logs older than ${logdays} days"
-	# Logging logfiles to be removed according to "${logdays}", counting and removing them.
-	# Script logfiles.
-	find "${lgsmlogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-	scriptcount=$(find "${lgsmlogdir}"/ -type f -mtime +"${logdays}" | wc -l)
-	find "${lgsmlogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-	# SRCDS and unreal logfiles.
-	if [ "${engine}" == "unreal2" ] || [ "${engine}" == "source" ]; then
-		find "${gamelogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-		gamecount=$(find "${gamelogdir}"/ -type f -mtime +"${logdays}" | wc -l)
-		find "${gamelogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-	fi
-	# Console logfiles.
-	if [ "${consolelog}" ]; then
-		find "${consolelogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-		consolecount=$(find "${consolelogdir}"/ -type f -mtime +"${logdays}" | wc -l)
-		find "${consolelogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-	fi
-	# Common logfiles.
-	if [ -d "${commonlogs}" ]; then
-		find "${commonlogs}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-		smcount=$(find "${commonlogs}"/ -type f -mtime +"${logdays}" | wc -l)
-		find "${commonlogs}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-	fi
-	if [ -d "${commonsourcelogs}" ]; then
-		find "${commonsourcelogs}"/* -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-		smcount=$(find "${commonsourcelogs}"/* -type f -mtime +"${logdays}" | wc -l)
-		find "${commonsourcelogs}"/* -mtime +"${logdays}" -type f -exec rm -f {} \;
-	fi
-	# Source addons logfiles.
-	if [ "${engine}" == "source" ]; then
-		# SourceMod logfiles.
-		if [ -d "${sourcemodlogdir}" ]; then
-			find "${sourcemodlogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-			smcount=$(find "${sourcemodlogdir}"/ -type f -mtime +"${logdays}" | wc -l)
-			find "${sourcemodlogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-		fi
-		# Garry's Mod logfiles.
-		if [ "${shortname}" == "gmod" ]; then
-			# ULX logfiles.
-			if [ -d "${ulxlogdir}" ]; then
-				find "${ulxlogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-				ulxcount=$(find "${ulxlogdir}"/ -type f -mtime +"${logdays}" | wc -l)
-				find "${ulxlogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-			fi
-			# DarkRP logfiles.
-			if [ -d "${darkrplogdir}" ]; then
-				find "${darkrplogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}"
-				darkrpcount=$(find "${darkrplogdir}"/ -type f -mtime +"${logdays}" | wc -l)
-				find "${darkrplogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-			fi
-		fi
-	fi
-
-	# Count total amount of files removed.
-	countlogs=$((scriptcount + consolecount + gamecount + srcdscount + smcount + ulxcount + darkrpcount))
-	# Job done.
-	fn_print_ok "Removed ${countlogs} log files"
-	fn_script_log "Removed ${countlogs} log files"
-fi

+ 0 - 598
lgsm/functions/core_messages.sh

@@ -1,598 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_messages.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Defines on-screen messages such as [  OK  ] and how script logs look.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# nl: new line: message is following by a new line.
-# eol: end of line: message is placed at the end of the current line.
-fn_ansi_loader() {
-	if [ "${ansi}" != "off" ]; then
-		# echo colors
-		default="\e[0m"
-		black="\e[30m"
-		red="\e[31m"
-		lightred="\e[91m"
-		green="\e[32m"
-		lightgreen="\e[92m"
-		yellow="\e[33m"
-		lightyellow="\e[93m"
-		blue="\e[34m"
-		lightblue="\e[94m"
-		magenta="\e[35m"
-		lightmagenta="\e[95m"
-		cyan="\e[36m"
-		lightcyan="\e[96m"
-		darkgrey="\e[90m"
-		lightgrey="\e[37m"
-		white="\e[97m"
-	fi
-	# carriage return & erase to end of line.
-	creeol="\r\033[K"
-}
-
-fn_sleep_time() {
-	if [ "${sleeptime}" != "0" ] || [ "${travistest}" != "1" ]; then
-		if [ -z "${sleeptime}" ]; then
-			sleeptime=0.5
-		fi
-		sleep "${sleeptime}"
-	fi
-}
-
-# Log display
-########################
-## Feb 28 14:56:58 ut99-server: Monitor:
-fn_script_log() {
-	if [ -d "${lgsmlogdir}" ]; then
-		if [ -n "${commandname}" ]; then
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${commandname}: ${1}" >> "${lgsmlog}"
-		else
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${1}" >> "${lgsmlog}"
-		fi
-	fi
-}
-
-## Feb 28 14:56:58 ut99-server: Monitor: PASS:
-fn_script_log_pass() {
-	if [ -d "${lgsmlogdir}" ]; then
-
-		if [ -n "${commandname}" ]; then
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${commandname}: PASS: ${1}" >> "${lgsmlog}"
-		else
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: PASS: ${1}" >> "${lgsmlog}"
-		fi
-	fi
-	exitcode=0
-}
-
-## Feb 28 14:56:58 ut99-server: Monitor: FATAL:
-fn_script_log_fatal() {
-	if [ -d "${lgsmlogdir}" ]; then
-		if [ -n "${commandname}" ]; then
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${commandname}: FATAL: ${1}" >> "${lgsmlog}"
-		else
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: FATAL: ${1}" >> "${lgsmlog}"
-		fi
-	fi
-	exitcode=1
-}
-
-## Feb 28 14:56:58 ut99-server: Monitor: ERROR:
-fn_script_log_error() {
-	if [ -d "${lgsmlogdir}" ]; then
-		if [ -n "${commandname}" ]; then
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${commandname}: ERROR: ${1}" >> "${lgsmlog}"
-		else
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ERROR: ${1}" >> "${lgsmlog}"
-		fi
-	fi
-	exitcode=2
-}
-
-## Feb 28 14:56:58 ut99-server: Monitor: WARN:
-fn_script_log_warn() {
-	if [ -d "${lgsmlogdir}" ]; then
-		if [ -n "${commandname}" ]; then
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${commandname}: WARN: ${1}" >> "${lgsmlog}"
-		else
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: WARN: ${1}" >> "${lgsmlog}"
-		fi
-	fi
-	exitcode=3
-}
-
-## Feb 28 14:56:58 ut99-server: Monitor: INFO:
-fn_script_log_info() {
-	if [ -d "${lgsmlogdir}" ]; then
-		if [ -n "${commandname}" ]; then
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${commandname}: INFO: ${1}" >> "${lgsmlog}"
-		else
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: INFO: ${1}" >> "${lgsmlog}"
-		fi
-	fi
-}
-
-## Feb 28 14:56:58 ut99-server: Monitor: UPDATE:
-fn_script_log_update() {
-	if [ -d "${lgsmlogdir}" ]; then
-		if [ -n "${commandname}" ]; then
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: ${commandname}: UPDATE: ${1}" >> "${lgsmlog}"
-		else
-			echo -e "$(date '+%b %d %H:%M:%S.%3N') ${selfname}: UPDATE: ${1}" >> "${lgsmlog}"
-		fi
-	fi
-}
-
-# On-Screen - Automated functions
-##################################
-
-# [ .... ]
-fn_print_dots() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[ .... ] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[ .... ] $*"
-	fi
-	fn_sleep_time
-}
-
-fn_print_dots_nl() {
-	if [ "${commandaction}" ]; then
-		echo -e "${creeol}[ .... ] ${commandaction} ${selfname}: $*"
-	else
-		echo -e "${creeol}[ .... ] $*"
-	fi
-	fn_sleep_time
-	echo -en "\n"
-}
-
-# [  OK  ]
-fn_print_ok() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${green}  OK  ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${green}  OK  ${default}] $*"
-	fi
-	fn_sleep_time
-}
-
-fn_print_ok_nl() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${green}  OK  ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${green}  OK  ${default}] $*"
-	fi
-	fn_sleep_time
-	echo -en "\n"
-}
-
-# [ FAIL ]
-fn_print_fail() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${red} FAIL ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${red} FAIL ${default}] $*"
-	fi
-	fn_sleep_time
-}
-
-fn_print_fail_nl() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${red} FAIL ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${red} FAIL ${default}] $*"
-	fi
-	fn_sleep_time
-	echo -en "\n"
-}
-
-# [ ERROR ]
-fn_print_error() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${red} ERROR ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${red} ERROR ${default}] $*"
-	fi
-	fn_sleep_time
-}
-
-fn_print_error_nl() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${red} ERROR ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${red} ERROR ${default}] $*"
-	fi
-	fn_sleep_time
-	echo -en "\n"
-}
-
-# [ WARN ]
-fn_print_warn() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${lightyellow} WARN ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${lightyellow} WARN ${default}] $*"
-	fi
-	fn_sleep_time
-}
-
-fn_print_warn_nl() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${lightyellow} WARN ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${lightyellow} WARN ${default}] $*"
-	fi
-	fn_sleep_time
-	echo -en "\n"
-}
-
-# [ INFO ]
-fn_print_info() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${cyan} INFO ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${cyan} INFO ${default}] $*"
-	fi
-	fn_sleep_time
-}
-
-fn_print_info_nl() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${cyan} INFO ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${cyan} INFO ${default}] $*"
-	fi
-	fn_sleep_time
-	echo -en "\n"
-}
-
-# [ START ]
-fn_print_start() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${lightgreen} START ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${lightgreen} START ${default}] $*"
-	fi
-	fn_sleep_time
-}
-
-fn_print_start_nl() {
-	if [ "${commandaction}" ]; then
-		echo -en "${creeol}[${lightgreen} START ${default}] ${commandaction} ${selfname}: $*"
-	else
-		echo -en "${creeol}[${lightgreen} START ${default}] $*"
-	fi
-	fn_sleep_time
-	echo -en "\n"
-}
-
-# On-Screen - Interactive messages
-##################################
-
-# No More Room in Hell Debug
-# =================================
-fn_print_header() {
-	echo -e ""
-	echo -e "${lightyellow}${gamename} ${commandaction}${default}"
-	echo -e "=================================${default}"
-}
-
-# Complete!
-fn_print_complete() {
-	echo -en "${green}Complete!${default} $*"
-	fn_sleep_time
-}
-
-fn_print_complete_nl() {
-	echo -e "${green}Complete!${default} $*"
-	fn_sleep_time
-}
-
-# Failure!
-fn_print_failure() {
-	echo -en "${red}Failure!${default} $*"
-	fn_sleep_time
-}
-
-fn_print_failure_nl() {
-	echo -e "${red}Failure!${default} $*"
-	fn_sleep_time
-}
-
-# Error!
-fn_print_error2() {
-	echo -en "${red}Error!${default} $*"
-	fn_sleep_time
-}
-
-fn_print_error2_nl() {
-	echo -e "${red}Error!${default} $*"
-	fn_sleep_time
-}
-
-# Warning!
-fn_print_warning() {
-	echo -en "${lightyellow}Warning!${default} $*"
-	fn_sleep_time
-}
-
-fn_print_warning_nl() {
-	echo -e "${lightyellow}Warning!${default} $*"
-	fn_sleep_time
-}
-
-# Information!
-fn_print_information() {
-	echo -en "${cyan}Information!${default} $*"
-	fn_sleep_time
-}
-
-fn_print_information_nl() {
-	echo -e "${cyan}Information!${default} $*"
-	fn_sleep_time
-}
-
-# Y/N Prompt
-fn_prompt_yn() {
-	local prompt="$1"
-	local initial="$2"
-
-	if [ "${initial}" == "Y" ]; then
-		prompt+=" [Y/n] "
-	elif [ "${initial}" == "N" ]; then
-		prompt+=" [y/N] "
-	else
-		prompt+=" [y/n] "
-	fi
-
-	while true; do
-		read -e -i "${initial}" -p "${prompt}" -r yn
-		case "${yn}" in
-			[Yy] | [Yy][Ee][Ss]) return 0 ;;
-			[Nn] | [Nn][Oo]) return 1 ;;
-			*) echo -e "Please answer yes or no." ;;
-		esac
-	done
-}
-
-# Prompt for message
-fn_prompt_message() {
-	while true; do
-		unset prompt
-		local prompt="$1"
-		read -e -p "${prompt}" -r answer
-		if fn_prompt_yn "Continue" Y; then
-			break
-		fi
-	done
-	echo "${answer}"
-}
-
-# On-Screen End of Line
-##################################
-
-# YES
-fn_print_yes_eol() {
-	echo -en "${cyan}YES${default}"
-	fn_sleep_time
-}
-
-fn_print_yes_eol_nl() {
-	echo -e "${cyan}YES${default}"
-	fn_sleep_time
-}
-
-# NO
-fn_print_no_eol() {
-	echo -en "${red}NO${default}"
-	fn_sleep_time
-}
-
-fn_print_no_eol_nl() {
-	echo -e "${red}NO${default}"
-	fn_sleep_time
-}
-
-# OK
-fn_print_ok_eol() {
-	echo -en "${green}OK${default}"
-	fn_sleep_time
-}
-
-fn_print_ok_eol_nl() {
-	echo -e "${green}OK${default}"
-	fn_sleep_time
-}
-
-# FAIL
-fn_print_fail_eol() {
-	echo -en "${red}FAIL${default}"
-	fn_sleep_time
-}
-
-fn_print_fail_eol_nl() {
-	echo -e "${red}FAIL${default}"
-	fn_sleep_time
-}
-
-# ERROR
-fn_print_error_eol() {
-	echo -en "${red}ERROR${default}"
-	fn_sleep_time
-}
-
-fn_print_error_eol_nl() {
-	echo -e "${red}ERROR${default}"
-	fn_sleep_time
-}
-
-# WAIT
-fn_print_wait_eol() {
-	echo -en "${cyan}WAIT${default}"
-	fn_sleep_time
-}
-
-fn_print_wait_eol_nl() {
-	echo -e "${cyan}WAIT${default}"
-	fn_sleep_time
-}
-
-# WARN
-fn_print_warn_eol() {
-	echo -en "${lightyellow}WARN${default}"
-	fn_sleep_time
-}
-
-fn_print_warn_eol_nl() {
-	echo -e "${lightyellow}WARN${default}"
-	fn_sleep_time
-}
-
-# INFO
-fn_print_info_eol() {
-	echo -en "${cyan}INFO${default}"
-	fn_sleep_time
-}
-
-fn_print_info_eol_nl() {
-	echo -e "${cyan}INFO${default}"
-	fn_sleep_time
-}
-
-# QUERYING
-fn_print_querying_eol() {
-	echo -en "${cyan}QUERYING${default}"
-	fn_sleep_time
-}
-
-fn_print_querying_eol_nl() {
-	echo -e "${cyan}QUERYING${default}"
-	fn_sleep_time
-}
-
-# CHECKING
-fn_print_checking_eol() {
-	echo -en "${cyan}CHECKING${default}"
-	fn_sleep_time
-}
-
-fn_print_checking_eol_nl() {
-	echo -e "${cyan}CHECKING${default}"
-	fn_sleep_time
-}
-
-# DELAY
-fn_print_delay_eol() {
-	echo -en "${green}DELAY${default}"
-	fn_sleep_time
-}
-
-fn_print_delay_eol_nl() {
-	echo -e "${green}DELAY${default}"
-	fn_sleep_time
-}
-
-# CANCELED
-fn_print_canceled_eol() {
-	echo -en "${lightyellow}CANCELED${default}"
-	fn_sleep_time
-}
-
-fn_print_canceled_eol_nl() {
-	echo -e "${lightyellow}CANCELED${default}"
-	fn_sleep_time
-}
-
-# REMOVED
-fn_print_removed_eol() {
-	echo -en "${red}REMOVED${default}"
-	fn_sleep_time
-}
-
-fn_print_removed_eol_nl() {
-	echo -e "${red}REMOVED${default}"
-	fn_sleep_time
-}
-
-# UPDATE
-fn_print_update_eol() {
-	echo -en "${cyan}UPDATE${default}"
-	fn_sleep_time
-}
-
-fn_print_update_eol_nl() {
-	echo -e "${cyan}UPDATE${default}"
-	fn_sleep_time
-}
-
-fn_print_ascii_logo() {
-	echo -e ""
-	echo -e "                                mdMMMMbm"
-	echo -e "                              mMMMMMMMMMMm"
-	echo -e "                              mMMMMMMMMMMMMm"
-	echo -e "                             mMMMMMMMMMMMMMMm"
-	echo -e "                             hMMMV^VMMV^VMMMh"
-	echo -e "                             MMMMM  MM  MMMMM"
-	echo -e "                             hMMs   vv   sMMh"
-	echo -e "                            hMMM:        :MMMh"
-	echo -e "                          .hMMMh          hMMMh."
-	echo -e "                         -dMMMh     ${lightgrey}__${default}     hMMMd-"
-	echo -e "                        :mMMMs      ${lightgrey}||${default}      sMMMm:"
-	echo -e "                       :MMMM+       ${lightgrey}||${default} ${red}_${default}     +NMMN:"
-	echo -e "                      .mMMM+     ${lightgrey}========${default}     +MMMm."
-	echo -e "                      yMMMy   ${darkgrey}##############${default}   yMMMy"
-	echo -e "                      mMMM:   ${darkgrey}##############${default}   :MMMm"
-	echo -e "                      mMM   ${lightyellow}nn${default}   ${lightyellow}nn${default}    ${lightyellow}nn${default}   ${lightyellow}nn${default}   MMm"
-	echo -e "                      o   ${lightyellow}nNNNNNNNn${default}    ${lightyellow}nNNNNNNNn${default}   o"
-	echo -e "                         ${lightyellow}nNNNNNNNNNn${default}  ${lightyellow}nNNNNNNNNNn${default}"
-	echo -e "                        ${lightyellow}nNNNNNNNNNNN${default}  ${lightyellow}NNNNNNNNNNNn${default}"
-	echo -e "                         ${lightyellow}+NNNNNNNNN:${default}  ${lightyellow}:NNNNNNNNN+${default}"
-	echo -e "                           ${lightyellow}nNNNNNNN${default} /\ ${lightyellow}NNNNNNNn${default}"
-	echo -e "                             ${lightyellow}nnnnn${default}  db  ${lightyellow}nnnnn${default}"
-	echo -e ""
-	echo -e "${lightyellow}888${default}      ${lightyellow}d8b${default}                             ${default}.d8888b.   .d8888b.  888b     d888"
-	echo -e "${lightyellow}888      Y8P                            ${default}d88P  Y88b d88P  Y88b 8888b   d8888"
-	echo -e "${lightyellow}888${default}                                     ${default}888${default}    888 Y88b.      88888b.d88888"
-	echo -e "${lightyellow}888${default}      ${lightyellow}888${default} ${lightyellow}88888b.${default}  ${lightyellow}888${default}  ${lightyellow}888${default} ${lightyellow}888${default}  ${lightyellow}888${default} 888          Y888b.   888Y88888P888"
-	echo -e "${lightyellow}888${default}      ${lightyellow}888${default} ${lightyellow}888${default}  ${lightyellow}88b${default} ${lightyellow}888${default}  ${lightyellow}888${default}  ${lightyellow}Y8bd8P${default}  888  88888      Y88b. 888 Y888P 888"
-	echo -e "${lightyellow}888${default}      ${lightyellow}888${default} ${lightyellow}888${default}  ${lightyellow}888${default} ${lightyellow}888${default}  ${lightyellow}888${default}   ${lightyellow}X88K${default}   888    888        888 888  Y8P  888"
-	echo -e "${lightyellow}888${default}      ${lightyellow}888${default} ${lightyellow}888${default}  ${lightyellow}888${default} ${lightyellow}Y88b${default} ${lightyellow}88Y${default} ${lightyellow}.d8pq8b.${default} Y88b  d88P Y88b  d88P 888   *   888"
-	echo -e "${lightyellow}LinuxGSM${default} ${lightyellow}888${default} ${lightyellow}888${default}  ${lightyellow}888${default}  ${lightyellow}Y8888Y${default}  ${lightyellow}888${default}  ${lightyellow}888${default}   Y2012P88   Y8888P   888       888"
-	echo -e ""
-}
-
-fn_print_restart_warning() {
-	fn_print_warn "${selfname} will be restarted"
-	fn_script_log_warn "${selfname} will be restarted"
-	totalseconds=3
-	for seconds in {3..1}; do
-		fn_print_warn "${selfname} will be restarted: ${totalseconds}"
-		totalseconds=$((totalseconds - 1))
-		sleep 1
-		if [ "${seconds}" == "0" ]; then
-			break
-		fi
-	done
-	fn_print_warn_nl "${selfname} will be restarted"
-}
-
-# Functions below are used to ensure that logs and UI correctly reflect the command it is actually running.
-# Useful when a command has to call upon another command causing the other command to overrite commandname variables
-
-# Used to remember the command that ran first.
-fn_firstcommand_set() {
-	if [ -z "${firstcommandname}" ]; then
-		firstcommandname="${commandname}"
-		firstcommandaction="${commandaction}"
-	fi
-}
-
-# Used to reset commandname variables to the command the script ran first.
-fn_firstcommand_reset() {
-	commandname="${firstcommandname}"
-	commandaction="${firstcommandaction}"
-}

+ 0 - 816
lgsm/functions/core_modules.sh

@@ -1,816 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_modules.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Defines all modules to allow download and execution of modules using fn_fetch_module.
-# This module is called first before any other module. Without this file other modules will not load.
-
-moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-modulesversion="v23.3.1"
-
-# Core
-
-core_dl.sh() {
-	modulefile="${FUNCNAME[0]}"
-	if [ "$(type fn_fetch_core_dl 2> /dev/null)" ]; then
-		fn_fetch_core_dl "lgsm/modules" "core_dl.sh" "${modulesdir}" "chmodx" "run" "noforcedl" "nohash"
-	else
-		fn_bootstrap_fetch_file_github "lgsm/modules" "core_dl.sh" "${modulesdir}" "chmodx" "run" "noforcedl" "nohash"
-	fi
-}
-
-core_messages.sh() {
-	modulefile="${FUNCNAME[0]}"
-	if [ "$(type fn_fetch_core_dl 2> /dev/null)" ]; then
-		fn_fetch_core_dl "lgsm/modules" "core_messages.sh" "${modulesdir}" "chmodx" "run" "noforcedl" "nohash"
-	else
-		fn_bootstrap_fetch_file_github "lgsm/modules" "core_messages.sh" "${modulesdir}" "chmodx" "run" "noforcedl" "nohash"
-	fi
-}
-
-core_legacy.sh() {
-	modulefile="${FUNCNAME[0]}"
-	if [ "$(type fn_fetch_core_dl 2> /dev/null)" ]; then
-		fn_fetch_core_dl "lgsm/modules" "core_legacy.sh" "${modulesdir}" "chmodx" "run" "noforcedl" "nohash"
-	else
-		fn_bootstrap_fetch_file_github "lgsm/modules" "core_legacy.sh" "${modulesdir}" "chmodx" "run" "noforcedl" "nohash"
-	fi
-}
-
-core_exit.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-core_getopt.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-core_trap.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-core_steamcmd.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-core_github.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Commands
-
-command_backup.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_console.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_debug.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_details.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_sponsor.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_postdetails.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_test_alert.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_monitor.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_start.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_stop.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_validate.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_install.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_install_resources_mta.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_squad_license.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_mods_install.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_mods_update.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_mods_remove.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_fastdl.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_ts3_server_pass.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_restart.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_skeleton.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_wipe.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_send.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Checks
-
-check.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_config.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_deps.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_executable.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_glibc.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_ip.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_last_update.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_logs.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_permissions.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_root.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_status.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_steamcmd.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_system_dir.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_system_requirements.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_tmuxception.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-check_version.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Compress
-
-compress_unreal2_maps.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-compress_ut99_maps.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Mods
-
-mods_list.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-mods_core.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Dev
-
-command_dev_clear_modules.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_dev_debug.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_dev_detect_deps.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_dev_detect_glibc.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_dev_detect_ldd.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_dev_query_raw.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Fix
-
-fix.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_ark.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_av.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_arma3.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_armar.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_bt.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_bo.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_cmw.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_csgo.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_dst.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_hw.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_ins.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_kf.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_kf2.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_lo.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_mcb.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_mta.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_nmrih.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_onset.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_ro.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_rust.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_rw.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_sfc.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_st.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_steamcmd.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_terraria.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_tf2.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_ut3.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_rust.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_samp.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_sdtd.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_sof2.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_squad.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_ts3.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_ut2k4.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_ut.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_unt.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_vh.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_wurm.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fix_zmr.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Info
-
-info_distro.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-info_game.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-info_messages.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-info_stats.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Alert
-
-alert.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_discord.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_email.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_ifttt.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_mailgun.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_pushbullet.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_pushover.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_gotify.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_telegram.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_rocketchat.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-alert_slack.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-# Logs
-
-core_logs.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Query
-
-query_gamedig.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Update
-
-command_update_modules.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_update_linuxgsm.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_update.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-command_check_update.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_ts3.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_minecraft.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_minecraft_bedrock.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_papermc.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_mta.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_factorio.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_jediknight2.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_steamcmd.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_vintagestory.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-update_ut99.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-fn_update_modules.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-#
-## Installer modules
-#
-
-fn_autoinstall() {
-	autoinstall=1
-	command_install.sh
-}
-
-install_complete.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_config.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_factorio_save.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_dst_token.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_eula.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_gsquery.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_gslt.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_header.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_logs.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_retry.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_server_dir.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-install_server_files.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_stats.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_steamcmd.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_ts3.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_ts3db.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_ut2k4.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_dl_ut2k4.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-install_ut2k4_key.sh() {
-	modulefile="${FUNCNAME[0]}"
-	fn_fetch_module
-}
-
-# Calls code required for legacy servers
-core_legacy.sh
-
-# Creates tmp dir if missing
-if [ ! -d "${tmpdir}" ]; then
-	mkdir -p "${tmpdir}"
-fi
-
-# Creates lock dir if missing
-if [ ! -d "${lockdir}" ]; then
-	mkdir -p "${lockdir}"
-fi
-
-# Calls on-screen messages (bootstrap)
-core_messages.sh
-
-#Calls file downloader (bootstrap)
-core_dl.sh
-
-# Calls the global Ctrl-C trap
-core_trap.sh

+ 0 - 334
lgsm/functions/core_steamcmd.sh

@@ -1,334 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_steamcmd.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Core functions for SteamCMD
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_install_steamcmd() {
-	if [ "${shortname}" == "ark" ] && [ "${installsteamcmd}" == "1" ]; then
-		steamcmddir="${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux"
-	fi
-	if [ ! -d "${steamcmddir}" ]; then
-		mkdir -p "${steamcmddir}"
-	fi
-	fn_fetch_file "http://media.steampowered.com/client/steamcmd_linux.tar.gz" "" "" "" "${tmpdir}" "steamcmd_linux.tar.gz" "nochmodx" "norun" "noforce" "nohash"
-	fn_dl_extract "${tmpdir}" "steamcmd_linux.tar.gz" "${steamcmddir}"
-	chmod +x "${steamcmddir}/steamcmd.sh"
-}
-
-fn_check_steamcmd_user() {
-	# Checks if steamuser is setup.
-	if [ "${steamuser}" == "username" ]; then
-		fn_print_fail_nl "Steam login not set. Update steamuser in ${configdirserver}"
-		echo -e "	* Change steamuser=\"username\" to a valid steam login."
-		if [ -d "${lgsmlogdir}" ]; then
-			fn_script_log_fatal "Steam login not set. Update steamuser in ${configdirserver}"
-		fi
-		core_exit.sh
-	fi
-	# Anonymous user is set if steamuser is missing.
-	if [ -z "${steamuser}" ]; then
-		if [ -d "${lgsmlogdir}" ]; then
-			fn_script_log_info "Login to SteamCMD as: anonymous"
-		fi
-		steamuser="anonymous"
-		steampass=''
-	else
-		if [ -d "${lgsmlogdir}" ]; then
-			fn_script_log_info "Login to SteamCMD as: ${steamuser}"
-		fi
-	fi
-}
-
-fn_check_steamcmd() {
-	# Checks if SteamCMD exists when starting or updating a server.
-	# Only install if steamcmd package is missing or steamcmd dir is missing.
-	if [ ! -f "${steamcmddir}/steamcmd.sh" ] && [ -z "$(command -v steamcmd 2> /dev/null)" ]; then
-		if [ "${commandname}" == "INSTALL" ]; then
-			fn_install_steamcmd
-		else
-			fn_print_warn_nl "SteamCMD is missing"
-			fn_script_log_warn "SteamCMD is missing"
-			fn_install_steamcmd
-		fi
-	elif [ "${commandname}" == "INSTALL" ]; then
-		fn_print_information "SteamCMD is already installed..."
-		fn_print_ok_eol_nl
-	fi
-}
-
-fn_check_steamcmd_dir() {
-	# Worksround that pre-installs the correct steam directories to ensure all packages use the correct Standard.
-	# https://github.com/ValveSoftware/steam-for-linux/issues/6976#issuecomment-610446347
-
-	# Create Steam installation directory.
-	if [ ! -d "${XDG_DATA_HOME:="${HOME}/.local/share"}/Steam" ]; then
-		mkdir -p "${XDG_DATA_HOME:="${HOME}/.local/share"}/Steam"
-	fi
-
-	# Create common Steam directory.
-	if [ ! -d "${HOME}/.steam" ]; then
-		mkdir -p "${HOME}/.steam"
-	fi
-
-	# Symbolic links to Steam installation directory.
-	if [ ! -L "${HOME}/.steam/root" ]; then
-		if [ -d "${HOME}/.steam/root" ]; then
-			rm -f "${HOME:?}/.steam/root"
-		fi
-		ln -s "${XDG_DATA_HOME:="${HOME}/.local/share"}/Steam" "${HOME}/.steam/root"
-	fi
-
-	if [ ! -L "${HOME}/.steam/steam" ]; then
-		if [ -d "${HOME}/.steam/steam" ]; then
-			rm -rf "${HOME}/.steam/steam"
-		fi
-		ln -s "${XDG_DATA_HOME:="${HOME}/.local/share"}/Steam" "${HOME}/.steam/steam"
-	fi
-}
-
-fn_check_steamcmd_dir_legacy() {
-	# Remove old Steam installation directories ~/Steam and ${rootdir}/steamcmd
-	if [ -d "${rootdir}/steamcmd" ] && [ "${steamcmddir}" == "${XDG_DATA_HOME:="${HOME}/.local/share"}/Steam" ]; then
-		rm -rf "${rootdir:?}/steamcmd"
-	fi
-
-	if [ -d "${HOME}/Steam" ] && [ "${steamcmddir}" == "${XDG_DATA_HOME:="${HOME}/.local/share"}/Steam" ]; then
-		rm -rf "${HOME}/Steam"
-	fi
-}
-
-fn_check_steamcmd_steamapp() {
-	# Check that steamapp directory fixes issue #3481
-	if [ ! -d "${serverfiles}/steamapps" ]; then
-		mkdir -p "${serverfiles}/steamapps"
-	fi
-}
-
-fn_check_steamcmd_ark() {
-	# Checks if SteamCMD exists in
-	# Engine/Binaries/ThirdParty/SteamCMD/Linux
-	# to allow ark mods to work
-	if [ ! -f "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamcmd.sh" ]; then
-		installsteamcmd=1
-		if [ "${commandname}" == "INSTALL" ]; then
-			fn_install_steamcmd
-		else
-			fn_print_warn_nl "ARK mods SteamCMD is missing"
-			fn_script_log_warn "ARK mods SteamCMD is missing"
-			fn_install_steamcmd
-		fi
-	elif [ "${commandname}" == "INSTALL" ]; then
-		fn_print_information "ARK mods SteamCMD is already installed..."
-		fn_print_ok_eol_nl
-	fi
-}
-
-fn_check_steamcmd_clear() {
-	# Will remove steamcmd dir if steamcmd package is installed.
-	if [ "$(command -v steamcmd 2> /dev/null)" ] && [ -d "${rootdir}/steamcmd" ]; then
-		rm -rf "${steamcmddir:?}"
-		exitcode=$?
-		if [ "${exitcode}" != 0 ]; then
-			fn_script_log_fatal "Removing ${rootdir}/steamcmd"
-		else
-			fn_script_log_pass "Removing ${rootdir}/steamcmd"
-		fi
-	fi
-}
-
-fn_check_steamcmd_exec() {
-	if [ "$(command -v steamcmd 2> /dev/null)" ]; then
-		steamcmdcommand="steamcmd"
-	else
-		steamcmdcommand="./steamcmd.sh"
-	fi
-}
-
-fn_update_steamcmd_localbuild() {
-	# Gets local build info.
-	fn_print_dots "Checking local build: ${remotelocation}"
-	fn_appmanifest_check
-	# Uses appmanifest to find local build.
-	localbuild=$(grep buildid "${appmanifestfile}" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\  -f3)
-
-	# Set branch to public if no custom branch.
-	if [ -z "${branch}" ]; then
-		branch="public"
-	fi
-
-	# Checks if localbuild variable has been set.
-	if [ -z "${localbuild}" ]; then
-		fn_print_fail "Checking local build: ${remotelocation}: missing local build info"
-		fn_script_log_fatal "Missing local build info"
-		core_exit.sh
-	else
-		fn_print_ok "Checking local build: ${remotelocation}"
-		fn_script_log_pass "Checking local build"
-	fi
-}
-
-fn_update_steamcmd_remotebuild() {
-	# Get remote build info.
-	if [ -d "${steamcmddir}" ]; then
-		cd "${steamcmddir}" || exit
-	fi
-
-	# Removes appinfo.vdf as a fix for not always getting up to date version info from SteamCMD.
-	if [ "$(find "${HOME}" -type f -name "appinfo.vdf" | wc -l)" -ne "0" ]; then
-		find "${HOME}" -type f -name "appinfo.vdf" -exec rm -f {} \;
-	fi
-
-	# password for branch not needed to check the buildid
-	remotebuildversion=$(${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" +quit | sed -e '/"branches"/,/^}/!d' | sed -n "/\"${branch}\"/,/}/p" | grep -m 1 buildid | tr -cd '[:digit:]')
-
-	if [ "${firstcommandname}" != "INSTALL" ]; then
-		fn_print_dots "Checking remote build: ${remotelocation}"
-		# Checks if remotebuildversion variable has been set.
-		if [ -z "${remotebuildversion}" ] || [ "${remotebuildversion}" == "null" ]; then
-			fn_print_fail "Checking remote build: ${remotelocation}"
-			fn_script_log_fatal "Checking remote build"
-			core_exit.sh
-		else
-			fn_print_ok "Checking remote build: ${remotelocation}"
-			fn_script_log_pass "Checking remote build"
-		fi
-	else
-		# Checks if remotebuild variable has been set.
-		if [ -z "${remotebuildversion}" ] || [ "${remotebuildversion}" == "null" ]; then
-			fn_print_failure "Unable to get remote build"
-			fn_script_log_fatal "Unable to get remote build"
-			core_exit.sh
-		fi
-	fi
-}
-
-fn_update_steamcmd_compare() {
-	fn_print_dots "Checking for update: ${remotelocation}"
-	if [ "${localbuild}" != "${remotebuildversion}" ] || [ "${forceupdate}" == "1" ]; then
-		fn_print_ok_nl "Checking for update: ${remotelocation}"
-		echo -en "\n"
-		echo -e "Update available"
-		echo -e "* Local build: ${red}${localbuild}${default}"
-		echo -e "* Remote build: ${green}${remotebuildversion}${default}"
-		if [ -n "${branch}" ]; then
-			echo -e "* Branch: ${branch}"
-		fi
-		if [ -n "${betapassword}" ]; then
-			echo -e "* Branch password: ${betapassword}"
-		fi
-		echo -e "https://steamdb.info/app/${appid}/"
-		echo -en "\n"
-		fn_script_log_info "Update available"
-		fn_script_log_info "Local build: ${localbuild}"
-		fn_script_log_info "Remote build: ${remotebuildversion}"
-		if [ -n "${branch}" ]; then
-			fn_script_log_info "Branch: ${branch}"
-		fi
-		if [ -n "${betapassword}" ]; then
-			fn_script_log_info "Branch password: ${betapassword}"
-		fi
-		fn_script_log_info "${localbuild} > ${remotebuildversion}"
-
-		if [ "${commandname}" == "UPDATE" ]; then
-			unset updateonstart
-			check_status.sh
-			# If server stopped.
-			if [ "${status}" == "0" ]; then
-				fn_dl_steamcmd
-			# If server started.
-			else
-				fn_print_restart_warning
-				exitbypass=1
-				command_stop.sh
-				fn_firstcommand_reset
-				exitbypass=1
-				fn_dl_steamcmd
-				exitbypass=1
-				command_start.sh
-				fn_firstcommand_reset
-			fi
-			unset exitbypass
-			date +%s > "${lockdir}/lastupdate.lock"
-			alert="update"
-		elif [ "${commandname}" == "CHECK-UPDATE" ]; then
-			alert="check-update"
-		fi
-		alert.sh
-	else
-		fn_print_ok_nl "Checking for update: ${remotelocation}"
-		echo -en "\n"
-		echo -e "No update available"
-		echo -e "* Local build: ${green}${localbuild}${default}"
-		echo -e "* Remote build: ${green}${remotebuildversion}${default}"
-		if [ -n "${branch}" ]; then
-			echo -e "* Branch: ${branch}"
-		fi
-		if [ -n "${betapassword}" ]; then
-			echo -e "* Branch password: ${betapassword}"
-		fi
-		echo -e "https://steamdb.info/app/${appid}/"
-		echo -en "\n"
-		fn_script_log_info "No update available"
-		fn_script_log_info "Local build: ${localbuild}"
-		fn_script_log_info "Remote build: ${remotebuildversion}"
-		if [ -n "${branch}" ]; then
-			fn_script_log_info "Branch: ${branch}"
-		fi
-		if [ -n "${betapassword}" ]; then
-			fn_script_log_info "Branch password: ${betapassword}"
-		fi
-	fi
-}
-
-fn_appmanifest_info() {
-	appmanifestfile=$(find -L "${serverfiles}" -type f -name "appmanifest_${appid}.acf")
-	appmanifestfilewc=$(find -L "${serverfiles}" -type f -name "appmanifest_${appid}.acf" | wc -l)
-}
-
-fn_appmanifest_check() {
-	fn_appmanifest_info
-	# Multiple or no matching appmanifest files may sometimes be present.
-	# This error is corrected if required.
-	if [ "${appmanifestfilewc}" -ge "2" ]; then
-		fn_print_error "Multiple appmanifest_${appid}.acf files found"
-		fn_script_log_error "Multiple appmanifest_${appid}.acf files found"
-		fn_print_dots "Removing x${appmanifestfilewc} appmanifest_${appid}.acf files"
-		for appfile in ${appmanifestfile}; do
-			rm -f "${appfile:?}"
-		done
-		appmanifestfilewc1="${appmanifestfilewc}"
-		fn_appmanifest_info
-		# if error can not be resolved.
-		if [ "${appmanifestfilewc}" -ge "2" ]; then
-			fn_print_fail "Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files"
-			fn_script_log_fatal "Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files"
-			echo -e "* Check user permissions"
-			for appfile in ${appmanifestfile}; do
-				echo -e "	${appfile}"
-			done
-			core_exit.sh
-		else
-			fn_print_ok "Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files"
-			fn_script_log_pass "Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files"
-			fn_print_info_nl "Forcing update to correct issue"
-			fn_script_log_info "Forcing update to correct issue"
-			fn_dl_steamcmd
-		fi
-	elif [ "${appmanifestfilewc}" -eq "0" ]; then
-		fn_print_error_nl "No appmanifest_${appid}.acf found"
-		fn_script_log_error "No appmanifest_${appid}.acf found"
-		fn_print_info_nl "Forcing update to correct issue"
-		fn_script_log_info "Forcing update to correct issue"
-		fn_dl_steamcmd
-		fn_appmanifest_info
-		if [ "${appmanifestfilewc}" -eq "0" ]; then
-			fn_print_fail_nl "Still no appmanifest_${appid}.acf found"
-			fn_script_log_fatal "Still no appmanifest_${appid}.acf found"
-			core_exit.sh
-		fi
-	fi
-}

+ 0 - 22
lgsm/functions/core_trap.sh

@@ -1,22 +0,0 @@
-#!/bin/bash
-# LinuxGSM core_trap.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Handles CTRL-C trap to give an exit code.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-fn_exit_trap() {
-	if [ -z "${exitcode}" ]; then
-		exitcode=$?
-	fi
-	echo -e ""
-	if [ -z "${exitcode}" ]; then
-		exitcode=0
-	fi
-	core_exit.sh
-}
-
-# trap to give an exit code.
-trap fn_exit_trap INT

+ 0 - 88
lgsm/functions/fix.sh

@@ -1,88 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Overall function for managing fixes.
-# Runs functions that will fix an issue.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Messages that are displayed for some fixes.
-fn_fix_msg_start() {
-	fn_print_dots "Applying ${fixname} fix: ${gamename}"
-	fn_print_info "Applying ${fixname} fix: ${gamename}"
-	fn_script_log_info "Applying ${fixname} fix: ${gamename}"
-}
-
-fn_fix_msg_start_nl() {
-	fn_print_dots "Applying ${fixname} fix: ${gamename}"
-	fn_print_info_nl "Applying ${fixname} fix: ${gamename}"
-	fn_script_log_info "Applying ${fixname} fix: ${gamename}"
-}
-
-fn_fix_msg_end() {
-	if [ $? != 0 ]; then
-		fn_print_error_nl "Applying ${fixname} fix: ${gamename}"
-		fn_script_log_error "Applying ${fixname} fix: ${gamename}"
-	else
-		fn_print_ok_nl "Applying ${fixname} fix: ${gamename}"
-		fn_script_log_pass "Applying ${fixname} fix: ${gamename}"
-	fi
-}
-
-fn_exists_fix() {
-	local short="${1:?}"
-
-	if [ "$(type -t "fix_${short}.sh")" == 'function' ]; then
-		return 0
-	else
-		return 1
-	fi
-}
-
-fn_apply_fix() {
-	local phase_message="${1:?}"
-	local short="${2:?}"
-
-	if fn_exists_fix "${short}"; then
-		"fix_${short}.sh"
-	else
-		fn_print_error_nl "${shortname} is marked to apply pre start fix but there is no fix registered"
-	fi
-}
-
-apply_pre_start_fix=(arma3 armar ark av bt bo csgo cmw dst hw ins nmrih onset rust rw sdtd sfc sof2 squad st tf2 terraria ts3 mcb mta unt vh wurm zmr)
-apply_post_install_fix=(av kf kf2 lo ro samp ut2k4 ut ut3)
-
-# validate registered fixes for safe development
-for fix in "${apply_pre_start_fix[@]}" "${apply_post_install_fix[@]}"; do
-	if ! fn_exists_fix "${fix}"; then
-		fn_print_fail_nl "fix_${fix}.sh is registered but doesn't exist. Typo or did you miss to modify core_functions.sh?"
-		exitcode 1
-		core_exit.sh
-	fi
-done
-
-# Fixes that are run on start.
-if [ "${commandname}" != "INSTALL" ] && [ -z "${fixbypass}" ]; then
-	if [ "${appid}" ]; then
-		fix_steamcmd.sh
-	fi
-
-	if grep -qEe "(^|\s)${shortname}(\s|$)" <<< "${apply_pre_start_fix[@]}"; then
-		fn_apply_fix "pre start" "${shortname}"
-	fi
-fi
-
-# Fixes that are run on install only.
-if [ "${commandname}" == "INSTALL" ]; then
-	if grep -qEe "(^|\s)${shortname}(\s|$)" <<< "${apply_post_install_fix[@]}"; then
-		echo -e ""
-		echo -e "${lightyellow}Applying Post-Install Fixes${default}"
-		echo -e "================================="
-		fn_sleep_time
-		postinstall=1
-		fn_apply_fix "post install" "${shortname}"
-	fi
-fi

+ 0 - 62
lgsm/functions/fix_ark.sh

@@ -1,62 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_ark.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with ARK: Survival Evolved.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# removes mulitple appworkshop_346110.acf if found.
-steamappsfilewc="$(find "${HOME}" -name appworkshop_346110.acf | wc -l)"
-if [ "${steamappsfilewc}" -gt "1" ]; then
-	fixname="multiple appworkshop acf files"
-	fn_fix_msg_start
-	find "${HOME}" -name appworkshop_346110.acf -exec rm -f {} \;
-	fn_fix_msg_end
-elif [ "${steamappsfilewc}" -eq "1" ]; then
-	# Steam mods directory selecter
-	# This allows LinxuGSM to select either ~/.steam or ~/Steam. depending on what is being used
-	steamappsfile=$(find "${HOME}" -name appworkshop_346110.acf)
-	steamappsdir=$(dirname "${steamappsfile}")
-	steamappspath=$(
-		cd "${steamappsdir}" || return
-		cd ../
-		pwd
-	)
-
-	# removes the symlink if exists.
-	# fixes issue with older versions of LinuxGSM linking to /home/arkserver/steamcmd
-	if [ -L "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux" ]; then
-		fixname="broken SteamCMD symlink"
-		fn_fix_msg_start
-		unlink "${serverfiles:?}/Engine/Binaries/ThirdParty/SteamCMD/Linux"
-		fn_fix_msg_end
-		check_steamcmd.sh
-	fi
-
-	# removed ARK steamcmd directory if steamcmd is missing.
-	if [ ! -f "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamcmd.sh" ]; then
-		fixname="remove invalid ARK SteamCMD directory"
-		fn_fix_msg_start
-		rm -rf "${serverfiles:?}/Engine/Binaries/ThirdParty/SteamCMD/Linux"
-		fn_fix_msg_end
-		check_steamcmd.sh
-	fi
-
-	# if the steamapps symlink is incorrect unlink it.
-	if [ -d "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux" ] && [ -L "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamapps" ] && [ "$(readlink "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamapps")" != "${steamappspath}" ]; then
-		fixname="incorrect steamapps symlink"
-		fn_fix_msg_start
-		unlink "${serverfiles:?}/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamapps"
-		fn_fix_msg_end
-	fi
-
-	# Put symlink to steamapps directory into the ARK SteamCMD directory to link the downloaded mods to the correct location.
-	if [ ! -L "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamapps" ]; then
-		fixname="steamapps symlink"
-		fn_fix_msg_start
-		ln -s "${steamappspath}" "${serverfiles}/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamapps"
-		fn_fix_msg_end
-	fi
-fi

+ 0 - 16
lgsm/functions/fix_arma3.sh

@@ -1,16 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_arma3.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves an issue with ARMA3.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: 20150 Segmentation fault (core dumped) error.
-if [ ! -d "${XDG_DATA_HOME:="${HOME}/.local/share"}/Arma 3" ] || [ ! -d "${XDG_DATA_HOME:="${HOME}/.local/share"}/Arma 3 - Other Profiles" ]; then
-	fixname="20150 Segmentation fault (core dumped)"
-	fn_fix_msg_start
-	mkdir -p "${XDG_DATA_HOME:="${HOME}/.local/share"}/Arma 3 - Other Profiles"
-	fn_fix_msg_end
-fi

+ 0 - 17
lgsm/functions/fix_armar.sh

@@ -1,17 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_armar.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves an issue with Arma Reforger.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: Profile directory doesn't exist.
-# Issue Link: https://feedback.bistudio.com/T164845
-if [ ! -d "${serverprofilefullpath}" ]; then
-	fixname="Profile directory doesn't exist"
-	fn_fix_msg_start
-	mkdir -p "${serverprofilefullpath}"
-	fn_fix_msg_end
-fi

+ 0 - 19
lgsm/functions/fix_av.sh

@@ -1,19 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_av.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves startup issue with Avorion
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/linux64"
-
-# Generates the server config if it doesn't exist.
-if [ ! -f "${servercfgfullpath}" ]; then
-	startparameters="--datapath ${avdatapath} --galaxy-name ${selfname} --init-folders-only"
-	fn_print_information "starting ${gamename} server to generate configs."
-	fn_sleep_time
-	cd "${systemdir}" || exit
-	eval "${executable} ${startparameters}"
-fi

+ 0 - 10
lgsm/functions/fix_bo.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_hw.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Ballistic Overkill.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/BODS_Data/Plugins/x86_64"

+ 0 - 24
lgsm/functions/fix_bt.sh

@@ -1,24 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_bt.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves an issue with Barotrauma.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: Missing user data directory error.
-if [ ! -d "${XDG_DATA_HOME:="${HOME}/.local/share"}/Daedalic Entertainment GmbH/Barotrauma" ]; then
-	fixname="Missing user data directory error."
-	fn_fix_msg_start
-	mkdir -p "${XDG_DATA_HOME:="${HOME}/.local/share"}/Daedalic Entertainment GmbH/Barotrauma"
-	fn_fix_msg_end
-fi
-
-# check if startscript is with windows line endings and reformat it
-if file -b "${serverfiles}${executable:1}" | grep -q CRLF; then
-	fixname="Convert ${executable:2} to unix file format"
-	fn_fix_msg_start
-	dos2unix -q "${serverfiles}${executable:1}"
-	fn_fix_msg_end
-fi

+ 0 - 23
lgsm/functions/fix_cmw.sh

@@ -1,23 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_cmw.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves the issue of the not starting server on linux
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ ! -f "${executabledir}/steam_appid.txt" ]; then
-	fixname="steam_appid.txt"
-	fn_fix_msg_start
-	echo 219640 > "${executabledir}/steam_appid.txt"
-	fn_fix_msg_end
-fi
-
-if [ ! -f "${servercfgfullpath}" ]; then
-	fn_fix_msg_start
-	fixname="copy config"
-	mkdir "${servercfgdir}"
-	cp "${systemdir}/UDKGame/Config/"*.ini "${servercfgdir}"
-	fn_fix_msg_end
-fi

+ 0 - 42
lgsm/functions/fix_csgo.sh

@@ -1,42 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_csgo.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with CS:GO.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: server not always creating steam_appid.txt file.
-if [ ! -f "${serverfiles}/steam_appid.txt" ]; then
-	fixname="730 steam_appid.txt"
-	fn_fix_msg_start
-	echo -n "730" >> "${serverfiles}/steam_appid.txt"
-	fn_fix_msg_end
-fi
-
-# Fixes: Error parsing BotProfile.db - unknown attribute 'Rank'".
-if [ -f "${systemdir}/botprofile.db" ] && grep "^\s*Rank" "${systemdir}/botprofile.db" > /dev/null 2>&1; then
-	fixname="botprofile.db"
-	fn_fix_msg_start
-	sed -i 's/^\s*Rank/\t\/\/Rank/g' "${systemdir}/botprofile.db" > /dev/null 2>&1
-	fn_fix_msg_end
-fi
-
-# Fixes: Unknown command "cl_bobamt_vert" and exec: couldn't exec joystick.cfg.
-if [ -f "${servercfgdir}/valve.rc" ] && grep -E '^\s*exec\s*(default|joystick)\.cfg' "${servercfgdir}/valve.rc" > /dev/null 2>&1; then
-	fixname="valve.rc"
-	fn_fix_msg_start
-	sed -i 's/^\s*exec\s*default.cfg/\/\/exec default.cfg/g' "${servercfgdir}/valve.rc" > /dev/null 2>&1
-	sed -i 's/^\s*exec\s*joystick.cfg/\/\/exec joystick.cfg/g' "${servercfgdir}/valve.rc" > /dev/null 2>&1
-	fn_fix_msg_end
-fi
-
-# Fixes: Detected engine 11 but could not load: /home/csgo/serverfiles/bin/libgcc_s.so.1: version `GCC_7.0.0' not found (required by /lib/i386-linux-gnu/libstdc++.so.6)
-libgccc_so="${serverfiles}/bin/libgcc_s.so.1"
-if [ -f "${libgccc_so}" ]; then
-	fixname="libgcc_s.so.1 move away"
-	fn_fix_msg_start
-	mv -v "${libgccc_so}" "${libgccc_so}.bck"
-	fn_fix_msg_end
-fi

+ 0 - 17
lgsm/functions/fix_dst.sh

@@ -1,17 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_dst.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Don't Starve Together.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: ./dontstarve_dedicated_server_nullrenderer: ./lib32/libcurl-gnutls.so.4: no version information available (required by ./dontstarve_dedicated_server_nullrenderer).
-# Issue only occures on CentOS as libcurl-gnutls.so.4 is called libcurl.so.4 on CentOS.
-if [ -f "/etc/redhat-release" ] && [ ! -f "${serverfiles}/bin/lib32/libcurl-gnutls.so.4" ]; then
-	fixname="libcurl-gnutls.so.4"
-	fn_fix_msg_start
-	ln -s "/usr/lib/libcurl.so.4" "${serverfiles}/bin/lib32/libcurl-gnutls.so.4"
-	fn_fix_msg_end
-fi

+ 0 - 10
lgsm/functions/fix_hw.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_hw.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Hurtworld.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/Hurtworld_Data/Plugins/x86_64"

+ 0 - 20
lgsm/functions/fix_ins.sh

@@ -1,20 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_ins.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Insurgency.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: ./srcds_linux: error while loading shared libraries: libtier0.so: cannot open shared object file: No such file or directory.
-
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/bin"
-
-# Fixes: issue #529 - gamemode not passed to debug or start.
-
-if [ "${commandname}" == "DEBUG" ]; then
-	defaultmap="\"${defaultmap}\""
-else
-	defaultmap="\\\"${defaultmap}\\\""
-fi

+ 0 - 36
lgsm/functions/fix_kf.sh

@@ -1,36 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_kf.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Killing Floor.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-echo -e "Applying WebAdmin ROOst.css fix."
-echo -e "http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13"
-sed -i 's/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
-sed -i 's/underline}/underline;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
-fn_sleep_time
-echo -e "Applying WebAdmin CharSet fix."
-echo -e "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1"
-sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/UWeb.int"
-fn_sleep_time
-echo -e "applying server name fix."
-fn_sleep_time
-echo -e "forcing server restart..."
-fn_sleep_time
-exitbypass=1
-command_start.sh
-fn_firstcommand_reset
-sleep 5
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset
-exitbypass=1
-command_start.sh
-fn_firstcommand_reset
-sleep 5
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset

+ 0 - 20
lgsm/functions/fix_kf2.sh

@@ -1,20 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_kf2.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Killing Floor 2.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-startparameters="\"${defaultmap}?Game=KFGameContent.KFGameInfo_VersusSurvival\""
-
-fn_print_information "starting ${gamename} server to generate configs."
-fn_sleep_time
-exitbypass=1
-command_start.sh
-fn_firstcommand_reset
-sleep 10
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset

+ 0 - 17
lgsm/functions/fix_lo.sh

@@ -1,17 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_lo.sh function
-# Author: Daniel Gibbs
-# Website: https://linuxgsm.com
-# Description: Resolves installation issue with Last Oasis
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-appidfile=${executabledir}/steam_appid.txt
-if [ ! -f "${appidfile}" ]; then
-	fn_print_information "adding ${appidfile} to ${gamename} server."
-	fn_sleep_time
-	echo "903950" > "${appidfile}"
-else
-	fn_print_information "${appidfile} already exists. No action to be taken."
-	fn_sleep_time
-fi

+ 0 - 11
lgsm/functions/fix_mcb.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_mcb.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves possible startup issue with Minecraft Bedrock.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# official docs state that the server should be started with: LD_LIBRARY_PATH=. ./bedrock_server
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}"

+ 0 - 16
lgsm/functions/fix_mta.sh

@@ -1,16 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_mta.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Installs the libmysqlclient for database functions on the server.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ ! -f "${lgsmdir}/lib/libmysqlclient.so.16" ]; then
-	fixname="libmysqlclient16"
-	fn_fix_msg_start_nl
-	fn_sleep_time
-	fn_fetch_file "https://nightly.mtasa.com/files/modules/64/libmysqlclient.so.16" "" "" "" "${lgsmdir}/lib" "libmysqlclient.so.16" "chmodx" "norun" "noforce" "6c188e0f8fb5d7a29f4bc413b9fed6c2"
-	fn_fix_msg_end
-fi

+ 0 - 17
lgsm/functions/fix_nmrih.sh

@@ -1,17 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_nmrih.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Create symlinks for renamed No More Room In Hell serverfiles.
-# Solution from Steam Community post: https://steamcommunity.com/app/224260/discussions/2/1732089092441769414/
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-ln -s "${serverfiles}/bin/vphysics_srv.so" "${serverfiles}/bin/vphysics.so"
-ln -s "${serverfiles}/bin/studiorender_srv.so" "${serverfiles}/bin/studiorender.so"
-ln -s "${serverfiles}/bin/soundemittersystem_srv.so" "${serverfiles}/bin/soundemittersystem.so"
-ln -s "${serverfiles}/bin/shaderapiempty_srv.so" "${serverfiles}/bin/shaderapiempty.so"
-ln -s "${serverfiles}/bin/scenefilecache_srv.so" "${serverfiles}/bin/scenefilecache.so"
-ln -s "${serverfiles}/bin/replay_srv.so" "${serverfiles}/bin/replay.so"
-ln -s "${serverfiles}/bin/materialsystem_srv.so" "${serverfiles}/bin/materialsystem.so"

+ 0 - 19
lgsm/functions/fix_onset.sh

@@ -1,19 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_onset.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Onset.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}"
-
-# Fixes: Failed loading "mariadb": libmariadbclient.so.18: cannot open shared object file: No such file or directory
-# Issue only occures on CentOS as libmariadbclient.so.18 is called libmariadb.so.3 on CentOS.
-if [ -f "/etc/redhat-release" ] && [ ! -f "${serverfiles}/libmariadbclient.so.18" ] && [ -f "/usr/lib64/libmariadb.so.3" ]; then
-	fixname="libmariadbclient.so.18"
-	fn_fix_msg_start
-	ln -s "/usr/lib64/libmariadb.so.3" "${serverfiles}/libmariadbclient.so.18"
-	fn_fix_msg_end
-fi

+ 0 - 39
lgsm/functions/fix_ro.sh

@@ -1,39 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_ro.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Red Orchestra.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-echo -e "Applying WebAdmin ROOst.css fix."
-echo -e "http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13"
-sed -i 's/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
-sed -i 's/underline}/underline;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
-fn_sleep_time
-echo -e "Applying WebAdmin CharSet fix."
-echo -e "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1"
-sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/uweb.int"
-fn_sleep_time
-echo -e "Applying Steam AppID fix."
-sed -i 's/1210/1200/g' "${systemdir}/steam_appid.txt"
-fn_sleep_time
-echo -e "applying server name fix."
-fn_sleep_time
-echo -e "forcing server restart..."
-fn_sleep_time
-exitbypass=1
-command_start.sh
-fn_firstcommand_reset
-sleep 5
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset
-exitbypass=1
-command_start.sh
-fn_firstcommand_reset
-sleep 5
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset

+ 0 - 32
lgsm/functions/fix_rust.sh

@@ -1,32 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_rust.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves startup issue with Rust.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: [Raknet] Server Shutting Down (Shutting Down).
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/RustDedicated_Data/Plugins/x86_64"
-
-# Part of random seed feature.
-# If seed is not defined by user generate a seed file.
-if [ -z "${seed}" ] || [ "${seed}" == "0" ]; then
-	if [ ! -f "${datadir}/${selfname}-seed.txt" ]; then
-		shuf -i 1-2147483647 -n 1 > "${datadir}/${selfname}-seed.txt"
-		seed="$(cat "${datadir}/${selfname}-seed.txt")"
-		fn_print_info_nl "Generating new random seed (${cyan}${seed}${default})"
-		fn_script_log_pass "Generating new random seed (${cyan}${seed}${default})"
-	fi
-	seed="$(cat "${datadir}/${selfname}-seed.txt")"
-	randomseed=1
-fi
-
-# If Carbon mod is installed, run enviroment.sh
-if [ -f "${serverfiles}/carbon/tools/environment.sh" ]; then
-	fn_print_info_nl "Running Carbon environment.sh"
-	fn_script_log_info "Running Carbon environment.sh"
-	# shellcheck source=/dev/null
-	source "${serverfiles}/carbon/tools/environment.sh"
-fi

+ 0 - 10
lgsm/functions/fix_rw.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_rw.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Rising World.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/linux64"

+ 0 - 34
lgsm/functions/fix_samp.sh

@@ -1,34 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_sfc.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves issue that the default rcon password is not changed
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ -f "${servercfgfullpath}" ]; then
-	# check if default password is set "changeme"
-	currentpass=$(grep -E "^rcon_password" "${servercfgfullpath}" | sed 's/^rcon_password //')
-	defaultpass="changeme"
-	# check if default password is set
-	if [ "${currentpass}" == "${defaultpass}" ]; then
-		fixname="change default rcon password"
-		fn_fix_msg_start
-		fn_script_log_info "changing rcon/admin password."
-		random=$(tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 | xargs)
-		rconpass="admin${random}"
-		sed -i "s/rcon_password changeme/rcon_password ${rconpass}/g" "${servercfgfullpath}"
-		fn_fix_msg_end
-	fi
-	# check if the hostname is the default name
-	currenthostname=$(grep -E "^hostname" "${servercfgfullpath}" | sed 's/^hostname //')
-	defaulthostname="SA-MP 0.3 Server"
-	if [ "${currenthostname}" == "${defaulthostname}" ]; then
-		fixname="change default hostname"
-		fn_fix_msg_start
-		fn_script_log_info "changing default hostname to LinuxGSM"
-		sed -i "s/hostname ${defaulthostname}/hostname LinuxGSM/g" "${servercfgfullpath}"
-		fn_fix_msg_end
-	fi
-fi

+ 0 - 10
lgsm/functions/fix_sdtd.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_sdtd.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with 7 Days to Die.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}/7DaysToDieServer_Data/Plugins/x86_64"

+ 0 - 48
lgsm/functions/fix_sfc.sh

@@ -1,48 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_sfc.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Source Forts Classic.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-if [ ! -f "${serverfiles}/bin/datacache.so" ]; then
-	ln -s "${serverfiles}/bin/datacache_srv.so" "${serverfiles}/bin/datacache.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/dedicated.so" ]; then
-	ln -s "${serverfiles}/bin/dedicated_srv.so" "${serverfiles}/bin/dedicated.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/engine.so" ]; then
-	ln -s "${serverfiles}/bin/engine_srv.so" "${serverfiles}/bin/engine.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/materialsystem.so" ]; then
-	ln -s "${serverfiles}/bin/materialsystem_srv.so" "${serverfiles}/bin/materialsystem.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/replay.so" ]; then
-	ln -s "${serverfiles}/bin/replay_srv.so" "${serverfiles}/bin/replay.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/shaderapiempty.so" ]; then
-	ln -s "${serverfiles}/bin/shaderapiempty_srv.so" "${serverfiles}/bin/shaderapiempty.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/soundemittersystem.so" ]; then
-	ln -s "${serverfiles}/bin/soundemittersystem_srv.so" "${serverfiles}/bin/soundemittersystem.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/studiorender.so" ]; then
-	ln -s "${serverfiles}/bin/studiorender_srv.so" "${serverfiles}/bin/studiorender.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/vphysics.so" ]; then
-	ln -s "${serverfiles}/bin/vphysics_srv.so" "${serverfiles}/bin/vphysics.so"
-fi
-
-if [ ! -f "${serverfiles}/bin/scenefilecache.so" ]; then
-	ln -s "${serverfiles}/bin/scenefilecache_srv.so" "${serverfiles}/bin/scenefilecache.so"
-fi

+ 0 - 11
lgsm/functions/fix_sof2.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_rust.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Soldier of Fortune 2.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: error while loading shared libraries: libcxa.so.1
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}"

+ 0 - 26
lgsm/functions/fix_squad.sh

@@ -1,26 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_squad.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves various issues with Squad.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# As the server base dir changed for the game, we need to migrate the default config from the old to the new location
-oldservercfg="${serverfiles}/Squad/ServerConfig/${servercfg}"
-if [ -f "${oldservercfg}" ] && [ -f "${servercfgfullpath}" ]; then
-	# diff old and new config - if it is different move the old config over the new one
-	if [ "$(diff -c "${oldservercfg}" "${servercfgfullpath}" | wc -l)" -gt 0 ]; then
-		fixname="Migrate server config to new Game folder"
-		fn_fix_msg_start
-		mv -v "${oldservercfg}" "${servercfgfullpath}"
-		fn_fix_msg_end
-	else
-		fixname="remove the same config from old configdir"
-		fn_fix_msg_start
-		rm -f "${oldservercfg}"
-		fn_fix_msg_end
-
-	fi
-fi

+ 0 - 11
lgsm/functions/fix_st.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-# LinuxGSM fix_rust.sh module
-# Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
-# Website: https://linuxgsm.com
-# Description: Resolves startup issue with Stationeers.
-
-functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-# Fixes: [Raknet] Server Shutting Down (Shutting Down).
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/rocketstation_DedicatedServer_Data/Plugins/x86_64"

Some files were not shown because too many files changed in this diff