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: push:
concurrency: concurrency:
group: ${{ github.ref_name }} group: details-check-${{ github.ref_name }}
cancel-in-progress: true cancel-in-progress: true
jobs: 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"> <p align="center">
<a href="https://linuxgsm.com"><img src="https://i.imgur.com/Eoh1jsi.jpg" alt="LinuxGSM"> <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> <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://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://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> <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 ## 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 ## Main features
@ -45,12 +45,12 @@ Documentation is found at [linuxgsm.com](https://linuxgsm.com) and [docs.linuxgs
## :question: Support ## :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 ## :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" maxplayers="70"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters ## 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 #### #### LinuxGSM Settings ####

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

@ -14,7 +14,7 @@ port="7777"
queryport="7780" queryport="7780"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters ## 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 #### #### LinuxGSM Settings ####

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

@ -19,9 +19,14 @@ defaultmap="Canyon"
defaultscenario="Scenario_Crossing_Push_Security" defaultscenario="Scenario_Crossing_Push_Security"
maxplayers="28" 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 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
## Parameter Docs | https://mod.io/g/insurgencysandstorm/r/server-admin-guide ## 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 #### #### LinuxGSM Settings ####
@ -127,7 +132,7 @@ steamcmdforcewindows="no"
branch="" branch=""
betapassword="" betapassword=""
# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server # Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
steammaster="false" steammaster="true"
## Stop Mode | https://docs.linuxgsm.com/features/stop-mode ## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill # 1: tmux kill

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

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

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

@ -14,9 +14,11 @@ port="7777"
# Maps: bridge, datacenter, sand # Maps: bridge, datacenter, sand
defaultmap="datacenter" 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 ## 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 #### #### LinuxGSM Settings ####
@ -163,7 +165,7 @@ glibc="2.17"
## Game Server Directories ## Game Server Directories
systemdir="${serverfiles}/Pavlov" systemdir="${serverfiles}/Pavlov"
executabledir="${systemdir}/Binaries/Linux" executabledir="${systemdir}/Binaries/Linux"
executable="./PavlovServer" executable="./PavlovServer-Linux-Shipping"
servercfgdir="${systemdir}/Saved/Config/LinuxServer" servercfgdir="${systemdir}/Saved/Config/LinuxServer"
servercfg="Game.ini" servercfg="Game.ini"
servercfgdefault="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 ## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0" ip="0.0.0.0"
javaram="8192" # -Xmx$8192M
adminpassword="CHANGE_ME" adminpassword="CHANGE_ME"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters ## 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 #### #### LinuxGSM Settings ####

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

@ -13,6 +13,9 @@ ip="0.0.0.0"
port="27015" port="27015"
maxplayers="20" maxplayers="20"
defaultmap="PEI" defaultmap="PEI"
servername="LinuxGSM"
perspective="first" # Values: first, third, vehicle, Both.
gamemode="normal" # Values: normal, easy, gold.
## Game Server Login Token (GSLT): Required ## Game Server Login Token (GSLT): Required
# GSLT is required for running a public server. # GSLT is required for running a public server.
@ -20,7 +23,7 @@ defaultmap="PEI"
gslt="" gslt=""
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters ## 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 #### #### LinuxGSM Settings ####

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

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

4
lgsm/data/almalinux-8.csv

@ -83,7 +83,7 @@ opfor
pc pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-11-openjdk pmc,java-11-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-11-openjdk vpmc,java-11-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-11-jre pmc,openjdk-11-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-11-jre,rng-tools pz,openjdk-11-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre vpmc,openjdk-11-jre
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-17-jre pmc,openjdk-17-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-17-jre,rng-tools pz,openjdk-17-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre vpmc,openjdk-11-jre
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-17-jre pmc,openjdk-17-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-17-jre,rng-tools5 pz,openjdk-17-jre,rng-tools5
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-17-jre vpmc,openjdk-17-jre
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-8-jre pmc,openjdk-8-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-8-jre,rng-tools pz,openjdk-8-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-8-jre vpmc,openjdk-8-jre
vs vs
wet 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 pc
pc2 pc2
pmc,java-11-openjdk pmc,java-11-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-11-openjdk vpmc,java-11-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc
pc2 pc2
pmc,java-17-openjdk pmc,java-17-openjdk
pstbs,GConf2 ps,GConf2
pvkii pvkii
pvr,libcxx pvr,libcxx
pz,java-11-openjdk rng-tools pz,java-11-openjdk rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,glibc-devel vh,glibc-devel
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,java-17-openjdk vpmc,java-17-openjdk
vs vs
wet 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 pc,pcserver,Project Cars,ubuntu-22.04
pc2,pc2server,Project Cars 2,ubuntu-22.04 pc2,pc2server,Project Cars 2,ubuntu-22.04
pmc,pmcserver,PaperMC,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 pvkii,pvkiiserver,Pirates Vikings & Knights II,ubuntu-22.04
pvr,pvrserver,Pavlov VR,ubuntu-22.04 pvr,pvrserver,Pavlov VR,ubuntu-22.04
pz,pzserver,Project Zomboid,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 pc
pc2 pc2
pmc,openjdk-8-jre pmc,openjdk-8-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-8-jre,rng-tools pz,openjdk-8-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-8-jre vpmc,openjdk-8-jre
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-11-jre pmc,openjdk-11-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-11-jre,rng-tools pz,openjdk-11-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre vpmc,openjdk-11-jre
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-17-jre pmc,openjdk-17-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-17-jre,rng-tools pz,openjdk-17-jre,rng-tools
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-11-jre vpmc,openjdk-11-jre
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-17-jre pmc,openjdk-17-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-17-jre,rng-tools5 pz,openjdk-17-jre,rng-tools5
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-17-jre vpmc,openjdk-17-jre
vs vs
wet 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 pc
pc2 pc2
pmc,openjdk-17-jre pmc,openjdk-17-jre
pstbs,libgconf-2-4 ps,libgconf-2-4
pvkii pvkii
pvr,libc++1 pvr,libc++1
pz,openjdk-17-jre,rng-tools5 pz,openjdk-17-jre,rng-tools5
@ -124,7 +124,7 @@ ut2k4
ut3 ut3
ut99 ut99
vh,libc6-dev vh,libc6-dev
vints,mono-complete vints,aspnetcore-runtime-7.0
vpmc,openjdk-17-jre vpmc,openjdk-17-jre
vs vs
wet 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}" 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_alert_permissions() {
fn_script_log_info "Sending alert: Permissions error" fn_script_log_info "Sending alert: Permissions error"
alertsubject="Alert - ${selfname}: Permissions error" alertsubject="Alert - ${selfname}: Permissions error"
@ -102,6 +111,8 @@ elif [ "${alert}" == "update" ]; then
fn_alert_update fn_alert_update
elif [ "${alert}" == "check-update" ]; then elif [ "${alert}" == "check-update" ]; then
fn_alert_check_update fn_alert_check_update
elif [ "${alert}" == "update-restart" ]; then
fn_alert_update_restart
elif [ "${alert}" == "config" ]; then elif [ "${alert}" == "config" ]; then
fn_alert_config fn_alert_config
fi fi

