Просмотр исходного кода

Merge branch 'release/v24.3.0'

Daniel Gibbs 1 год назад
Родитель
Сommit
bcd7188676
100 измененных файлов с 847 добавлено и 208 удалено
  1. 1 5
      .github/ISSUE_TEMPLATE/bug_report.yml
  2. 1 5
      .github/ISSUE_TEMPLATE/feature_request.yml
  3. 1 1
      .github/workflows/add-to-project.yml
  4. 1 1
      lgsm/config-default/config-lgsm/kfserver/_default.cfg
  5. 1 1
      lgsm/config-default/config-lgsm/roserver/_default.cfg
  6. 189 0
      lgsm/config-default/config-lgsm/smserver/_default.cfg
  7. 1 1
      lgsm/config-default/config-lgsm/tfserver/_default.cfg
  8. 2 2
      lgsm/config-default/config-lgsm/ut3server/_default.cfg
  9. 4 7
      lgsm/config-default/config-lgsm/vhserver/_default.cfg
  10. 171 0
      lgsm/config-default/config-lgsm/xntserver/_default.cfg
  11. 3 2
      lgsm/data/almalinux-8.csv
  12. 3 2
      lgsm/data/almalinux-9.csv
  13. 3 2
      lgsm/data/centos-7.csv
  14. 3 2
      lgsm/data/centos-8.csv
  15. 3 2
      lgsm/data/centos-9.csv
  16. 3 2
      lgsm/data/debian-10.csv
  17. 3 2
      lgsm/data/debian-11.csv
  18. 3 2
      lgsm/data/debian-12.csv
  19. 139 0
      lgsm/data/debian-13.csv
  20. 3 2
      lgsm/data/debian-9.csv
  21. BIN
      lgsm/data/gameicons/mom-icon.png
  22. BIN
      lgsm/data/gameicons/sm-icon.png
  23. BIN
      lgsm/data/gameicons/xnt-icon.png
  24. 3 2
      lgsm/data/rhel-7.csv
  25. 3 2
      lgsm/data/rhel-8.csv
  26. 3 2
      lgsm/data/rhel-9.csv
  27. 3 2
      lgsm/data/rocky-8.csv
  28. 3 2
      lgsm/data/rocky-9.csv
  29. 2 1
      lgsm/data/serverlist.csv
  30. 3 2
      lgsm/data/ubuntu-16.04.csv
  31. 3 2
      lgsm/data/ubuntu-18.04.csv
  32. 3 2
      lgsm/data/ubuntu-20.04.csv
  33. 3 2
      lgsm/data/ubuntu-22.04.csv
  34. 3 2
      lgsm/data/ubuntu-23.04.csv
  35. 3 2
      lgsm/data/ubuntu-23.10.csv
  36. 3 2
      lgsm/data/ubuntu-24.04.csv
  37. 1 1
      lgsm/modules/alert.sh
  38. 2 2
      lgsm/modules/alert_discord.sh
  39. 1 1
      lgsm/modules/alert_email.sh
  40. 2 2
      lgsm/modules/alert_gotify.sh
  41. 2 2
      lgsm/modules/alert_ifttt.sh
  42. 2 2
      lgsm/modules/alert_pushbullet.sh
  43. 3 3
      lgsm/modules/alert_pushover.sh
  44. 2 2
      lgsm/modules/alert_rocketchat.sh
  45. 2 2
      lgsm/modules/alert_slack.sh
  46. 2 2
      lgsm/modules/alert_telegram.sh
  47. 1 1
      lgsm/modules/check.sh
  48. 1 1
      lgsm/modules/check_config.sh
  49. 1 1
      lgsm/modules/check_deps.sh
  50. 1 1
      lgsm/modules/check_executable.sh
  51. 5 5
      lgsm/modules/check_gamedig.sh
  52. 1 1
      lgsm/modules/check_glibc.sh
  53. 1 1
      lgsm/modules/check_ip.sh
  54. 1 1
      lgsm/modules/check_last_update.sh
  55. 1 1
      lgsm/modules/check_logs.sh
  56. 40 15
      lgsm/modules/check_permissions.sh
  57. 1 1
      lgsm/modules/check_root.sh
  58. 1 1
      lgsm/modules/check_status.sh
  59. 1 1
      lgsm/modules/check_steamcmd.sh
  60. 1 1
      lgsm/modules/check_system_dir.sh
  61. 4 2
      lgsm/modules/check_system_requirements.sh
  62. 1 1
      lgsm/modules/check_tmuxception.sh
  63. 1 1
      lgsm/modules/check_version.sh
  64. 1 1
      lgsm/modules/command_backup.sh
  65. 1 1
      lgsm/modules/command_check_update.sh
  66. 1 1
      lgsm/modules/command_console.sh
  67. 1 1
      lgsm/modules/command_debug.sh
  68. 1 1
      lgsm/modules/command_details.sh
  69. 1 1
      lgsm/modules/command_dev_clear_modules.sh
  70. 1 1
      lgsm/modules/command_dev_debug.sh
  71. 1 1
      lgsm/modules/command_dev_detect_deps.sh
  72. 1 1
      lgsm/modules/command_dev_detect_glibc.sh
  73. 1 1
      lgsm/modules/command_dev_detect_ldd.sh
  74. 10 10
      lgsm/modules/command_dev_parse_distro_details.sh
  75. 9 12
      lgsm/modules/command_dev_parse_game_details.sh
  76. 2 2
      lgsm/modules/command_dev_query_raw.sh
  77. 1 1
      lgsm/modules/command_fastdl.sh
  78. 1 1
      lgsm/modules/command_install.sh
  79. 1 1
      lgsm/modules/command_install_resources_mta.sh
  80. 1 1
      lgsm/modules/command_mods_install.sh
  81. 1 1
      lgsm/modules/command_mods_remove.sh
  82. 1 1
      lgsm/modules/command_mods_update.sh
  83. 1 1
      lgsm/modules/command_monitor.sh
  84. 1 1
      lgsm/modules/command_postdetails.sh
  85. 2 1
      lgsm/modules/command_restart.sh
  86. 1 1
      lgsm/modules/command_send.sh
  87. 1 1
      lgsm/modules/command_skeleton.sh
  88. 1 1
      lgsm/modules/command_sponsor.sh
  89. 3 2
      lgsm/modules/command_start.sh
  90. 100 9
      lgsm/modules/command_stop.sh
  91. 1 1
      lgsm/modules/command_test_alert.sh
  92. 1 1
      lgsm/modules/command_ts3_server_pass.sh
  93. 3 1
      lgsm/modules/command_update.sh
  94. 26 19
      lgsm/modules/command_update_linuxgsm.sh
  95. 1 1
      lgsm/modules/command_validate.sh
  96. 1 1
      lgsm/modules/command_wipe.sh
  97. 1 1
      lgsm/modules/compress_unreal2_maps.sh
  98. 1 1
      lgsm/modules/compress_ut99_maps.sh
  99. 6 3
      lgsm/modules/core_dl.sh
  100. 1 1
      lgsm/modules/core_exit.sh

+ 1 - 5
.github/ISSUE_TEMPLATE/bug_report.yml

@@ -30,17 +30,13 @@ body:
       label: Linux distro
       multiple: true
       options:
+        - Ubuntu 24.04
         - Ubuntu 22.04
         - Ubuntu 20.04
-        - Ubuntu 18.04
-        - Ubuntu 16.04
         - Debian 12
         - Debian 11
-        - Debian 10
-        - Debian 9
         - RedHat 9
         - RedHat 8
-        - RedHat 7
         - Other
     validations:
       required: true

+ 1 - 5
.github/ISSUE_TEMPLATE/feature_request.yml

@@ -30,17 +30,13 @@ body:
       label: Linux distro
       multiple: true
       options:
+        - Ubuntu 24.04
         - Ubuntu 22.04
         - Ubuntu 20.04
