Browse Source

Merge branch 'release/v23.5.0'

pull/4306/head v23.5.0
Daniel Gibbs 2 years ago
parent
commit
fc36dc9526
No known key found for this signature in database GPG Key ID: 2076B128385E8C55
  1. 2
      .github/workflows/details-check.yml
  2. 48
      .github/workflows/update-check.yml
  3. 12
      README.md
  4. 2
      lgsm/config-default/config-lgsm/arkserver/_default.cfg
  5. 2
      lgsm/config-default/config-lgsm/btlserver/_default.cfg
  6. 9
      lgsm/config-default/config-lgsm/inssserver/_default.cfg
  7. 2
      lgsm/config-default/config-lgsm/pstbsserver/_default.cfg
  8. 6
      lgsm/config-default/config-lgsm/pvrserver/_default.cfg
  9. 3
      lgsm/config-default/config-lgsm/pzserver/_default.cfg
  10. 5
      lgsm/config-default/config-lgsm/untserver/_default.cfg
  11. 6
      lgsm/config-default/config-lgsm/vintsserver/_default.cfg
  12. 4
      lgsm/data/almalinux-8.csv
  13. 4
      lgsm/data/almalinux-9.csv
  14. 4
      lgsm/data/centos-7.csv
  15. 4
      lgsm/data/centos-8.csv
  16. 4
      lgsm/data/centos-9.csv
  17. 4
      lgsm/data/debian-10.csv
  18. 4
      lgsm/data/debian-11.csv
  19. 4
      lgsm/data/debian-12.csv
  20. 4
      lgsm/data/debian-9.csv
  21. 4
      lgsm/data/rhel-7.csv
  22. 4
      lgsm/data/rhel-8.csv
  23. 4
      lgsm/data/rhel-9.csv
  24. 4
      lgsm/data/rocky-8.csv
  25. 4
      lgsm/data/rocky-9.csv
  26. 2
      lgsm/data/serverlist.csv
  27. 4
      lgsm/data/ubuntu-16.04.csv
  28. 4
      lgsm/data/ubuntu-18.04.csv
  29. 4
      lgsm/data/ubuntu-20.04.csv
  30. 135
      lgsm/data/ubuntu-21.04.csv
  31. 135
      lgsm/data/ubuntu-21.10.csv
  32. 4
      lgsm/data/ubuntu-22.04.csv
  33. 4
      lgsm/data/ubuntu-23.04.csv
  34. 11
      lgsm/modules/alert.sh
  35. 71
      lgsm/modules/check_deps.sh
  36. 14
      lgsm/modules/check_last_update.sh
  37. 5
      lgsm/modules/check_logs.sh
  38. 2
      lgsm/modules/check_status.sh
  39. 2
      lgsm/modules/check_system_requirements.sh
  40. 28
      lgsm/modules/command_backup.sh
  41. 12
      lgsm/modules/command_check_update.sh
  42. 2
      lgsm/modules/command_console.sh
  43. 18
      lgsm/modules/command_debug.sh
  44. 2
      lgsm/modules/command_dev_details.sh
  45. 2
      lgsm/modules/command_dev_detect_glibc.sh
  46. 2
      lgsm/modules/command_mods_remove.sh
  47. 213
      lgsm/modules/command_monitor.sh
  48. 2
      lgsm/modules/command_restart.sh
  49. 2
      lgsm/modules/command_send.sh
  50. 3
      lgsm/modules/command_skeleton.sh
  51. 102
      lgsm/modules/command_start.sh
  52. 41
      lgsm/modules/command_stop.sh
  53. 4
      lgsm/modules/command_ts3_server_pass.sh
  54. 15
      lgsm/modules/command_update.sh
  55. 5
      lgsm/modules/command_validate.sh
  56. 10
      lgsm/modules/core_dl.sh
  57. 4
      lgsm/modules/core_exit.sh
  58. 14
      lgsm/modules/core_functions.sh
  59. 2
      lgsm/modules/core_getopt.sh
  60. 4
      lgsm/modules/core_legacy.sh
  61. 19
      lgsm/modules/core_modules.sh
  62. 21
      lgsm/modules/core_steamcmd.sh
  63. 2
      lgsm/modules/fix.sh
  64. 2
      lgsm/modules/fix_ark.sh
  65. 2
      lgsm/modules/fix_arma3.sh
  66. 2
      lgsm/modules/fix_armar.sh
  67. 2
      lgsm/modules/fix_av.sh
  68. 2
      lgsm/modules/fix_bo.sh
  69. 2
      lgsm/modules/fix_bt.sh
  70. 2
      lgsm/modules/fix_cmw.sh
  71. 4
      lgsm/modules/fix_csgo.sh
  72. 2
      lgsm/modules/fix_dst.sh
  73. 2
      lgsm/modules/fix_hw.sh
  74. 2
      lgsm/modules/fix_ins.sh
  75. 2
      lgsm/modules/fix_kf.sh
  76. 2
      lgsm/modules/fix_kf2.sh
  77. 2
      lgsm/modules/fix_lo.sh
  78. 2
      lgsm/modules/fix_mcb.sh
  79. 2
      lgsm/modules/fix_mta.sh
  80. 14
      lgsm/modules/fix_pvr.sh
  81. 2
      lgsm/modules/fix_ro.sh
  82. 2
      lgsm/modules/fix_rust.sh
  83. 2
      lgsm/modules/fix_rw.sh
  84. 2
      lgsm/modules/fix_samp.sh
  85. 2
      lgsm/modules/fix_sdtd.sh
  86. 2
      lgsm/modules/fix_sfc.sh
  87. 2
      lgsm/modules/fix_sof2.sh
  88. 2
      lgsm/modules/fix_squad.sh
  89. 2
      lgsm/modules/fix_st.sh
  90. 2
      lgsm/modules/fix_steamcmd.sh
  91. 2
      lgsm/modules/fix_terraria.sh
  92. 2
      lgsm/modules/fix_tf2.sh
  93. 15
      lgsm/modules/fix_ts3.sh
  94. 2
      lgsm/modules/fix_unt.sh
  95. 2
      lgsm/modules/fix_ut.sh
  96. 2
      lgsm/modules/fix_ut2k4.sh
  97. 2
      lgsm/modules/fix_ut3.sh
  98. 2
      lgsm/modules/fix_vh.sh
  99. 2
      lgsm/modules/fix_wurm.sh
  100. 2
      lgsm/modules/fix_zmr.sh

2
.github/workflows/details-check.yml

@ -5,7 +5,7 @@ on:
push:
concurrency:
group: ${{ github.ref_name }}
group: details-check-${{ github.ref_name }}
cancel-in-progress: true
jobs:

48
.github/workflows/update-check.yml