71
lgsm/modules/check_deps.sh

@ -7,6 +7,19 @@
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" 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() { fn_install_mono_repo() {
if [ "${autodepinstall}" == "0" ]; then if [ "${autodepinstall}" == "0" ]; then
fn_print_information_nl "Automatically adding Mono repository." fn_print_information_nl "Automatically adding Mono repository."
@ -19,20 +32,26 @@ fn_install_mono_repo() {
sleep 1 sleep 1
echo -en " \r" echo -en " \r"
if [ "${distroid}" == "ubuntu" ]; then if [ "${distroid}" == "ubuntu" ]; then
if [ "${distroversion}" == "20.04" ]; then if [ "${distroversion}" == "22.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" 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 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 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" 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 else
monoautoinstall="1" monoautoinstall="1"
fi fi
elif [ "${distroid}" == "debian" ]; then elif [ "${distroid}" == "debian" ]; then
if [ "${distroversion}" == "10" ]; then if [ "${distroversion}" == "12" ]; 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" 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 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 else
monoautoinstall="1" monoautoinstall="1"
fi fi
@ -93,16 +112,16 @@ fn_deps_email() {
array_deps_required+=(exim4) array_deps_required+=(exim4)
elif [ -d /etc/sendmail ]; then elif [ -d /etc/sendmail ]; then
array_deps_required+=(sendmail) array_deps_required+=(sendmail)
elif [ "$(command -v dpkg-query 2> /dev/null)" ]; then elif [ "$(command -v yum 2> /dev/null)" ] || [ "$(command -v dnf 2> /dev/null)" ]; then
array_deps_required+=(mailutils postfix)
elif [ "$(command -v rpm 2> /dev/null)" ]; then
array_deps_required+=(mailx postfix) array_deps_required+=(mailx postfix)
elif [ "$(command -v apt 2> /dev/null)" ]; then
array_deps_required+=(mailutils postfix)
fi fi
else else
if [ "$(command -v dpkg-query 2> /dev/null)" ]; then if [ "$(command -v yum 2> /dev/null)" ] || [ "$(command -v dnf 2> /dev/null)" ]; then
array_deps_required+=(mailutils postfix)
elif [ "$(command -v rpm 2> /dev/null)" ]; then
array_deps_required+=(mailx postfix) array_deps_required+=(mailx postfix)
elif [ "$(command -v apt 2> /dev/null)" ]; then
array_deps_required+=(mailutils postfix)
fi fi
fi fi
fi fi
@ -129,10 +148,14 @@ fn_install_missing_deps() {
fi fi
autodepinstall="$?" autodepinstall="$?"
if [ "${monostatus}" == "1" ]; then if [ "${monoinstalled}" == "false" ]; then
fn_install_mono_repo fn_install_mono_repo
fi fi
if [ "${dotnetinstalled}" == "false" ]; then
fn_install_dotnet_repo
fi
if [ "${commandname}" == "INSTALL" ]; then if [ "${commandname}" == "INSTALL" ]; then
if [ "${autodepinstall}" == "0" ]; then if [ "${autodepinstall}" == "0" ]; then
fn_print_information_nl "$(whoami) has sudo access." fn_print_information_nl "$(whoami) has sudo access."
@ -144,7 +167,7 @@ fn_install_missing_deps() {
fi fi
# Add sudo dpkg --add-architecture i386 if using i386 packages. # 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 if printf '%s\n' "${array_deps_required[@]}" | grep -q -P 'i386'; then
i386installcommand="sudo dpkg --add-architecture i386; " i386installcommand="sudo dpkg --add-architecture i386; "
fi fi
@ -161,7 +184,7 @@ fn_install_missing_deps() {
echo -en "...\r" echo -en "...\r"
sleep 1 sleep 1
echo -en " \r" 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[*]}" 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}" eval "${cmd}"
elif [ "$(command -v dnf 2> /dev/null)" ]; then elif [ "$(command -v dnf 2> /dev/null)" ]; then
@ -181,7 +204,7 @@ fn_install_missing_deps() {
# If automatic dependency install is unavailable. # If automatic dependency install is unavailable.
if [ "${autodepinstall}" != "0" ]; then 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[*]}" echo -e "${i386installcommand}sudo apt update; sudo apt install ${array_deps_missing[*]}"
elif [ "$(command -v dnf 2> /dev/null)" ]; then elif [ "$(command -v dnf 2> /dev/null)" ]; then
echo -e "sudo dnf install ${array_deps_missing[*]}" echo -e "sudo dnf install ${array_deps_missing[*]}"
@ -248,13 +271,23 @@ fn_deps_detector() {
if [ -n "${monoversion}" ] && [ "${monoversion}" -ge "5" ]; then if [ -n "${monoversion}" ] && [ "${monoversion}" -ge "5" ]; then
# Mono >= 5.0.0 already installed. # Mono >= 5.0.0 already installed.
depstatus=0 depstatus=0
monostatus=0 monoinstalled=true
else else
# Mono not installed or installed Mono < 5.0.0. # Mono not installed or installed Mono < 5.0.0.
depstatus=1 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 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' dpkg-query -W -f='${Status}' "${deptocheck}" 2> /dev/null | grep -q -P '^install ok installed'
depstatus=$? depstatus=$?
elif [ "$(command -v dnf 2> /dev/null)" ]; then elif [ "$(command -v dnf 2> /dev/null)" ]; then

14
lgsm/modules/check_last_update.sh

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

5
lgsm/modules/check_logs.sh

@ -24,3 +24,8 @@ fi
if [ "${gamelogdir}" ] && [ -d "${gamelogdir}" ] && [ ! -d "${logdir}/server" ]; then if [ "${gamelogdir}" ] && [ -d "${gamelogdir}" ] && [ ! -d "${logdir}/server" ]; then
fn_check_logs fn_check_logs
fi 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]}")")" 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 elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "pmc" ] || [ "${shortname}" == "wmc" ]; then
ramrequirementmb="1000" ramrequirementmb="1000"
ramrequirementgb="1" ramrequirementgb="1"
elif [ "${shortname}" == "pstbs" ]; then elif [ "${shortname}" == "ps" ]; then
ramrequirementmb="2000" ramrequirementmb="2000"
ramrequirementgb="2" ramrequirementgb="2"
elif [ "${shortname}" == "ns2" ] || [ "${shortname}" == "ns2c" ]; then 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..." echo -en "backup ${backupname}.tar.gz..."
fn_print_removed_eol_nl fn_print_removed_eol_nl
fn_script_log_info "Backup ${backupname}.tar.gz: REMOVED" fn_script_log_info "Backup ${backupname}.tar.gz: REMOVED"
# Remove lock file. # Remove backup lockfile.
rm -f "${lockdir:?}/backup.lock" rm -f "${lockdir:?}/backup.lock"
fn_backup_start_server fn_backup_start_server
unset exitbypass unset exitbypass
@ -31,9 +31,21 @@ fn_backup_trap() {
# Check if a backup is pending or has been aborted using backup.lock. # Check if a backup is pending or has been aborted using backup.lock.
fn_backup_check_lockfile() { fn_backup_check_lockfile() {
# Remove stale lockfile.
if [ -f "${lockdir}/backup.lock" ]; then if [ -f "${lockdir}/backup.lock" ]; then
fn_print_info_nl "Lock file found: Backup is currently running" if [ "$(find "${lockdir}/backup.lock" -mmin +60)" ]; then
fn_script_log_error "Lock file found: Backup is currently running: ${lockdir}/backup.lock" 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 core_exit.sh
fi fi
} }
@ -117,8 +129,8 @@ fn_backup_migrate_olddir() {
fn_backup_create_lockfile() { fn_backup_create_lockfile() {
# Create lockfile. # Create lockfile.
date '+%s' > "${lockdir}/backup.lock" date '+%s' > "${lockdir:?}/backup.lock"
fn_script_log_info "Lockfile generated" fn_script_log_info "Backup lockfile generated"
fn_script_log_info "${lockdir}/backup.lock" fn_script_log_info "${lockdir}/backup.lock"
# trap to remove lockfile on quit. # trap to remove lockfile on quit.
trap fn_backup_trap INT trap fn_backup_trap INT
@ -140,7 +152,7 @@ fn_backup_compression() {
core_exit.sh core_exit.sh
fi 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=$? local exitcode=$?
if [ "${exitcode}" != 0 ]; then if [ "${exitcode}" != 0 ]; then
fn_print_fail_eol 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_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}')" fn_script_log_pass "Backup created: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')"
fi fi
# Remove lock file
rm -f "${lockdir:?}/backup.lock"
} }
# Clear old backups according to maxbackups and maxbackupdays variables. # Clear old backups according to maxbackups and maxbackupdays variables.
@ -265,4 +275,6 @@ fn_backup_compression
fn_backup_prune fn_backup_prune
fn_backup_start_server fn_backup_start_server
# Remove backup lockfile.
rm -f "${lockdir:?}/backup.lock"
core_exit.sh core_exit.sh

12
lgsm/modules/command_check_update.sh

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

2
lgsm/modules/command_console.sh

@ -42,7 +42,7 @@ check_status.sh
if [ "${status}" != "0" ]; then if [ "${status}" != "0" ]; then
fn_print_ok_nl "Accessing console" fn_print_ok_nl "Accessing console"
fn_script_log_pass "Console accessed" 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_print_ok_nl "Closing console"
fn_script_log_pass "Console closed" fn_script_log_pass "Console closed"
else else

18
lgsm/modules/command_debug.sh

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

2
lgsm/modules/command_dev_details.sh

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

2
lgsm/modules/command_dev_detect_glibc.sh

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

2
lgsm/modules/command_mods_remove.sh

@ -131,7 +131,7 @@ fi
if [ "${engine}" == "unity3d" ] && [[ "${modprettyname}" == *"Oxide"* ]]; then if [ "${engine}" == "unity3d" ] && [[ "${modprettyname}" == *"Oxide"* ]]; then
fn_print_information_nl "Validating to restore original ${gamename} files replaced by Oxide" 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" fn_script_log "Validating to restore original ${gamename} files replaced by Oxide"
exitbypass="1" exitbypass=1
command_validate.sh command_validate.sh
fn_firstcommand_reset fn_firstcommand_reset
unset exitbypass unset exitbypass

213
lgsm/modules/command_monitor.sh

@ -11,76 +11,152 @@ commandaction="Monitoring"
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_firstcommand_set fn_firstcommand_set
fn_monitor_check_lockfile() { fn_monitor_check_monitoring() {
# Monitor does not run if lockfile is not found. if [ -f "${lockdir}/${selfname}.lock" ]; then
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_dots "Checking lockfile: "
fn_print_checking_eol fn_print_checking_eol
fn_script_log_info "Checking lockfile: CHECKING" 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 "Checking lockfile: No lockfile found: "
fn_print_error_eol_nl fn_print_error_eol_nl
fn_script_log_error "Checking lockfile: No lockfile found: ERROR" fn_script_log_error "Checking lockfile: No lockfile found: ERROR"
echo -e "* Start ${selfname} to run monitor." echo -e "* Start ${selfname} to run monitor."
core_exit.sh core_exit.sh
fi fi
}
# Fix if lockfile is not unix time or contains letters fn_monitor_check_install() {
if [ -f "${lockdir}/${selfname}.lock" ] && [[ "$(head -n 1 "${lockdir}/${selfname}.lock")" =~ [A-Za-z] ]]; then 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
date '+%s' > "${lockdir}/${selfname}.lock" fn_print_dots "Checking installer: "
echo "${version}" >> "${lockdir}/${selfname}.lock" fn_print_checking_eol
echo "${port}" >> "${lockdir}/${selfname}.lock" 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 fi
} }
fn_monitor_check_backup() { fn_monitor_check_debug() {
# Monitor will check if backup is running. if [ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} debug")" != "0" ] || [ "$(pgrep -fcx -u "${USER}" "/bin/bash ./${selfname} d")" != "0" ]; then
if [ "$(pgrep "${selfname} backup" | wc -l)" != "0" ] || [ "$(pgrep "${selfname} b" | wc -l)" != "0" ]; then fn_print_dots "Checking debug: "
fn_print_info "Checking lockfile: LinuxGSM is currently running a backup: " fn_print_checking_eol
fn_print_info_eol fn_print_info "Checking debug: Debug is running: "
fn_script_log_info "Checking lockfile: LinuxGSM is currently running a backup" fn_print_info_eol_nl
fn_script_log_pass "Checking debug: Debug is running"
core_exit.sh core_exit.sh
fi fi
} }
fn_monitor_check_debug() { fn_monitor_check_starting() {
# Monitor will check if backup is running. # Remove stale lockfile.
if [ "$(pgrep -fc "${selfname} backup")" != "0" ] || [ "$(pgrep -fc "${selfname} b")" != "0" ]; then if [ -f "${lockdir}/${selfname}-starting.lock" ]; then
fn_print_info "Checking lockfile: LinuxGSM is currently in debug mode: " if [ "$(find "${lockdir}/${selfname}-starting.lock" -mmin +5)" ]; then
fn_print_info_eol fn_print_dots "Checking start: "
fn_script_log_pass "Checking lockfile: LinuxGSM is currently in debug mode" 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 core_exit.sh
fi fi
} }
fn_monitor_check_install() { fn_monitor_check_stopping() {
# Monitor will check if update is running. # Remove stale lockfile.
if [ "$(pgrep -fc "${selfname} install")" != "0" ] || [ "$(pgrep -fc "${selfname} i")" != "0" ] || [ "$(pgrep -fc "${selfname} auto-install")" != "0" ] || [ "$(pgrep -fc "${selfname} ai")" != "0" ]; then if [ -f "${lockdir}/${selfname}-stopping.lock" ]; then
fn_print_dots "Checking for installer: " 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_print_checking_eol
fn_script_log_info "Checking for installer: CHECKING" fn_print_info "Checking backup: Backup is running: "
fn_print_info "Checking for installer: LinuxGSM is currently installing: " fn_print_info_eol_nl
fn_print_info_eol fn_script_log_info "Checking backup: Backup is running"
fn_script_log_pass "Checking for installer: LinuxGSM is currently installing"
core_exit.sh core_exit.sh
fi fi
} }
fn_monitor_check_update() { fn_monitor_check_update() {
# Specific check for docker. Will ignore the command watch -n 1800 ./csgoserver update # Remove stale lockfile.
monitorps=0 if [ -f "${lockdir}/update.lock" ]; then
if [ "$(pgrep -fc "n*${selfname} update")" != "0" ]; then if [ "$(find "${lockdir}/update.lock" -mmin +15)" ]; then
monitorps="$((monitorps - 1))" 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 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 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
monitorps="$((monitorps + 2))" fn_print_dots "Checking update: "
if [ "${monitorps}" != "0" ]; then fn_print_checking_eol
fn_print_info_nl "Checking lockfile: LinuxGSM is currently updating: " fn_print_info "Checking update: LinuxGSM is updating the game server: "
fn_print_info_eol fn_print_info_eol_nl
fn_script_log_pass "Checking lockfile: LinuxGSM is currently updating" 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 core_exit.sh
fi fi
fi fi
@ -90,8 +166,40 @@ fn_monitor_check_session() {
fn_print_dots "Checking session: " fn_print_dots "Checking session: "
fn_print_checking_eol fn_print_checking_eol
fn_script_log_info "Checking session: CHECKING" fn_script_log_info "Checking session: CHECKING"
# uses status var from check_status.sh # Tmux session width and height needs to be reviewed as may no longer be required.
if [ "${status}" != "0" ]; then 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 "Checking session: "
fn_print_ok_eol_nl fn_print_ok_eol_nl
fn_script_log_pass "Checking session: OK" fn_script_log_pass "Checking session: OK"
@ -107,8 +215,8 @@ fn_monitor_check_session() {
fi fi
} }
# Monitor will check queryport is set before continuing.
fn_monitor_check_queryport() { fn_monitor_check_queryport() {
# Monitor will check queryport is set before continuing.
if [ -z "${queryport}" ] || [ "${queryport}" == "0" ]; then if [ -z "${queryport}" ] || [ "${queryport}" == "0" ]; then
fn_print_dots "Checking port: " fn_print_dots "Checking port: "
fn_print_checking_eol fn_print_checking_eol
@ -133,7 +241,7 @@ fn_query_gsquery() {
} }
fn_query_tcp() { 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="$?" querystatus="$?"
} }
@ -147,12 +255,12 @@ fn_monitor_query() {
fn_print_querying_eol fn_print_querying_eol
fn_script_log_info "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : QUERYING" fn_script_log_info "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : QUERYING"
# querydelay # 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_ok "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: "
fn_print_delay_eol_nl fn_print_delay_eol_nl
fn_script_log_info "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt} : DELAY" 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 "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)" fn_script_log_info "Current time: $(date)"
monitorpass=1 monitorpass=1
core_exit.sh core_exit.sh
@ -271,8 +379,15 @@ core_logs.sh
info_game.sh info_game.sh
# query pre-checks # 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 fn_monitor_check_session
# Monitor will not continue if session only check. # Monitor will not continue if session only check.
if [ "${querymode}" != "1" ]; then if [ "${querymode}" != "1" ]; then
fn_monitor_check_queryport fn_monitor_check_queryport

2
lgsm/modules/command_restart.sh

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

2
lgsm/modules/command_send.sh

@ -26,7 +26,7 @@ if [ "${status}" != "0" ]; then
fi fi
echo "" echo ""
fn_print_dots "Sending command to console: \"${commandtosend}\"" 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_print_ok_nl "Sending command to console: \"${commandtosend}\""
fn_script_log_pass "Command \"${commandtosend}\" sent to console" fn_script_log_pass "Command \"${commandtosend}\" sent to console"
else else

3
lgsm/modules/command_skeleton.sh

@ -5,7 +5,10 @@
# Website: https://linuxgsm.com # Website: https://linuxgsm.com
# Description: Creates an copy of a game servers directorys. # Description: Creates an copy of a game servers directorys.
commandname="SKELETON"
commandaction="Skeleton"
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_firstcommand_set
fn_print_dots "Creating skeleton directory" fn_print_dots "Creating skeleton directory"
check.sh 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 }'" addtimestamp="gawk '{ print strftime(\\\"[$logtimestampformat]\\\"), \\\$0 }'"
fn_firstcommand_set 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. # This will allow the Jedi Knight 2 version to be printed in console on start.
# Used to allow update to detect JK2MV server version. # Used to allow update to detect JK2MV server version.
fn_start_jk2() { fn_start_jk2() {
fn_start_tmux 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() { fn_start_tmux() {
if [ "${parmsbypass}" ]; then
startparameters=""
fi
# check for tmux size variables. # check for tmux size variables.
if [[ "${servercfgtmuxwidth}" =~ ^[0-9]+$ ]]; then if [[ "${servercfgtmuxwidth}" =~ ^[0-9]+$ ]]; then
sessionwidth="${servercfgtmuxwidth}" sessionwidth="${servercfgtmuxwidth}"
@ -68,35 +43,44 @@ fn_start_tmux() {
mv "${consolelog}" "${consolelogdate}" mv "${consolelog}" "${consolelogdate}"
fi fi
# Create lockfile # Create a starting lockfile that only exists while the start command is running.
date '+%s' > "${lockdir}/${selfname}.lock" date '+%s' > "${lockdir:?}/${selfname}-starting.lock"
echo "${version}" >> "${lockdir}/${selfname}.lock"
echo "${port}" >> "${lockdir}/${selfname}.lock"
fn_reload_startparameters 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 if [ "${shortname}" == "av" ]; then
cd "${systemdir}" || exit cd "${systemdir}" || exit
else else
cd "${executabledir}" || exit cd "${executabledir}" || exit
fi 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. # Create logfile.
touch "${consolelog}" touch "${consolelog}"
# Create last start lock file
date +%s > "${lockdir}/${selfname}-laststart.lock"
# tmux compiled from source will return "master", therefore ignore it. # tmux compiled from source will return "master", therefore ignore it.
if [ "${tmuxv}" == "master" ]; then if [ "${tmuxv}" == "master" ]; then
fn_script_log "tmux version: master (user compiled)" fn_script_log "tmux version: master (user compiled)"
echo -e "tmux version: master (user compiled)" >> "${consolelog}" echo -e "tmux version: master (user compiled)" >> "${consolelog}"
if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
if [ "$logtimestamp" == "on" ]; then if [ "${logtimestamp}" == "on" ]; then
tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'" tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
else 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
fi fi
@ -114,10 +98,10 @@ fn_start_tmux() {
Currently installed: $(tmux -V)" > "${consolelog}" Currently installed: $(tmux -V)" > "${consolelog}"
# Console logging enable or not set. # Console logging enable or not set.
elif [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then elif [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
if [ "$logtimestamp" == "on" ]; then if [ "${logtimestamp}" == "on" ]; then
tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'" tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
else 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
fi fi
else else
@ -127,7 +111,7 @@ fn_start_tmux() {
# Console logging disabled. # Console logging disabled.
if [ "${consolelogging}" == "off" ]; then 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" fn_script_log_info "Console logging disabled by user"
fi fi
fn_sleep_time fn_sleep_time
@ -176,8 +160,20 @@ fn_start_tmux() {
fi fi
fi fi
fi fi
# Remove starting lockfile when command ends.
rm -f "${lockdir:?}/${selfname}-starting.lock"
core_exit.sh core_exit.sh
else 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_print_ok "${servername}"
fn_script_log_pass "Started ${servername}" fn_script_log_pass "Started ${servername}"
fi fi
@ -185,25 +181,30 @@ fn_start_tmux() {
echo -en "\n" 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 check.sh
# Is the server already started. # If the server already started dont start again.
# $status comes from check_status.sh, which is run by check.sh for this command
if [ "${status}" != "0" ]; then if [ "${status}" != "0" ]; then
fn_print_dots "${servername}" fn_print_dots "${servername}"
fn_print_info_nl "${servername} is already running" fn_print_info_nl "${servername} is already running"
fn_script_log_error "${servername} is already running" fn_script_log_error "${servername} is already running"
if [ -z "${exitbypass}" ]; then if [ -z "${exitbypass}" ]; then
# Remove starting lockfile when command ends.
rm -f "${lockdir:?}/${selfname}-starting.lock"
core_exit.sh core_exit.sh
fi fi
fi fi
if [ -z "${fixbypass}" ]; then
fix.sh fix.sh
fi
info_game.sh info_game.sh
core_logs.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 if [ "${updateonstart}" == "yes" ] || [ "${updateonstart}" == "1" ] || [ "${updateonstart}" == "on" ]; then
exitbypass=1 exitbypass=1
unset updateonstart unset updateonstart
@ -212,13 +213,12 @@ if [ "${updateonstart}" == "yes" ] || [ "${updateonstart}" == "1" ] || [ "${upda
fi fi
fn_print_dots "${servername}" fn_print_dots "${servername}"
if [ "${shortname}" == "jk2" ]; then
if [ "${shortname}" == "ts3" ]; then
fn_start_teamspeak3
elif [ "${shortname}" == "jk2" ]; then
fn_start_jk2 fn_start_jk2
else else
fn_start_tmux fn_start_tmux
fi fi
# Remove starting lockfile when command ends.
rm -f "${lockdir:?}/${selfname}-starting.lock"
core_exit.sh core_exit.sh

41
lgsm/modules/command_stop.sh

@ -15,7 +15,7 @@ fn_stop_graceful_ctrlc() {
fn_print_dots "Graceful: CTRL+c" fn_print_dots "Graceful: CTRL+c"
fn_script_log_info "Graceful: CTRL+c" fn_script_log_info "Graceful: CTRL+c"
# Sends quit. # 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. # Waits up to 30 seconds giving the server time to shutdown gracefuly.
for seconds in {1..30}; do for seconds in {1..30}; do
check_status.sh check_status.sh
@ -43,7 +43,7 @@ fn_stop_graceful_cmd() {
fn_print_dots "Graceful: sending \"${1}\"" fn_print_dots "Graceful: sending \"${1}\""
fn_script_log_info "Graceful: sending \"${1}\"" fn_script_log_info "Graceful: sending \"${1}\""
# Sends specific stop command. # 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. # Waits up to ${seconds} seconds giving the server time to shutdown gracefully.
for ((seconds = 1; seconds <= ${2}; seconds++)); do for ((seconds = 1; seconds <= ${2}; seconds++)); do
check_status.sh check_status.sh
@ -71,7 +71,7 @@ fn_stop_graceful_goldsrc() {
fn_print_dots "Graceful: sending \"quit\"" fn_print_dots "Graceful: sending \"quit\""
fn_script_log_info "Graceful: sending \"quit\"" fn_script_log_info "Graceful: sending \"quit\""
# sends 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. # Waits 3 seconds as goldsrc servers restart with the quit command.
for seconds in {1..3}; do for seconds in {1..3}; do
sleep 1 sleep 1
@ -184,10 +184,10 @@ fn_stop_graceful_avorion() {
fn_print_dots "Graceful: /save /stop" fn_print_dots "Graceful: /save /stop"
fn_script_log_info "Graceful: /save /stop" fn_script_log_info "Graceful: /save /stop"
# Sends /save. # 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 sleep 5
# Sends /quit. # 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. # Waits up to 30 seconds giving the server time to shutdown gracefuly.
for seconds in {1..30}; do for seconds in {1..30}; do
check_status.sh check_status.sh
@ -240,7 +240,7 @@ fn_stop_tmux() {
fn_print_dots "${servername}" fn_print_dots "${servername}"
fn_script_log_info "tmux kill-session: ${sessionname}: ${servername}" fn_script_log_info "tmux kill-session: ${sessionname}: ${servername}"
# Kill tmux session. # 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 sleep 0.5
check_status.sh check_status.sh
if [ "${status}" == "0" ]; then if [ "${status}" == "0" ]; then
@ -256,28 +256,39 @@ fn_stop_tmux() {
fn_stop_pre_check() { fn_stop_pre_check() {
if [ "${status}" == "0" ]; then if [ "${status}" == "0" ]; then
fn_print_info_nl "${servername} is already stopped" 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 else
# Select graceful shutdown. # Select graceful shutdown.
fn_stop_graceful_select fn_stop_graceful_select
fi # Check status again, a kill tmux session if graceful shutdown failed.
# Check status again, a kill tmux session if graceful shutdown failed. check_status.sh
check_status.sh if [ "${status}" != "0" ]; then
if [ "${status}" != "0" ]; then fn_stop_tmux
fn_stop_tmux fi
fi fi
} }
check.sh 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}" fn_print_dots "${servername}"
info_game.sh info_game.sh
fn_stop_pre_check fn_stop_pre_check
# Remove lockfile.
if [ -f "${lockdir}/${selfname}.lock" ]; then # Remove started lockfile.
rm -f "${lockdir:?}/${selfname}.lock" 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 fi
# Remove stopping lockfile.
rm -f "${lockdir:?}/${selfname}-stopping.lock"
if [ -z "${exitbypass}" ]; then if [ -z "${exitbypass}" ]; then
core_exit.sh core_exit.sh
fi fi

4
lgsm/modules/command_ts3_server_pass.sh

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

15
lgsm/modules/command_update.sh

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

5
lgsm/modules/command_validate.sh

@ -23,7 +23,7 @@ fn_validate() {
fi fi
done done
fn_print_warn_nl "Validate might overwrite some customised files" fn_print_warn_nl "Validate might overwrite some customised files"
date '+%s' > "${lockdir:?}/update.lock"
fn_dl_steamcmd fn_dl_steamcmd
} }
@ -46,4 +46,7 @@ else
fn_validate fn_validate
fi fi
# remove update lockfile
rm -f "${lockdir:?}/update.lock"
core_exit.sh 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 will allow the output of steamcmd not buffer allowing a smooth output.
# unbuffer us part of the expect package. # unbuffer us part of the expect package.
if [ "$(command -v unbuffer)" ]; then if [ "$(command -v unbuffer 2> /dev/null)" ]; then
unbuffer="unbuffer" unbuffer="unbuffer"
fi fi
@ -119,6 +119,14 @@ fn_dl_steamcmd() {
elif [ -n "$(grep "0x402" "${steamcmdlog}" | tail -1)" ] || [ -n "$(grep "0x602" "${steamcmdlog}" | tail -1)" ]; then 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_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" 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 else
fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Unknown error occured" fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Unknown error occured"
echo -en "Please provide content log to LinuxGSM developers https://linuxgsm.com/steamcmd-error" 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 ""
echo -e "${moduleselfname} exiting with code: ${exitcode}" echo -e "${moduleselfname} exiting with code: ${exitcode}"
if [ -f "${rootdir}/dev-debug.log" ]; then 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
fi fi
} }
@ -35,7 +35,9 @@ elif [ "${exitcode}" != "0" ]; then
elif [ "${exitcode}" == "3" ]; then elif [ "${exitcode}" == "3" ]; then
fn_script_log_warn "${moduleselfname} exiting with code: ${exitcode}" fn_script_log_warn "${moduleselfname} exiting with code: ${exitcode}"
else else
# if exit code is not set assume error.
fn_script_log_warn "${moduleselfname} exiting with code: ${exitcode}" fn_script_log_warn "${moduleselfname} exiting with code: ${exitcode}"
exitcode=4
fi fi
fn_exit_dev_debug fn_exit_dev_debug
# remove trap. # remove trap.

14
lgsm/modules/core_functions.sh

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

4
lgsm/modules/core_legacy.sh

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

19
lgsm/modules/core_modules.sh

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

21
lgsm/modules/core_steamcmd.sh

@ -151,11 +151,6 @@ fn_update_steamcmd_localbuild() {
# Uses appmanifest to find local build. # Uses appmanifest to find local build.
localbuild=$(grep buildid "${appmanifestfile}" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f3) 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. # Checks if localbuild variable has been set.
if [ -z "${localbuild}" ]; then if [ -z "${localbuild}" ]; then
fn_print_fail "Checking local build: ${remotelocation}: missing local build info" 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 find "${HOME}" -type f -name "appinfo.vdf" -exec rm -f {} \; 2> /dev/null
fi 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 # 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:]') 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_update_steamcmd_compare() {
fn_print_dots "Checking for update: ${remotelocation}" fn_print_dots "Checking for update: ${remotelocation}"
# Update has been found or force update.
if [ "${localbuild}" != "${remotebuildversion}" ] || [ "${forceupdate}" == "1" ]; then if [ "${localbuild}" != "${remotebuildversion}" ] || [ "${forceupdate}" == "1" ]; then
# Create update lockfile.
date '+%s' > "${lockdir:?}/update.lock"
fn_print_ok_nl "Checking for update: ${remotelocation}" fn_print_ok_nl "Checking for update: ${remotelocation}"
echo -en "\n" echo -en "\n"
echo -e "Update available" echo -e "Update available"
@ -248,7 +253,7 @@ fn_update_steamcmd_compare() {
fn_firstcommand_reset fn_firstcommand_reset
fi fi
unset exitbypass unset exitbypass
date +%s > "${lockdir}/lastupdate.lock" date +%s > "${lockdir:?}/last-updated.lock"
alert="update" alert="update"
elif [ "${commandname}" == "CHECK-UPDATE" ]; then elif [ "${commandname}" == "CHECK-UPDATE" ]; then
alert="check-update" alert="check-update"
@ -352,8 +357,8 @@ fn_check_steamcmd_appmanifest() {
if [ "${engine}" == "goldsrc" ]; then if [ "${engine}" == "goldsrc" ]; then
shareddepotsexists=$(grep -c SharedDepots "${serverfiles}/steamapps/appmanifest_90.acf") shareddepotsexists=$(grep -c SharedDepots "${serverfiles}/steamapps/appmanifest_90.acf")
if [ ! -f "${serverfiles}/steamapps/appmanifest_90.acf" ] || [ "${shareddepotsexists}" == "0" ]; then if [ ! -f "${serverfiles}/steamapps/appmanifest_90.acf" ] || [ "${shareddepotsexists}" == "0" ]; then
fn_print_error_nl "SharedDepots missing from appmanifest_${appid}.acf" fn_print_error_nl "SharedDepots missing from appmanifest_90.acf"
fn_script_log_error "SharedDepots missing from appmanifest_${appid}.acf" fn_script_log_error "SharedDepots missing from appmanifest_90.acf"
fn_print_info_nl "Forcing update to correct issue" fn_print_info_nl "Forcing update to correct issue"
fn_script_log_info "Forcing update to correct issue" fn_script_log_info "Forcing update to correct issue"
if [ "${shortname}" == "ahl" ]; then if [ "${shortname}" == "ahl" ]; then

2
lgsm/modules/fix.sh

@ -52,7 +52,7 @@ fn_apply_fix() {
fi 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) apply_post_install_fix=(av kf kf2 lo ro samp ut2k4 ut ut3)
# validate registered fixes for safe development # validate registered fixes for safe development

2
lgsm/modules/fix_ark.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_arma3.sh

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

2
lgsm/modules/fix_armar.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" module_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_av.sh

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

2
lgsm/modules/fix_bo.sh

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

2
lgsm/modules/fix_bt.sh

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

2
lgsm/modules/fix_cmw.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

4
lgsm/modules/fix_csgo.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
@ -37,6 +37,6 @@ libgccc_so="${serverfiles}/bin/libgcc_s.so.1"
if [ -f "${libgccc_so}" ]; then if [ -f "${libgccc_so}" ]; then
fixname="libgcc_s.so.1 move away" fixname="libgcc_s.so.1 move away"
fn_fix_msg_start fn_fix_msg_start
mv -v "${libgccc_so}" "${libgccc_so}.bck" mv "${libgccc_so}" "${libgccc_so}.bak"
fn_fix_msg_end fn_fix_msg_end
fi fi

2
lgsm/modules/fix_dst.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_hw.sh

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

2
lgsm/modules/fix_ins.sh

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

2
lgsm/modules/fix_kf.sh

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

2
lgsm/modules/fix_kf2.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_lo.sh

@ -2,7 +2,7 @@
# LinuxGSM fix_lo.sh module # LinuxGSM fix_lo.sh module
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_mcb.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_mta.sh

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

2
lgsm/modules/fix_rust.sh

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

2
lgsm/modules/fix_rw.sh

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

2
lgsm/modules/fix_samp.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_sdtd.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_sfc.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_sof2.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_squad.sh

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

2
lgsm/modules/fix_st.sh

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

2
lgsm/modules/fix_steamcmd.sh

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

2
lgsm/modules/fix_terraria.sh

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

2
lgsm/modules/fix_tf2.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

15
lgsm/modules/fix_ts3.sh

@ -3,10 +3,23 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # Website: https://linuxgsm.com
# Description: Resolves various issues with Teamspeak 3. # Description: Resolves issues with Teamspeak 3.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" 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. # Fixes: makes libmariadb2 available #1924.
if [ ! -f "${serverfiles}/libmariadb.so.2" ]; then if [ ! -f "${serverfiles}/libmariadb.so.2" ]; then
fixname="libmariadb.so.2" fixname="libmariadb.so.2"

2
lgsm/modules/fix_unt.sh

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

2
lgsm/modules/fix_ut.sh

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

2
lgsm/modules/fix_ut2k4.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_ut3.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/fix_vh.sh

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

2
lgsm/modules/fix_wurm.sh

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

2
lgsm/modules/fix_zmr.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Contributors: http://linuxgsm.com/contrib # Contributors: http://linuxgsm.com/contrib
# Website: https://linuxgsm.com # 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]}")")" moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

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

Loading…
Cancel
Save