-        - Ubuntu 18.04
-        - Ubuntu 16.04
         - Debian 12
         - Debian 11
-        - Debian 10
-        - Debian 9
         - RedHat 9
         - RedHat 8
-        - RedHat 7
         - Other
     validations:
       required: false

+ 1 - 1
.github/workflows/add-to-project.yml

@@ -11,7 +11,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Add to Project
-        uses: actions/add-to-project@v1.0.1
+        uses: actions/add-to-project@v1.0.2
         with:
           project-url: https://github.com/orgs/GameServerManagers/projects/11
           github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}

+ 1 - 1
lgsm/config-default/config-lgsm/kfserver/_default.cfg

@@ -146,7 +146,7 @@ stopmode="2"
 # 4: gsquery
 # 5: tcp
 querymode="2"
-querytype="protocol-unreal2"
+querytype="protocol-valve"
 
 ## Console type
 consoleverbose="yes"

+ 1 - 1
lgsm/config-default/config-lgsm/roserver/_default.cfg

@@ -142,7 +142,7 @@ stopmode="2"
 # 4: gsquery
 # 5: tcp
 querymode="2"
-querytype="protocol-unreal2"
+querytype="protocol-valve"
 
 ## Console type
 consoleverbose="yes"

+ 189 - 0
lgsm/config-default/config-lgsm/smserver/_default.cfg