@ -0,0 +1,48 @@
name: Update Check
# This action will check that LinuxGSM is picking up game server config and parameter variables.
on:
workflow_dispatch:
push:
concurrency:
group: update-check-${{ github.ref_name }}
cancel-in-progress: true
jobs:
update-check:
continue-on-error: true
runs-on: ubuntu-latest
strategy:
matrix:
shortname: [css, fctr, jk2, mc, mcb, mta, pmc, ts3, ut99, vints]
steps:
- name: Download linuxgsm.sh
run: wget https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${GITHUB_REF#refs/heads/}/linuxgsm.sh; chmod +x linuxgsm.sh
- name: Install dependencies
run: sudo dpkg --add-architecture i386; sudo apt-get update;
- name: Grab server
run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./linuxgsm.sh ${{ matrix.shortname }}server
- name: Enable developer mode
run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server developer
- name: Insert steamuser
if: matrix.shortname == 'jk2'
run: echo -e "steamuser=\"${{ secrets.STEAMCMD_USER }}\"\nsteampass='${{ secrets.STEAMCMD_PASS }}'" > lgsm/config-lgsm/${{ matrix.shortname }}server/common.cfg
- name: Install server
run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server auto-install
- name: Check Update server
run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server check-update
- name: Update server
run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server update
- name: Force Update server
if: matrix.shortname == 'css'
run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./${{ matrix.shortname }}server force-update

12
README.md

@ -1,7 +1,7 @@
<p align="center">
<a href="https://linuxgsm.com"><img src="https://i.imgur.com/Eoh1jsi.jpg" alt="LinuxGSM">
<a href="https://www.codacy.com/gh/GameServerManagers/LinuxGSM/dashboard"><img src="https://img.shields.io/codacy/grade/d19c5234dc3743d8a8a14093711ca52d?style=flat-square&logo=codacy&logoColor=white" alt="Codacy grade"></a>
<img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/GameServerManagers/LinuxGSM/git-sync.yml?color=0052CC&logo=bitbucket&style=flat-square">
<a href="https://bitbucket.org/GameServerManagers/linuxgsm"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/GameServerManagers/LinuxGSM/git-sync.yml?color=0052CC&logo=bitbucket&style=flat-square"></a>
<a href="https://linuxgsm.com/discord"><img alt="Discord" src="https://img.shields.io/discord/127498813903601664?color=5865F2&label=%20&logo=discord&logoColor=ffffff&style=flat-square"></a>
<a href="https://developer.valvesoftware.com/wiki/SteamCMD"><img src="https://img.shields.io/badge/SteamCMD-000000?style=flat-square&amp;logo=Steam&amp;logoColor=white" alt="SteamCMD"></a>
<a href="https://github.com/GameServerManagers/LinuxGSM/blob/main/LICENSE"><img src="https://img.shields.io/github/license/gameservermanagers/LinuxGSM?style=flat-square" alt="MIT License"></a>
@ -11,7 +11,7 @@
## Hassle-Free Dedicated Game Servers
Traditionally game servers are not easy to manage yourself. Admins often have to spend hours messing around trying to get their server working. LinuxGSM is a command-line tool designed to be as simple as possible, allowing admins to spend less time on management and more time gaming.
Traditionally game servers are not easy to manage yourself. Admins often have to spend hours messing around trying to get their servers working. LinuxGSM is a command-line tool designed to be as simple as possible, allowing admins to spend less time on management and more time gaming.
## Main features
@ -45,12 +45,12 @@ Documentation is found at [linuxgsm.com](https://linuxgsm.com) and [docs.linuxgs
## :question: Support
There are various ways to get support, check out the [support](https://linuxgsm.com/support/) page to the right support.
There are various ways to get support, check out the [support](https://linuxgsm.com/support/) page for the right support.
## :heart: Sponsor
If you would like to [sponsor](https://linuxgsm.com/sponsor) to the project there are several ways you can, via [GitHub Sponsors](https://github.com/sponsors/dgibbs64) and [PayPal](https://www.paypal.me/dgibbs64). I would like to thank everyone who sponsors me. Since 2012 LinuxGSM has been steadily growing with new servers, features and improvements added regularly.
If you would like to [sponsor](https://linuxgsm.com/sponsor) to the project there are several ways you can, via [GitHub Sponsors](https://github.com/sponsors/dgibbs64) and [PayPal](https://www.paypal.me/dgibbs64). I would like to thank everyone who sponsors me. Since 2012 LinuxGSM has been steadily growing with new servers, features, and improvements added regularly.
## Contributors
## 🧙‍♂️ Contributors
A big thank you goes to all the wonderful people who contribute ideas, code, docs and support to this project.
A big thank you goes to all the wonderful people who contribute ideas, code, docs, and support to this project.

2
lgsm/config-default/config-lgsm/arkserver/_default.cfg

@ -19,7 +19,7 @@ altsavedirectoryname="${defaultmap}"
maxplayers="70"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="${defaultmap}?AltSaveDirectoryName=${altsavedirectoryname}?listen?MultiHome=${ip}?MaxPlayers=${maxplayers}?QueryPort=${queryport}?RCONPort=${rconport}?Port=${port} -automanagedmods -crossplay -PublicIPForEpic=${ip}"
startparameters="${defaultmap}?AltSaveDirectoryName=${altsavedirectoryname}?listen?MultiHome=${ip}?MaxPlayers=${maxplayers}?QueryPort=${queryport}?RCONPort=${rconport}?Port=${port} -automanagedmods -crossplay -PublicIPForEpic=${publicip}"
#### LinuxGSM Settings ####

2
lgsm/config-default/config-lgsm/btlserver/_default.cfg

@ -14,7 +14,7 @@ port="7777"
queryport="7780"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="/Game/Maps/Final_Maps/Derailed?Game=/Script/ShooterGame.WartideGameMode?listen -log -broadcastip=\"${extip}\" -PORT=${port} -QueryPort=${queryport} -defgameini=\"${servercfgfullpath}\""
startparameters="/Game/Maps/Final_Maps/Derailed?Game=/Script/ShooterGame.WartideGameMode?listen -log -broadcastip=\"${publicip}\" -PORT=${port} -QueryPort=${queryport} -defgameini=\"${servercfgfullpath}\""
#### LinuxGSM Settings ####

9
lgsm/config-default/config-lgsm/inssserver/_default.cfg

@ -19,9 +19,14 @@ defaultmap="Canyon"
defaultscenario="Scenario_Crossing_Push_Security"
maxplayers="28"
## Game Server Login Token (GSLT): Optional
# GSLT can be used for running a public server.
# More info: https://docs.linuxgsm.com/steamcmd/gslt
gslt=""
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
## Parameter Docs | https://mod.io/g/insurgencysandstorm/r/server-admin-guide
startparameters="${defaultmap}?Scenario=${defaultscenario}?MaxPlayers=${maxplayers} -Port=${port} -QueryPort=${queryport} -hostname='${servername}' -Rcon -RconPassword=${rconpassword} -RconListenPort=${rconport} -log"
startparameters="${defaultmap}?Scenario=${defaultscenario}?MaxPlayers=${maxplayers} -Port=${port} -QueryPort=${queryport} -hostname='${servername}' -Rcon -RconPassword=${rconpassword} -RconListenPort=${rconport} -GSLTToken=${gslt} -log"
#### LinuxGSM Settings ####
@ -127,7 +132,7 @@ steamcmdforcewindows="no"
branch=""
betapassword=""
# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
steammaster="false"
steammaster="true"
## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill

2
lgsm/config-default/config-lgsm/pstbsserver/_default.cfg

@ -155,7 +155,7 @@ consoleinteract="no"
## Game Server Details
# Do not edit
gamename="pstbsserver"
gamename="Post Scriptum"
engine="unreal4"
glibc="2.17"

6
lgsm/config-default/config-lgsm/pvrserver/_default.cfg

@ -14,9 +14,11 @@ port="7777"
# Maps: bridge, datacenter, sand
defaultmap="datacenter"
# Get an API key from https://pavlov-ms.vankrupt.com/servers/v1/key
apikey=""
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="${defaultmap} -log -MultiHome=${ip} -Port=${port}"
startparameters="Pavlov ${defaultmap} -log -MultiHome=${ip} -Port=${port} ApiKey=${apikey}"
#### LinuxGSM Settings ####
@ -163,7 +165,7 @@ glibc="2.17"
## Game Server Directories
systemdir="${serverfiles}/Pavlov"
executabledir="${systemdir}/Binaries/Linux"
executable="./PavlovServer"
executable="./PavlovServer-Linux-Shipping"
servercfgdir="${systemdir}/Saved/Config/LinuxServer"
servercfg="Game.ini"
servercfgdefault="Game.ini"

3
lgsm/config-default/config-lgsm/pzserver/_default.cfg

@ -10,11 +10,10 @@
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
javaram="8192" # -Xmx$8192M
adminpassword="CHANGE_ME"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="--ip ${ip} -adminpassword \"${adminpassword}\" -servername ${selfname} -Xmx${javaram}M"
startparameters="-servername ${selfname}"
#### LinuxGSM Settings ####

5
lgsm/config-default/config-lgsm/untserver/_default.cfg

@ -13,6 +13,9 @@ ip="0.0.0.0"
port="27015"
maxplayers="20"
defaultmap="PEI"
servername="LinuxGSM"
perspective="first" # Values: first, third, vehicle, Both.
gamemode="normal" # Values: normal, easy, gold.
## Game Server Login Token (GSLT): Required
# GSLT is required for running a public server.
@ -20,7 +23,7 @@ defaultmap="PEI"
gslt=""
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="-nographics -batchmode -bind ${ip} -port ${port} -maxplayers ${maxplayers} -map ${defaultmap} -gslt ${gslt} +InternetServer/${selfname}"
startparameters="-nographics -batchmode -bind ${ip} -port ${port} -maxplayers ${maxplayers} -perspective ${perspective} -mode ${gamemode} -name ${servername} -map ${defaultmap} -gslt ${gslt} +InternetServer/${selfname}"
#### LinuxGSM Settings ####

6
lgsm/config-default/config-lgsm/vintsserver/_default.cfg

@ -9,7 +9,7 @@
#### Game Server Settings ####
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="--datapath ${servercfgdir}"
startparameters="--dataPath ${servercfgdir}"
## Release Settings | https://docs.linuxgsm.com/game-servers/vintagestory#release-settings
# Branch (stable|unstable)
@ -150,8 +150,8 @@ glibc="2.17"
## Game Server Directories
systemdir="${serverfiles}"
executabledir="${systemdir}"
preexecutable="mono"
executable="./VintagestoryServer.exe"
preexecutable=""
executable="./VintagestoryServer"
servercfgdir="${serverfiles}/data/${selfname}"
servercfg="serverconfig.json"
servercfgdefault="serverconfig.json"

4
lgsm/data/almalinux-8.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/almalinux-9.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/centos-7.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-11-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-11-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/centos-8.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/centos-9.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/debian-10.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-11-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-11-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/debian-11.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-17-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-17-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/debian-12.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-17-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-17-jre,rng-tools5
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-17-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/debian-9.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-8-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-8-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-8-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/rhel-7.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-11-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-11-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/rhel-8.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/rhel-9.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/rocky-8.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/rocky-9.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,java-17-openjdk
pstbs,GConf2
ps,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,glibc-devel
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

2
lgsm/data/serverlist.csv

@ -82,7 +82,7 @@ opfor,opforserver,Opposing Force,ubuntu-22.04
pc,pcserver,Project Cars,ubuntu-22.04
pc2,pc2server,Project Cars 2,ubuntu-22.04
pmc,pmcserver,PaperMC,ubuntu-22.04
pstbs,pstbsserver,Post Scriptum: The Bloody Seventh,ubuntu-22.04
ps,psserver,Post Scriptum,ubuntu-22.04
pvkii,pvkiiserver,Pirates Vikings & Knights II,ubuntu-22.04
pvr,pvrserver,Pavlov VR,ubuntu-22.04
pz,pzserver,Project Zomboid,ubuntu-22.04

Can't render this file because it has a wrong number of fields in line 47.

4
lgsm/data/ubuntu-16.04.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-8-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-8-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-8-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/ubuntu-18.04.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-11-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-11-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/ubuntu-20.04.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-17-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-17-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

135
lgsm/data/ubuntu-21.04.csv

@ -1,135 +0,0 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,distro-info,file,gzip,hostname,jq,lib32gcc-s1,lib32stdc++6,netcat,python3,tar,tmux,unzip,util-linux,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
cd
ck,xvfb,libxi6
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
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
ins
inss
ios
jc2
jc3
jk2
kf
kf2
l4d
l4d2
lo
mc,openjdk-17-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5,libxml2-utils
nd
nec
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
ohd
onset,libmariadb-dev
opfor
pc
pc2
pmc,openjdk-17-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-17-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-17-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect,libxml2-utils
sf
sfc,libtinfo5:i386
sof2
sol
squad
st,libxml2-utils
stn
sven,libssl1.1:i386,zlib1g:i386
terraria
tf2,libcurl4-gnutls-dev:i386
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vpmc,openjdk-11-jre
vs
wet
wf
wmc,openjdk-17-jre
wurm,xvfb
zmr,libtinfo5:i386
zps,libtinfo5:i386
Can't render this file because it has a wrong number of fields in line 2.

135
lgsm/data/ubuntu-21.10.csv

@ -1,135 +0,0 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,distro-info,file,gzip,hostname,jq,lib32gcc-s1,lib32stdc++6,netcat,python3,tar,tmux,unzip,util-linux,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
cd
ck,xvfb,libxi6
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
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
ins
inss
ios
jc2
jc3
jk2
kf
kf2
l4d
l4d2
lo
mc,openjdk-17-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5,libxml2-utils
nd
nec
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
ohd
onset,libmariadb-dev
opfor
pc
pc2
pmc,openjdk-17-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-17-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-17-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect,libxml2-utils
sf
sfc,libtinfo5:i386
sof2
sol
squad
st,libxml2-utils
stn
sven,libssl1.1:i386,zlib1g:i386
terraria
tf2,libcurl4-gnutls-dev:i386
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vpmc,openjdk-11-jre
vs
wet
wf
wmc,openjdk-17-jre
wurm,xvfb
zmr,libtinfo5:i386
zps,libtinfo5:i386
Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/ubuntu-22.04.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-17-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-17-jre,rng-tools5
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-17-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

4
lgsm/data/ubuntu-23.04.csv

@ -83,7 +83,7 @@ opfor
pc
pc2
pmc,openjdk-17-jre
pstbs,libgconf-2-4
ps,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-17-jre,rng-tools5
@ -124,7 +124,7 @@ ut2k4
ut3
ut99
vh,libc6-dev
vints,mono-complete
vints,aspnetcore-runtime-7.0
vpmc,openjdk-17-jre
vs
wet

Can't render this file because it has a wrong number of fields in line 2.

11
lgsm/modules/alert.sh

@ -72,6 +72,15 @@ fn_alert_check_update() {
alertbody="${gamename} update available: ${remotebuildversion}"
}
fn_alert_update_restart() {
fn_script_log_info "Sending alert: Restarted"
alertsubject="Alert - ${selfname} - Restarted"
alertemoji="🎮"
alertsound="1"
alerturl="not enabled"
alertbody="${gamename} received update: ${remotebuildversion} and required restarting"
}
fn_alert_permissions() {
fn_script_log_info "Sending alert: Permissions error"
alertsubject="Alert - ${selfname}: Permissions error"
@ -102,6 +111,8 @@ elif [ "${alert}" == "update" ]; then
fn_alert_update
elif [ "${alert}" == "check-update" ]; then
fn_alert_check_update
elif [ "${alert}" == "update-restart" ]; then
fn_alert_update_restart
elif [ "${alert}" == "config" ]; then
fn_alert_config
fi

71
lgsm/modules/check_deps.sh

@ -7,6 +7,19 @@
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_install_dotnet_repo() {
if [ "${distroid}" == "ubuntu" ]; then
# if package aspnetcore-runtime-7.0 is unavailable in ubuntu repos, add the microsoft repo.
if ! apt-cache show aspnetcore-runtime-7.0 > /dev/null 2>&1; then
fn_fetch_file "https://packages.microsoft.com/config/ubuntu/${distroversion}/packages-microsoft-prod.deb" "" "" "" "/tmp" "packages-microsoft-prod.deb" "" "" "" ""
sudo dpkg -i /tmp/packages-microsoft-prod.deb
fi
elif [ "${distroid}" == "debian" ]; then
fn_fetch_file "https://packages.microsoft.com/config/debian/${distroversion}/packages-microsoft-prod.deb" "" "" "" "/tmp" "packages-microsoft-prod.deb" "" "" "" ""
sudo dpkg -i /tmp/packages-microsoft-prod.deb
fi
}
fn_install_mono_repo() {
if [ "${autodepinstall}" == "0" ]; then
fn_print_information_nl "Automatically adding Mono repository."
@ -19,20 +32,26 @@ fn_install_mono_repo() {
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"
if [ "${distroversion}" == "22.04" ]; then
cmd="sudo apt-get 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-jammy main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
elif [ "${distroversion}" == "20.04" ]; then
cmd="sudo apt-get 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"
cmd="sudo apt-get 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"
if [ "${distroversion}" == "12" ]; then
cmd="sudo apt-get 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-bookworm main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
elif [ "${distroversion}" == "11" ]; then
cmd="sudo apt-get 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-bullseye main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
elif [ "${distroversion}" == "10" ]; then
cmd="sudo apt-get 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"
cmd="sudo apt-get 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
@ -93,16 +112,16 @@ fn_deps_email() {
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
elif [ "$(command -v yum 2> /dev/null)" ] || [ "$(command -v dnf 2> /dev/null)" ]; then
array_deps_required+=(mailx postfix)
elif [ "$(command -v apt 2> /dev/null)" ]; then
array_deps_required+=(mailutils 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
if [ "$(command -v yum 2> /dev/null)" ] || [ "$(command -v dnf 2> /dev/null)" ]; then
array_deps_required+=(mailx postfix)
elif [ "$(command -v apt 2> /dev/null)" ]; then
array_deps_required+=(mailutils postfix)
fi
fi
fi
@ -129,10 +148,14 @@ fn_install_missing_deps() {
fi
autodepinstall="$?"
if [ "${monostatus}" == "1" ]; then
if [ "${monoinstalled}" == "false" ]; then
fn_install_mono_repo
fi
if [ "${dotnetinstalled}" == "false" ]; then
fn_install_dotnet_repo
fi
if [ "${commandname}" == "INSTALL" ]; then
if [ "${autodepinstall}" == "0" ]; then
fn_print_information_nl "$(whoami) has sudo access."
@ -144,7 +167,7 @@ fn_install_missing_deps() {
fi
# Add sudo dpkg --add-architecture i386 if using i386 packages.
if [ "$(command -v dpkg-query 2> /dev/null)" ]; then
if [ "$(command -v apt 2> /dev/null)" ]; then
if printf '%s\n' "${array_deps_required[@]}" | grep -q -P 'i386'; then
i386installcommand="sudo dpkg --add-architecture i386; "
fi
@ -161,7 +184,7 @@ fn_install_missing_deps() {
echo -en "...\r"
sleep 1
echo -en " \r"
if [ "$(command -v dpkg-query 2> /dev/null)" ]; then
if [ "$(command -v apt 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
@ -181,7 +204,7 @@ fn_install_missing_deps() {
# If automatic dependency install is unavailable.
if [ "${autodepinstall}" != "0" ]; then
if [ "$(command -v dpkg-query 2> /dev/null)" ]; then
if [ "$(command -v apt 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[*]}"
@ -248,13 +271,23 @@ fn_deps_detector() {
if [ -n "${monoversion}" ] && [ "${monoversion}" -ge "5" ]; then
# Mono >= 5.0.0 already installed.
depstatus=0
monostatus=0
monoinstalled=true
else
# Mono not installed or installed Mono < 5.0.0.
depstatus=1
monostatus=1
monoinstalled=false
fi
# .NET Core: A .NET Core repo needs to be installed.
elif [ "${deptocheck}" == "aspnetcore-runtime-7.0" ]; then
# .NET is not installed.
if [ -n "${dotnetversion}" ]; then
depstatus=0
dotnetinstalled=true
else
depstatus=1
dotnetinstalled=false
fi
elif [ "$(command -v dpkg-query 2> /dev/null)" ]; then
elif [ "$(command -v apt 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

14
lgsm/modules/check_last_update.sh

@ -3,21 +3,21 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Checks lock file to see when last update happened.
# Description: Checks Lockfile to see when last update happened.
# Will reboot server if instance not rebooted since update.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
if [ -f "${lockdir}/${selfname}-laststart.lock" ]; then
laststart=$(cat "${lockdir}/${selfname}-laststart.lock")
if [ -f "${lockdir}/${selfname}-last-started.lock" ]; then
laststart=$(cat "${lockdir}/${selfname}-last-started.lock")
fi
if [ -f "${lockdir}/lastupdate.lock" ]; then
lastupdate=$(cat "${lockdir}/lastupdate.lock")
if [ -f "${lockdir}/last-updated.lock" ]; then
lastupdate=$(cat "${lockdir}/last-updated.lock")
fi
check_status.sh
if [ -f "${lockdir}/lastupdate.lock" ] && [ "${status}" != "0" ]; then
if [ ! -f "${lockdir}/${selfname}-laststart.lock" ] || [ "${laststart}" -lt "${lastupdate}" ]; then
if [ -f "${lockdir}/last-updated.lock" ] && [ "${status}" != "0" ]; then
if [ ! -f "${lockdir}/${selfname}-last-started.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

5
lgsm/modules/check_logs.sh

@ -24,3 +24,8 @@ fi
if [ "${gamelogdir}" ] && [ -d "${gamelogdir}" ] && [ ! -d "${logdir}/server" ]; then
fn_check_logs
fi
# Create Steam log symlink if missing
if [ ! -d "${logdir}/steam" ] && [ -n "${appid}" ]; then
fn_check_logs
fi

2
lgsm/modules/check_status.sh

@ -7,4 +7,4 @@
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
status=$(tmux -L "${sessionname}" list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}")
status=$(tmux -L "${socketname}" list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}")

2
lgsm/modules/check_system_requirements.sh

@ -29,7 +29,7 @@ elif [ "${shortname}" == "rust" ]; then
elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "pmc" ] || [ "${shortname}" == "wmc" ]; then
ramrequirementmb="1000"
ramrequirementgb="1"
elif [ "${shortname}" == "pstbs" ]; then
elif [ "${shortname}" == "ps" ]; then
ramrequirementmb="2000"
ramrequirementgb="2"
elif [ "${shortname}" == "ns2" ] || [ "${shortname}" == "ns2c" ]; then

28
lgsm/modules/command_backup.sh

@ -22,7 +22,7 @@ fn_backup_trap() {
echo -en "backup ${backupname}.tar.gz..."
fn_print_removed_eol_nl
fn_script_log_info "Backup ${backupname}.tar.gz: REMOVED"
# Remove lock file.
# Remove backup lockfile.
rm -f "${lockdir:?}/backup.lock"
fn_backup_start_server
unset exitbypass
@ -31,9 +31,21 @@ fn_backup_trap() {
# Check if a backup is pending or has been aborted using backup.lock.
fn_backup_check_lockfile() {
# Remove stale 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"
if [ "$(find "${lockdir}/backup.lock" -mmin +60)" ]; then
fn_print_dots "Lockfile found: "
fn_print_checking_eol
fn_print_warn "Lockfile found: Removing stale lockfile: "
fn_print_warn_eol
fn_script_log_warn "Lockfile found: Removing stale lockfile"
rm -f "${lockdir:?}/backup.lock"
fi
fi
if [ -f "${lockdir}/backup.lock" ]; then
fn_print_info_nl "Lockfile found: Backup is currently running"
fn_script_log_error "Lockfile found: Backup is currently running: ${lockdir}/backup.lock"
core_exit.sh
fi
}
@ -117,8 +129,8 @@ fn_backup_migrate_olddir() {
fn_backup_create_lockfile() {
# Create lockfile.
date '+%s' > "${lockdir}/backup.lock"
fn_script_log_info "Lockfile generated"
date '+%s' > "${lockdir:?}/backup.lock"
fn_script_log_info "Backup lockfile generated"
fn_script_log_info "${lockdir}/backup.lock"
# trap to remove lockfile on quit.
trap fn_backup_trap INT
@ -140,7 +152,7 @@ fn_backup_compression() {
core_exit.sh
fi
tar -czf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}/backup.lock" ./.
tar -czf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}" ./.
local exitcode=$?
if [ "${exitcode}" != 0 ]; then
fn_print_fail_eol
@ -153,8 +165,6 @@ fn_backup_compression() {
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.
@ -265,4 +275,6 @@ fn_backup_compression
fn_backup_prune
fn_backup_start_server
# Remove backup lockfile.
rm -f "${lockdir:?}/backup.lock"
core_exit.sh

12
lgsm/modules/command_check_update.sh

@ -17,19 +17,19 @@ core_logs.sh
if [ "${shortname}" == "ts3" ]; then
update_ts3.sh
elif [ "${shortname}" == "mc" ]; then
update_minecraft.sh
update_mc.sh
elif [ "${shortname}" == "mcb" ]; then
update_minecraft_bedrock.sh
update_mcb.sh
elif [ "${shortname}" == "pmc" ] || [ "${shortname}" == "vpmc" ] || [ "${shortname}" == "wmc" ]; then
update_papermc.sh
update_pmc.sh
elif [ "${shortname}" == "fctr" ]; then
update_factorio.sh
update_fctr.sh
elif [ "${shortname}" == "mta" ]; then
update_mta.sh
elif [ "${shortname}" == "jk2" ]; then
update_jediknight2.sh
update_jk2.sh
elif [ "${shortname}" == "vints" ]; then
update_vintagestory.sh
update_vints.sh
elif [ "${shortname}" == "ut99" ]; then
update_ut99.sh
else

2
lgsm/modules/command_console.sh

@ -42,7 +42,7 @@ 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}"
tmux -L "${socketname}" attach-session -t "${sessionname}"
fn_print_ok_nl "Closing console"
fn_script_log_pass "Console closed"
else

18
lgsm/modules/command_debug.sh

@ -13,7 +13,7 @@ fn_firstcommand_set
# Trap to remove lockfile on quit.
fn_lockfile_trap() {
# Remove lockfile.
rm -f "${lockdir:?}/${selfname}.lock"
rm -f "${lockdir:?}/${selfname}-started.lock"
# resets terminal. Servers can sometimes mess up the terminal on exit.
reset
fn_print_dots "Stopping debug"
@ -58,9 +58,9 @@ fi
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}"
if [ "${publicip}" ]; then
if [ "${ip}" != "${publicip}" ]; then
echo -e "${lightblue}Internet IP:\t${default}${publicip}:${port}"
fi
fi
@ -98,12 +98,12 @@ 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"
# Create started lockfile.
date '+%s' > "${lockdir:?}/${selfname}-started.lock"
echo "${version}" >> "${lockdir}/${selfname}-started.lock"
echo "${port}" >> "${lockdir}/${selfname}-started.lock"
fn_script_log_info "Lockfile generated"
fn_script_log_info "${lockdir}/${selfname}.lock"
fn_script_log_info "${lockdir}/${selfname}-started.lock"
if [ "${shortname}" == "av" ]; then
cd "${systemdir}" || exit

2
lgsm/modules/command_dev_details.sh

@ -44,7 +44,7 @@ declare -A server_details=(
['HTTP Password']="${httppassword}"
['HTTP Port']="${httpport}"
['HTTP User']="${httpuser}"
['Internet IP']="${extip}"
['Internet IP']="${publicip}"
['LAN Port']="${lanport}"
['Master Port']="${masterport}"
['Master']="${master}"

2
lgsm/modules/command_dev_detect_glibc.sh

@ -15,7 +15,7 @@ echo -e "================================="
echo -e "glibc Requirements Checker"
echo -e "================================="
if [ ! "$(command -v objdump)" ]; then
if [ ! "$(command -v objdump 2> /dev/null)" ]; then
fn_print_failure_nl "objdump is missing"
fn_script_log_fatal "objdump is missing"
core_exit.sh

2
lgsm/modules/command_mods_remove.sh

@ -131,7 +131,7 @@ fi
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"
exitbypass=1
command_validate.sh
fn_firstcommand_reset
unset exitbypass

213
lgsm/modules/command_monitor.sh

@ -11,76 +11,152 @@ commandaction="Monitoring"
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_firstcommand_set
fn_monitor_check_lockfile() {
# Monitor does not run if lockfile is not found.
if [ ! -f "${lockdir}/${selfname}.lock" ]; then
fn_monitor_check_monitoring() {
if [ -f "${lockdir}/${selfname}.lock" ]; then
# Part of migration to v23.5.0. #4296
rm -f "${lockdir:?}/${selfname}.lock"
date '+%s' > "${lockdir:?}/${selfname}-monitoring.lock"
elif [ ! -f "${lockdir}/${selfname}-monitoring.lock" ]; then
# Monitor does not run if lockfile is not found.
fn_print_dots "Checking lockfile: "
fn_print_checking_eol
fn_script_log_info "Checking lockfile: CHECKING"
fn_monitor_check_update
fn_monitor_check_backup
fn_monitor_check_debug
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"
fn_monitor_check_install() {
if [ "$(pgrep -fc -u "${USER}" "/bin/bash ./${selfname} install")" != "0" ] || [ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} i")" != "0" ] || [ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} auto-install")" != "0" ] || [ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} ai")" != "0" ]; then
fn_print_dots "Checking installer: "
fn_print_checking_eol
fn_script_log_info "Checking installer: CHECKING"
fn_print_info "Checking installer: LinuxGSM is installing: "
fn_print_info_eol_nl
fn_script_log_pass "Checking installer: LinuxGSM is installing"
core_exit.sh
fi
}
fn_monitor_check_backup() {
# Monitor will check if backup is running.
if [ "$(pgrep "${selfname} backup" | wc -l)" != "0" ] || [ "$(pgrep "${selfname} b" | wc -l)" != "0" ]; then
fn_print_info "Checking lockfile: LinuxGSM is currently running a backup: "
fn_print_info_eol
fn_script_log_info "Checking lockfile: LinuxGSM is currently running a backup"
fn_monitor_check_debug() {
if [ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} debug")" != "0" ] || [ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} d")" != "0" ]; then
fn_print_dots "Checking debug: "
fn_print_checking_eol
fn_print_info "Checking debug: Debug is running: "
fn_print_info_eol_nl
fn_script_log_pass "Checking debug: Debug is running"
core_exit.sh
fi
}
fn_monitor_check_debug() {
# Monitor will check if backup is running.
if [ "$(pgrep -fc "${selfname} backup")" != "0" ] || [ "$(pgrep -fc "${selfname} b")" != "0" ]; then
fn_print_info "Checking lockfile: LinuxGSM is currently in debug mode: "
fn_print_info_eol
fn_script_log_pass "Checking lockfile: LinuxGSM is currently in debug mode"
fn_monitor_check_starting() {
# Remove stale lockfile.
if [ -f "${lockdir}/${selfname}-starting.lock" ]; then
if [ "$(find "${lockdir}/${selfname}-starting.lock" -mmin +5)" ]; then
fn_print_dots "Checking start: "
fn_print_checking_eol
fn_print_warn "Checking start: Removing stale lockfile: "
fn_print_warn_eol_nl
fn_script_log_warn "Checking start: Removing stale lockfile"
rm -f "${lockdir:?}/${selfname}-starting.lock"
fi
fi
if [ -f "${lockdir}/${selfname}-starting.lock" ] && [[ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} start")" != "0" || "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} s")" != "0" ]]; then
fn_print_dots "Checking start: "
fn_print_checking_eol
fn_print_info "Checking start: LinuxGSM is starting: "
fn_print_info_eol_nl
fn_script_log_info "Checking backup: LinuxGSM is starting"
core_exit.sh
fi
}
fn_monitor_check_install() {
# Monitor will check if update is running.
if [ "$(pgrep -fc "${selfname} install")" != "0" ] || [ "$(pgrep -fc "${selfname} i")" != "0" ] || [ "$(pgrep -fc "${selfname} auto-install")" != "0" ] || [ "$(pgrep -fc "${selfname} ai")" != "0" ]; then
fn_print_dots "Checking for installer: "
fn_monitor_check_stopping() {
# Remove stale lockfile.
if [ -f "${lockdir}/${selfname}-stopping.lock" ]; then
if [ "$(find "${lockdir}/${selfname}-stopping.lock" -mmin +5)" ]; then
fn_print_dots "Checking stop: "
fn_print_checking_eol
fn_print_warn "Checking stop: Removing stale lockfile: "
fn_print_warn_eol_nl
fn_script_log_warn "Checking stop: Removing stale lockfile"
rm -f "${lockdir:?}/${selfname}-stopping.lock"
fi
fi
if [ -f "${lockdir}/${selfname}-stopping.lock" ] && [[ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} stop")" != "0" || "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} s")" != "0" ]]; then
fn_print_dots "Checking stop: "
fn_print_checking_eol
fn_print_info "Checking stop: LinuxGSM is stopping: "
fn_print_info_eol_nl
fn_script_log_info "Checking backup: LinuxGSM is stopping"
core_exit.sh
fi
}
fn_monitor_check_backup() {
# Remove stale lockfile.
if [ -f "${lockdir}/backup.lock" ]; then
if [ "$(find "${lockdir}/backup.lock" -mmin +60)" ]; then
fn_print_dots "Checking backup: "
fn_print_checking_eol
fn_print_warn "Checking backup: Removing stale lockfile: "
fn_print_warn_eol
fn_script_log_warn "Checking backup: Removing stale lockfile"
rm -f "${lockdir:?}/backup.lock"
fi
fi
if [ -f "${lockdir}/backup.lock" ] && [[ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} backup")" != "0" || "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} b")" != "0" ]]; then
fn_print_dots "Checking backup: "
fn_print_checking_eol
fn_script_log_info "Checking for installer: CHECKING"
fn_print_info "Checking for installer: LinuxGSM is currently installing: "
fn_print_info_eol
fn_script_log_pass "Checking for installer: LinuxGSM is currently installing"
fn_print_info "Checking backup: Backup is running: "
fn_print_info_eol_nl
fn_script_log_info "Checking backup: Backup is running"
core_exit.sh
fi
}
fn_monitor_check_update() {
# Specific check for docker. Will ignore the command watch -n 1800 ./csgoserver update
monitorps=0
if [ "$(pgrep -fc "n*${selfname} update")" != "0" ]; then
monitorps="$((monitorps - 1))"
# Remove stale lockfile.
if [ -f "${lockdir}/update.lock" ]; then
if [ "$(find "${lockdir}/update.lock" -mmin +15)" ]; then
fn_print_dots "Checking update: "
fn_print_checking_eol
fn_print_warn "Checking update: Removing stale lockfile: "
fn_print_warn_eol_nl
fn_script_log_warn "Checking update: Removing stale lockfile"
rm -f "${lockdir:?}/update.lock"
fi
fi
# Monitor will check if an update is running.
if [ "$(pgrep -fc "${selfname} update")" != "0" ] || [ "$(pgrep -fc "${selfname} u")" != "0" ] || [ "$(pgrep -fc "${selfname} validate")" != "0" ] || [ "$(pgrep -fc "${selfname} v")" != "0" ]; then
monitorps="$((monitorps + 2))"
if [ "${monitorps}" != "0" ]; then
fn_print_info_nl "Checking lockfile: LinuxGSM is currently updating: "
fn_print_info_eol
fn_script_log_pass "Checking lockfile: LinuxGSM is currently updating"
if [ -f "${lockdir}/update.lock" ] && [[ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} update")" != "0" || "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} validate")" != "0" || "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} v")" != "0" || "$(pgrep -fc force-update "${USER}" "/bin/bash ./${selfname} fu")" != "0" ]]; then
fn_print_dots "Checking update: "
fn_print_checking_eol
fn_print_info "Checking update: LinuxGSM is updating the game server: "
fn_print_info_eol_nl
fn_script_log_pass "Checking update: LinuxGSM is updating the game server"
core_exit.sh
fi
}
# Source engine games may display a messages to indicate the server needs restarting.
fn_monitor_check_update_source() {
if [ -f "${consolelogdir}/${selfname}-console.log" ] && [ "${engine}" == "source" ]; then
if grep -q "Your server needs to be restarted in order to receive the latest update." "${consolelogdir}/${selfname}-console.log"; then
fn_print_dots "Checking update: "
fn_print_checking_eol
fn_script_log_info "Checking update: CHECKING"
fn_print_ok "Checking update: "
fn_print_ok_eol_nl
fn_script_log_info "Checking update: Monitor is restarting ${selfname} to apply update"
alert="update-restart"
alert.sh
command_restart.sh
core_exit.sh
fi
fi
@ -90,8 +166,40 @@ 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
# Tmux session width and height needs to be reviewed as may no longer be required.
sessionwidth="80"
sessionheight="23"
# Check for PIDS with identical tmux sessions running.
if [ "$(pgrep -fcx "tmux -L ${socketname} new-session -d -x ${sessionwidth} -y ${sessionheight} -s ${sessionname}")" -ge "2" ]; then
fn_print_error "Checking session: There are PIDS with identical tmux sessions running: "
fn_print_error_eol_nl
fn_script_log_error "Checking session: ERROR"
fn_script_log_error "Checking session: There are PIDS with identical tmux sessions running"
fn_script_log_error "Checking session: Killing all tmux sessions with the socketname name ${socketname} and session name ${sessionname}"
pkill -f "tmux -L ${socketname} new-session -d -x ${sessionwidth} -y ${sessionheight} -s ${sessionname}"
command_restart.sh
core_exit.sh
# Check for tmux pids with the same tmux session and socket names. This will reduce issues with migration to release v23.5.0. #4296
elif [ "$(pgrep -fc -u "${USER}" "tmux -L ${sessionname} new-session -d -x ${sessionwidth} -y ${sessionheight} -s ${sessionname}")" != "0" ]; then
fn_print_error "Checking session: PIDS with the same tmux session and socket names are running: "
fn_print_error_eol_nl
fn_script_log_error "Checking session: ERROR"
fn_script_log_error "Checking session: PIDS with the same tmux session and socket names are running"
fn_script_log_error "Checking session: Killing session with the socketname name ${sessionname} and session name ${sessionname}"
pkill -f "tmux -L ${sessionname} new-session -d -x ${sessionwidth} -y ${sessionheight} -s ${sessionname}"
command_restart.sh
core_exit.sh
# Check for tmux pids that are using the old type of tmux session. This will reduce issues with migration to release v23.5.0. #4296
elif [ "$(pgrep -fc -u "${USER}" "tmux new-session -d -x ${sessionwidth} -y ${sessionheight} -s ${sessionname}")" != "0" ]; then
fn_print_error "Checking session: PIDS with old type tmux session are running: "
fn_print_error_eol_nl
fn_script_log_error "Checking session: ERROR"
fn_script_log_error "Checking session: PIDS with old type tmux session are running"
fn_script_log_error "Checking session: Killing session with the session name ${sessionname}"
pkill -f "tmux new-session -d -x ${sessionwidth} -y ${sessionheight} -s ${sessionname}"
command_restart.sh
core_exit.sh
elif [ "${status}" != "0" ]; then
fn_print_ok "Checking session: "
fn_print_ok_eol_nl
fn_script_log_pass "Checking session: OK"
@ -107,8 +215,8 @@ fn_monitor_check_session() {
fi
}
# Monitor will check queryport is set before continuing.
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
@ -133,7 +241,7 @@ fn_query_gsquery() {
}
fn_query_tcp() {
bash -c 'exec 3<> /dev/tcp/'${queryip}'/'${queryport}'' > /dev/null 2>&1
bash -c "exec 3<> /dev/tcp/'${queryip}'/'${queryport}'" > /dev/null 2>&1
querystatus="$?"
}
@ -147,12 +255,12 @@ fn_monitor_query() {
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
if [ "$(head -n 1 "${lockdir}/${selfname}-started.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 "Server started: $(date -d "@$(head -n 1 "${lockdir}/${selfname}-started.lock")")"
fn_script_log_info "Current time: $(date)"
monitorpass=1
core_exit.sh
@ -271,8 +379,15 @@ core_logs.sh
info_game.sh
# query pre-checks
fn_monitor_check_lockfile
fn_monitor_check_update_source
fn_monitor_check_update
fn_monitor_check_backup
fn_monitor_check_debug
fn_monitor_check_monitoring
fn_monitor_check_starting
fn_monitor_check_stopping
fn_monitor_check_session
# Monitor will not continue if session only check.
if [ "${querymode}" != "1" ]; then
fn_monitor_check_queryport

2
lgsm/modules/command_restart.sh

@ -5,7 +5,7 @@
# Website: https://linuxgsm.com
# Description: Restarts the server.
commandname="MODS-INSTALL"
commandname="RESTART"
commandaction="Restarting"
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_firstcommand_set

2
lgsm/modules/command_send.sh

@ -26,7 +26,7 @@ if [ "${status}" != "0" ]; then
fi
echo ""
fn_print_dots "Sending command to console: \"${commandtosend}\""
tmux -L "${sessionname}" send-keys -t "${servicename}" "${commandtosend}" ENTER
tmux -L "${socketname}" 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

3
lgsm/modules/command_skeleton.sh

@ -5,7 +5,10 @@
# Website: https://linuxgsm.com
# Description: Creates an copy of a game servers directorys.
commandname="SKELETON"
commandaction="Skeleton"
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_firstcommand_set
fn_print_dots "Creating skeleton directory"
check.sh

102
lgsm/modules/command_start.sh

@ -11,39 +11,14 @@ moduleselfname="$(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}" end -t "${sessionname}" version ENTER > /dev/null 2>&1
tmux -L "${socketname}" end -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}"
@ -68,35 +43,44 @@ fn_start_tmux() {
mv "${consolelog}" "${consolelogdate}"
fi
# Create lockfile
date '+%s' > "${lockdir}/${selfname}.lock"
echo "${version}" >> "${lockdir}/${selfname}.lock"
echo "${port}" >> "${lockdir}/${selfname}.lock"
# Create a starting lockfile that only exists while the start command is running.
date '+%s' > "${lockdir:?}/${selfname}-starting.lock"
fn_reload_startparameters
# Create uid to ensure unique tmux socket name.
if [ ! -f "${datadir}/${selfname}.uid" ]; then
check_status.sh
if [ "${status}" != "0" ]; then
# stop running server (if running) to prevent lingering tmux sessions.
exitbypass=1
command_stop.sh
fi
uid=$(date '+%s' | sha1sum | head -c 8)
echo "${uid}" > "${datadir}/${selfname}.uid"
socketname="${sessionname}-$(cat "${datadir}/${selfname}.uid")"
fi
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"
tmux -L "${socketname}" 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}'"
if [ "${logtimestamp}" == "on" ]; then
tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
else
tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
fi
fi
@ -114,10 +98,10 @@ fn_start_tmux() {
Currently installed: $(tmux -V)" > "${consolelog}"
# Console logging enable or not set.
elif [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
if [ "$logtimestamp" == "on" ]; then
tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
if [ "${logtimestamp}" == "on" ]; then
tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
else
tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
fi
fi
else
@ -127,7 +111,7 @@ fn_start_tmux() {
# Console logging disabled.
if [ "${consolelogging}" == "off" ]; then
echo -e "Console logging disabled by user" >> "${consolelog}"
echo -e "Console logging disabled in settings" >> "${consolelog}"
fn_script_log_info "Console logging disabled by user"
fi
fn_sleep_time
@ -176,8 +160,20 @@ fn_start_tmux() {
fi
fi
fi
# Remove starting lockfile when command ends.
rm -f "${lockdir:?}/${selfname}-starting.lock"
core_exit.sh
else
# Create start lockfile that exists only when the server is running.
date '+%s' > "${lockdir:?}/${selfname}-started.lock"
echo "${version}" >> "${lockdir}/${selfname}-started.lock"
echo "${port}" >> "${lockdir}/${selfname}-started.lock"
fn_print_ok "${servername}"
fn_script_log_pass "Started ${servername}"
# Create last started Lockfile.
date +%s > "${lockdir}/${selfname}-last-started.lock"
fn_print_ok "${servername}"
fn_script_log_pass "Started ${servername}"
fi
@ -185,25 +181,30 @@ fn_start_tmux() {
echo -en "\n"
}
# If user ran the start command monitor will become enabled.
if [ "${firstcommandname}" == "START" ] || [ "${firstcommandname}" == "RESTART" ]; then
date '+%s' > "${lockdir:?}/${selfname}-monitoring.lock"
fi
check.sh
# Is the server already started.
# $status comes from check_status.sh, which is run by check.sh for this command
# If the server already started dont start again.
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
# Remove starting lockfile when command ends.
rm -f "${lockdir:?}/${selfname}-starting.lock"
core_exit.sh
fi
fi
if [ -z "${fixbypass}" ]; then
fix.sh
fi
fix.sh
info_game.sh
core_logs.sh
# Will check for updates is updateonstart is yes.
# Will check for updates if updateonstart is yes.
if [ "${updateonstart}" == "yes" ] || [ "${updateonstart}" == "1" ] || [ "${updateonstart}" == "on" ]; then
exitbypass=1
unset updateonstart
@ -212,13 +213,12 @@ if [ "${updateonstart}" == "yes" ] || [ "${updateonstart}" == "1" ] || [ "${upda
fi
fn_print_dots "${servername}"
if [ "${shortname}" == "ts3" ]; then
fn_start_teamspeak3
elif [ "${shortname}" == "jk2" ]; then
if [ "${shortname}" == "jk2" ]; then
fn_start_jk2
else
fn_start_tmux
fi
# Remove starting lockfile when command ends.
rm -f "${lockdir:?}/${selfname}-starting.lock"
core_exit.sh

41
lgsm/modules/command_stop.sh

@ -15,7 +15,7 @@ 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
tmux -L "${socketname}" 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
@ -43,7 +43,7 @@ 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
tmux -L "${socketname}" 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
@ -71,7 +71,7 @@ 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
tmux -L "${socketname}" 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
@ -184,10 +184,10 @@ 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
tmux -L "${socketname}" 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
tmux -L "${socketname}" 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
@ -240,7 +240,7 @@ 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
tmux -L "${socketname}" kill-session -t "${sessionname}" > /dev/null 2>&1
sleep 0.5
check_status.sh
if [ "${status}" == "0" ]; then
@ -256,28 +256,39 @@ fn_stop_tmux() {
fn_stop_pre_check() {
if [ "${status}" == "0" ]; then
fn_print_info_nl "${servername} is already stopped"
fn_script_log_error "${servername} is already stopped"
fn_script_log_info "${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
# Check status again, a kill tmux session if graceful shutdown failed.
check_status.sh
if [ "${status}" != "0" ]; then
fn_stop_tmux
fi
fi
}
check.sh
# Create a stopping lockfile that only exists while the stop command is running.
date '+%s' > "${lockdir:?}/${selfname}-stopping.lock"
fn_print_dots "${servername}"
info_game.sh
fn_stop_pre_check
# Remove lockfile.
if [ -f "${lockdir}/${selfname}.lock" ]; then
rm -f "${lockdir:?}/${selfname}.lock"
# Remove started lockfile.
rm -f "${lockdir:?}/${selfname}-started.lock"
# If user ran the stop command monitor will become disabled.
if [ "${firstcommandname}" == "STOP" ]; then
rm -f "${lockdir:?}/${selfname}-monitoring.lock"
fi
# Remove stopping lockfile.
rm -f "${lockdir:?}/${selfname}-stopping.lock"
if [ -z "${exitbypass}" ]; then
core_exit.sh
fi

4
lgsm/modules/command_ts3_server_pass.sh

@ -28,7 +28,7 @@ fn_serveradmin_password_prompt() {
fn_serveradmin_password_set() {
# Start server in "new password mode".
ts3serverpass="1"
exitbypass="1"
exitbypass=1
command_start.sh
fn_firstcommand_reset
fn_print_ok_nl "New password applied"
@ -40,7 +40,7 @@ check.sh
fn_serveradmin_password_prompt
if [ "${status}" != "0" ]; then
# Stop any running server.
exitbypass="1"
exitbypass=1
command_stop.sh
fn_firstcommand_reset
fn_serveradmin_password_set

15
lgsm/modules/command_update.sh

@ -18,23 +18,26 @@ check_last_update.sh
if [ "${shortname}" == "ts3" ]; then
update_ts3.sh
elif [ "${shortname}" == "mc" ]; then
update_minecraft.sh
update_mc.sh
elif [ "${shortname}" == "mcb" ]; then
update_minecraft_bedrock.sh
update_mcb.sh
elif [ "${shortname}" == "pmc" ] || [ "${shortname}" == "vpmc" ] || [ "${shortname}" == "wmc" ]; then
update_papermc.sh
update_pmc.sh
elif [ "${shortname}" == "fctr" ]; then
update_factorio.sh
update_fctr.sh
elif [ "${shortname}" == "mta" ]; then
update_mta.sh
elif [ "${shortname}" == "jk2" ]; then
update_jediknight2.sh
update_jk2.sh
elif [ "${shortname}" == "vints" ]; then
update_vintagestory.sh
update_vints.sh
elif [ "${shortname}" == "ut99" ]; then
update_ut99.sh
else
update_steamcmd.sh
fi
# remove update lockfile.
rm -f "${lockdir:?}/update.lock"
core_exit.sh

5
lgsm/modules/command_validate.sh

@ -23,7 +23,7 @@ fn_validate() {
fi
done
fn_print_warn_nl "Validate might overwrite some customised files"
date '+%s' > "${lockdir:?}/update.lock"
fn_dl_steamcmd
}
@ -46,4 +46,7 @@ else
fn_validate
fi
# remove update lockfile
rm -f "${lockdir:?}/update.lock"
core_exit.sh

10
lgsm/modules/core_dl.sh

@ -36,7 +36,7 @@ fn_dl_steamcmd() {
# 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
if [ "$(command -v unbuffer 2> /dev/null)" ]; then
unbuffer="unbuffer"
fi
@ -119,6 +119,14 @@ fn_dl_steamcmd() {
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"
# Disk write failure.
elif [ -n "$(grep "0x606" "${steamcmdlog}" | tail -1)" ] || [ -n "$(grep "0x602" "${steamcmdlog}" | tail -1)" ]; then
fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Disk write failure"
fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Disk write failure"
# Missing update files.
elif [ -n "$(grep "0x626" "${steamcmdlog}" | tail -1)" ] || [ -n "$(grep "0x626" "${steamcmdlog}" | tail -1)" ]; then
fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Missing update files"
fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Missing update files"
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"

4
lgsm/modules/core_exit.sh

@ -12,7 +12,7 @@ fn_exit_dev_debug() {
echo -e ""
echo -e "${moduleselfname} exiting with code: ${exitcode}"
if [ -f "${rootdir}/dev-debug.log" ]; then
grep "modulefile=" "${rootdir}/dev-debug.log" | sed 's/modulefile=//g' > "${rootdir}/dev-debug-module-order.log"
grep -a "modulefile=" "${rootdir}/dev-debug.log" | sed 's/modulefile=//g' > "${rootdir}/dev-debug-module-order.log"
fi
fi
}
@ -35,7 +35,9 @@ elif [ "${exitcode}" != "0" ]; then
elif [ "${exitcode}" == "3" ]; then
fn_script_log_warn "${moduleselfname} exiting with code: ${exitcode}"
else
# if exit code is not set assume error.
fn_script_log_warn "${moduleselfname} exiting with code: ${exitcode}"
exitcode=4
fi
fn_exit_dev_debug
# remove trap.

14
lgsm/modules/core_functions.sh

@ -8,7 +8,7 @@
module_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
modulesversion="v23.4.0"
modulesversion="v23.5.0"
# Core
@ -640,17 +640,17 @@ update_ts3.sh() {
fn_fetch_function
}
update_minecraft.sh() {
update_mc.sh() {
functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
update_minecraft_bedrock.sh() {
update_mcb.sh() {
functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
update_papermc.sh() {
update_pmc.sh() {
functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
@ -660,12 +660,12 @@ update_mta.sh() {
fn_fetch_function
}
update_factorio.sh() {
update_fctr.sh() {
functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
update_jediknight2.sh() {
update_jk2.sh() {
functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
@ -675,7 +675,7 @@ update_steamcmd.sh() {
fn_fetch_function
}
update_vintagestory.sh() {
update_vints.sh() {
functionfile="${FUNCNAME[0]}"
fn_fetch_function
}

2
lgsm/modules/core_getopt.sh

@ -55,7 +55,7 @@ cmd_dev_detect_deps=("dd;detect-deps" "command_dev_detect_deps.sh" "Detect requi
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_modules=("cf;clear-modules" "command_dev_clear_modules.sh" "Delete the contents of the modules dir.")
cmd_dev_clear_modules=("cm;clear-modules" "command_dev_clear_modules.sh" "Delete the contents of the modules dir.")
### Set specific opt here.

4
lgsm/modules/core_legacy.sh

@ -15,6 +15,10 @@ for legacy_version in "${legacy_versions_array[@]}"; do
fi
done
if [ -z "${socketname}" ]; then
socketname="${sessionname}"
fi
if [ -n "${webadminuser}" ]; then
httpuser="${webadminuser}"
fi

19
lgsm/modules/core_modules.sh

@ -8,7 +8,7 @@
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
modulesversion="v23.4.0"
modulesversion="v23.5.0"
# Core
@ -421,6 +421,11 @@ fix_onset.sh() {
fn_fetch_module
}
fix_pvr.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
}
fix_ro.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
@ -645,17 +650,17 @@ update_ts3.sh() {
fn_fetch_module
}
update_minecraft.sh() {
update_mc.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
}
update_minecraft_bedrock.sh() {
update_mcb.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
}
update_papermc.sh() {
update_pmc.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
}
@ -665,12 +670,12 @@ update_mta.sh() {
fn_fetch_module
}
update_factorio.sh() {
update_fctr.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
}
update_jediknight2.sh() {
update_jk2.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
}
@ -680,7 +685,7 @@ update_steamcmd.sh() {
fn_fetch_module
}
update_vintagestory.sh() {
update_vints.sh() {
modulefile="${FUNCNAME[0]}"
fn_fetch_module
}

21
lgsm/modules/core_steamcmd.sh

@ -151,11 +151,6 @@ fn_update_steamcmd_localbuild() {
# 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"
@ -178,6 +173,13 @@ fn_update_steamcmd_remotebuild() {
find "${HOME}" -type f -name "appinfo.vdf" -exec rm -f {} \; 2> /dev/null
fi
# Set branch to public if no custom branch.
if [ -z "${branch}" ]; then
branch="public"
fi
# added as was failing GitHub Actions test. Running SteamCMD twice seems to fix it.
${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +quit 2> /dev/null
# 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:]')
@ -204,7 +206,10 @@ fn_update_steamcmd_remotebuild() {
fn_update_steamcmd_compare() {
fn_print_dots "Checking for update: ${remotelocation}"
# Update has been found or force update.
if [ "${localbuild}" != "${remotebuildversion}" ] || [ "${forceupdate}" == "1" ]; then
# Create update lockfile.
date '+%s' > "${lockdir:?}/update.lock"
fn_print_ok_nl "Checking for update: ${remotelocation}"
echo -en "\n"
echo -e "Update available"
@ -248,7 +253,7 @@ fn_update_steamcmd_compare() {
fn_firstcommand_reset
fi
unset exitbypass
date +%s > "${lockdir}/lastupdate.lock"
date +%s > "${lockdir:?}/last-updated.lock"
alert="update"
elif [ "${commandname}" == "CHECK-UPDATE" ]; then
alert="check-update"
@ -352,8 +357,8 @@ fn_check_steamcmd_appmanifest() {
if [ "${engine}" == "goldsrc" ]; then
shareddepotsexists=$(grep -c SharedDepots "${serverfiles}/steamapps/appmanifest_90.acf")
if [ ! -f "${serverfiles}/steamapps/appmanifest_90.acf" ] || [ "${shareddepotsexists}" == "0" ]; then
fn_print_error_nl "SharedDepots missing from appmanifest_${appid}.acf"
fn_script_log_error "SharedDepots missing from appmanifest_${appid}.acf"
fn_print_error_nl "SharedDepots missing from appmanifest_90.acf"
fn_script_log_error "SharedDepots missing from appmanifest_90.acf"
fn_print_info_nl "Forcing update to correct issue"
fn_script_log_info "Forcing update to correct issue"
if [ "${shortname}" == "ahl" ]; then

2
lgsm/modules/fix.sh

@ -52,7 +52,7 @@ fn_apply_fix() {
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_pre_start_fix=(arma3 armar ark av bt bo csgo cmw dst hw ins nmrih onset pvr 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

2
lgsm/modules/fix_ark.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with ARK: Survival Evolved.
# Description: Resolves issues with ARK: Survival Evolved.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_arma3.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves an issue with ARMA3.
# Description: Resolves issues with ARMA3.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_armar.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves an issue with Arma Reforger.
# Description: Resolves issues with Arma Reforger.
module_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_av.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves startup issue with Avorion
# Description: Resolves issues with Avorion.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_bo.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Ballistic Overkill.
# Description: Resolves issues with Ballistic Overkill.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_bt.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves an issue with Barotrauma.
# Description: Resolves issues with Barotrauma.
module_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_cmw.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves the issue of the not starting server on linux
# Description: Resolves issues with Chivalry: Medieval Warfare.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

4
lgsm/modules/fix_csgo.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with CS:GO.
# Description: Resolves issues with Counter-Strike: Global Offensive.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
@ -37,6 +37,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"
mv "${libgccc_so}" "${libgccc_so}.bak"
fn_fix_msg_end
fi

2
lgsm/modules/fix_dst.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Don't Starve Together.
# Description: Resolves issues with Don't Starve Together.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_hw.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Hurtworld.
# Description: Resolves issues with Hurtworld.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_ins.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Insurgency.
# Description: Resolves issues with Insurgency.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_kf.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Killing Floor.
# Description: Resolves issues with Killing Floor.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_kf2.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Killing Floor 2.
# Description: Resolves issues with Killing Floor 2.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_lo.sh

@ -2,7 +2,7 @@
# LinuxGSM fix_lo.sh module
# Author: Daniel Gibbs
# Website: https://linuxgsm.com
# Description: Resolves installation issue with Last Oasis
# Description: Resolves various issues with Last Oasis.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_mcb.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves possible startup issue with Minecraft Bedrock.
# Description: Resolves various issues with Minecraft Bedrock.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_mta.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Installs the libmysqlclient for database functions on the server.
# Description: Resolves various issues with Multi Theft Auto.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

14
lgsm/modules/fix_pvr.sh

@ -0,0 +1,14 @@
#!/bin/bash
# LinuxGSM fix_pvr.sh module
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Pavlov VR.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
if [ ! -f "${serverfiles}/linux64/libc++.so" ] && [ -f "/usr/lib/x86_64-linux-gnu/libc++.so.1" ]; then
cp "/usr/lib/x86_64-linux-gnu/libc++.so.1" "${serverfiles}/linux64/libc++.so"
fi
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}:${serverfiles}/linux64"

2
lgsm/modules/fix_ro.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Red Orchestra.
# Description: Resolves issues with Red Orchestra.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_rust.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves startup issue with Rust.
# Description: Resolves issues with Rust.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_rw.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Rising World.
# Description: Resolves issues with Rising World.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_samp.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves issue that the default rcon password is not changed
# Description: Resolves issue that the default rcon password is not changed.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_sdtd.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with 7 Days to Die.
# Description: Resolves issues with 7 Days to Die.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_sfc.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Source Forts Classic.
# Description: Resolves issues with Source Forts Classic.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_sof2.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Soldier of Fortune 2.
# Description: Resolves issues with Soldier of Fortune 2.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_squad.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Squad.
# Description: Resolves issues with Squad.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_st.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves startup issue with Stationeers.
# Description: Resolves issues with Stationeers.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_steamcmd.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues related to SteamCMD.
# Description: Resolves issues with SteamCMD.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_terraria.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves an issue with Terraria.
# Description: Resolves issues with Terraria.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_tf2.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Team Fortress 2.
# Description: Resolves issues with Team Fortress 2.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

15
lgsm/modules/fix_ts3.sh

@ -3,10 +3,23 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Teamspeak 3.
# Description: Resolves issues with Teamspeak 3.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
# Creates a blank ts3server.ini if it does not exist.
if [ ! -f "${servercfgfullpath}" ]; then
fixname="create blank ${servercfg}"
fn_fix_msg_start
touch "${servercfgfullpath}"
fn_fix_msg_end
fi
# Accept license.
if [ ! -f "${executabledir}/.ts3server_license_accepted" ]; then
install_eula.sh
fi
# Fixes: makes libmariadb2 available #1924.
if [ ! -f "${serverfiles}/libmariadb.so.2" ]; then
fixname="libmariadb.so.2"

2
lgsm/modules/fix_unt.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves startup issue with Unturned.
# Description: Resolves issues with Unturned.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_ut.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Unreal Tournament.
# Description: Resolves issues with Unreal Tournament.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_ut2k4.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Unreal Tournament 2004.
# Description: Resolves issues with Unreal Tournament 2004.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_ut3.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Unreal Tournament 3.
# Description: Resolves issues with Unreal Tournament 3.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_vh.sh

@ -2,7 +2,7 @@
# LinuxGSM fix_rust.sh module
# Author: Alasdair Haig
# Website: https://linuxgsm.com
# Description: Resolves startup issue with Valheim
# Description: Resolves issues with Valheim.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_wurm.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Wurm Unlimited.
# Description: Resolves issues with Wurm Unlimited.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_zmr.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Resolves various issues with Zombie Master: Reborn.
# Description: Resolves issues with Zombie Master: Reborn.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

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

Loading…
Cancel
Save