@@ -0,0 +1,189 @@
+##################################
+######## Default Settings ########
+##################################
+# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN!
+# Copy settings from here and use them in either:
+# common.cfg - applies settings to every instance.
+# [instance].cfg - applies settings to a specific instance.
+
+#### Game Server Settings ####
+
+## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
+servername="LinuxGSM"
+serverpassword=""
+adminpassword=""
+port="8777"
+queryport="27015"
+telnetport="18888"
+maxplayers="50"
+backupinterval="15"  # Backup interval in minutes.
+defaultmap="Level01_Main"
+
+## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
+startparameters="WS ${defaultmap} -MultiHome=${ip} -Port=${port} -EchoPort=${telnetport} -QueryPort=${queryport} -SteamServerName='${servername}' -PSW='${serverpassword}' -adminpsw='${adminpassword}' -MaxPlayers=${maxplayers} -initbackup -backupinterval=${backupinterval} -UTF8Output -forcepassthrough -log"
+
+#### LinuxGSM Settings ####
+
+## LinuxGSM Stats
+# Send useful stats to LinuxGSM developers.
+# https://docs.linuxgsm.com/configuration/linuxgsm-stats
+# (on|off)
+stats="off"
+
+## Notification Alerts
+# (on|off)
+
+# Display IP | https://docs.linuxgsm.com/alerts#display-ip
+displayip=""
+
+# More info | https://docs.linuxgsm.com/alerts#more-info
+postalert="off"
+
+# Alert on Start/Stop/Restart
+statusalert="off"
+
+# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
+discordalert="off"
+discordwebhook="webhook"
+
+# Email Alerts | https://docs.linuxgsm.com/alerts/email
+emailalert="off"
+email="email@example.com"
+emailfrom=""
+
+# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify
+gotifyalert="off"
+gotifytoken="token"
+gotifywebhook="webhook"
+
+# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
+iftttalert="off"
+ifttttoken="accesstoken"
+iftttevent="linuxgsm_alert"
+
+# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+channeltag=""
+
+# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
+pushoveralert="off"
+pushovertoken="accesstoken"
+pushoveruserkey="userkey"
+
+# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat
+rocketchatalert="off"
+rocketchatwebhook="webhook"
+
+# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
+slackalert="off"
+slackwebhook="webhook"
+
+# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
+# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
+# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help all".
+telegramapi="api.telegram.org"
+telegramalert="off"
+telegramtoken="accesstoken"
+telegramchatid=""
+telegramthreadid=""
+telegramsilentnotification="false"
+curlcustomstring=""
+
+## Updating | https://docs.linuxgsm.com/commands/update
+updateonstart="off"
+
+## Backup | https://docs.linuxgsm.com/commands/backup
+maxbackups="4"
+maxbackupdays="30"
+stoponbackup="on"
+
+## Logging | https://docs.linuxgsm.com/features/logging
+consolelogging="on"
+logdays="7"
+
+## Monitor | https://docs.linuxgsm.com/commands/monitor
+# Query delay time
+querydelay="5"
+
+## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors
+ansi="on"
+
+#### Advanced Settings ####
+
+## Message Display Time | https://docs.linuxgsm.com/features/message-display-time
+sleeptime="0.5"
+
+## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd
+# Server appid
+appid="3017300"
+steamcmdforcewindows="no"
+# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
+branch=""
+betapassword=""
+# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
+steammaster="true"
+
+## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
+# 1: tmux kill
+# 2: CTRL+c
+# 3: quit
+# 4: quit 120s
+# 5: stop
+# 6: q
+# 7: exit
+# 8: 7 Days to Die
+# 9: GoldSrc
+# 10: Avorion
+# 11: end
+# 12: shutdown
+# 13: soulmask
+stopmode="13"
+
+## Query mode
+# 1: session only
+# 2: gamedig (gsquery fallback)
+# 3: gamedig
+# 4: gsquery
+# 5: tcp
+querymode="2"
+querytype="protocol-valve"
+
+## Console type
+consoleverbose="yes"
+consoleinteract="no"
+
+## Game Server Details
+# Do not edit
+gamename="Soulmask"
+engine="unreal4"
+glibc="2.17"
+
+#### Directories ####
+# Edit with care
+
+## Game Server Directories
+systemdir="${serverfiles}/WS"
+executabledir="${systemdir}/Binaries/Linux"
+executable="./WSServer-Linux-Shipping"
+
+## Backup Directory
+backupdir="${lgsmdir}/backup"
+
+## Logging Directories
+[ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log"
+gamelogdir="${systemdir}/WS/Saved/Logs"
+lgsmlogdir="${logdir}/script"
+consolelogdir="${logdir}/console"
+lgsmlog="${lgsmlogdir}/${selfname}-script.log"
+consolelog="${consolelogdir}/${selfname}-console.log"
+alertlog="${lgsmlogdir}/${selfname}-alert.log"
+postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log"
+
+## Logs Naming
+lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
+consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"
+
+## Log Parameters
+logtimestamp="off"
+logtimestampformat="%Y-%m-%d %H:%M:%S"

+ 1 - 1
lgsm/config-default/config-lgsm/tfserver/_default.cfg

@@ -25,7 +25,7 @@ greenhand="true"
 maxplayers="40"
 maxqueuesize="50"
 queuevalidtime="120"
-saveinterval="300"
+saveinterval="300" # Auto-save in seconds.
 serveradmins="" # Use 17-digit Steam IDs separated by commas to grant admin privileges to players.
 servername="LinuxGSM"
 serverpassword=""

+ 2 - 2
lgsm/config-default/config-lgsm/ut3server/_default.cfg

@@ -22,8 +22,8 @@ usesstats="false"
 shouldadvertise="true"
 pureserver="1"
 allowjoininprogress="true"
-# Required: GameSpy Username and password
-# https://docs.linuxgsm.com/game-servers/unreal-tournament-3#server-gamespy-login
+# Required: OpenSpy Username and password
+# https://docs.linuxgsm.com/game-servers/unreal-tournament-3#server-openspy-login
 gsusername=""
 gspassword=""
 

+ 4 - 7
lgsm/config-default/config-lgsm/vhserver/_default.cfg

@@ -10,20 +10,17 @@
 
 ## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
 servername="LinuxGSM"
-# Minimum password length is 5.
-serverpassword=""
+serverpassword="" # Minimum password length is 5.
 port="2456"
 worldname="${selfname}"
 public="1"
 savedir="$HOME/.config/unity3d/IronGate/Valheim"
 logFile=""
-saveinterval="1800"
+saveinterval="1800" # Auto-save in seconds.
 backups="4"
 backupshort="7200"
 backuplong="43200"
-# If crossplay is empty, it's off. Fill with any text to make true
-# Crossplay is currently not working on Linux dedicated servers, so for now the default is false (empty)
-crossplay=""
+instanceid="1"
 
 # INSTRUCTIONS FOR WORLD MODIFIERS (from Valheim Dedicated Server Manual.pdf located in serverfiles)
 # World modifiers can only be set in the start parameters and can be a combination of the following
@@ -53,7 +50,7 @@ crossplay=""
 worldmodifiers=""
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-name '${servername}' -password ${serverpassword} -port ${port} -world ${worldname} -public ${public} -savedir '${savedir}' -saveinterval ${saveinterval} -backups ${backups} -backupshort ${backupshort} -backuplong ${backuplong}${logFile:+ -logFile '${logFile}'}${crossplay:+ -crossplay}${worldmodifiers:+ ${worldmodifiers}}"
+startparameters="-name '${servername}' -password ${serverpassword} -port ${port} -world ${worldname} -public ${public} -savedir '${savedir}' -saveinterval ${saveinterval} -backups ${backups} -backupshort ${backupshort} -backuplong ${backuplong} -crossplay -instanceid ${instanceid} ${logFile:+ -logFile '${logFile}'} ${worldmodifiers:+ ${worldmodifiers}}"
 
 #### LinuxGSM Settings ####
 

+ 171 - 0
lgsm/config-default/config-lgsm/xntserver/_default.cfg

@@ -0,0 +1,171 @@
+##################################
+######## Default Settings ########
+##################################
+# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN!
+# Copy settings from here and use them in either:
+# common.cfg - applies settings to every instance.
+# [instance].cfg - applies settings to a specific instance.
+
+#### Game Server Settings ####
+
+## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
+
+## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
+startparameters="-userdir ${systemdir}/${selfname}"
+
+#### LinuxGSM Settings ####
+
+## LinuxGSM Stats
+# Send useful stats to LinuxGSM developers.
+# https://docs.linuxgsm.com/configuration/linuxgsm-stats
+# (on|off)
+stats="off"
+
+## Notification Alerts
+# (on|off)
+
+# Display IP | https://docs.linuxgsm.com/alerts#display-ip
+displayip=""
+
+# More info | https://docs.linuxgsm.com/alerts#more-info
+postalert="off"
+
+# Alert on Start/Stop/Restart
+statusalert="off"
+
+# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
+discordalert="off"
+discordwebhook="webhook"
+
+# Email Alerts | https://docs.linuxgsm.com/alerts/email
+emailalert="off"
+email="email@example.com"
+emailfrom=""
+
+# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify
+gotifyalert="off"
+gotifytoken="token"
+gotifywebhook="webhook"
+
+# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
+iftttalert="off"
+ifttttoken="accesstoken"
+iftttevent="linuxgsm_alert"
+
+# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+channeltag=""
+
+# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
+pushoveralert="off"
+pushovertoken="accesstoken"
+pushoveruserkey="userkey"
+
+# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat
+rocketchatalert="off"
+rocketchatwebhook="webhook"
+
+# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
+slackalert="off"
+slackwebhook="webhook"
+
+# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
+# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
+# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help all".
+telegramapi="api.telegram.org"
+telegramalert="off"
+telegramtoken="accesstoken"
+telegramchatid=""
+telegramthreadid=""
+telegramsilentnotification="false"
+curlcustomstring=""
+
+## Backup | https://docs.linuxgsm.com/commands/backup
+maxbackups="4"
+maxbackupdays="30"
+stoponbackup="on"
+
+## Logging | https://docs.linuxgsm.com/features/logging
+consolelogging="on"
+logdays="7"
+
+## Monitor | https://docs.linuxgsm.com/commands/monitor
+# Query delay time
+querydelay="1"
+
+## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors
+ansi="on"
+
+#### Advanced Settings ####
+
+## Message Display Time | https://docs.linuxgsm.com/features/message-display-time
+sleeptime="0.5"
+
+## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
+# 1: tmux kill
+# 2: CTRL+c
+# 3: quit
+# 4: quit 120s
+# 5: stop
+# 6: q
+# 7: exit
+# 8: 7 Days to Die
+# 9: GoldSrc
+# 10: Avorion
+# 11: end
+stopmode="2"
+
+## Query mode
+# 1: session only
+# 2: gamedig (gsquery fallback)
+# 3: gamedig
+# 4: gsquery
+# 5: tcp
+querymode="3"
+querytype="xonotic"
+
+## Console type
+consoleverbose="yes"
+consoleinteract="yes"
+
+## Game Server Details
+# Do not edit
+gamename="Xonotic"
+engine="unreal3"
+glibc="2.29"
+
+#### Directories ####
+# Edit with care
+
+## Game Server Directories
+systemdir="${serverfiles}"
+executabledir="${systemdir}"
+executable="./xonotic-linux64-dedicated"
+servercfgdir="${systemdir}/${selfname}/data"
+servercfg="server.cfg"
+servercfgdefault="${systemdir}/server.cfg"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+
+## Backup Directory
+backupdir="${lgsmdir}/backup"
+
+## Logging Directories
+[ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log"
+gamelogdir="${logdir}/server"
+lgsmlogdir="${logdir}/script"
+consolelogdir="${logdir}/console"
+gamelog="${gamelogdir}/${selfname}-game.log"
+lgsmlog="${lgsmlogdir}/${selfname}-script.log"
+consolelog="${consolelogdir}/${selfname}-console.log"
+alertlog="${lgsmlogdir}/${selfname}-alert.log"
+postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log"
+
+## Logs Naming
+lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
+consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"
+gamelogdate="${gamelogdir}/${selfname}-game-$(date '+%Y-%m-%d-%H:%M:%S').log"
+
+## Log Parameters
+logtimestamp="off"
+logtimestampformat="%Y-%m-%d %H:%M:%S"

+ 3 - 2
lgsm/data/almalinux-8.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-21-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-21-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/almalinux-9.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-21-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-21-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/centos-7.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-11-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-11-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/centos-8.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-17-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-17-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/centos-9.csv

@@ -69,7 +69,6 @@ mc,java-17-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-17-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-17-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/debian-10.csv

@@ -68,7 +68,6 @@ mc,openjdk-11-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -105,6 +104,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-11-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-11-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/debian-11.csv

@@ -69,7 +69,6 @@ mc,openjdk-17-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-11-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-17-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/debian-12.csv

@@ -69,7 +69,6 @@ mc,openjdk-17-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-17-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-17-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 139 - 0
lgsm/data/debian-13.csv

@@ -0,0 +1,139 @@
+all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,distro-info,file,gzip,hostname,jq,lib32gcc-s1,lib32stdc++6,netcat-openbsd,pigz,python3,tar,tmux,unzip,util-linux,uuid-runtime,wget,xz-utils
+steamcmd,lib32gcc-s1,lib32stdc++6,libsdl2-2.0-0:i386,steamcmd
+ac
+ahl
+ahl2
+ark
+arma3
+armar,libcurl4
+ats
+av
+bb
+bb2,libcurl4-gnutls-dev:i386
+bd
+bf1942,libncurses5:i386,libtinfo5:i386
+bfv,libncurses5:i386,libstdc++5:i386
+bmdm,libncurses5:i386
+bo
+bs
+bt,libicu-dev,dos2unix,libxml2-utils
+btl
+cc
+ck,xvfb,libxi6
+cmw
+cod,libstdc++5:i386
+cod2,libstdc++5:i386
+cod4
+coduo,libstdc++5:i386
+codwaw
+col
+cs
+cs2
+cscz
+csgo
+css,libtinfo5:i386
+ct
+dab
+dayz
+dmc
+dod
+dodr
+dods
+doi
+dst,libcurl4-gnutls-dev:i386
+dys
+eco,libgdiplus
+em
+etl
+ets2
+fctr
+fof
+gmod,libtinfo5:i386
+hcu
+hl2dm
+hldm
+hldms
+hw,lib32z1
+hz
+ins
+inss
+ios
+jc2
+jc3
+jk2
+kf
+kf2
+l4d
+l4d2
+mc,openjdk-22-jre
+mcb
+mh
+mohaa,libstdc++5:i386
+mta,libncursesw5,libxml2-utils
+nd
+nec
+nmrih,libtinfo5:i386
+ns
+ns2,speex,libtbb12
+ns2c,speex:i386,libtbb12
+ohd
+onset,libmariadb-dev
+opfor
+pc
+pc2
+pmc,openjdk-22-jre
+ps,libgconf-2-4
+pvkii
+pvr,libc++1
+pw
+pz,openjdk-22-jre,rng-tools5
+q2
+q3
+q4
+ql
+qw
+ricochet
+ro
+rtcw
+rust,lib32z1
+rw,openjdk-22-jre
+samp
+sb
+sbots
+scpsl,mono-complete
+scpslsm,mono-complete
+sdtd,telnet,expect,libxml2-utils
+sf
+sfc,libtinfo5:i386
+sm,telnet,expect
+sof2
+sol
+squad
+st,libxml2-utils
+stn
+sven,libssl3:i386,zlib1g:i386
+terraria
+tf
+tf2,libcurl4-gnutls-dev:i386
+tfc
+ti
+ts
+ts3
+tu
+tw
+unt
+ut
+ut2k4
+ut3
+ut99
+vh,libc6-dev,libatomic1,libpulse-dev
+vints,aspnetcore-runtime-7.0
+vpmc,openjdk-21-jre
+vs
+wet
+wf
+wmc,openjdk21-jre
+wurm,xvfb
+xnt
+zmr,libtinfo5:i386
+zps,libtinfo5:i386

+ 3 - 2
lgsm/data/debian-9.csv

@@ -69,7 +69,6 @@ mc,openjdk-8-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-8-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-8-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

BIN
lgsm/data/gameicons/mom-icon.png


BIN
lgsm/data/gameicons/sm-icon.png


BIN
lgsm/data/gameicons/xnt-icon.png


+ 3 - 2
lgsm/data/rhel-7.csv

@@ -70,7 +70,6 @@ mc,java-11-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-11-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-11-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/rhel-8.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-21-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-21-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/rhel-9.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-21-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-21-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/rocky-8.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-21-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-21-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 3 - 2
lgsm/data/rocky-9.csv

@@ -69,7 +69,6 @@ mc,java-21-openjdk
 mcb,libnsl
 mh
 mohaa,compat-libstdc++-33.i686
-mom
 mta,ncurses-compat-libs,libxml2
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm
 sdtd,telnet,expect,libxml2
 sf
 sfc,ncurses-libs.i686
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,glibc-devel
+vh,glibc-devel,libatomic,pulseaudio-libs-devel
 vints,aspnetcore-runtime-7.0
 vpmc,java-21-openjdk
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,java-21-openjdk
 wurm,xorg-x11-server-Xvfb
+xnt
 zmr,ncurses-libs.i686
 zps,ncurses-libs.i686

+ 2 - 1
lgsm/data/serverlist.csv

@@ -68,7 +68,6 @@ mc,mcserver,Minecraft,ubuntu-22.04
 mcb,mcbserver,Minecraft Bedrock,ubuntu-22.04
 mh,mhserver,MORDHAU,ubuntu-22.04
 mohaa,mohaaserver,Medal of Honor: Allied Assault,ubuntu-22.04
-mom,momserver,Memories of Mars,ubuntu-22.04
 mta,mtaserver,Multi Theft Auto,ubuntu-22.04
 nd,ndserver,Nuclear Dawn,ubuntu-22.04
 nec,necserver,Necesse,ubuntu-22.04
@@ -105,6 +104,7 @@ scpslsm,scpslsmserver,SCP: Secret Laboratory ServerMod,ubuntu-22.04
 sdtd,sdtdserver,7 Days to Die,ubuntu-22.04
 sf,sfserver,Satisfactory,ubuntu-22.04
 sfc,sfcserver,SourceForts Classic,ubuntu-22.04
+sm,smserver,Soulmask,ubuntu-22.04
 sof2,sof2server,Soldier Of Fortune 2: Gold Edition,ubuntu-22.04
 sol,solserver,Soldat,ubuntu-22.04
 squad,squadserver,Squad,ubuntu-22.04
@@ -133,5 +133,6 @@ wet,wetserver,Wolfenstein: Enemy Territory,ubuntu-22.04
 wf,wfserver,Warfork,ubuntu-22.04
 wmc,wmcserver,WaterfallMC,ubuntu-22.04
 wurm,wurmserver,Wurm Unlimited,ubuntu-22.04
+xnt,xntserver,Xonotic,ubuntu-22.04
 zmr,zmrserver,Zombie Master: Reborn,ubuntu-22.04
 zps,zpsserver,Zombie Panic! Source,ubuntu-22.04

+ 3 - 2
lgsm/data/ubuntu-16.04.csv

@@ -70,7 +70,6 @@ mc,openjdk-8-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-8-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-8-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/ubuntu-18.04.csv

@@ -70,7 +70,6 @@ mc,openjdk-11-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-11-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-11-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/ubuntu-20.04.csv

@@ -69,7 +69,6 @@ mc,openjdk-21-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-11-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-21-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/ubuntu-22.04.csv

@@ -69,7 +69,6 @@ mc,openjdk-21-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-21-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-21-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/ubuntu-23.04.csv

@@ -69,7 +69,6 @@ mc,openjdk-21-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-21-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-21-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/ubuntu-23.10.csv

@@ -69,7 +69,6 @@ mc,openjdk-21-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-21-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-21-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 3 - 2
lgsm/data/ubuntu-24.04.csv

@@ -69,7 +69,6 @@ mc,openjdk-21-jre
 mcb
 mh
 mohaa,libstdc++5:i386
-mom
 mta,libncursesw5,libxml2-utils
 nd
 nec
@@ -106,6 +105,7 @@ scpslsm,mono-complete
 sdtd,telnet,expect,libxml2-utils
 sf
 sfc,libtinfo5:i386
+sm,telnet,expect
 sof2
 sol
 squad
@@ -126,7 +126,7 @@ ut
 ut2k4
 ut3
 ut99
-vh,libc6-dev
+vh,libc6-dev,libatomic1,libpulse-dev
 vints,aspnetcore-runtime-7.0
 vpmc,openjdk-21-jre
 vs
@@ -134,5 +134,6 @@ wet
 wf
 wmc,openjdk-21-jre
 wurm,xvfb
+xnt
 zmr,libtinfo5:i386
 zps,libtinfo5:i386

+ 1 - 1
lgsm/modules/alert.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Overall module for managing alerts.
 

+ 2 - 2
lgsm/modules/alert_discord.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_discord.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends Discord alert.
 
@@ -142,7 +142,7 @@ else
 	json="${jsoninfo}"
 fi
 
-discordsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" "${discordwebhook}")
+discordsend=$(curl --connect-timeout 3 -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}"

+ 1 - 1
lgsm/modules/alert_email.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_email.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends email alert.
 

+ 2 - 2
lgsm/modules/alert_gotify.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_gotify.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends Gotify alert.
 
@@ -34,7 +34,7 @@ else
 fi
 
 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 .)")
+gotifysend=$(curl --connect-timeout 3 -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"

+ 2 - 2
lgsm/modules/alert_ifttt.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_ifttt.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends IFTTT alert.
 
@@ -34,7 +34,7 @@ else
 fi
 
 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")
+iftttsend=$(curl --connect-timeout 3 -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}"

+ 2 - 2
lgsm/modules/alert_pushbullet.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_pushbullet.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends Pushbullet Messenger alert.
 
@@ -36,7 +36,7 @@ else
 fi
 
 fn_print_dots "Sending Pushbullet alert"
-pushbulletsend=$(curl --connect-timeout 10 -sSL -H "Access-Token: ${pushbullettoken}" -H "Content-Type: application/json" -X POST -d "$(echo -n "${json}" | jq -c .)" "https://api.pushbullet.com/v2/pushes" | grep "error_code")
+pushbulletsend=$(curl --connect-timeout 3 -sSL -H "Access-Token: ${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}"

+ 3 - 3
lgsm/modules/alert_pushover.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_pushover.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends Pushover alert.
 
@@ -23,9 +23,9 @@ else
 fi
 
 if [ -z "${alerturl}" ]; then
-	pushoversend=$(curl --connect-timeout 10 -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alerttitle}" -F message=" <b>Server name</b><br>${servername}<br><br><b>Information</b><br>${alertmessage}<br><br><b>Game</b><br>${gamename}<br><br><b>Server IP</b><br>${alertip}:${port}<br><br><b>Hostname</b><br>${HOSTNAME}<br><br>Server Time<br>$(date)" "https://api.pushover.net/1/messages.json" | grep errors)
+	pushoversend=$(curl --connect-timeout 3 -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alerttitle}" -F message=" <b>Server name</b><br>${servername}<br><br><b>Information</b><br>${alertmessage}<br><br><b>Game</b><br>${gamename}<br><br><b>Server IP</b><br>${alertip}:${port}<br><br><b>Hostname</b><br>${HOSTNAME}<br><br>Server Time<br>$(date)" "https://api.pushover.net/1/messages.json" | grep errors)
 else
-	pushoversend=$(curl --connect-timeout 10 -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alerttitle}" -F message=" <b>Server name</b><br>${servername}<br><br><b>Information</b><br>${alertmessage}<br><br><b>Game</b><br>${gamename}<br><br><b>Server IP</b><br>${alertip}:${port}<br><br><b>Hostname</b><br>${HOSTNAME}<br><br><b>More info</b><br><a href='${alerturl}'>${alerturl}</a><br><br>Server Time<br>$(date)" "https://api.pushover.net/1/messages.json" | grep errors)
+	pushoversend=$(curl --connect-timeout 3 -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alerttitle}" -F message=" <b>Server name</b><br>${servername}<br><br><b>Information</b><br>${alertmessage}<br><br><b>Game</b><br>${gamename}<br><br><b>Server IP</b><br>${alertip}:${port}<br><br><b>Hostname</b><br>${HOSTNAME}<br><br><b>More info</b><br><a href='${alerturl}'>${alerturl}</a><br><br>Server Time<br>$(date)" "https://api.pushover.net/1/messages.json" | grep errors)
 fi
 
 if [ -n "${pushoversend}" ]; then

+ 2 - 2
lgsm/modules/alert_rocketchat.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_rocketchat.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends Rocketchat alert.
 
@@ -123,7 +123,7 @@ else
 fi
 
 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}")
+rocketchatsend=$(curl --connect-timeout 3 -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"

+ 2 - 2
lgsm/modules/alert_slack.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_slack.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends Slack alert.
 
@@ -182,7 +182,7 @@ fi
 
 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}")
+slacksend=$(curl --connect-timeout 3 -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"

+ 2 - 2
lgsm/modules/alert_telegram.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM alert_telegram.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends Telegram Messenger alert.
 
@@ -40,7 +40,7 @@ else
 fi
 
 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")
+telegramsend=$(curl --connect-timeout 3 -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}"

+ 1 - 1
lgsm/modules/check.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Overall module for managing checks.
 # Runs checks that will either halt on or fix an issue.

+ 1 - 1
lgsm/modules/check_config.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_config.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if the server config is missing and warns the user if needed.
 

+ 1 - 1
lgsm/modules/check_deps.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_deps.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks and installs missing dependencies.
 

+ 1 - 1
lgsm/modules/check_executable.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_executable.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if server executable exists.
 

+ 5 - 5
lgsm/modules/check_gamedig.sh

@@ -1,19 +1,19 @@
 #!/bin/bash
 # LinuxGSM check_gamedig.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Installs nodejs and gamedig
 
-if [ "$(command -v node)" ] && [ "$(node -v | cut -d 'v' -f 2 | cut -d '.' -f 1)" -ge 16 ] && [ ! -f "${lgsmdir}/node_modules/gamedig/bin/gamedig.js" ]; then
+if [ "$(command -v node)" ] && [ "$(command -v npm)" ] && [ "$(node -v | cut -d 'v' -f 2 | cut -d '.' -f 1)" -ge 16 ] && [ ! -f "${lgsmdir}/node_modules/gamedig/bin/gamedig.js" ]; then
 	echo -e ""
 	echo -e "${bold}${lightyellow}Installing Gamedig${default}"
 	fn_script_log_info "Installing Gamedig"
 	cd "${lgsmdir}" || exit
-	curl -L -o package.json "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${githubbranch}/package.json"
+	curl -L -o package.json "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/package.json"
 	npm install
-elif [ "$(command -v node)" ] && [ "$(node -v | cut -d 'v' -f 2 | cut -d '.' -f 1)" -ge 16 ]; then
+elif [ "$(command -v node)" ] && [ "$(command -v npm)" ] && [ "$(node -v | cut -d 'v' -f 2 | cut -d '.' -f 1)" -ge 16 ]; then
 	cd "${lgsmdir}" || exit
-	curl -s -L -o package.json "https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${githubbranch}/package.json"
+	curl -s -L -o package.json "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/package.json"
 	npm update > /dev/null 2>&1
 fi

+ 1 - 1
lgsm/modules/check_glibc.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_glibc.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if the server has the correct Glibc version.
 

+ 1 - 1
lgsm/modules/check_ip.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_ip.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://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".

+ 1 - 1
lgsm/modules/check_last_update.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_last_update.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks Lockfile to see when last update happened.
 # Will reboot server if instance not rebooted since update.

+ 1 - 1
lgsm/modules/check_logs.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_logs.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if log files exist.
 

+ 40 - 15
lgsm/modules/check_permissions.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_permissions.sh
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks ownership & permissions of scripts, files and directories.
 
@@ -13,6 +13,11 @@ fn_check_ownership() {
 			selfownissue=1
 		fi
 	fi
+	if [ -d "${lgsmdir}" ]; then
+		if [ "$(find "${lgsmdir}" -not -user "$(whoami)" | wc -l)" -ne "0" ]; then
+			lgsmownissue=1
+		fi
+	fi
 	if [ -d "${modulesdir}" ]; then
 		if [ "$(find "${modulesdir}" -not -name '*.swp' -not -user "$(whoami)" | wc -l)" -ne "0" ]; then
 			funcownissue=1
@@ -23,18 +28,18 @@ fn_check_ownership() {
 			filesownissue=1
 		fi
 	fi
-	if [ "${selfownissue}" == "1" ] || [ "${funcownissue}" == "1" ] || [ "${filesownissue}" == "1" ]; then
+	if [ "${selfownissue}" == "1" ] || [ "${lgsmownissue}" == "1" ] || [ "${filesownissue}" == "1" ]; then
 		fn_print_fail_nl "Ownership issues found"
 		fn_script_log_fail "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"
+			echo -en "User\tGroup\tFile:"
 			if [ "${selfownissue}" == "1" ]; then
 				find "${rootdir}/${selfname}" -not -user "$(whoami)" -printf "%u\t%g\t%p\n"
 			fi
-			if [ "${funcownissue}" == "1" ]; then
-				find "${modulesdir}" -not -user "$(whoami)" -printf "%u\t%g\t%p\n"
+			if [ "${lgsmownissue}" == "1" ]; then
+				find "${lgsmdir}" -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"
@@ -53,27 +58,46 @@ fn_check_ownership() {
 }
 
 fn_check_permissions() {
+	# Check modules files are executable.
 	if [ -d "${modulesdir}" ]; then
-		if [ "$(find "${modulesdir}" -type f -not -executable | wc -l)" -ne "0" ]; then
+		findnotexecutable="$(find "${modulesdir}" -type f -not -executable)"
+		findnotexecutablewc="$(find "${modulesdir}" -type f -not -executable | wc -l)"
+		if [ "${findnotexecutablewc}" -ne "0" ]; then
 			fn_print_fail_nl "Permissions issues found"
 			fn_script_log_fail "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 "${modulesdir}" -type f -not -executable -printf "%p\n"
+				echo -en "File:"
+				echo -en "${findnotexecutable}"
 			} | column -s $'\t' -t | tee -a "${lgsmlog}"
-			if [ "${monitorflag}" == 1 ]; then
-				alert="permissions"
-				alert.sh
+
+			# Attempt to make the files executable
+			fn_print_information_nl "Attempting to fix permissions issues"
+			fn_script_log_info "Attempting to fix permissions issues"
+			echo "${findnotexecutable}" | xargs chmod +x
+
+			# Re-check if there are still non-executable files
+			findnotexecutable="$(find "${modulesdir}" -type f -not -executable)"
+			findnotexecutablewc="$(find "${modulesdir}" -type f -not -executable | wc -l)"
+			if [ "${findnotexecutablewc}" -ne "0" ]; then
+				fn_print_fail_nl "Failed to resolve permissions issues"
+				fn_script_log_fail "Failed to resolve permissions issues"
+				if [ "${monitorflag}" == 1 ]; then
+					alert="permissions"
+					alert.sh
+				fi
+				core_exit.sh
+			else
+				fn_print_ok_nl "Permissions issues resolved"
+				fn_script_log_pass "Permissions issues resolved"
 			fi
-			core_exit.sh
 		fi
 	fi
 
 	# Check rootdir permissions.
-	if [ "${rootdir}" ]; then
-		# Get permission numbers on directory under the form 775.
+	if [ -d "${rootdir}" ]; then
+		# Get permission numbers on directory should return 775.
 		rootdirperm=$(stat -c %a "${rootdir}")
 		# Grab the first and second digit for user and group permission.
 		userrootdirperm="${rootdirperm:0:1}"
@@ -92,6 +116,7 @@ fn_check_permissions() {
 			core_exit.sh
 		fi
 	fi
+
 	# Check if executable is executable and attempt to fix it.
 	# First get executable name.
 	execname=$(basename "${executable}")
@@ -141,7 +166,7 @@ fn_check_permissions() {
 	fi
 }
 
-## The following fn_sys_perm_* modules checks for permission errors in /sys directory.
+## The following fn_sys_perm_* function checks for permission errors in /sys directory.
 
 # Checks for permission errors in /sys directory.
 fn_sys_perm_errors_detect() {

+ 1 - 1
lgsm/modules/check_root.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_root.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if the user tried to run the script as root.
 

+ 1 - 1
lgsm/modules/check_status.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_status.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks the process status of the server. Either online or offline.
 

+ 1 - 1
lgsm/modules/check_steamcmd.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_steamcmd.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if SteamCMD is installed correctly.
 

+ 1 - 1
lgsm/modules/check_system_dir.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_system_dir.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if systemdir/serverfiles is accessible.
 

+ 4 - 2
lgsm/modules/check_system_requirements.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_system_requirements.sh
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks RAM requirements.
 
@@ -9,7 +9,7 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
 info_distro.sh
 
-# RAM requirements in megabytes for each game or engine.
+# RAM requirements in gigabytes for each game or engine.
 
 if [ "${shortname}" == "ark" ]; then
 	ramrequirementgb="7"
@@ -49,6 +49,8 @@ elif [ "${shortname}" == "sf" ]; then
 	ramrequirementgb="12"
 elif [ "${shortname}" == "squad" ]; then
 	ramrequirementgb="2"
+elif [ "${shortname}" == "sm" ]; then
+	ramrequirementgb="10"
 elif [ "${shortname}" == "st" ]; then
 	ramrequirementgb="1"
 elif [ "${shortname}" == "stn" ]; then

+ 1 - 1
lgsm/modules/check_tmuxception.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM check_config.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Checks if run from tmux or screen.
 

+ 1 - 1
lgsm/modules/check_version.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_version.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://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.

+ 1 - 1
lgsm/modules/command_backup.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_backup.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Creates a .tar.gz file in the backup directory.
 

+ 1 - 1
lgsm/modules/command_check_update.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_check_update.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Handles updating of servers.
 

+ 1 - 1
lgsm/modules/command_console.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_console.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Gives access to the server tmux console.
 

+ 1 - 1
lgsm/modules/command_debug.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_debug.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Runs the server without tmux and directly from the terminal.
 

+ 1 - 1
lgsm/modules/command_details.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_details.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Displays server information.
 

+ 1 - 1
lgsm/modules/command_dev_clear_modules.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_clear_modules.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Deletes the contents of the modules dir.
 

+ 1 - 1
lgsm/modules/command_dev_debug.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_debug.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Dev only: Enables debugging log to be saved to dev-debug.log.
 

+ 1 - 1
lgsm/modules/command_dev_detect_deps.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_detect_deps.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Detects dependencies the server binary requires.
 

+ 1 - 1
lgsm/modules/command_dev_detect_glibc.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_detect_glibc.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Automatically detects the version of GLIBC that is required.
 # Can check a file or directory recursively.

+ 1 - 1
lgsm/modules/command_dev_detect_ldd.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_detect_ldd.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Automatically detects required deps using ldd.
 # Can check a file or directory recursively.

+ 10 - 10
lgsm/modules/command_dev_parse_distro_details.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_parse_distro_details.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Display parsed distro details.
 
@@ -87,7 +87,7 @@ missing_details=""
 
 # Loop through the distro details and store them.
 for key in "${!server_details[@]}"; do
-    value=${server_details[$key]}
+	value=${server_details[$key]}
 	if [ -n "$value" ]; then
 		available_details+="${lightblue}${key}: ${default}${value}\n"
 	else
@@ -97,18 +97,18 @@ done
 
 # Sort and output the available distro details.
 if [ -n "$available_details" ]; then
-    echo -e ""
-    echo -e "${bold}${lightgreen}Available Distro Details${default}"
-    fn_messages_separator
-    echo -e "${available_details}" | sort
+	echo -e ""
+	echo -e "${bold}${lightgreen}Available Distro Details${default}"
+	fn_messages_separator
+	echo -e "${available_details}" | sort
 fi
 
 # Sort and output the missing distro details.
 if [ -n "$missing_details" ]; then
-    echo -e ""
-    echo -e "${lightgreen}Missing or unsupported Distro Details${default}"
-    fn_messages_separator
-    echo -e "${missing_details}" | sort
+	echo -e ""
+	echo -e "${lightgreen}Missing or unsupported Distro Details${default}"
+	fn_messages_separator
+	echo -e "${missing_details}" | sort
 fi
 
 core_exit.sh

+ 9 - 12
lgsm/modules/command_dev_parse_game_details.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_parse_game_details.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Display parsed gameserver details.
 
@@ -70,22 +70,20 @@ declare -A server_details=(
 	['Max Players']="${maxplayers}"
 	['Mod Server Port']="${modserverport}"
 	['OldQueryPortNumber']="${oldqueryportnumber}"
-	['Password']="${password}"
 	['Port 401']="${port401}"
 	['Port IPv6']="${portipv6}"
 	['Port']="${port}"
 	['Query Enabled']="${queryenabled}"
-	['Query HTTP Port']="${queryhttpport}"
-	['Query HTTPS Port']="${queryhttpsport}"
+	['Query HTTP Port']="${httpqueryport}"
+	['Query HTTPS Port']="${httpsqueryport}"
 	['Query Mode']="${querymode}"
-	['Query Port GS']="${queryportgs}"
+	['Query Port GS']="${gamespyqueryport}"
 	['Query Port']="${queryport}"
-	['Query SSH Port']="${querysshport}"
+	['Query SSH Port']="${sshqueryport}"
 	['Queue Enabled']="${queueenabled}"
 	['Queue Port']="${queueport}"
 	['Random Map']="${randommap}"
 	['Raw Port']="${rawport}"
-	['RC Password']="${rcpassword}"
 	['RCON Enabled']="${rconenabled}"
 	['RCON Password']="${rconpassword}"
 	['RCON Port']="${rconport}"
@@ -114,7 +112,6 @@ declare -A server_details=(
 	['Steamworks Port']="${steamworksport}"
 	['Telnet Enabled']="${telnetenabled}"
 	['Telnet IP']="${telnetip}"
-	['Telnet Password']="${telnetpass}"
 	['Telnet Password']="${telnetpassword}"
 	['Telnet Port']="${telnetport}"
 	['Tickrate']="${tickrate}"
@@ -133,7 +130,7 @@ missing_details=""
 
 # Loop through the server details and store them.
 for key in "${!server_details[@]}"; do
-    value=${server_details[$key]}
+	value=${server_details[$key]}
 	if [ -n "$value" ]; then
 		available_details+="${lightblue}${key}: ${default}${value}\n"
 	else
@@ -144,9 +141,9 @@ done
 # Sort and output the available distro details.
 if [ -n "$available_details" ]; then
 	echo -e ""
-    echo -e "${bold}${lightgreen}Available Gameserver Details${default}"
-    fn_messages_separator
-    echo -e "${available_details}" | sort
+	echo -e "${bold}${lightgreen}Available Gameserver Details${default}"
+	fn_messages_separator
+	echo -e "${available_details}" | sort
 fi
 
 # Output the missing server details if there are any.

+ 2 - 2
lgsm/modules/command_dev_query_raw.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_dev_query_raw.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Raw gamedig output of the server.
 
@@ -207,7 +207,7 @@ echo -e ""
 echo -e "${lightgreen}Gamedig Raw Output${default}"
 fn_messages_separator
 echo -e ""
-if [ ! "$(command -v gamedig 2> /dev/null)" ] || [ ! -f "${lgsmdir}/node_modules/gamedig/bin/gamedig.js" ]; then
+if [ ! "$(command -v gamedig 2> /dev/null)" ] && [ ! -f "${lgsmdir}/node_modules/gamedig/bin/gamedig.js" ]; then
 	fn_print_failure_nl "gamedig not installed"
 fi
 if [ ! "$(command -v jq 2> /dev/null)" ]; then

+ 1 - 1
lgsm/modules/command_fastdl.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_fastdl.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Creates a FastDL directory.
 

+ 1 - 1
lgsm/modules/command_install.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_install.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Overall module for the installer.
 

+ 1 - 1
lgsm/modules/command_install_resources_mta.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_install_resources_mta.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Installs the default resources for Multi Theft Auto.
 

+ 1 - 1
lgsm/modules/command_mods_install.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_mods_install.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: List and installs available mods along with mods_list.sh and mods_core.sh.
 

+ 1 - 1
lgsm/modules/command_mods_remove.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_mods_uninstall.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Uninstall mods along with mods_list.sh and mods_core.sh.
 

+ 1 - 1
lgsm/modules/command_mods_update.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_mods_update.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Updates installed mods along with mods_list.sh and mods_core.sh.
 

+ 1 - 1
lgsm/modules/command_monitor.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_monitor.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Monitors server by checking for running processes
 # then passes to gamedig and gsquery.

+ 1 - 1
lgsm/modules/command_postdetails.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_postdetails.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Strips sensitive information out of Details output.
 

+ 2 - 1
lgsm/modules/command_restart.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_restart.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Restarts the server.
 
@@ -10,6 +10,7 @@ commandaction="Restarting"
 moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 fn_firstcommand_set
 
+check.sh
 info_game.sh
 exitbypass=1
 command_stop.sh

+ 1 - 1
lgsm/modules/command_send.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_send.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Send command to the server tmux console.
 

+ 1 - 1
lgsm/modules/command_skeleton.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_skeleton.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Creates an copy of a game servers directorys.
 

+ 1 - 1
lgsm/modules/command_sponsor.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_sponsor.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Shows ways to sponsor.
 

+ 3 - 2
lgsm/modules/command_start.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_start.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Starts the server.
 
@@ -80,7 +80,8 @@ fn_start_tmux() {
 
 	# Enable console logging.
 	if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
-		if [ "${logtimestamp}" == "on" ]; then
+		# timestamp will break mcb update check.
+		if [ "${logtimestamp}" == "on" ] && [ "${shortname}" != "mcb" ]; then
 			tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
 		else
 			tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"

+ 100 - 9
lgsm/modules/command_stop.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_stop.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Stops the server.
 
@@ -96,8 +96,8 @@ fn_stop_graceful_goldsrc() {
 
 # telnet command for sdtd graceful shutdown.
 fn_stop_graceful_sdtd_telnet() {
-	if [ -z "${telnetpass}" ] || [ "${telnetpass}" == "NOT SET" ]; then
-		sdtd_telnet_shutdown=$(expect -c '
+	if [ -z "${telnetpassword}" ] || [ "${telnetpassword}" == "NOT SET" ]; then
+		sdtdtelnetshutdown=$(expect -c '
 		proc abort {} {
 			puts "Timeout or EOF\n"
 			exit 1
@@ -111,14 +111,14 @@ fn_stop_graceful_sdtd_telnet() {
 		puts "Completed.\n"
 		')
 	else
-		sdtd_telnet_shutdown=$(expect -c '
+		sdtdtelnetshutdown=$(expect -c '
 		proc abort {} {
 			puts "Timeout or EOF\n"
 			exit 1
 		}
 		spawn telnet '"${telnetip}"' '"${telnetport}"'
 		expect {
-			"password:"     { send "'"${telnetpass}"'\r" }
+			"password:"     { send "'"${telnetpassword}"'\r" }
 			default         abort
 		}
 		expect {
@@ -143,8 +143,8 @@ fn_stop_graceful_sdtd() {
 			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")
+			completed=$(echo -en "\n ${sdtdtelnetshutdown}" | grep "Completed.")
+			refused=$(echo -en "\n ${sdtdtelnetshutdown}" | grep "Timeout or EOF")
 			if [ "${refused}" ]; then
 				fn_print_error "Graceful: telnet: ${telnetip}:${telnetport} : "
 				fn_print_fail_eol_nl
@@ -159,7 +159,7 @@ fn_stop_graceful_sdtd() {
 		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")
+				refused=$(echo -en "\n ${sdtdtelnetshutdown}" | grep "Timeout or EOF")
 				if [ "${refused}" ]; then
 					fn_print_ok "Graceful: telnet: ${telnetip}:${telnetport} : "
 					fn_print_ok_eol_nl
@@ -185,7 +185,7 @@ fn_stop_graceful_sdtd() {
 			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 ${sdtdtelnetshutdown}" | tee -a "${lgsmlog}"
 			echo -en "\n\n" | tee -a "${lgsmlog}"
 		fi
 	else
@@ -195,6 +195,95 @@ fn_stop_graceful_sdtd() {
 	fi
 }
 
+# Attempts graceful shutdown of Soulmask using telnet.
+fn_stop_graceful_sm() {
+	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_sm_telnet
+			completed=$(echo -en "\n ${smtelnetshutdown}" | grep "Completed.")
+			refused=$(echo -en "\n ${smtelnetshutdown}" | 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_sm_telnet
+				refused=$(echo -en "\n ${smtelnetshutdown}" | 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"
+					if [ "${statusalert}" == "on" ] && [ "${firstcommandname}" == "STOP" ]; then
+						alert="stopped"
+						alert.sh
+					fi
+					break
+				fi
+				fn_sleep_time_1
+				fn_print_dots "Graceful: telnet: ${seconds}"
+			done
+		# If telnet shutdown fails, show it and stop
+		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 ${smtelnetshutdown}" | 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
+}
+
+# telnet command for soulmask graceful shutdown.
+fn_stop_graceful_sm_telnet() {
+	smtelnetshutdown=$(expect -c '
+		proc abort {} {
+			puts "Timeout or EOF\n"
+			exit 1
+		}
+		spawn telnet '"${telnetip}"' '"${telnetport}"'
+		expect {
+			"Hello:"	{ send "saveworld 1\r" }
+			default	abort
+		}
+		expect {
+			"the world is saved."	{ send "quit 1\r" }
+			default	abort
+		}
+		expect {
+			"World is closing..."	{}
+			default	abort
+		}
+		expect { eof }
+		puts "Completed.\n"
+	')
+}
+
 # Attempts graceful shutdown by sending /save /stop.
 fn_stop_graceful_avorion() {
 	fn_print_dots "Graceful: /save /stop"
@@ -253,6 +342,8 @@ fn_stop_graceful_select() {
 		fn_stop_graceful_cmd "end" 30
 	elif [ "${stopmode}" == "12" ]; then
 		fn_stop_graceful_cmd "shutdown" 30
+	elif [ "${stopmode}" == "13" ]; then
+		fn_stop_graceful_sm
 	fi
 }
 

+ 1 - 1
lgsm/modules/command_test_alert.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_test_alert.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Sends a test alert.
 

+ 1 - 1
lgsm/modules/command_ts3_server_pass.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_ts3_server_pass.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Changes TS3 serveradmin password.
 

+ 3 - 1
lgsm/modules/command_update.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_update.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Handles updating of servers.
 
@@ -33,6 +33,8 @@ elif [ "${shortname}" == "vints" ]; then
 	update_vints.sh
 elif [ "${shortname}" == "ut99" ]; then
 	update_ut99.sh
+elif [ "${shortname}" == "xnt" ]; then
+	update_xnt.sh
 else
 	update_steamcmd.sh
 fi

+ 26 - 19
lgsm/modules/command_update_linuxgsm.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_update_linuxgsm.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Deletes the modules dir to allow re-downloading of modules from GitHub.
 
@@ -15,14 +15,21 @@ check.sh
 info_distro.sh
 info_game.sh
 
+# Prevent github from using a cached version of the file if dev-debug is enabled.
+if [ -f "${rootdir}/.dev-debug" ]; then
+	nocache="-H \"Cache-Control: no-cache\" -H \"Pragma: no-cache\""
+fi
+
 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
+
+curl ${nocache} --connect-timeout 3 -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
+	curl curl ${nocache} --connect-timeout 3 -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_fail "Selecting repo: Unable to to access GitHub or Bitbucket repositories"
@@ -39,9 +46,9 @@ 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
+	curl ${nocache} --connect-timeout 3 -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
+	curl ${nocache} --connect-timeout 3 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh" 1> /dev/null
 fi
 if [ $? != "0" ]; then
 	fn_print_fail_eol_nl
@@ -51,9 +58,9 @@ if [ $? != "0" ]; then
 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"))
+	tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl ${nocache} --connect-timeout 3 -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"))
+	tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl ${nocache} --connect-timeout 3 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh"))
 fi
 
 if [ "${tmp_script_diff}" != "" ]; then
@@ -119,9 +126,9 @@ fi
 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
+	curl ${nocache} --connect-timeout 3 -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
+	curl ${nocache} --connect-timeout 3 -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
@@ -131,9 +138,9 @@ if [ $? != "0" ]; then
 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"))
+	config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl ${nocache} --connect-timeout 3 -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"))
+	config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl ${nocache} --connect-timeout 3 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg"))
 fi
 
 if [ "${config_file_diff}" != "" ]; then
@@ -153,9 +160,9 @@ 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
+		curl ${nocache} --connect-timeout 3 -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
+		curl ${nocache} --connect-timeout 3 -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
@@ -165,9 +172,9 @@ if [ -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then
 	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"))
+		config_file_diff=$(diff "${datadir}/${distroid}-${distroversioncsv}.csv" <(curl ${nocache} --connect-timeout 3 -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"))
+		config_file_diff=$(diff "${datadir}/${distroid}-${distroversioncsv}.csv" <(curl ${nocache} --connect-timeout 3 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv"))
 	fi
 
 	if [ "${config_file_diff}" != "" ]; then
@@ -191,9 +198,9 @@ if [ -n "${modulesdir}" ]; then
 				echo -en "checking ${remotereponame} module ${modulefile}...\c"
 				github_file_url_dir="lgsm/modules"
 				if [ "${remotereponame}" == "GitHub" ]; then
-					curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${modulefile}" 1> /dev/null
+					curl ${nocache} --connect-timeout 3 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${modulefile}" 1> /dev/null
 				else
-					curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${modulefile}" 1> /dev/null
+					curl ${nocache} --connect-timeout 3 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${modulefile}" 1> /dev/null
 				fi
 				if [ $? != 0 ]; then
 					fn_print_error_eol_nl
@@ -210,9 +217,9 @@ if [ -n "${modulesdir}" ]; then
 				else
 					# compare file
 					if [ "${remotereponame}" == "GitHub" ]; then
-						module_file_diff=$(diff "${modulesdir}/${modulefile}" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${modulefile}"))
+						module_file_diff=$(diff "${modulesdir}/${modulefile}" <(curl ${nocache} --connect-timeout 3 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${modulefile}"))
 					else
-						module_file_diff=$(diff "${modulesdir}/${modulefile}" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${modulefile}"))
+						module_file_diff=$(diff "${modulesdir}/${modulefile}" <(curl ${nocache} --connect-timeout 3 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${modulefile}"))
 					fi
 
 					# results

+ 1 - 1
lgsm/modules/command_validate.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_validate.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Runs a server validation.
 

+ 1 - 1
lgsm/modules/command_wipe.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM command_backup.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Wipes server data, useful after updates for some games like Rust.
 

+ 1 - 1
lgsm/modules/compress_unreal2_maps.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM compress_unreal2_maps.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Compresses unreal maps.
 

+ 1 - 1
lgsm/modules/compress_ut99_maps.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM compress_ut99_maps.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Compresses unreal maps.
 

+ 6 - 3
lgsm/modules/core_dl.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM core_dl.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Deals with all downloads for LinuxGSM.
 
@@ -251,7 +251,10 @@ fn_dl_extract() {
 		fi
 	elif [ "${mime}" == "application/zip" ]; then
 		if [ -n "${extractsrc}" ]; then
-			extractcmd=$(unzip -qoj -d "${extractdest}" "${local_filedir}/${local_filename}" "${extractsrc}"/*)
+			temp_extractdir="${tmpdir}/Xonotic"
+			extractcmd=$(unzip -qo "${local_filedir}/${local_filename}" "${extractsrc}/*" -d "${temp_extractdir}")
+			find "${temp_extractdir}/${extractsrc}" -mindepth 1 -maxdepth 1 -exec mv -t "${extractdest}" {} +
+			rm -rf "${temp_extractdir}"
 		else
 			extractcmd=$(unzip -qo -d "${extractdest}" "${local_filedir}/${local_filename}")
 		fi
@@ -390,7 +393,7 @@ fn_fetch_file() {
 			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)
+			curlcmd=(curl --connect-timeout 3 --fail -L -o "${local_filedir}/${local_filename}" --retry 2)
 
 			# if is large file show progress, else be silent
 			local exitcode=""

+ 1 - 1
lgsm/modules/core_exit.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
 # LinuxGSM core_exit.sh module
 # Author: Daniel Gibbs
-# Contributors: http://linuxgsm.com/contrib
+# Contributors: https://linuxgsm.com/contrib
 # Website: https://linuxgsm.com
 # Description: Handles exiting of LinuxGSM by running and reporting an exit code.
 

Некоторые файлы не были показаны из-за большого количества измененных файлов