Browse Source

Merge branch 'develop' into feature/2294-distro-eol-check

pull/3723/head
Daniel Gibbs 4 years ago
parent
commit
c667f8b6a9
  1. 4
      .github/FUNDING.yml
  2. 2
      .github/ISSUE_TEMPLATE/new-server-request.md
  3. 98
      .github/labeler.yml
  4. 13
      .github/potential-duplicates.yml
  5. 4
      .github/release-drafter.yml
  6. 4
      .github/topissuebot.yml
  7. 2
      .github/workflows/create-release.yml
  8. 9
      .github/workflows/git-sync.yml
  9. 14
      .github/workflows/label-sponsors.yml
  10. 17
      .github/workflows/labeler.yml
  11. 4
      .github/workflows/lock.yml
  12. 31
      .github/workflows/potential-duplicates.yml
  13. 14
      .github/workflows/version-check.sh
  14. 23
      .github/workflows/version-check.yml
  15. 4
      .github/write-good.yml
  16. 44
      .travis.yml
  17. 152
      CODE_OF_CONDUCT.md
  18. 14
      CONTRIBUTING.md
  19. 6
      README.md
  20. 2
      lgsm/config-default/config-lgsm/arkserver/_default.cfg
  21. 8
      lgsm/config-default/config-lgsm/avserver/_default.cfg
  22. 180
      lgsm/config-default/config-lgsm/cdserver/_default.cfg
  23. 2
      lgsm/config-default/config-lgsm/colserver/_default.cfg
  24. 202
      lgsm/config-default/config-lgsm/dayzserver/_default.cfg
  25. 2
      lgsm/config-default/config-lgsm/dodrserver/_default.cfg
  26. 191
      lgsm/config-default/config-lgsm/loserver/_default.cfg
  27. 2
      lgsm/config-default/config-lgsm/pstbsserver/_default.cfg
  28. 186
      lgsm/config-default/config-lgsm/sfserver/_default.cfg
  29. 2
      lgsm/config-default/config-lgsm/squadserver/_default.cfg
  30. 2
      lgsm/config-default/config-lgsm/stnserver/_default.cfg
  31. 187
      lgsm/config-default/config-lgsm/tiserver/_default.cfg
  32. 2
      lgsm/config-default/config-lgsm/vhserver/_default.cfg
  33. 126
      lgsm/data/almalinux-8.csv
  34. 126
      lgsm/data/centos-7.csv
  35. 125
      lgsm/data/centos-8.csv
  36. 126
      lgsm/data/debian-10.csv
  37. 126
      lgsm/data/debian-11.csv
  38. 126
      lgsm/data/debian-9.csv
  39. 126
      lgsm/data/rhel-7.csv
  40. 126
      lgsm/data/rhel-8.csv
  41. 126
      lgsm/data/rocky-8.csv
  42. 5
      lgsm/data/serverlist.csv
  43. 126
      lgsm/data/ubuntu-16.04.csv
  44. 126
      lgsm/data/ubuntu-18.04.csv
  45. 126
      lgsm/data/ubuntu-20.04.csv
  46. 126
      lgsm/data/ubuntu-21.04.csv
  47. 124
      lgsm/data/ubuntu-21.10.csv
  48. 124
      lgsm/data/ubuntu-22.04.csv
  49. 10
      lgsm/functions/alert_mailgun.sh
  50. 3
      lgsm/functions/alert_telegram.sh
  51. 2
      lgsm/functions/check.sh
  52. 720
      lgsm/functions/check_deps.sh
  53. 33
      lgsm/functions/command_update_linuxgsm.sh
  54. 164
      lgsm/functions/core_dl.sh
  55. 2
      lgsm/functions/core_functions.sh
  56. 61
      lgsm/functions/fix_steamcmd.sh
  57. 2
      lgsm/functions/fix_vh.sh
  58. 201
      lgsm/functions/info_distro.sh
  59. 119
      lgsm/functions/info_game.sh
  60. 51
      lgsm/functions/info_messages.sh
  61. 23
      lgsm/functions/install_config.sh
  62. 1
      lgsm/functions/install_server_dir.sh
  63. 3
      lgsm/functions/install_server_files.sh
  64. 6
      lgsm/functions/mods_list.sh
  65. 3
      lgsm/functions/query_gsquery.py
  66. 5
      lgsm/functions/update_mta.sh
  67. 2
      linuxgsm.sh
  68. 2
      tests/tests_fctrserver.sh
  69. 2
      tests/tests_jc2server.sh
  70. 2
      tests/tests_mcserver.sh
  71. 2
      tests/tests_ts3server.sh

4
.github/FUNDING.yml

@ -1,7 +1,7 @@
# These are supported funding model platforms # These are supported funding model platforms
github: dgibbs64 # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] github: dgibbs64 # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username patreon: dgibbs # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl
liberapay: # Replace with a single Liberapay username liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username otechie: # Replace with a single Otechie username
custom: [paypal.me/dgibbs64] # Replace with a single custom sponsorship URL custom: # Replace with a single custom sponsorship URL

2
.github/ISSUE_TEMPLATE/new-server-request.md

@ -7,7 +7,7 @@ assignees: ''
--- ---
## What game server would you like adding? ## What game server would you like to add?
[game server] [game server]

98
.github/labeler.yml

@ -0,0 +1,98 @@
# Add/remove 'critical' label if issue contains the words 'urgent' or 'critical'
# Type
"type: game server request":
- '/(Server Request)/i'
"type: bug":
- '/(bug)/i'
"type: feature request":
- '/(feature)/i'
# Commands
"command: backup":
- '/(backup)/i'
"command: console":
- '/(console|tmux)/i'
"command: debug":
- '/(debug)/i'
"command: details":
- '/(details)/i'
"command: fast-dl":
- '/(fast-dl|fastdl)/i'
"command: install":
- '/(install)/i'
"command: mods":
- '/(mods)/i'
"command: monitor":
- '/(monitor)/i'
"command: post-details":
- '/(post-details)/i'
"command: restart":
- '/(restart)/i'
"command: send":
- '/(send)/i'
"command: skeleton":
- '/(skeleton)/i'
"command: start":
- '/(start)/i'
"command: stop":
- '/(stop)/i'
"command: update-lgsm":
- '/(update-lgsm)/i'
"command: update":
- '/(update)/i'
"command: validate":
- '/(validate)/i'
"command: wipe":
- '/(wipe)/i'
# Distros
"distro: AlmaLinux":
- '/(Alma)/i'
"distro: Arch Linux":
- '/(Arch)/i'
"distro: CentOS":
- '/(CentOS)/i'
"distro: Debian":
- '/(Debian)/i'
"distro: Fedora":
- '/(Fedora)/i'
"distro: openSUSE":
- '/(openSUSE|suse)/i'
"distro: Rocky Linux":
- '/(Rocky)/i'
"distro: Slackware":
- '/(Slackware)/i'
"distro: Ubuntu":
- '/(Ubuntu)/i'
# Info
"info: alerts":
- '/(alert)/i'
"info: dependency":
- '/(dependency|deps)/i'
"info: docker":
- '/(docker)/i'
"info: docs":
- '/(documentation|docs)/i'
"info: email":
- '/(postfix|sendmail|exim|smtp)/i'
"info: query":
- '/(gamedig|gsquery)/i'
"info: steamcmd":
- '/(steamcmd)/i'
"info: systemd":
- '/(systemd)/i'
"info: tmux":
- '/(tmux)/i'
"info: website":
- '/(website)/i'
# Games
"game: Ark: Survival Evolved":
- '/(Ark: Survival Evolved|Ark)/i'
"game: ARMA 3":
- '/(ARMA 3)/i'
"game: Assetto Corsa":
- '/(Assetto Corsa)/i'
"game: Avorion":
- '/(Avorion)/i'
"game: Ballistic Overkill":
- '/(Ballistic Overkill)/i'
"game: Barotrauma":
- '/(Barotrauma)/i'

13
.github/potential-duplicates.yml

@ -1,13 +0,0 @@
# Label name and color to set, when potential duplicates are detected
issueLabel: "duplicate"
labelColor: 579e01
# If similarity is higher than this threshold, issue will be marked as duplicate
threshold: 0.60
# Comment to post when potential duplicates are detected
referenceComment: >
Potential duplicates:
{{#issues}}
- [#{{ number }}] {{ title }} ({{ accuracy }}%)
{{/issues}}

4
.github/release-drafter.yml

@ -1,4 +0,0 @@
template: |
## What’s Changed
$CHANGES

4
.github/topissuebot.yml

@ -1,4 +0,0 @@
# Configuration for top-issue-bot
labelName: ":thumbsup: Top Issue!"
labelColor: "f442c2"
numberOfIssuesToLabel: 5

2
.github/workflows/create-release.yml

@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
# Drafts your next Release notes as Pull Requests are merged into "master" # Drafts your next Release notes as Pull Requests are merged into "master"
- uses: release-drafter/release-drafter@v5 - uses: release-drafter/release-drafter@v5.15.0
with: with:
config-name: release-drafter.yml config-name: release-drafter.yml
env: env:

9
.github/workflows/git-sync.yml

@ -5,18 +5,17 @@ on:
push: push:
branches: branches:
- master - master
- 'develop' - develop
jobs: jobs:
repo-sync: GitHub-to-Bitbucket:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: webfactory/ssh-agent - name: webfactory/ssh-agent@v0.5.3
uses: webfactory/[email protected] uses: webfactory/[email protected]
with: with:
ssh-private-key: ${{ secrets.BITBUCKET_SECRET }} ssh-private-key: ${{ secrets.BITBUCKET_SECRET }}
- name: repo-sync - name: wei/[email protected]
uses: wei/[email protected] uses: wei/[email protected]
with: with:
ssh_private_key: ${{ secrets.BITBUCKET_SECRET }} ssh_private_key: ${{ secrets.BITBUCKET_SECRET }}

14
.github/workflows/label-sponsors.yml

@ -0,0 +1,14 @@
name: Label sponsors
on:
pull_request:
types: [opened]
issues:
types: [opened]
jobs:
build:
name: is-sponsor-label
runs-on: ubuntu-latest
steps:
- uses: JasonEtco/is-sponsor-label-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

17
.github/workflows/labeler.yml

@ -1,16 +1,15 @@
name: "Set Issue Label and Assignee" name: "Issue Labeler"
on: on:
issues: issues:
types: [opened, edited] types: [opened, edited]
pull_request:
types: [opened, edited]
jobs: jobs:
test: triage:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: Naturalclar/[email protected] - uses: github/[email protected]
with: with:
title-or-body: "both" repo-token: "${{ secrets.GITHUB_TOKEN }}"
parameters: '[ {"keywords": ["Server Request"], "labels": ["type: game server request"]}, {"keywords": ["backup"], "labels": ["command: backup"]}, {"keywords": ["console"], "labels": ["command: console"]}, {"keywords": ["command: debug"], "labels": ["command: debug"]}, {"keywords": ["command: details"], "labels": ["command: details"]}, {"keywords": ["fast-dl"], "labels": ["command: fast-dl"]}, {"keywords": ["command: install"], "labels": ["command: install"]}, {"keywords": ["command: mods"], "labels": ["command: mods"]}, {"keywords": ["monitor"], "labels": ["command: monitor"]}, {"keywords": ["command: start"], "labels": ["command: start"]}, {"keywords": ["command: stop"], "labels": ["command: stop"]}, {"keywords": ["command: update-lgsm"], "labels": ["command: update-lgsm"]}, {"keywords": ["update"], "labels": ["command: update"]}, {"keywords": ["validate"], "labels": ["command: validate"]}, {"keywords": ["wipe"], "labels": ["command: wipe"]}, {"keywords": ["CentOS"], "labels": ["distro: CentOS"]}, {"keywords": ["Debian"], "labels": ["distro: Debian"]}, {"keywords": ["Fedora"], "labels": ["distro: Fedora"]}, {"keywords": ["Ubuntu"], "labels": ["distro: Ubuntu"]}, {"keywords": ["alert"], "labels": ["info: alerts"]}, {"keywords": ["dependency"], "labels": ["info: dependency"]}, {"keywords": ["docker"], "labels": ["info: docker"]}, {"keywords": ["steamcmd"], "labels": ["info: steamcmd"]}, {"keywords": ["systemd"], "labels": ["info: systemd"]}, {"keywords": ["tmux"], "labels": ["info: tmux"]}, {"keywords": ["bug"], "labels": ["type: bug"]}, {"keywords": ["feature"], "labels": ["type: feature request"]}, {"keywords": ["refactor"], "labels": ["type: refactor"]}, {"keywords": ["Ark"], "labels": ["game: Ark: Survival Evolved"]}, {"keywords": ["Arma 3"], "labels": ["game: Arma 3"]}, {"keywords": ["Counter-Strike: Global Offensive"], "labels": ["game: Counter-Strike: Global Offensive"]}, {"keywords": ["Minecraft"], "labels": ["game: Minecraft"]}, {"keywords": ["Rust"], "labels": ["game: Rust"]}, {"keywords": ["Valheim"], "labels": ["game: Valheim"]}, {"keywords": ["7 Days to Die"], "labels": ["game: 7 Days to Die"]}]' configuration-path: .github/labeler.yml
github-token: "${{ secrets.GITHUB_TOKEN }}" not-before:
enable-versioned-regex: 0

4
.github/workflows/lock.yml

@ -2,13 +2,13 @@ name: 'Lock Threads'
on: on:
schedule: schedule:
- cron: '0 0 * * *' - cron: '0 0 * * *'
jobs: jobs:
lock: lock:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: dessant/lock-threads@v2.0.3 - uses: dessant/lock-threads@v2.1.2
with: with:
github-token: ${{ secrets.GITHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }}
issue-lock-comment: > issue-lock-comment: >

31
.github/workflows/potential-duplicates.yml

@ -0,0 +1,31 @@
name: Potential Duplicates
on:
issues:
types: [opened]
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: wow-actions/potential-duplicates@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Issue title filter work with anymatch https://www.npmjs.com/package/anymatch.
# Any matched issue will stop detection immediately.
# You can specify multi filters in each line.
filter: ''
# Exclude keywords in title before detecting.
exclude: ''
# Label to set, when potential duplicates are detected.
label: potential-duplicate
# Get issues with state to compare. Supported state: 'all', 'closed', 'open'.
state: all
# If similarity is higher than this threshold([0,1]), issue will be marked as duplicate.
threshold: 0.6
# Reactions to be add to comment when potential duplicates are detected.
# Available reactions: "-1", "+1", "confused", "laugh", "heart", "hooray", "rocket", "eyes"
#reactions: 'eyes, confused'
# Comment to post when potential duplicates are detected.
comment: >
Potential duplicates: {{#issues}}
- [#{{ number }}] {{ title }} ({{ accuracy }}%)
{{/issues}}

14
.github/workflows/version-check.sh

@ -0,0 +1,14 @@
version=$(grep "version=" linuxgsm.sh | sed -e 's/version//g'| tr -d '="')
modulesversion=$(grep "modulesversion=" lgsm/functions/core_functions.sh | sed -e 's/modulesversion//g'| tr -d '="')
if [ "${version}" != "${modulesversion}" ]; then
echo "Error! LinuxGSM version mismatch"
echo "Version: ${version}"
echo "Modules Version: ${modulesversion}"
exit 1
else
echo "Success! LinuxGSM version match"
echo "Version: ${version}"
echo "Modules Version: ${modulesversion}"
exit
fi

23
.github/workflows/version-check.yml

@ -0,0 +1,23 @@
# This is a basic workflow to help you get started with Actions
name: Version Check
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on: push
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
Version-Check:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Runs a single command using the runners shell
- name: compare versions
run: chmod +x .github/workflows/version-check.sh; .github/workflows/version-check.sh

4
.github/write-good.yml

@ -1,4 +0,0 @@
# .github/write-good.yml
writeGood: true
alex: true
spellchecker: true

44
.travis.yml

@ -1,44 +0,0 @@
language: node_js
dist: bionic
node_js:
- "stable"
env:
global:
secure: VsS98cwJ5X/Ev3HEm7KEOPftYay+7jNTHepTS7d+gQNHcDR1UYKTmqlQNSIoUC52Ejs1cHq43jOfle4330zDPOYI0v5BMri6/iZKpmMxAw6KWNiUgSkziTP2kHC4NRLwEoU2WQTI3JZQjrBEfsPmD81+yR/eWXV3rph+YcSOxao=
before_script:
- curl -L "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/shunit2/shunit2-2.1.6.tgz" | tar zx
install:
- npm install gamedig
addons:
apt:
packages:
- mailutils
- postfix
- jq
- lib32gcc1
- lib32stdc++6
- shellcheck
- libcurl4-openssl-dev
- libdw-dev
- cmake
jobs:
include:
- stage: "Jobs"
name: "code coverage"
script: bash tests/tests_kcov.sh; kcov --bash-method=DEBUG coverage tests/tests_mcserver.sh
- script: bash tests/tests_mcserver.sh
name: "Minecraft"
- script: bash tests/tests_jc2server.sh
name: "Just Cause 2"
- script: bash tests/tests_fctrserver.sh
name: "Factorio"
- script: bash tests/tests_ts3server.sh
name: "Teamspeak 3"
- script: bash tests/tests_defaultcfg/tests_defaultcfg.sh
name: "_default.cfg checks"
after_success:
- bash <(curl -Ls https://coverage.codacy.com/get.sh)

152
CODE_OF_CONDUCT.md

@ -1,73 +1,133 @@
# Contributor Covenant Code of Conduct # Contributor Covenant Code of Conduct
## Our Pledge ## Our Pledge
In the interest of fostering an open and welcoming environment, we as We as members, contributors, and leaders pledge to make participation in our
contributors and maintainers pledge to making participation in our project and community a harassment-free experience for everyone, regardless of age, body
our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender
size, disability, ethnicity, sex characteristics, gender identity and expression, identity and expression, level of experience, education, socio-economic status,
level of experience, education, socio-economic status, nationality, personal nationality, personal appearance, race, caste, color, religion, or sexual identity
appearance, race, religion, or sexual identity and orientation. and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards ## Our Standards
Examples of behavior that contributes to creating a positive environment Examples of behavior that contributes to a positive environment for our
include: community include:
* Using welcoming and inclusive language * Demonstrating empathy and kindness toward other people
* Being respectful of differing viewpoints and experiences * Being respectful of differing opinions, viewpoints, and experiences
* Gracefully accepting constructive criticism * Giving and gracefully accepting constructive feedback
* Focusing on what is best for the community * Accepting responsibility and apologizing to those affected by our mistakes,
* Showing empathy towards other community members and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior by participants include: Examples of unacceptable behavior include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances * The use of sexualized language or imagery, and sexual attention or
* Trolling, insulting/derogatory comments, and personal or political attacks advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment * Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission * Publishing others' private information, such as a physical or email
* Other conduct which could reasonably be considered inappropriate in a professional setting address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities ## Enforcement Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable Community leaders are responsible for clarifying and enforcing our standards of
behavior and are expected to take appropriate and fair corrective action in acceptable behavior and will take appropriate and fair corrective action in
response to any instances of unacceptable behavior. response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Project maintainers have the right and responsibility to remove, edit, or Community leaders have the right and responsibility to remove, edit, or reject
reject comments, commits, code, wiki edits, issues, and other contributions comments, commits, code, wiki edits, issues, and other contributions that are
that are not aligned to this Code of Conduct, or to ban temporarily or not aligned to this Code of Conduct, and will communicate reasons for moderation
permanently any contributor for other behaviors that they deem inappropriate, decisions when appropriate.
threatening, offensive, or harmful.
## Scope ## Scope
This Code of Conduct applies both within project spaces and in public spaces This Code of Conduct applies within all community spaces, and also applies when
when an individual is representing the project or its community. Examples of an individual is officially representing the community in public spaces.
representing a project or community include using an official project e-mail Examples of representing our community include using an official e-mail address,
address, posting via an official social media account, or acting as an appointed posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be representative at an online or offline event.
further defined and clarified by project maintainers.
## Enforcement ## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [email protected]. All reported to the community leaders responsible for enforcement at
complaints will be reviewed and investigated and will result in a response that [INSERT CONTACT METHOD].
is deemed necessary and appropriate to the circumstances. The project team is All complaints will be reviewed and investigated promptly and fairly.
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately. All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
Project maintainers who do not follow or enforce the Code of Conduct in good **Consequence**: A warning with consequences for continued behavior. No
faith may face temporary or permanent repercussions as determined by other interaction with the people involved, including unsolicited interaction with
members of the project's leadership. those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution ## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, This Code of Conduct is adapted from the [Contributor Covenant][homepage],
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
[homepage]: https://www.contributor-covenant.org Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq [https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

14
CONTRIBUTING.md

@ -35,7 +35,7 @@ The following is a set of guidelines for contributing to LinuxGSM, which are hos
## Code of Conduct ## Code of Conduct
This project and everyone participating in it are governed by the [LinuxGSM Code of Conduct](https://github.com/GameServerManagers/linuxgsm/blob/master/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behaviour to [[email protected]](mailto:[email protected]). This project and everyone participating in it is governed by the [LinuxGSM Code of Conduct](https://github.com/GameServerManagers/linuxgsm/blob/master/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behaviour to [[email protected]](mailto:[email protected]).
## 🎉 Bug/Enhancement Contributions 🐛 ## 🎉 Bug/Enhancement Contributions 🐛
@ -87,7 +87,7 @@ Features are tracked as [GitHub issues](https://guides.github.com/features/issue
This section guides you through submitting a game server request for LinuxGSM, Following these guidelines help maintainers and the community understand your game server request 📝. This section guides you through submitting a game server request for LinuxGSM, Following these guidelines help maintainers and the community understand your game server request 📝.
#### Before Submitting a Game Server Request #### Before Submitting a Game Server Request
* **Check for existing** [**game server requests**](https://github.com/GameServerManagers/LinuxGSM/labels/type%3A%20game%20server%20request) to see if the new game server has already been suggested. If it has **and if the new game server is still open**, give it a thumbs. * **Check for existing** [**game server requests**](https://github.com/GameServerManagers/LinuxGSM/labels/type%3A%20game%20server%20request) to see if the new game server has already been suggested. If it has **and if the new game server is still open**, give it a thumbs up.
* **Check the game server is supported on Linux**, this does not include Wine servers which we do not support. * **Check the game server is supported on Linux**, this does not include Wine servers which we do not support.
#### How Do I Submit A (Good) Game Server Request? #### How Do I Submit A (Good) Game Server Request?
* The title should be as follows: **[Server Request] Game Name** * The title should be as follows: **[Server Request] Game Name**
@ -98,9 +98,9 @@ This section guides you through submitting a game server request for LinuxGSM, F
LinuxGSM is a management script that acts as a wrapper around game servers. These game servers are developed by different game developers such as Valve, Epic and Facepunch to name a few. LinuxGSM is a management script that acts as a wrapper around game servers. These game servers are developed by different game developers such as Valve, Epic and Facepunch to name a few.
LinuxGSM has no control over the development and limited knowledge of issues directly relating to the game servers themselves. The same also applies for any mods, add-ons, maps etc. LinuxGSM has no control over the development and limited knowledge of issues directly relating to the game servers themselves. The same also applies to any mods, add-ons, maps etc.
If there is an issue with a specific game server or mod the best action may be to contact the game/mod developers on there support forums. If it is unclear some community members should be able to help. If there is an issue with a specific game server or mod the best action may be to contact the game/mod developers on their support forums. If it is unclear some community members should be able to help.
A [list](https://docs.linuxgsm.com/support/game-server) of known game developer forums is available on the [LinuxGSM docs](https://docs.linuxgsm.com/support/game-server). A [list](https://docs.linuxgsm.com/support/game-server) of known game developer forums is available on the [LinuxGSM docs](https://docs.linuxgsm.com/support/game-server).
@ -157,7 +157,7 @@ Below is an example of the subject line for a pull request:
### Testing ### Testing
#### Pull Request Status Checks #### Pull Request Status Checks
When a Pull Request is submitted, a series of status check tests are conducted. These tests will asses the code quality, complete CI tests etc. To get your PR merged these status checks must pass. When a Pull Request is submitted, a series of status check tests are conducted. These tests will assess the code quality, complete CI tests etc. To get your PR merged these status checks must pass.
#### Test Environment #### Test Environment
It is recommended that you have a testing environment available to test your code during development. To test your own code you must change some variables within the `linuxgsm.sh` file. This will force the use of your own code branch. It is recommended that you have a testing environment available to test your code during development. To test your own code you must change some variables within the `linuxgsm.sh` file. This will force the use of your own code branch.
@ -197,10 +197,10 @@ This section lists the labels we use to help us track and manage issues and pull
[GitHub search](https://help.github.com/articles/searching-issues/) makes it easy to use labels for finding groups of issues or pull requests you're interested in. There are several categories of labels available: [GitHub search](https://help.github.com/articles/searching-issues/) makes it easy to use labels for finding groups of issues or pull requests you're interested in. There are several categories of labels available:
**command** Labels **command** Labels
Highlights the LinuxGSM command the Issue/PR relates too. Highlights the LinuxGSM command the Issue/PR relates to.
**info** Labels **info** Labels
Labels to help pinpoint what the issue or PR relates too. Labels to help pinpoint what the issue or PR relates to.
variants: variants:
* _distro_ * _distro_

6
README.md

@ -35,7 +35,7 @@ Other distros are likely to work but are not fully tested.
## :wrench: Requirements ## :wrench: Requirements
Each game server has its own specific dependency requirements. Visit a specific game server installation page on the [LinuxGSM](https://linuxgsm.com) website to check dependency requirements for the game server you want to install. Each game server has specific dependency requirements. Visit a specific game server installation page on the [LinuxGSM](https://linuxgsm.com) website to check dependency requirements for the game server you want to install.
## :blue_book: Documentation ## :blue_book: Documentation
@ -43,11 +43,11 @@ Documentation is found at [linuxgsm.com](https://linuxgsm.com) and [docs.linuxgs
## :question: Support ## :question: Support
There are a 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 to 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 has previously sent a donation. 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

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

@ -13,7 +13,7 @@ ip="0.0.0.0"
port="7777" port="7777"
queryport="27015" queryport="27015"
rconport="27020" rconport="27020"
# Default Map: TheIsland, Ragnarok, CrystalIsles, Aberration_P, ScorchedEarth_P, TheCenter, Extinction, Valguero_P, Genesis # Default Map: TheIsland, Ragnarok, CrystalIsles, Aberration_P, ScorchedEarth_P, TheCenter, Extinction, Valguero_P, Genesis, Gen2
defaultmap="TheIsland" defaultmap="TheIsland"
altsavedirectoryname="${defaultmap}" altsavedirectoryname="${defaultmap}"
maxplayers="70" maxplayers="70"

8
lgsm/config-default/config-lgsm/avserver/_default.cfg

@ -10,14 +10,8 @@
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters ## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
# https://steamidfinder.com
adminsteamid=""
if [ -n "${adminsteamid}" ]; then
admincmd="--admin ${adminsteamid}"
fi
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="--galaxy-name ${selfname} --ip ${ip} --datapath ${avdatapath} ${admincmd}" startparameters="--galaxy-name ${selfname} --ip ${ip} --datapath ${avdatapath}"
#### LinuxGSM Settings #### #### LinuxGSM Settings ####

180
lgsm/config-default/config-lgsm/cdserver/_default.cfg

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

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

@ -116,7 +116,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

202
lgsm/config-default/config-lgsm/dayzserver/_default.cfg

@ -0,0 +1,202 @@
##################################
######## Default Settings ########
##################################
# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN!
# Copy settings from here and use them in either:
# common.cfg - applies settings to every instance.
# [instance].cfg - applies settings to a specific instance.
#### Game Server Settings ####
## SteamCMD Login | https://docs.linuxgsm.com/steamcmd#steamcmd-login
# steamuser="username"
# steampass='password'
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
port="2302"
## DayZ Modules
# Add mods with relative paths:
# mods/@cf
# To load the "Community framework for DayZ SA" module found in the
# directory serverfiles/mods/@cf. Load several mods as:
# mods="mods/@cf\;mods/@dayz-expansion\;mods/@deerisle"
mods=""
## Server-side Mods
servermods=""
## Path to BattlEye
# Leave empty for default
bepath=""
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="-ip=${ip} -port=${port} -config=${servercfgfullpath} -mod=${mods} -servermod=${servermods} -bepath=${bepath} -limitFPS=60 -dologs -adminlog -freezeCheck"
#### LinuxGSM Settings ####
## LinuxGSM Stats
# Send useful stats to LinuxGSM developers.
# https://docs.linuxgsm.com/configuration/linuxgsm-stats
# (on|off)
stats="off"
## Notification Alerts
# (on|off)
# Display IP | https://docs.linuxgsm.com/alerts#display-ip
displayip=""
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
discordalert="off"
discordwebhook="webhook"
# Email Alerts | https://docs.linuxgsm.com/alerts/email
emailalert="off"
email="[email protected]"
emailfrom=""
# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify
gotifyalert="off"
gotifytoken="token"
gotifywebhook="webhook"
# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
iftttalert="off"
ifttttoken="accesstoken"
iftttevent="linuxgsm_alert"
# Mailgun Email Alerts | https://docs.linuxgsm.com/alerts/mailgun
mailgunalert="off"
mailgunapiregion="us"
mailguntoken="accesstoken"
mailgundomain="example.com"
mailgunemailfrom="[email protected]"
mailgunemail="[email protected]"
# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
pushbulletalert="off"
pushbullettoken="accesstoken"
channeltag=""
# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
pushoveralert="off"
pushovertoken="accesstoken"
pushoveruserkey="userkey"
# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat
rocketchatalert="off"
rocketchatwebhook="webhook"
rocketchattoken=""
# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
slackalert="off"
slackwebhook="webhook"
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help".
telegramapi="api.telegram.org"
telegramalert="off"
telegramtoken="accesstoken"
telegramchatid=""
curlcustomstring=""
## Updating | https://docs.linuxgsm.com/commands/update
updateonstart="off"
## Backup | https://docs.linuxgsm.com/commands/backup
maxbackups="4"
maxbackupdays="30"
stoponbackup="on"
## Logging | https://docs.linuxgsm.com/features/logging
consolelogging="on"
logdays="7"
## Monitor | https://docs.linuxgsm.com/commands/monitor
# Query delay time
querydelay="5"
## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors
ansi="on"
#### Advanced Settings ####
## Message Display Time | https://docs.linuxgsm.com/features/message-display-time
sleeptime="0.5"
## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd
# Server appid
appid="1042420"
steamcmdforcewindows="no"
# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
branch=""
betapassword=""
# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
steammaster="false"
## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill
# 2: CTRL+c
# 3: quit
# 4: quit 120s
# 5: stop
# 6: q
# 7: exit
# 8: 7 Days to Die
# 9: GoldSrc
# 10: Avorion
# 11: end
stopmode="2"
## Query mode
# 1: session only
# 2: gamedig (gsquery fallback)
# 3: gamedig
# 4: gsquery
# 5: tcp
querymode="2"
querytype="protocol-valve"
## Console type
consoleverbose="yes"
consoleinteract="no"
## Game Server Details
# Do not edit
gamename="DayZ"
engine="enfusion"
glibc="2.27"
#### Directories ####
# Edit with care
## Game Server Directories
systemdir="${serverfiles}"
executabledir="${serverfiles}"
executable="./DayZServer"
servercfgdir="${systemdir}/cfg"
servercfg="${selfname}.server.cfg"
servercfgdefault="server.cfg"
servercfgfullpath="${servercfgdir}/${servercfg}"
## Backup Directory
backupdir="${lgsmdir}/backup"
## Logging Directories
logdir="${rootdir}/log"
lgsmlogdir="${logdir}/script"
consolelogdir="${logdir}/console"
lgsmlog="${lgsmlogdir}/${selfname}-script.log"
consolelog="${consolelogdir}/${selfname}-console.log"
alertlog="${lgsmlogdir}/${selfname}-alert.log"
postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log"
## Logs Naming
lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"

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

@ -121,7 +121,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

191
lgsm/config-default/config-lgsm/loserver/_default.cfg

@ -0,0 +1,191 @@
##################################
######## Default Settings ########
##################################
# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN!
# Copy settings from here and use them in either:
# common.cfg - applies settings to every instance.
# [instance].cfg - applies settings to a specific instance.
#### Game Server Settings ####
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
## https://docs.linuxgsm.com/game-servers/last-oasis
servername="${selfname}"
ip="0.0.0.0"
port="7777"
queryport="27015"
customerkey=""
providerkey=""
slots="100"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
# For specific IP use: -OverrideConnectionAddress=${ip}
startparameters="-log -force_steamclient_link -messaging -NoLiveServer -EnableCheats -backendapiurloverride="backend.last-oasis.com" -identifier=${servername} -port=${port} -CustomerKey=${customerkey} -ProviderKey=${providerkey} -slots=${slots} -QueryPort=${queryport}"
#### LinuxGSM Settings ####
## LinuxGSM Stats
# Send useful stats to LinuxGSM developers.
# https://docs.linuxgsm.com/configuration/linuxgsm-stats
# (on|off)
stats="off"
## Notification Alerts
# (on|off)
# Display IP | https://docs.linuxgsm.com/alerts#display-ip
displayip=""
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
discordalert="off"
discordwebhook="webhook"
# Email Alerts | https://docs.linuxgsm.com/alerts/email
emailalert="off"
email="[email protected]"
emailfrom=""
# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify
gotifyalert="off"
gotifytoken="token"
gotifywebhook="webhook"
# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
iftttalert="off"
ifttttoken="accesstoken"
iftttevent="linuxgsm_alert"
# Mailgun Email Alerts | https://docs.linuxgsm.com/alerts/mailgun
mailgunalert="off"
mailgunapiregion="us"
mailguntoken="accesstoken"
mailgundomain="example.com"
mailgunemailfrom="[email protected]"
mailgunemail="[email protected]"
# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
pushbulletalert="off"
pushbullettoken="accesstoken"
channeltag=""
# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
pushoveralert="off"
pushovertoken="accesstoken"
pushoveruserkey="userkey"
# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat
rocketchatalert="off"
rocketchatwebhook="webhook"
rocketchattoken=""
# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
slackalert="off"
slackwebhook="webhook"
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help".
telegramapi="api.telegram.org"
telegramalert="off"
telegramtoken="accesstoken"
telegramchatid=""
curlcustomstring=""
## Updating | https://docs.linuxgsm.com/commands/update
updateonstart="off"
## Backup | https://docs.linuxgsm.com/commands/backup
maxbackups="4"
maxbackupdays="30"
stoponbackup="on"
## Logging | https://docs.linuxgsm.com/features/logging
consolelogging="on"
logdays="7"
## Monitor | https://docs.linuxgsm.com/commands/monitor
# Query delay time
querydelay="1"
## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors
ansi="on"
#### Advanced Settings ####
## Message Display Time | https://docs.linuxgsm.com/features/message-display-time
sleeptime="0.5"
## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd
# Server appid
appid="920720"
steamcmdforcewindows="no"
# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
branch=""
betapassword=""
# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
steammaster="false"
## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill
# 2: CTRL+c
# 3: quit
# 4: quit 120s
# 5: stop
# 6: q
# 7: exit
# 8: 7 Days to Die
# 9: GoldSrc
# 10: Avorion
# 11: end
stopmode="2"
## Query mode
# 1: session only
# 2: gamedig (gsquery fallback)
# 3: gamedig
# 4: gsquery
# 5: tcp
querymode="1"
querytype=""
## Console type
consoleverbose="yes"
consoleinteract="no"
## Game Server Details
# Do not edit
gamename="Last Oasis"
engine="unreal4"
glibc="2.17"
#### Directories ####
# Edit with care
## Game Server Directories
systemdir="${serverfiles}/Mist"
executabledir="${systemdir}/Binaries/Linux"
executable="./MistServer-Linux-Shipping"
servercfgdir="${systemdir}/Saved/Config/LinuxServer"
servercfg="Game.ini"
servercfgdefault="Game.ini"
servercfgfullpath="${servercfgdir}/${servercfg}"
## Backup Directory
backupdir="${lgsmdir}/backup"
## Logging Directories
logdir="${rootdir}/log"
gamelogdir="${systemdir}/Saved/Logs"
lgsmlogdir="${logdir}/script"
consolelogdir="${logdir}/console"
lgsmlog="${lgsmlogdir}/${selfname}-script.log"
consolelog="${consolelogdir}/${selfname}-console.log"
alertlog="${lgsmlogdir}/${selfname}-alert.log"
postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log"
## Logs Naming
lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"

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

@ -124,7 +124,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

186
lgsm/config-default/config-lgsm/sfserver/_default.cfg

@ -0,0 +1,186 @@
##################################
######## Default Settings ########
##################################
# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN!
# Copy settings from here and use them in either:
# common.cfg - applies settings to every instance.
# [instance].cfg - applies settings to a specific instance.
#### Game Server Settings ####
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
queryport="15777"
beaconport="15000"
port="7777"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="FactoryGame -multihome=${ip} -ServerQueryPort=${queryport} -BeaconPort=${beaconport} -Port=${port} -log -unattended"
#### LinuxGSM Settings ####
## LinuxGSM Stats
# Send useful stats to LinuxGSM developers.
# https://docs.linuxgsm.com/configuration/linuxgsm-stats
# (on|off)
stats="off"
## Notification Alerts
# (on|off)
# Display IP | https://docs.linuxgsm.com/alerts#display-ip
displayip=""
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
discordalert="off"
discordwebhook="webhook"
# Email Alerts | https://docs.linuxgsm.com/alerts/email
emailalert="off"
email="[email protected]"
emailfrom=""
# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify
gotifyalert="off"
gotifytoken="token"
gotifywebhook="webhook"
# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
iftttalert="off"
ifttttoken="accesstoken"
iftttevent="linuxgsm_alert"
# Mailgun Email Alerts | https://docs.linuxgsm.com/alerts/mailgun
mailgunalert="off"
mailgunapiregion="us"
mailguntoken="accesstoken"
mailgundomain="example.com"
mailgunemailfrom="[email protected]"
mailgunemail="[email protected]"
# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
pushbulletalert="off"
pushbullettoken="accesstoken"
channeltag=""
# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
pushoveralert="off"
pushovertoken="accesstoken"
pushoveruserkey="userkey"
# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat
rocketchatalert="off"
rocketchatwebhook="webhook"
rocketchattoken=""
# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
slackalert="off"
slackwebhook="webhook"
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help".
telegramapi="api.telegram.org"
telegramalert="off"
telegramtoken="accesstoken"
telegramchatid=""
curlcustomstring=""
## Updating | https://docs.linuxgsm.com/commands/update
updateonstart="off"
## Backup | https://docs.linuxgsm.com/commands/backup
maxbackups="4"
maxbackupdays="30"
stoponbackup="on"
## Logging | https://docs.linuxgsm.com/features/logging
consolelogging="on"
logdays="7"
## Monitor | https://docs.linuxgsm.com/commands/monitor
# Query delay time
querydelay="1"
## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors
ansi="on"
#### Advanced Settings ####
## Message Display Time | https://docs.linuxgsm.com/features/message-display-time
sleeptime="0.5"
## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd
# Server appid
appid="1690800"
steamcmdforcewindows="no"
# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
branch=""
betapassword=""
# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
steammaster="false"
## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill
# 2: CTRL+c
# 3: quit
# 4: quit 120s
# 5: stop
# 6: q
# 7: exit
# 8: 7 Days to Die
# 9: GoldSrc
# 10: Avorion
# 11: end
stopmode="2"
## Query mode
# 1: session only
# 2: gamedig (gsquery fallback)
# 3: gamedig
# 4: gsquery
# 5: tcp
querymode="1"
querytype=""
## Console type
consoleverbose="yes"
consoleinteract="no"
## Game Server Details
# Do not edit
gamename="Satisfactory"
engine="unreal4"
glibc="2.17"
#### Directories ####
# Edit with care
## Game Server Directories
systemdir="${serverfiles}/FactoryGame"
executabledir="${serverfiles}/Engine/Binaries/Linux"
executable="./UE4Server-Linux-Shipping"
servercfgdir="${systemdir}/Saved/Config/LinuxServer"
servercfg="GameUserSettings.ini"
servercfgdefault="GameUserSettings.ini"
servercfgfullpath="${servercfgdir}/${servercfg}"
## Backup Directory
backupdir="${lgsmdir}/backup"
## Logging Directories
logdir="${rootdir}/log"
gamelogdir="${systemdir}/Saved/Logs"
lgsmlogdir="${logdir}/script"
consolelogdir="${logdir}/console"
lgsmlog="${lgsmlogdir}/${selfname}-script.log"
consolelog="${consolelogdir}/${selfname}-console.log"
alertlog="${lgsmlogdir}/${selfname}-alert.log"
postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log"
## Logs Naming
lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"

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

@ -120,7 +120,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/stnserver/_default.cfg

@ -119,7 +119,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

187
lgsm/config-default/config-lgsm/tiserver/_default.cfg

@ -0,0 +1,187 @@
##################################
######## Default Settings ########
##################################
# DO NOT EDIT, ANY CHANGES WILL BE OVERWRITTEN!
# Copy settings from here and use them in either:
# common.cfg - applies settings to every instance.
# [instance].cfg - applies settings to a specific instance.
#### Game Server Settings ####
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
port="7777"
queryport="27015"
# Possible maps, see: https://isle.fandom.com/wiki/The_Isle_Server_Settings_and_Configuration#Optional_Maps
map=""
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="${map} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -log"
#### LinuxGSM Settings ####
## LinuxGSM Stats
# Send useful stats to LinuxGSM developers.
# https://docs.linuxgsm.com/configuration/linuxgsm-stats
# (on|off)
stats="off"
## Notification Alerts
# (on|off)
# Display IP | https://docs.linuxgsm.com/alerts#display-ip
displayip=""
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
discordalert="off"
discordwebhook="webhook"
# Email Alerts | https://docs.linuxgsm.com/alerts/email
emailalert="off"
email="[email protected]"
emailfrom=""
# Gotify Alerts | https://docs.linuxgsm.com/alerts/gotify
gotifyalert="off"
gotifytoken="token"
gotifywebhook="webhook"
# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
iftttalert="off"
ifttttoken="accesstoken"
iftttevent="linuxgsm_alert"
# Mailgun Email Alerts | https://docs.linuxgsm.com/alerts/mailgun
mailgunalert="off"
mailgunapiregion="us"
mailguntoken="accesstoken"
mailgundomain="example.com"
mailgunemailfrom="[email protected]"
mailgunemail="[email protected]"
# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
pushbulletalert="off"
pushbullettoken="accesstoken"
channeltag=""
# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
pushoveralert="off"
pushovertoken="accesstoken"
pushoveruserkey="userkey"
# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat
rocketchatalert="off"
rocketchatwebhook="webhook"
rocketchattoken=""
# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
slackalert="off"
slackwebhook="webhook"
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help".
telegramapi="api.telegram.org"
telegramalert="off"
telegramtoken="accesstoken"
telegramchatid=""
curlcustomstring=""
## Updating | https://docs.linuxgsm.com/commands/update
updateonstart="off"
## Backup | https://docs.linuxgsm.com/commands/backup
maxbackups="4"
maxbackupdays="30"
stoponbackup="on"
## Logging | https://docs.linuxgsm.com/features/logging
consolelogging="on"
logdays="7"
## Monitor | https://docs.linuxgsm.com/commands/monitor
# Query delay time
querydelay="1"
## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors
ansi="on"
#### Advanced Settings ####
## Message Display Time | https://docs.linuxgsm.com/features/message-display-time
sleeptime="0.5"
## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd
# Server appid
appid="412680"
steamcmdforcewindows="no"
# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
branch="evrima"
betapassword=""
# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
steammaster="true"
## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill
# 2: CTRL+c
# 3: quit
# 4: quit 120s
# 5: stop
# 6: q
# 7: exit
# 8: 7 Days to Die
# 9: GoldSrc
# 10: Avorion
# 11: end
stopmode="2"
## Query mode
# 1: session only
# 2: gamedig (gsquery fallback)
# 3: gamedig
# 4: gsquery
# 5: tcp
querymode="2"
querytype="protocol-valve"
## Console type
consoleverbose="yes"
consoleinteract="no"
## Game Server Details
# Do not edit
gamename="The Isle"
engine="unreal4"
glibc="2.17"
#### Directories ####
# Edit with care
## Game Server Directories
systemdir="${serverfiles}/TheIsle"
executabledir="${systemdir}/Binaries/Linux"
executable="./TheIsleServer-Linux-Shipping"
servercfgdir="${systemdir}/Saved/Config/LinuxServer"
servercfg="Game.ini"
servercfgdefault="Game.ini"
servercfgfullpath="${servercfgdir}/${servercfg}"
## Backup Directory
backupdir="${lgsmdir}/backup"
## Logging Directories
logdir="${rootdir}/log"
gamelogdir="${systemdir}/Saved/Logs"
lgsmlogdir="${logdir}/script"
consolelogdir="${logdir}/console"
lgsmlog="${lgsmlogdir}/${selfname}-script.log"
consolelog="${consolelogdir}/${selfname}-console.log"
alertlog="${lgsmlogdir}/${selfname}-alert.log"
postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log"
## Logs Naming
lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"

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

@ -124,7 +124,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

126
lgsm/data/almalinux-8.csv

@ -0,0 +1,126 @@
all,bc,binutils,bzip2,bzip2,cpio,curl,epel-release,file,glibc.i686,gzip,hostname,jq,libstdc++.i686,nmap-ncat,python36,tar,tmux,unzip,util-linux,wget,xz
steamcmd,glibc.i686,libstdc++.i686
ac
ahl
ahl2
ark
arma3
av
bb
bb2,libcurl.i686
bd
bf1942,ncurses-libs.i686
bfv,compat-libstdc++-33.i686,glibc.i686
bmdm,ncurses-libs.i686
bo
bs
bt,libicu
bt1944
cc
cd
cmw
cod,compat-libstdc++-33.i686
cod2,compat-libstdc++-33.i686
cod4
coduo,compat-libstdc++-33.i686
codwaw
col
cs
cscz
csgo
css,ncurses-libs.i686
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl.i686
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,ncurses-libs.i686
hl2dm
hldm
hldms
hw,zlib-devel
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,java-11-openjdk
mcb,libnsl
mh
mohaa,compat-libstdc++-33.i686
mom
mta,ncurses-compat-libs
mumble
nd
nmrih,ncurses-libs.i686
ns
ns2,speex,tbb
ns2c,speex.i686,tbb.i686
onset,mariadb-connector-c
opfor
pc
pmc,java-11-openjdk
pstbs,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,zlib-devel
rw,java-11-openjdk
samp
sb
sbots
scpsl
scpslsm
sdtd,telnet,expect
sfc,ncurses-libs.i686
sf
sof2
sol
squad
st
stn
sven
terraria
tf2,libcurl.i686
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,glibc-devel
vs
vints,mono-complete
wet
wf
wmc,java-11-openjdk
wurm,xorg-x11-server-Xvfb
zmr,ncurses-libs.i686
zps,ncurses-libs.i686
Can't render this file because it has a wrong number of fields in line 2.

126
lgsm/data/centos-7.csv

@ -0,0 +1,126 @@
all,bc,binutils,bzip2,bzip2,cpio,curl,epel-release,file,glibc.i686,gzip,hostname,jq,libstdc++.i686,nmap-ncat,python3,tar,tmux,unzip,util-linux,wget,xz
steamcmd,glibc.i686,libstdc++.i686
ac
ahl
ahl2
ark
arma3
av
bb
bb2,libcurl.i686
bd
bf1942,ncurses-libs.i686
bfv,compat-libstdc++-33.i686,glibc.i686
bmdm,ncurses-libs.i686
bo
bs
bt,libicu
bt1944
cc
cd
cmw
cod,compat-libstdc++-33.i686
cod2,compat-libstdc++-33.i686
cod4
coduo,compat-libstdc++-33.i686
codwaw
col
cs
cscz
csgo
css,ncurses-libs.i686
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl.i686
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,ncurses-libs.i686
hl2dm
hldm
hldms
hw,zlib-devel
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,java-11-openjdk
mcb,libnsl
mh
mohaa,compat-libstdc++-33.i686
mom
mta,ncurses-libs
mumble
nd
nmrih,ncurses-libs.i686
ns
ns2,speex,tbb
ns2c,speex.i686,tbb.i686
onset,mariadb-connector-c
opfor
pc
pmc,java-11-openjdk
pstbs,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,zlib-devel
rw,java-11-openjdk
samp
sb
sbots
scpsl
scpslsm
sdtd,telnet,expect
sfc,ncurses-libs.i686
sf
sof2
sol
squad
st
stn
sven
terraria
tf2,libcurl.i686
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,glibc-devel
vs
vints,mono-complete
wet
wf
wmc,java-11-openjdk
wurm,xorg-x11-server-Xvfb
zmr,ncurses-libs.i686
zps,ncurses-libs.i686
Can't render this file because it has a wrong number of fields in line 2.

125
lgsm/data/centos-8.csv

@ -0,0 +1,125 @@
all,bc,binutils,bzip2,bzip2,cpio,curl,epel-release,file,glibc.i686,gzip,hostname,jq,libstdc++,libstdc++.i686,nmap-ncat,python36,tar,tmux,unzip,util-linux,wget,xz
steamcmd,glibc.i686,libstdc++.i686
ac
ahl
ahl2
ark
arma3
av
bb
bb2,libcurl.i686
bd
bf1942,ncurses-libs.i686
bfv,compat-libstdc++-33.i686,glibc.i686
bmdm,ncurses-libs.i686
bo
bs
bt,libicu
bt1944
cc
cd
cmw
cod,compat-libstdc++-33.i686
cod2,compat-libstdc++-33.i686
cod4
coduo,compat-libstdc++-33.i686
codwaw
col
cs
cscz
csgo
css,ncurses-libs.i686
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl.i686
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,ncurses-libs.i686
hl2dm
hldm
hldms
hw,zlib-devel
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,java-11-openjdk
mcb,libnsl
mh
mohaa,compat-libstdc++-33.i686
mom
mta,ncurses-compat-libs
mumble
nd
nmrih,ncurses-libs.i686
ns
ns2,speex,tbb
ns2c,speex.i686,tbb.i686
onset,mariadb-connector-c
opfor
pc
pmc,java-11-openjdk
pstbs,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,zlib-devel
rw,java-11-openjdk
samp
sb
sbots
scpsl
scpslsm
sdtd,telnet,expect
sfc,ncurses-libs.i686
sf
sof2
sol
squad
st
sven
terraria
tf2,libcurl.i686
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,glibc-devel
vs
vints,mono-complete
wet
wf
wmc,java-11-openjdk
wurm,xorg-x11-server-Xvfb
zmr,ncurses-libs.i686
zps,ncurses-libs.i686
Can't render this file because it has a wrong number of fields in line 2.

126
lgsm/data/debian-10.csv

@ -0,0 +1,126 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,file,gzip,hostname,jq,lib32gcc1,lib32stdc++6,netcat,python3,tar,tmux,unzip,util-linux,wget,xz-utils
steamcmd,lib32gcc1,lib32stdc++6,libsdl2-2.0-0:i386,steamcmd
ac
ahl
ahl2
ark
arma3
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
bt1944
cc
cd
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-11-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-11-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-11-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-11-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
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
vs
vints,mono-complete
wet
wf
wmc,openjdk-11-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.

126
lgsm/data/debian-11.csv

@ -0,0 +1,126 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,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
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
bt1944
cc
cd
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-17-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-17-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-16-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-16-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
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
vs
vints,mono-complete
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.

126
lgsm/data/debian-9.csv

@ -0,0 +1,126 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,file,gzip,hostname,jq,lib32gcc1,lib32stdc++6,netcat,python3,tar,tmux,unzip,util-linux,wget,xz-utils
steamcmd,lib32gcc1,lib32stdc++6,libsdl2-2.0-0:i386,steamcmd
ac
ahl
ahl2
ark
arma3
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
bt1944
cc
cd
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-8-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-8-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-8-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-8-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
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
vs
vints,mono-complete
wet
wf
wmc,openjdk-8-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.

126
lgsm/data/rhel-7.csv

@ -0,0 +1,126 @@
all,bc,binutils,bzip2,bzip2,cpio,curl,epel-release,file,glibc.i686,gzip,hostname,jq,libstdc++.i686,nmap-ncat,python36,tar,tmux,unzip,util-linux,wget,xz
steamcmd,glibc.i686,libstdc++.i686
ac
ahl
ahl2
ark
arma3
av
bb
bb2,libcurl.i686
bd
bf1942,ncurses-libs.i686
bfv,compat-libstdc++-33.i686,glibc.i686
bmdm,ncurses-libs.i686
bo
bs
bt,libicu
bt1944
cc
cd
cmw
cod,compat-libstdc++-33.i686
cod2,compat-libstdc++-33.i686
cod4
coduo,compat-libstdc++-33.i686
codwaw
col
cs
cscz
csgo
css,ncurses-libs.i686
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl.i686
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,ncurses-libs.i686
hl2dm
hldm
hldms
hw,zlib-devel
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,java-11-openjdk
mcb,libnsl
mh
mohaa,compat-libstdc++-33.i686
mom
mta
mumble
nd
nmrih,ncurses-libs.i686
ns
ns2,speex,tbb
ns2c,speex.i686,tbb.i686
onset,mariadb-connector-c
opfor
pc
pmc,java-11-openjdk
pstbs,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,zlib-devel
rw,java-11-openjdk
samp
sb
sbots
scpsl
scpslsm
sdtd,telnet,expect
sfc,ncurses-libs.i686
sf
sof2
sol
squad
st
stn
sven
terraria
tf2,libcurl.i686
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,glibc-devel
vs
vints,mono-complete
wet
wf
wmc,java-11-openjdk
wurm,xorg-x11-server-Xvfb
zmr,ncurses-libs.i686
zps,ncurses-libs.i686
Can't render this file because it has a wrong number of fields in line 2.

126
lgsm/data/rhel-8.csv

@ -0,0 +1,126 @@
all,bc,binutils,bzip2,bzip2,cpio,curl,epel-release,file,glibc.i686,gzip,hostname,jq,libstdc++.i686,nmap-ncat,python36,tar,tmux,unzip,util-linux,wget,xz
steamcmd,glibc.i686,libstdc++.i686
ac
ahl
ahl2
ark
arma3
av
bb
bb2,libcurl.i686
bd
bf1942,ncurses-libs.i686
bfv,compat-libstdc++-33.i686,glibc.i686
bmdm,ncurses-libs.i686
bo
bs
bt,libicu
bt1944
cc
cd
cmw
cod,compat-libstdc++-33.i686
cod2,compat-libstdc++-33.i686
cod4
coduo,compat-libstdc++-33.i686
codwaw
col
cs
cscz
csgo
css,ncurses-libs.i686
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl.i686
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,ncurses-libs.i686
hl2dm
hldm
hldms
hw,zlib-devel
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,java-11-openjdk
mcb,libnsl
mh
mohaa,compat-libstdc++-33.i686
mom
mta
mumble
nd
nmrih,ncurses-libs.i686
ns
ns2,speex,tbb
ns2c,speex.i686,tbb.i686
onset,mariadb-connector-c
opfor
pc
pmc,java-11-openjdk
pstbs,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,zlib-devel
rw,java-11-openjdk
samp
sb
sbots
scpsl
scpslsm
sdtd,telnet,expect
sfc,ncurses-libs.i686
sf
sof2
sol
squad
st
stn
sven
terraria
tf2,libcurl.i686
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,glibc-devel
vs
vints,mono-complete
wet
wf
wmc,java-11-openjdk
wurm,xorg-x11-server-Xvfb
zmr,ncurses-libs.i686
zps,ncurses-libs.i686
Can't render this file because it has a wrong number of fields in line 2.

126
lgsm/data/rocky-8.csv

@ -0,0 +1,126 @@
all,bc,binutils,bzip2,bzip2,cpio,curl,epel-release,file,glibc.i686,gzip,hostname,jq,libstdc++.i686,nmap-ncat,python36,tar,tmux,unzip,util-linux,wget,xz
steamcmd,glibc.i686,libstdc++.i686
ac
ahl
ahl2
ark
arma3
av
bb
bb2,libcurl.i686
bd
bf1942,ncurses-libs.i686
bfv,compat-libstdc++-33.i686,glibc.i686
bmdm,ncurses-libs.i686
bo
bs
bt,libicu
bt1944
cc
cd
cmw
cod,compat-libstdc++-33.i686
cod2,compat-libstdc++-33.i686
cod4
coduo,compat-libstdc++-33.i686
codwaw
col
cs
cscz
csgo
css,ncurses-libs.i686
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl.i686
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,ncurses-libs.i686
hl2dm
hldm
hldms
hw,zlib-devel
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,java-11-openjdk
mcb,libnsl
mh
mohaa,compat-libstdc++-33.i686
mom
mta,ncurses-compat-libs
mumble
nd
nmrih,ncurses-libs.i686
ns
ns2,speex,tbb
ns2c,speex.i686,tbb.i686
onset,mariadb-connector-c
opfor
pc
pmc,java-11-openjdk
pstbs,GConf2
pvkii
pvr,libcxx
pz,java-11-openjdk rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,zlib-devel
rw,java-11-openjdk
samp
sb
sbots
scpsl
scpslsm
sdtd,telnet,expect
sfc,ncurses-libs.i686
sf
sof2
sol
squad
st
stn
sven
terraria
tf2,libcurl.i686
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,glibc-devel
vs
vints,mono-complete
wet
wf
wmc,java-11-openjdk
wurm,xorg-x11-server-Xvfb
zmr,ncurses-libs.i686
zps,ncurses-libs.i686
Can't render this file because it has a wrong number of fields in line 2.

5
lgsm/data/serverlist.csv

@ -15,6 +15,7 @@ bs,bsserver,Blade Symphony
bt,btserver,Barotrauma bt,btserver,Barotrauma
bt1944,bt1944server,Battalion 1944 bt1944,bt1944server,Battalion 1944
cc,ccserver,Codename CURE cc,ccserver,Codename CURE
cd,cdserver,Crafting Dead
cmw,cmwserver,Chivalry: Medieval Warfare cmw,cmwserver,Chivalry: Medieval Warfare
cod,codserver,Call of Duty cod,codserver,Call of Duty
cod2,cod2server,Call of Duty 2 cod2,cod2server,Call of Duty 2
@ -27,6 +28,7 @@ cscz,csczserver,Counter-Strike: Condition Zero
csgo,csgoserver,Counter-Strike: Global Offensive csgo,csgoserver,Counter-Strike: Global Offensive
css,cssserver,Counter-Strike: Source css,cssserver,Counter-Strike: Source
dab,dabserver,Double Action: Boogaloo dab,dabserver,Double Action: Boogaloo
dayz,dayzserver,DayZ
dmc,dmcserver,Deathmatch Classic dmc,dmcserver,Deathmatch Classic
dod,dodserver,Day of Defeat dod,dodserver,Day of Defeat
dodr,dodrserver,Day of Dragons dodr,dodrserver,Day of Dragons
@ -52,6 +54,7 @@ jc3,jc3server,Just Cause 3
jk2,jk2server,Jedi Knight II: Jedi Outcast jk2,jk2server,Jedi Knight II: Jedi Outcast
kf,kfserver,Killing Floor kf,kfserver,Killing Floor
kf2,kf2server,Killing Floor 2 kf2,kf2server,Killing Floor 2
lo,loserver,Last Oasis
l4d,l4dserver,Left 4 Dead l4d,l4dserver,Left 4 Dead
l4d2,l4d2server,Left 4 Dead 2 l4d2,l4d2server,Left 4 Dead 2
mc,mcserver,Minecraft mc,mcserver,Minecraft
@ -90,6 +93,7 @@ scpsl,scpslserver,SCP: Secret Laboratory
scpslsm,scpslsmserver,SCP: Secret Laboratory ServerMod scpslsm,scpslsmserver,SCP: Secret Laboratory ServerMod
sdtd,sdtdserver,7 Days to Die sdtd,sdtdserver,7 Days to Die
sfc,sfcserver,SourceForts Classic sfc,sfcserver,SourceForts Classic
sf,sfserver,Satisfactory
sof2,sof2server,Soldier Of Fortune 2: Gold Edition sof2,sof2server,Soldier Of Fortune 2: Gold Edition
sol,solserver,Soldat sol,solserver,Soldat
squad,squadserver,Squad squad,squadserver,Squad
@ -99,6 +103,7 @@ sven,svenserver,Sven Co-op
terraria,terrariaserver,Terraria terraria,terrariaserver,Terraria
tf2,tf2server,Team Fortress 2 tf2,tf2server,Team Fortress 2
tfc,tfcserver,Team Fortress Classic tfc,tfcserver,Team Fortress Classic
ti,tiserver,The Isle
ts,tsserver,The Specialists ts,tsserver,The Specialists
ts3,ts3server,Teamspeak 3 ts3,ts3server,Teamspeak 3
tu,tuserver,Tower Unite tu,tuserver,Tower Unite

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

126
lgsm/data/ubuntu-16.04.csv

@ -0,0 +1,126 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,file,gzip,hostname,jq,lib32gcc1,lib32stdc++6,netcat,python3,tar,tmux,unzip,util-linux,wget,xz-utils
steamcmd,lib32gcc1,lib32stdc++6,libsdl2-2.0-0:i386,steamcmd
ac
ahl
ahl2
ark
arma3
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
bt1944
cc
cd
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-8-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-8-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-8-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-8-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
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
vs
vints,mono-complete
wet
wf
wmc,openjdk-8-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.

126
lgsm/data/ubuntu-18.04.csv

@ -0,0 +1,126 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,file,gzip,hostname,jq,lib32gcc1,lib32stdc++6,netcat,python3,tar,tmux,unzip,util-linux,wget,xz-utils
steamcmd,lib32gcc1,lib32stdc++6,libsdl2-2.0-0:i386,steamcmd
ac
ahl
ahl2
ark
arma3
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
bt1944
cc
cd
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-11-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-11-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-11-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-11-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
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
vs
vints,mono-complete
wet
wf
wmc,openjdk-11-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.

126
lgsm/data/ubuntu-20.04.csv

@ -0,0 +1,126 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,file,gzip,hostname,jq,lib32gcc1,lib32stdc++6,netcat,python3,tar,tmux,unzip,util-linux,wget,xz-utils
steamcmd,lib32gcc1,lib32stdc++6,libsdl2-2.0-0:i386,steamcmd
ac
ahl
ahl2
ark
arma3
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
bt1944
cc
cd
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-17-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-17-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-16-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-16-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
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
vs
vints,mono-complete
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.

126
lgsm/data/ubuntu-21.04.csv

@ -0,0 +1,126 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,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
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
bt1944
cc
cd
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dayz
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-17-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-17-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-16-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-16-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
stn
sven,libssl1.1:i386,zlib1g:i386
terraria,libsdl
tf2,libcurl4-gnutls-dev:i386
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,libc6-dev
vs
vints,mono-complete
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.

124
lgsm/data/ubuntu-21.10.csv

@ -0,0 +1,124 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,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
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
bt1944
cc
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-17-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-17-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-16-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-16-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
stn
sven,libssl1.1:i386,zlib1g:i386
terraria,libsdl
tf2,libcurl4-gnutls-dev:i386
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,libc6-dev
vs
vints,mono-complete
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.

124
lgsm/data/ubuntu-22.04.csv

@ -0,0 +1,124 @@
all,bc,binutils,bsdmainutils,bzip2,ca-certificates,cpio,curl,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
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
bt1944
cc
cmw
cod,libstdc++5:i386
cod2,libstdc++5:i386
cod4
coduo,libstdc++5:i386
codwaw
col
cs
cscz
csgo
css,libtinfo5:i386
dab
dmc
dod
dodr
dods
doi
dst,libcurl4-gnutls-dev:i386
dys
eco,libgdiplus
em
etl
fctr
fof
gmod,libtinfo5:i386
hl2dm
hldm
hldms
hw,lib32z1
ins
inss
ios
jc2
jc3
jk2
kf
kf2
lo
l4d
l4d2
mc,openjdk-17-jre
mcb
mh
mohaa,libstdc++5:i386
mom
mta,libncursesw5
mumble
nd
nmrih,libtinfo5:i386
ns
ns2,speex,libtbb2
ns2c,speex:i386,libtbb2
onset,libmariadbclient-dev
opfor
pc
pmc,openjdk-17-jre
pstbs,libgconf-2-4
pvkii
pvr,libc++1
pz,openjdk-16-jre,rng-tools
q2
q3
ql
qw
ricochet
ro
rtcw
rust,lib32z1
rw,openjdk-16-jre
samp
sb
sbots
scpsl,mono-complete
scpslsm,mono-complete
sdtd,telnet,expect
sfc,libtinfo5:i386
sf
sof2
sol
squad
st
stn
sven,libssl1.1:i386,zlib1g:i386
terraria,libsdl
tf2,libcurl4-gnutls-dev:i386
tfc
ti
ts
ts3
tu
tw
unt
ut
ut2k4
ut3
ut99
vh,libc6-dev
vs
vints,mono-complete
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.

10
lgsm/functions/alert_mailgun.sh

@ -13,7 +13,7 @@ else
mailgunapiurl="https://api.mailgun.net" mailgunapiurl="https://api.mailgun.net"
fi fi
fn_print_dots "Sending Email alert: Mailgun: ${email}" fn_print_dots "Sending Email alert: Mailgun: ${mailgunemail}"
mailgunsend=$(curl --connect-timeout 10 -s --user "api:${mailguntoken}" \ mailgunsend=$(curl --connect-timeout 10 -s --user "api:${mailguntoken}" \
-F from="LinuxGSM <${mailgunemailfrom}>" \ -F from="LinuxGSM <${mailgunemailfrom}>" \
@ -24,9 +24,9 @@ mailgunsend=$(curl --connect-timeout 10 -s --user "api:${mailguntoken}" \
-F text="$(cat "${alertlog}")" "${mailgunapiurl}/v3/${mailgundomain}/messages") -F text="$(cat "${alertlog}")" "${mailgunapiurl}/v3/${mailgundomain}/messages")
if [ -z "${mailgunsend}" ]; then if [ -z "${mailgunsend}" ]; then
fn_print_fail_nl "Sending Email alert: Mailgun: ${email}" fn_print_fail_nl "Sending Email alert: Mailgun: ${mailgunemail}"
fn_script_log_fatal "Sending Email alert: Mailgun: ${email}" fn_script_log_fatal "Sending Email alert: Mailgun: ${mailgunemail}"
else else
fn_print_ok_nl "Sending Email alert: Mailgun: ${email}" fn_print_ok_nl "Sending Email alert: Mailgun: ${mailgunemail}"
fn_script_log_pass "Sending Email alert: Mailgun: ${email}" fn_script_log_pass "Sending Email alert: Mailgun: ${mailgunemail}"
fi fi

3
lgsm/functions/alert_telegram.sh

@ -12,7 +12,8 @@ json=$(cat <<EOF
"chat_id": "${telegramchatid}", "chat_id": "${telegramchatid}",
"parse_mode": "HTML", "parse_mode": "HTML",
"text": "<b>${alertemoji} ${alertsubject} ${alertemoji}</b>\n\n<b>Server name</b>\n${servername}\n\n<b>Message</b>\n${alertbody}\n\n<b>Game</b>\n${gamename}\n\n<b>Server IP</b>\n<a href='https://www.gametracker.com/server_info/${alertip}:${port}'>${alertip}:${port}</a>\n\n<b>Hostname</b>\n${HOSTNAME}\n\n<b>More info</b>\n<a href='${alerturl}'>${alerturl}</a>", "text": "<b>${alertemoji} ${alertsubject} ${alertemoji}</b>\n\n<b>Server name</b>\n${servername}\n\n<b>Message</b>\n${alertbody}\n\n<b>Game</b>\n${gamename}\n\n<b>Server IP</b>\n<a href='https://www.gametracker.com/server_info/${alertip}:${port}'>${alertip}:${port}</a>\n\n<b>Hostname</b>\n${HOSTNAME}\n\n<b>More info</b>\n<a href='${alerturl}'>${alerturl}</a>",
"disable_web_page_preview": "yes", "disable_web_page_preview": "yes"
}
EOF EOF
) )

2
lgsm/functions/check.sh

@ -54,7 +54,7 @@ for allowed_command in "${allowed_commands_array[@]}"; do
fi fi
done done
allowed_commands_array=( DEBUG START STOP ) allowed_commands_array=( DEBUG START )
for allowed_command in "${allowed_commands_array[@]}"; do for allowed_command in "${allowed_commands_array[@]}"; do
if [ "${allowed_command}" == "${commandname}" ]; then if [ "${allowed_command}" == "${commandname}" ]; then
check_deps.sh check_deps.sh

720
lgsm/functions/check_deps.sh

@ -3,204 +3,85 @@
# 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 if required dependencies are installed for LinuxGSM. # Description: Checks and installs missing dependencies.
functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_install_mono_repo(){ fn_install_mono_repo(){
if [ "${monostatus}" != "0" ]; then if [ "${autodepinstall}" == "0" ]; then
fn_print_dots "Adding Mono repository" fn_print_information_nl "Automatically adding Mono repository."
if [ "${autoinstall}" == "1" ]; then fn_script_log_info "Automatically adding Mono repository."
sudo -n true > /dev/null 2>&1 echo -en ".\r"
else sleep 1
sudo -v > /dev/null 2>&1 echo -en "..\r"
fi sleep 1
if [ $? -eq 0 ]; then echo -en "...\r"
fn_print_info_nl "Automatically adding Mono repository." sleep 1
fn_script_log_info "Automatically adding Mono repository." echo -en " \r"
echo -en ".\r" if [ "${distroid}" == "ubuntu" ]; then
sleep 1 if [ "${distroversion}" == "20.04" ]; then
echo -en "..\r" 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"
sleep 1 elif [ "${distroversion}" == "18.04" ]; then
echo -en "...\r" 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"
sleep 1 elif [ "${distroversion}" == "16.04" ]; then
echo -en " \r" 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"
if [ "${distroid}" == "ubuntu" ]; then
if [ "${distroversion}" == "18.04" ]; then
cmd="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-get update"
eval "${cmd}"
elif [ "${distroversion}" == "16.04" ]; then
cmd="sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;sudo apt-get install apt-transport-https;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-get update"
eval "${cmd}"
elif [ "${distroversion}" == "14.04" ]; then
cmd="sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;sudo apt-get install apt-transport-https;echo 'deb https://download.mono-project.com/repo/ubuntu stable-trusty main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt-get update"
eval "${cmd}"
else
fn_print_warn_nl "Installing Mono repository."
echo -e "Mono auto install not available for ${distroname}"
echo -e " Follow instructions on mono site to install the latest version of Mono."
echo -e " https://www.mono-project.com/download/stable/#download-lin"
monoautoinstall="1"
fi
elif [ "${distroid}" == "debian" ]; then
if [ "${distroversion}" == "10" ]; then
cmd="sudo apt-get install apt-transport-https dirmngr;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-get update"
eval "${cmd}"
elif [ "${distroversion}" == "9" ]; then
cmd="sudo apt-get install apt-transport-https dirmngr;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-get update"
eval "${cmd}"
elif [ "${distroversion}" == "8" ]; then
cmd="sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;sudo apt-get install apt-transport-https;echo 'deb https://download.mono-project.com/repo/debian stable-jessie main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt-get update"
eval "${cmd}"
else
echo -e "Mono auto install not available for ${distroname}"
echo -e " Follow instructions on mono site to install the latest version of Mono."
echo -e " https://www.mono-project.com/download/stable/#download-lin"
monoautoinstall="1"
fi
elif [ "${distroid}" == "centos" ]; then
if [ "${distroversion}" == "8" ]; then
cmd="rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos8-stable.repo | tee /etc/yum.repos.d/mono-centos8-stable.repo'"
eval "${cmd}"
elif [ "${distroversion}" == "7" ]; then
cmd="rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'"
eval "${cmd}"
else
echo -e "Mono auto install not available for ${distroname}"
echo -e " Follow instructions on mono site to install the latest version of Mono."
echo -e " https://www.mono-project.com/download/stable/#download-lin"
monoautoinstall="1"
fi
elif [ "${distroid}" == "fedora" ]; then
cmd="rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF'; su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'; dnf update"
eval "${cmd}"
else else
echo -e "Mono auto install not available for ${distroname}"
echo -e " Follow instructions on mono site to install the latest version of Mono."
echo -e " https://www.mono-project.com/download/stable/#download-lin"
monoautoinstall="1" monoautoinstall="1"
fi fi
if [ "${monoautoinstall}" != "1" ]; then elif [ "${distroid}" == "debian" ]; then
if [ $? != 0 ]; then if [ "${distroversion}" == "10" ]; then
fn_print_failure_nl "Unable to install Mono repository." 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"
fn_script_log_fatal "Unable to installMono repository." elif [ "${distroversion}" == "9" ]; then
monoautoinstall=1 cmd="sudo apt install apt-transport-https dirmngr gnupg ca-certificates;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF;echo 'deb https://download.mono-project.com/repo/debian stable-stretch main' | sudo tee /etc/apt/sources.list.d/mono-official-stable.list;sudo apt update"
else else
fn_print_complete_nl "Installing Mono repository completed." monoautoinstall="1"
fn_script_log_pass "Installing Mono repository completed."
monoautoinstall=0
fi
fi fi
else elif [ "${distroid}" == "centos" ]||[ "${distroid}" == "almalinux" ]||[ "${distroid}" == "rocky" ]; then
fn_print_information_nl "Installing Mono repository." if [ "${distroversion}" == "8" ]; then
echo -e "" cmd="sudo rpmkeys --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos8-stable.repo | tee /etc/yum.repos.d/mono-centos8-stable.repo'"
fn_print_warning_nl "$(whoami) does not have sudo access. Manually install Mono repository." elif [ "${distroversion}" == "7" ]; then
fn_script_log_warn "$(whoami) does not have sudo access. Manually install Mono repository." cmd="sudo rpmkeys --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'"
echo -e "* Follow instructions on mono site to install the latest version of Mono." else
echo -e " https://www.mono-project.com/download/stable/#download-lin" monoautoinstall="1"
fi fi
fi elif [ "${distroid}" == "fedora" ]; then
} if [ "${distroversion}" -ge "29" ]; then
cmd="sudo rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos8-stable.repo | tee /etc/yum.repos.d/mono-centos8-stable.repo';dnf update"
fn_install_universe_repo(){
# Defensive coding - As this is an ubuntu only issue then check to make sure this fix is needed, and we are using ubuntu.
if [ "${jquniversemissing}" != "0" ]&&[ "${distroid}" == "ubuntu" ]; then
fn_print_warning_nl "Ubuntu 18.04.1 contains a bug which means the sources.list file does not populate with the Ubuntu universe repository."
fn_print_information_nl "Attempting to add universe repository."
if [ "${autoinstall}" == "1" ]; then
sudo -n true > /dev/null 2>&1
else
sudo -v > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo -en ".\r"
sleep 1
echo -en "..\r"
sleep 1
echo -en "...\r"
sleep 1
echo -en " \r"
cmd="sudo apt-add-repository universe"
eval "${cmd}"
if [ $? -eq 0 ]; then
fn_print_complete_nl "Installing universe repository completed."
fn_script_log_pass "Installing universe repository completed."
else else
fn_print_failure_nl "Unable to install universe repository." cmd="sudo rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF';su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo';dnf update"
fn_script_log_fatal "Unable to install universe repository."
fi fi
else else
fn_print_warning_nl "$(whoami) does not have sudo access. Manually add Universe repository." monoautoinstall="1"
fn_script_log_warn "$(whoami) does not have sudo access. Manually add Universe repository."
echo -e "* Please run the following command as a user with sudo access, and re-run the installation"
echo -e ""
echo -e " sudo apt-add-repository universe"
fi fi
fi
}
fn_deps_detector(){ # Run the mono repo install.
# Checks if dependency is missing. eval "${cmd}"
if [ "${javacheck}" == "1" ]; then
# Added for users using Oracle JRE to bypass check.
depstatus=0
deptocheck="${javaversion}"
unset javacheck
elif [ "${deptocheck}" == "jq" ]&&[ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "18.04" ]&& ! grep -qE "^deb .*universe" /etc/apt/sources.list; then # Did Mono repo install correctly?
# #1985 ubuntu 18.04.1 bug does not set sources.list correctly which means universe is not active by default if [ "${monoautoinstall}" != "1" ]; then
# If the universe repo does not exist, mark as dependency missing and universe missing. if [ $? != 0 ]; then
depstatus=1 fn_print_failure_nl "Unable to install Mono repository."
jquniversemissing=1 fn_script_log_fatal "Unable to install Mono repository."
elif [ "${deptocheck}" == "mono-complete" ]; then
if [ "$(command -v mono 2>/dev/null)" ]&&[ "$(mono --version 2>&1 | grep -Po '(?<=version )\d')" -ge 5 ]; then
# Mono >= 5.0.0 already installed.
depstatus=0
else
# Mono not installed or installed Mono < 5.0.0.
depstatus=1
monostatus=1
fi
elif [ "$(command -v dpkg-query 2>/dev/null)" ]; then
dpkg-query -W -f='${Status}' "${deptocheck}" 2>/dev/null | grep -q -P '^install ok installed'
depstatus=$?
elif [ "$(command -v rpm 2>/dev/null)" ]; then
rpm -q "${deptocheck}" > /dev/null 2>&1
depstatus=$?
fi
if [ "${depstatus}" == "0" ]; then
# If dependency is found.
missingdep=0
if [ "${commandname}" == "INSTALL" ]; then
echo -e "${green}${deptocheck}${default}"
fn_sleep_time
fi
else
# If dependency is not found.
missingdep=1
if [ "${commandname}" == "INSTALL" ]; then
echo -e "${red}${deptocheck}${default}"
fn_sleep_time
fi
# Define required dependencies for SteamCMD.
if [ "${appid}" ]; then
# lib32gcc1 is now called lib32gcc-s1 in debian 11
if { [ "${distroid}" == "debian" ]&&[ "${distroversion}" == "11" ]; }||{ [ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "20.10" ]; } || { [ "${distroid}" == "pop" ]&&[ "${distroversion}" == "20.10" ]; }; then
if [ "${deptocheck}" == "glibc.i686" ]||[ "${deptocheck}" == "libstdc++64.i686" ]||[ "${deptocheck}" == "lib32gcc-s1" ]||[ "${deptocheck}" == "lib32stdc++6" ]; then
steamcmdfail=1
fi
else else
if [ "${deptocheck}" == "glibc.i686" ]||[ "${deptocheck}" == "libstdc++64.i686" ]||[ "${deptocheck}" == "lib32gcc1" ]||[ "${deptocheck}" == "lib32stdc++6" ]; then fn_print_complete_nl "Installing Mono repository completed."
steamcmdfail=1 fn_script_log_pass "Installing Mono repository completed."
fi
fi fi
fi fi
fi
# Missing dependencies are added to array_deps_missing. # Mono can not be auto installed with this distro.
if [ "${missingdep}" == "1" ]; then if [ "${monoautoinstall}" == "1" ]; then
array_deps_missing+=("${deptocheck}") fn_print_warning_nl "Mono auto install not available for ${distroname}."
echo -e "Follow instructions on Mono website to install."
echo -e "https://www.mono-project.com/download/stable/#download-lin"
fn_script_log_warn "Unable to install Mono repository. Mono auto install not available for ${distroname}."
fi
else
fn_print_information_nl "Installing Mono repository."
fn_print_warning_nl "$(whoami) does not have sudo access."
echo -e "Follow instructions on Mono website to install."
echo -e "https://www.mono-project.com/download/stable/#download-lin"
fn_script_log_warn "Unable to install Mono repository. $(whoami) does not have sudo access."
fi fi
} }
@ -227,25 +108,51 @@ fn_deps_email(){
fi fi
} }
fn_found_missing_deps(){ fn_install_missing_deps(){
# If any dependencies are not installed.
if [ "${#array_deps_missing[*]}" != "0" ]; then if [ "${#array_deps_missing[*]}" != "0" ]; then
if [ "${commandname}" == "INSTALL" ]; then
fn_print_warning_nl "Missing dependencies: ${red}${array_deps_missing[*]}${default}" fn_print_warning_nl "Missing dependencies: ${red}${array_deps_missing[*]}${default}"
fn_script_log_warn "Missing dependencies: ${array_deps_missing[*]}" fn_script_log_warn "Missing dependencies: ${array_deps_missing[*]}"
fn_sleep_time else
if [ "${monostatus}" ]; then fn_print_dots "Missing dependencies"
fn_install_mono_repo fn_print_warn "Missing dependencies: ${red}${array_deps_missing[*]}${default}"
fi fn_script_log_warn "Missing dependencies: ${array_deps_missing[*]}"
if [ "${jqstatus}" ]; then
fn_print_warning_nl "jq is not available in the ${distroname} repository."
echo -e " * https://docs.linuxgsm.com/requirements/jq"
fi fi
fn_sleep_time
# Attempt automatic dependency installation
if [ "${autoinstall}" == "1" ]; then if [ "${autoinstall}" == "1" ]; then
sudo -n true > /dev/null 2>&1 sudo -n true > /dev/null 2>&1
else else
sudo -v > /dev/null 2>&1 sudo -v > /dev/null 2>&1
fi fi
if [ $? -eq 0 ]; then autodepinstall="$?"
if [ "${monostatus}" == "1" ]; then
fn_install_mono_repo
fi
if [ "${commandname}" == "INSTALL" ]; then
if [ "${autodepinstall}" == "0" ]; then
fn_print_information_nl "$(whoami) has sudo access."
fn_script_log_info "$(whoami) has sudo access."
else
fn_print_warning_nl "$(whoami) does not have sudo access. Manually install dependencies."
fn_script_log_warn "$(whoami) does not have sudo access. Manually install dependencies."
fi
fi
# Add sudo dpkg --add-architecture i386 if using i386 packages.
if [ "$(command -v dpkg-query 2>/dev/null)" ]; then
if printf '%s\n' "${array_deps_required[@]}" | grep -q -P 'i386'; then
i386installcommand="sudo dpkg --add-architecture i386; "
fi
fi
# If automatic dependency install is available
if [ "${autodepinstall}" == "0" ]; then
fn_print_information_nl "Automatically installing missing dependencies." fn_print_information_nl "Automatically installing missing dependencies."
fn_script_log_info "Automatically installing missing dependencies." fn_script_log_info "Automatically installing missing dependencies."
echo -en ".\r" echo -en ".\r"
@ -256,7 +163,7 @@ fn_found_missing_deps(){
sleep 1 sleep 1
echo -en " \r" echo -en " \r"
if [ "$(command -v dpkg-query 2>/dev/null)" ]; then if [ "$(command -v dpkg-query 2>/dev/null)" ]; then
cmd="echo steamcmd steam/question select \"I AGREE\" | sudo debconf-set-selections; echo steamcmd steam/license note '' | sudo debconf-set-selections; sudo dpkg --add-architecture i386; 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
cmd="sudo dnf -y install ${array_deps_missing[*]}" cmd="sudo dnf -y install ${array_deps_missing[*]}"
@ -265,61 +172,36 @@ fn_found_missing_deps(){
cmd="sudo yum -y install ${array_deps_missing[*]}" cmd="sudo yum -y install ${array_deps_missing[*]}"
eval "${cmd}" eval "${cmd}"
fi fi
if [ $? != 0 ]; then autodepinstall="$?"
fn_print_failure_nl "Unable to install dependencies."
fn_script_log_fatal "Unable to install dependencies." # If auto install passes remove steamcmd install failure.
echo -e "" if [ "${autodepinstall}" == "0" ]; then
fn_print_warning_nl "Manually install dependencies." unset steamcmdfail
fn_script_log_warn "Manually install dependencies."
if [ "$(command -v dpkg-query 2>/dev/null)" ]; then
echo -e " sudo dpkg --add-architecture i386; sudo apt update; sudo apt install ${array_deps_missing[*]}"
elif [ "$(command -v dnf 2>/dev/null)" ]; then
echo -e " sudo dnf install ${array_deps_missing[*]}"
elif [ "$(command -v yum 2>/dev/null)" ]; then
echo -e " sudo yum install ${array_deps_missing[*]}"
fi
if [ "${steamcmdfail}" ]; then
echo -e ""
if [ "${commandname}" == "INSTALL" ]; then
fn_print_failure_nl "Missing dependencies required to run SteamCMD."
fn_script_log_fatal "Missing dependencies required to run SteamCMD."
core_exit.sh
else
fn_print_error_nl "Missing dependencies required to run SteamCMD."
fn_script_log_error "Missing dependencies required to run SteamCMD."
fi
fi
else
fn_print_complete_nl "Install dependencies completed."
fn_script_log_pass "Install dependencies completed."
fi fi
else fi
fn_print_warning_nl "$(whoami) does not have sudo access. Manually install dependencies."
fn_script_log_warn "$(whoami) does not have sudo access. Manually install dependencies." # If automatic dependency install is unavailable.
echo -e "" if [ "${autodepinstall}" != "0" ]; then
if [ "$(command -v dpkg-query 2>/dev/null)" ]; then if [ "$(command -v dpkg-query 2>/dev/null)" ]; then
echo -e "sudo dpkg --add-architecture i386; 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[*]}"
elif [ "$(command -v yum 2>/dev/null)" ]; then elif [ "$(command -v yum 2>/dev/null)" ]; then
echo -e "sudo yum install ${array_deps_missing[*]}" echo -e "sudo yum install ${array_deps_missing[*]}"
fi fi
if [ "${steamcmdfail}" ]; then
echo -e ""
if [ "${commandname}" == "INSTALL" ]; then
fn_print_failure_nl "Missing dependencies required to run SteamCMD."
fn_script_log_fatal "Missing dependencies required to run SteamCMD."
core_exit.sh
else
fn_print_error_nl "Missing dependencies required to run SteamCMD."
fn_script_log_error "Missing dependencies required to run SteamCMD."
fi
fi
echo -e ""
fi fi
if [ "${commandname}" == "INSTALL" ]; then
sleep 5 if [ "${steamcmdfail}" ]; then
if [ "${commandname}" == "INSTALL" ]; then
fn_print_failure_nl "Missing dependencies required to run SteamCMD."
fn_script_log_fatal "Missing dependencies required to run SteamCMD."
core_exit.sh
else
fn_print_error_nl "Missing dependencies required to run SteamCMD."
fn_script_log_error "Missing dependencies required to run SteamCMD."
fi
fi fi
else else
if [ "${commandname}" == "INSTALL" ]; then if [ "${commandname}" == "INSTALL" ]; then
fn_print_information_nl "Required dependencies already installed." fn_print_information_nl "Required dependencies already installed."
@ -329,271 +211,94 @@ fn_found_missing_deps(){
} }
fn_check_loop(){ fn_check_loop(){
# Loop though required depenencies. # Loop though required depenencies checking if they are installed.
for deptocheck in ${array_deps_required[*]}; do for deptocheck in ${array_deps_required[*]}; do
fn_deps_detector fn_deps_detector
done done
# user to be informed of any missing dependencies. # user will be informed of any missing dependencies.
fn_found_missing_deps fn_install_missing_deps
} }
# Generate require dependencies for debian based systems. # Checks if dependency is installed or not.
fn_deps_build_debian(){ fn_deps_detector(){
# Generate array of missing deps. ## Check.
array_deps_missing=() # SteamCMD: Will be removed from required array if no appid is present or non-free repo is not available.
# This will cause SteamCMD to be installed using tar.
# LinuxGSM requirements. if [ "${deptocheck}" == "libsdl2-2.0-0:i386" ]&&[ -z "${appid}" ]; then
array_deps_required=( curl wget ca-certificates file bsdmainutils util-linux python3 tar bzip2 gzip unzip binutils bc jq tmux netcat cpio ) array_deps_required=( "${array_deps_required[@]/libsdl2-2.0-0:i386}" )
steamcmdstatus=1
# All servers except ts3, mumble, GTA and minecraft servers require lib32stdc++6 and lib32gcc1. elif [ "${deptocheck}" == "steamcmd" ]&&[ -z "${appid}" ]; then
if [ "${shortname}" != "ts3" ]&&[ "${shortname}" != "mumble" ]&&[ "${shortname}" != "mc" ]&&[ "${shortname}" != "pmc" ]&&[ "${shortname}" != "wmc" ]&&[ "${engine}" != "renderware" ]; then array_deps_required=( "${array_deps_required[@]/steamcmd}" )
if [ "${arch}" == "x86_64" ]; then steamcmdstatus=1
# lib32gcc1 is now called lib32gcc-s1 in debian 11 elif [ "${deptocheck}" == "steamcmd" ]&&[ "${distroid}" == "debian" ]&& ! grep -qE "^deb .*non-free" /etc/apt/sources.list; then
if { [ "${distroid}" == "debian" ]&&[ "${distroversion}" == "11" ]; }||{ [ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "20.10" ]; }||{ [ "${distroid}" == "pop" ]&&[ "${distroversion}" == "20.10" ]; }; then array_deps_required=( "${array_deps_required[@]/steamcmd}" )
array_deps_required+=( lib32gcc-s1 lib32stdc++6 ) steamcmdstatus=1
else # Java: Added for users using Oracle JRE to bypass check.
array_deps_required+=( lib32gcc1 lib32stdc++6 ) elif [[ ${deptocheck} == "openjdk"* ]]||[[ ${deptocheck} == "java"* ]]; then
fi # Is java already installed?
else if [ -n "${javaversion}" ]; then
array_deps_required+=( lib32stdc++6 ) # Added for users using Oracle JRE to bypass check.
fi depstatus=0
fi deptocheck="${javaversion}"
# If requires steamcmd.
if [ "${appid}" ]; then
# Will not use apt if non-free repo is missing or Ubuntu 14.04
if [ "${distroversion}" == "14.04" ]||[ "${distroid}" == "debian" ]&& ! grep -qE "^deb .*non-free" /etc/apt/sources.list; then
:
else
array_deps_required+=( steamcmd libsdl2-2.0-0:i386 )
fi
fi
# Game Specific requirements.
# Natural Selection 2 (x64 only)
if [ "${shortname}" == "ns2" ]; then
array_deps_required+=( speex libtbb2 )
# NS2: Combat
elif [ "${shortname}" == "ns2c" ]; then
array_deps_required+=( speex:i386 libtbb2 )
# 7 Days to Die
elif [ "${shortname}" == "sdtd" ]; then
array_deps_required+=( telnet expect )
# Battlefield: Vietnam
elif [ "${shortname}" == "bfv" ]; then
array_deps_required+=( libncurses5:i386 libstdc++5:i386 )
# Battlefield 1942
elif [ "${shortname}" == "bf1942" ]; then
array_deps_required+=( libncurses5:i386 libtinfo5:i386 )
# Black Mesa: Death Match
elif [ "${shortname}" == "bmdm" ]; then
array_deps_required+=( libncurses5:i386 )
# Counter-Strike: Source, Garry's Mod, No More Room in Hell, Source Forts Classic, Zombie Master Reborn and Zombie Panic: Source
elif [ "${shortname}" == "css" ]||[ "${shortname}" == "gmod" ]||[ "${shortname}" == "nmrih" ]||[ "${shortname}" == "sfc" ]||[ "${shortname}" == "zmr" ]||[ "${shortname}" == "zps" ]; then
if [ "${arch}" == "x86_64" ]; then
array_deps_required+=( libtinfo5:i386 )
else
array_deps_required+=( libtinfo5 )
fi
# Brainbread 2, Don't Starve Together & Team Fortress 2
elif [ "${shortname}" == "bb2" ]||[ "${shortname}" == "dst" ]||[ "${shortname}" == "tf2" ]; then
array_deps_required+=( libcurl4-gnutls-dev:i386 )
# Call of Duty & Medal of Honor: Allied Assault
elif [ "${shortname}" == "cod" ]||[ "${shortname}" == "coduo" ]||[ "${shortname}" == "cod2" ]||[ "${shortname}" == "mohaa" ]; then
array_deps_required+=( libstdc++5:i386 )
# Barotrauma
elif [ "${shortname}" == "bt" ]; then
array_deps_required+=( libicu-dev )
# Ecoserver
elif [ "${shortname}" == "eco" ]; then
array_deps_required+=( libgdiplus )
# Factorio
elif [ "${shortname}" == "fctr" ]; then
array_deps_required+=( xz-utils )
# Hurtword/Rust
elif [ "${shortname}" == "hw" ]||[ "${shortname}" == "rust" ]; then
array_deps_required+=( lib32z1 )
# Minecraft, Rising World
elif [ "${shortname}" == "mc" ]||[ "${shortname}" == "pmc" ]||[ "${shortname}" == "wmc" ]; then
javaversion=$(java -version 2>&1 | grep "version")
if [ "${javaversion}" ]; then
# Added for users using Oracle JRE to bypass the check.
javacheck=1
else
if { [ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "20.04" ]; }||{ [ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "20.10" ]; }||{ [ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "21.04" ]; }||{ [ "${distroid}" == "pop" ]&&[ "${distroversion}" == "20.04" ]; }||{ [ "${distroid}" == "pop" ]&&[ "${distroversion}" == "20.10" ]; }||{ [ "${distroid}" == "pop" ]&&[ "${distroversion}" == "21.04" ]; }; then
array_deps_required+=( openjdk-16-jre )
else
array_deps_required+=( default-jre )
fi
fi
elif [ "${shortname}" == "rw" ]; then
javaversion=$(java -version 2>&1 | grep "version")
if [ "${javaversion}" ]; then
# Added for users using Oracle JRE to bypass the check.
javacheck=1
else else
array_deps_required+=( default-jre ) depstatus=1
fi fi
# Onset # Mono: A Mono repo needs to be installed.
elif [ "${shortname}" == "onset" ]; then elif [ "${deptocheck}" == "mono-complete" ]; then
array_deps_required+=( libmariadbclient-dev ) if [ -n "${monoversion}" ]&&[ "${monoversion}" -ge "5" ]; then
# Project Zomboid # Mono >= 5.0.0 already installed.
elif [ "${shortname}" == "pz" ]; then depstatus=0
if java -version 2>&1 | grep "version"; then monostatus=0
# Added for users using Oracle JRE to bypass the check.
javacheck=1
array_deps_required+=( rng-tools )
else else
array_deps_required+=( default-jre rng-tools ) # Mono not installed or installed Mono < 5.0.0.
fi depstatus=1
# SCP: Secret Laboratory, SCP: Secret Laboratory ServerMod monostatus=1
elif [ "${shortname}" == "scpsl" ]||[ "${shortname}" == "scpslsm" ]; then
array_deps_required+=( mono-complete )
# Sven Co-op
elif [ "${shortname}" == "sven" ]; then
array_deps_required+=( libssl1.1:i386 zlib1g:i386 )
# Vintage Story
elif [ "${shortname}" == "vints" ]; then
array_deps_required+=( mono-complete )
# Wurm: Unlimited
elif [ "${shortname}" == "wurm" ]; then
array_deps_required+=( xvfb )
# Post Scriptum
elif [ "${shortname}" == "pstbs" ]; then
array_deps_required+=( libgconf-2-4 )
# Pavlov VR
elif [ "${shortname}" == "pvr" ]; then
array_deps_required+=( libc++1 )
# Valheim ( for Plus mod)
elif [ "${shortname}" == "vh" ]; then
array_deps_required+=( libc6-dev )
fi
# check if system is a lxc container and the hostname dependency.
if command -v systemd-detect-virt &> /dev/null; then
systemd_virt=$(systemd-detect-virt)
if [ "${systemd_virt}" == "lxc" ]||[ "${systemd_virt}" == "lxc-libvirt" ]; then
array_deps_required+=( hostname )
fi fi
elif [ "$(command -v dpkg-query 2>/dev/null)" ]; then
dpkg-query -W -f='${Status}' "${deptocheck}" 2>/dev/null | grep -q -P '^install ok installed'
depstatus=$?
elif [ "$(command -v dnf 2>/dev/null)" ]; then
dnf list installed "${deptocheck}" > /dev/null 2>&1
depstatus=$?
elif [ "$(command -v rpm 2>/dev/null)" ]; then
rpm -q "${deptocheck}" > /dev/null 2>&1
depstatus=$?
fi fi
fn_deps_email # Outcome of Check.
fn_check_loop if [ "${steamcmdstatus}" == "1" ]; then
} # If SteamCMD is not available in repo dont check for it.
unset steamcmdstatus
fn_deps_build_redhat(){ elif [ "${depstatus}" == "0" ]; then
# Generate array of missing deps. # If dependency is found.
array_deps_missing=() missingdep=0
if [ "${commandname}" == "INSTALL" ]; then
# LinuxGSM requirements. echo -e "${green}${deptocheck}${default}"
# CentOS sleep 0.1
if [ "${distroversion}" == "7" ]; then
array_deps_required=( epel-release curl wget util-linux python3 file tar gzip bzip2 unzip binutils bc jq tmux nmap-ncat cpio )
elif [ "${distroversion}" == "8" ]; then
array_deps_required=( epel-release curl wget util-linux python36 file tar gzip bzip2 unzip binutils bc jq tmux nmap-ncat cpio )
elif [ "${distroid}" == "fedora" ]; then
array_deps_required=( curl wget util-linux python3 file tar gzip bzip2 unzip binutils bc jq tmux nmap-ncat cpio )
elif [[ "${distroname}" == *"Amazon Linux AMI"* ]]; then
array_deps_required=( curl wget util-linux python3 file tar gzip bzip2 unzip binutils bc jq tmux nmap-ncat cpio )
else
array_deps_required=( curl wget util-linux python3 file tar gzip bzip2 unzip binutils bc jq tmux nmap-ncat cpio )
fi
# All servers except ts3, mumble, multi theft auto and minecraft servers require glibc.i686 and libstdc++.i686.
if [ "${shortname}" != "ts3" ]&&[ "${shortname}" != "mumble" ]&&[ "${shortname}" != "mc" ]&&[ "${engine}" != "renderware" ]; then
if [[ "${distroname}" == *"Amazon Linux AMI"* ]]; then
array_deps_required+=( glibc.i686 libstdc++64.i686 )
else
array_deps_required+=( glibc.i686 libstdc++.i686 )
fi fi
fi elif [ "${depstatus}" != "0" ]; then
# If dependency is not found.
# Game Specific requirements. missingdep=1
if [ "${commandname}" == "INSTALL" ]; then
# Natural Selection 2 (x64 only) echo -e "${red}${deptocheck}${default}"
if [ "${shortname}" == "ns2" ]; then sleep 0.1
array_deps_required+=( speex tbb )
# NS2: Combat
elif [ "${shortname}" == "ns2c" ]; then
array_deps_required+=( speex.i686 tbb.i686 )
# 7 Days to Die
elif [ "${shortname}" == "sdtd" ]; then
array_deps_required+=( telnet expect )
# Barotrauma
elif [ "${shortname}" == "bt" ]; then
array_deps_required+=( libicu )
# Battlefield: Vietnam
elif [ "${shortname}" == "bfv" ]; then
array_deps_required+=( compat-libstdc++-33.i686 glibc.i686 )
# Battlefield 1942, Black Mesa: Deathmatch, Counter-Strike: Source, Garry's Mod, No More Room in Hell, Source Forts Classic, Zombie Master Reborn and Zombie Panic: Source
elif [ "${shortname}" == "bf1942" ]||[ "${shortname}" == "bmdm" ]||[ "${shortname}" == "css" ]||[ "${shortname}" == "gmod" ]||[ "${shortname}" == "nmrih" ]||[ "${shortname}" == "sfc" ]||[ "${shortname}" == "zmr" ]||[ "${shortname}" == "zps" ]; then
array_deps_required+=( ncurses-libs.i686 )
# Brainbread 2, Don't Starve Together & Team Fortress 2
elif [ "${shortname}" == "bb2" ]||[ "${shortname}" == "dst" ]||[ "${shortname}" == "tf2" ]; then
array_deps_required+=( libcurl.i686 )
# Call of Duty & Medal of Honor: Allied Assault
elif [ "${shortname}" == "cod" ]||[ "${shortname}" == "coduo" ]||[ "${shortname}" == "cod2" ]||[ "${shortname}" == "mohaa" ]; then
array_deps_required+=( compat-libstdc++-33.i686 )
# Ecoserver
elif [ "${shortname}" == "eco" ]; then
array_deps_required+=( libgdiplus )
# Factorio
elif [ "${shortname}" == "fctr" ]; then
array_deps_required+=( xz )
# Hurtword/Rust
elif [ "${shortname}" == "hw" ]||[ "${shortname}" == "rust" ]; then
array_deps_required+=( zlib-devel )
# Minecraft, Rising World, Wurm
elif [ "${shortname}" == "mc" ]||[ "${shortname}" == "pmc" ]||[ "${shortname}" == "wmc" ]||[ "${shortname}" == "rw" ]; then
javaversion=$(java -version 2>&1 | grep "version")
if [ "${javaversion}" ]; then
# Added for users using Oracle JRE to bypass the check.
javacheck=1
else
array_deps_required+=( java-11-openjdk )
fi fi
# Onset # If SteamCMD requirements are not met install will fail.
elif [ "${shortname}" == "onset" ]; then if [ -n "${appid}" ]; then
array_deps_required+=( mariadb-connector-c ) for steamcmddeptocheck in ${array_deps_required_steamcmd[*]}; do
# Project Zomboid if [ "${deptocheck}" != "steamcmd" ]&&[ "${deptocheck}" == "${steamcmddeptocheck}" ]; then
elif [ "${shortname}" == "pz" ]; then steamcmdfail=1
if java -version 2>&1 | grep "version"; then fi
# Added for users using Oracle JRE to bypass the check. done
javacheck=1
array_deps_required+=( rng-tools )
else
array_deps_required+=( java-11-openjdk rng-tools )
fi fi
# Sven Co-op
elif [ "${shortname}" == "sven" ]; then
: # not compatible
# Vintage Story
elif [ "${shortname}" == "vints" ]; then
array_deps_required+=( mono-complete )
# Wurm: Unlimited
elif [ "${shortname}" == "wurm" ]; then
array_deps_required+=( xorg-x11-server-Xvfb )
# Post Scriptum
elif [ "${shortname}" == "pstbs" ]; then
array_deps_required+=( GConf2 )
# Pavlov VR
elif [ "${shortname}" == "pvr" ]; then
array_deps_required+=( libcxx )
# Valheim ( for Plus mod )
elif [ "${shortname}" == "vh" ]; then
array_deps_required+=( glibc-devel )
fi fi
unset depstatus
# check if system is a lxc container and the hostname dependency. # Missing dependencies are added to array_deps_missing.
if command -v systemd-detect-virt &> /dev/null; then if [ "${missingdep}" == "1" ]; then
systemd_virt=$(systemd-detect-virt) array_deps_missing+=("${deptocheck}")
if [ "${systemd_virt}" == "lxc" ]||[ "${systemd_virt}" == "lxc-libvirt" ]; then
array_deps_required+=( hostname )
fi
fi fi
fn_deps_email
fn_check_loop
} }
if [ "${commandname}" == "INSTALL" ]; then if [ "${commandname}" == "INSTALL" ]; then
@ -619,12 +324,41 @@ if [ -n "${distrosupport}" ]; then
fi fi
fi fi
# Filter checking in to Debian or Red Hat Based.
info_distro.sh info_distro.sh
if [ -f "/etc/debian_version" ]; then
fn_deps_build_debian if [ ! -f "${tmpdir}/dependency-no-check.tmp" ]&&[ ! -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then
elif [ -f "/etc/redhat-release" ]; then # Check that the distro dependency csv file exists.
fn_deps_build_redhat fn_check_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv"
else if [ -n "${checkflag}" ]&&[ "${checkflag}" == "0" ]; then
fn_print_warning_nl "${distroname} dependency checking unavailable." fn_fetch_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv" "lgsm/data" "chmodx" "norun" "noforce" "nohash"
fi
fi
# If the file successfully downloaded run the dependency check.
if [ -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then
depall=$(awk -F, '$1=="all" {$1=""; print $0}' "${datadir}/${distroid}-${distroversioncsv}.csv")
depsteamcmd=$(awk -F, '$1=="steamcmd" {$1=""; print $0}' "${datadir}/${distroid}-${distroversioncsv}.csv")
depshortname=$(awk -v shortname="$shortname" -F, '$1==shortname {$1=""; print $0}' "${datadir}/${distroid}-${distroversioncsv}.csv")
# Generate array of missing deps.
array_deps_missing=()
array_deps_required=("${depall} ${depsteamcmd} ${depshortname}")
array_deps_required_steamcmd=("${depsteamcmd}")
fn_deps_email
# Unique sort dependency array.
IFS=" " read -r -a array_deps_required <<< "$(echo "${array_deps_required[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')"
fn_check_loop
# Warn the user that dependency checking is unavailable for their distro.
elif [ "${commandname}" == "INSTALL" ]||[ -n "${checkflag}" ]&&[ "${checkflag}" != "0" ]; then
fn_print_warning_nl "LinuxGSM dependency checking currently unavailable for ${distroname}."
# Prevent future dependency checking if unavailable for the distro.
echo "${version}" > "${tmpdir}/dependency-no-check.tmp"
elif [ -f "${tmpdir}/dependency-no-check.tmp" ]; then
# Allow LinuxGSM to try a dependency check if LinuxGSM has been recently updated.
nocheckversion=$(cat "${tmpdir}/dependency-no-check.tmp")
if [ "${version}" != "${nocheckversion}" ]; then
rm -f "${tmpdir:?}/dependency-no-check.tmp"
fi
fi fi

33
lgsm/functions/command_update_linuxgsm.sh

@ -11,6 +11,7 @@ functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_firstcommand_set fn_firstcommand_set
check.sh check.sh
info_distro.sh
fn_print_dots "" fn_print_dots ""
fn_script_log_info "Updating LinuxGSM" fn_script_log_info "Updating LinuxGSM"
@ -146,6 +147,38 @@ else
fn_script_log_pass "Checking ${remotereponame} config _default.cfg" fn_script_log_pass "Checking ${remotereponame} config _default.cfg"
fi fi
# Check distro csv. ${datadir}/${distroid}-${distroversioncsv}.csv
if [ -f "${datadir}/${distroid}-${distroversioncsv}.csv" ]; then
echo -en "checking ${remotereponame} config ${distroid}-${distroversioncsv}.csv...\c"
fn_script_log_info "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
if [ "${remotereponame}" == "GitHub" ]; then
curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv" 1>/dev/null
else
curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv" 1>/dev/null
fi
if [ $? != "0" ]; then
fn_print_fail_eol_nl
fn_script_log_fatal "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
fn_script_log_fatal "Curl returned error: $?"
core_exit.sh
fi
if [ "${remotereponame}" == "GitHub" ]; then
config_file_diff=$(diff "${datadir}/${distroid}-${distroversioncsv}.csv" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv"))
else
config_file_diff=$(diff "${datadir}/${distroid}-${distroversioncsv}.csv" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/data/${distroid}-${distroversioncsv}.csv"))
fi
if [ "${config_file_diff}" != "" ]; then
fn_print_update_eol_nl
fn_script_log_update "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
rm -f "${datadir:?}/${distroid}-${distroversioncsv}.csv"
fn_fetch_file_github "lgsm/data" "${distroid}-${distroversioncsv}.csv" "${datadir}" "nochmodx" "norun" "noforce" "nohash"
else
fn_print_ok_eol_nl
fn_script_log_pass "Checking ${remotereponame} ${distroid}-${distroversioncsv}.csv"
fi
fi
# Check and update modules. # Check and update modules.
if [ -n "${functionsdir}" ]; then if [ -n "${functionsdir}" ]; then
if [ -d "${functionsdir}" ]; then if [ -d "${functionsdir}" ]; then

164
lgsm/functions/core_dl.sh

@ -60,29 +60,29 @@ fn_dl_steamcmd(){
if [ "${appid}" == "90" ]; then if [ "${appid}" == "90" ]; then
# If using a specific branch. # If using a specific branch.
if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
elif [ -n "${branch}" ]; then elif [ -n "${branch}" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
else else
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
fi fi
# Force Windows Platform type. # Force Windows Platform type.
elif [ "${steamcmdforcewindows}" == "yes" ]; then elif [ "${steamcmdforcewindows}" == "yes" ]; then
if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then
${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
elif [ -n "${branch}" ]; then elif [ -n "${branch}" ]; then
${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
else else
${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
fi fi
# All other servers. # All other servers.
else else
if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
elif [ -n "${branch}" ]; then elif [ -n "${branch}" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
else else
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}" ${unbuffer} ${steamcmdcommand} +force_install_dir "${serverfiles}" +login "${steamuser}" "${steampass}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
fi fi
fi fi
@ -252,6 +252,75 @@ fn_fetch_trap(){
core_exit.sh core_exit.sh
} }
# Will check a file exists and download it. Will not exit if fails to download.
fn_check_file(){
remote_fileurl="${1}"
remote_fileurl_backup="${2}"
remote_fileurl_name="${3}"
remote_fileurl_backup_name="${4}"
remote_filename="${5}"
# If backup fileurl exists include it.
if [ -n "${remote_fileurl_backup}" ]; then
# counter set to 0 to allow second try
counter=0
remote_fileurls_array=( remote_fileurl remote_fileurl_backup )
else
# counter set to 1 to not allow second try
counter=1
remote_fileurls_array=( remote_fileurl )
fi
for remote_fileurl_array in "${remote_fileurls_array[@]}"; do
if [ "${remote_fileurl_array}" == "remote_fileurl" ]; then
fileurl="${remote_fileurl}"
fileurl_name="${remote_fileurl_name}"
elif [ "${remote_fileurl_array}" == "remote_fileurl_backup" ]; then
fileurl="${remote_fileurl_backup}"
fileurl_name="${remote_fileurl_backup_name}"
fi
counter=$((counter+1))
echo -en "checking ${fileurl_name} ${remote_filename}...\c"
curlcmd=$(curl --output /dev/null --silent --head --fail "${fileurl}" 2>&1)
local exitcode=$?
# On first try will error. On second try will fail.
if [ "${exitcode}" != 0 ]; then
if [ ${counter} -ge 2 ]; then
fn_print_fail_eol_nl
if [ -f "${lgsmlog}" ]; then
fn_script_log_fatal "Checking ${remote_filename}"
fn_script_log_fatal "${fileurl}"
checkflag=1
fi
else
fn_print_error_eol_nl
if [ -f "${lgsmlog}" ]; then
fn_script_log_error "Checking ${remote_filename}"
fn_script_log_error "${fileurl}"
checkflag=2
fi
fi
else
fn_print_ok_eol
sleep 0.3
echo -en "\033[2K\\r"
if [ -f "${lgsmlog}" ]; then
fn_script_log_pass "Checking ${remote_filename}"
checkflag=0
fi
break
fi
done
if [ -f "${local_filedir}/${local_filename}" ]; then
fn_dl_hash
# Execute file if run is set.
if [ "${run}" == "run" ]; then
# shellcheck source=/dev/null
source "${local_filedir}/${local_filename}"
fi
fi
}
fn_fetch_file(){ fn_fetch_file(){
remote_fileurl="${1}" remote_fileurl="${1}"
remote_fileurl_backup="${2}" remote_fileurl_backup="${2}"
@ -361,8 +430,8 @@ fn_fetch_file(){
# GitHub file download functions. # GitHub file download functions.
# Used to simplify downloading specific files from GitHub. # Used to simplify downloading specific files from GitHub.
# github_file_url_dir: the directory of the file in the GitHub: lgsm/functions # github_fileurl_dir: the directory of the file in the GitHub: lgsm/functions
# github_file_url_name: the filename of the file to download from GitHub: core_messages.sh # github_fileurl_name: the filename of the file to download from GitHub: core_messages.sh
# githuburl: the full GitHub url # githuburl: the full GitHub url
# remote_fileurl: The URL of the file: http://example.com/dl/File.tar.bz2 # remote_fileurl: The URL of the file: http://example.com/dl/File.tar.bz2
@ -375,24 +444,24 @@ fn_fetch_file(){
# Fetches files from the Git repo. # Fetches files from the Git repo.
fn_fetch_file_github(){ fn_fetch_file_github(){
github_file_url_dir="${1}" github_fileurl_dir="${1}"
github_file_url_name="${2}" github_fileurl_name="${2}"
# For legacy versions - code can be removed at a future date # For legacy versions - code can be removed at a future date
if [ "${legacymode}" == "1" ]; then if [ "${legacymode}" == "1" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork. # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
elif [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then elif [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
else else
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
fi fi
remote_fileurl_name="GitHub" remote_fileurl_name="GitHub"
remote_fileurl_backup_name="Bitbucket" remote_fileurl_backup_name="Bitbucket"
local_filedir="${3}" local_filedir="${3}"
local_filename="${github_file_url_name}" local_filename="${github_fileurl_name}"
chmodx="${4:-0}" chmodx="${4:-0}"
run="${5:-0}" run="${5:-0}"
forcedl="${6:-0}" forcedl="${6:-0}"
@ -401,17 +470,32 @@ fn_fetch_file_github(){
fn_fetch_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${hash}" fn_fetch_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${hash}"
} }
fn_check_file_github(){
github_fileurl_dir="${1}"
github_fileurl_name="${2}"
if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
else
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
fi
remote_fileurl_name="GitHub"
remote_fileurl_backup_name="Bitbucket"
fn_check_file "${remote_fileurl}" "${remote_fileurl_backup}" "${remote_fileurl_name}" "${remote_fileurl_backup_name}" "${github_fileurl_name}"
}
# Fetches config files from the Git repo. # Fetches config files from the Git repo.
fn_fetch_config(){ fn_fetch_config(){
github_file_url_dir="${1}" github_fileurl_dir="${1}"
github_file_url_name="${2}" github_fileurl_name="${2}"
# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork. # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
else else
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
fi fi
remote_fileurl_name="GitHub" remote_fileurl_name="GitHub"
remote_fileurl_backup_name="Bitbucket" remote_fileurl_backup_name="Bitbucket"
@ -427,20 +511,20 @@ fn_fetch_config(){
# Fetches modules from the Git repo during first download. # Fetches modules from the Git repo during first download.
fn_fetch_function(){ fn_fetch_function(){
github_file_url_dir="lgsm/functions" github_fileurl_dir="lgsm/functions"
github_file_url_name="${functionfile}" github_fileurl_name="${functionfile}"
# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork. # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
else else
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
fi fi
remote_fileurl_name="GitHub" remote_fileurl_name="GitHub"
remote_fileurl_backup_name="Bitbucket" remote_fileurl_backup_name="Bitbucket"
local_filedir="${functionsdir}" local_filedir="${functionsdir}"
local_filename="${github_file_url_name}" local_filename="${github_fileurl_name}"
chmodx="chmodx" chmodx="chmodx"
run="run" run="run"
forcedl="noforce" forcedl="noforce"
@ -451,20 +535,20 @@ fn_fetch_function(){
# Fetches modules from the Git repo during update-lgsm. # Fetches modules from the Git repo during update-lgsm.
fn_update_function(){ fn_update_function(){
github_file_url_dir="lgsm/functions" github_fileurl_dir="lgsm/functions"
github_file_url_name="${functionfile}" github_fileurl_name="${functionfile}"
# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork. # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_fileurl_dir}/${github_fileurl_name}"
else else
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_fileurl_dir}/${github_fileurl_name}"
fi fi
remote_fileurl_name="GitHub" remote_fileurl_name="GitHub"
remote_fileurl_backup_name="Bitbucket" remote_fileurl_backup_name="Bitbucket"
local_filedir="${functionsdir}" local_filedir="${functionsdir}"
local_filename="${github_file_url_name}" local_filename="${github_fileurl_name}"
chmodx="chmodx" chmodx="chmodx"
run="norun" run="norun"
forcedl="noforce" forcedl="noforce"

2
lgsm/functions/core_functions.sh

@ -8,7 +8,7 @@
functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
modulesversion="v21.2.5" modulesversion="v21.4.1"
# Core # Core

61
lgsm/functions/fix_steamcmd.sh

@ -25,6 +25,8 @@ fn_fix_steamclient_so(){
cp "${HOME}/.steam/steamcmd/linux32/steamclient.so" "${2}/steamclient.so" cp "${HOME}/.steam/steamcmd/linux32/steamclient.so" "${2}/steamclient.so"
elif [ -f "${steamcmddir}/linux32/steamclient.so" ]; then elif [ -f "${steamcmddir}/linux32/steamclient.so" ]; then
cp "${steamcmddir}/linux32/steamclient.so" "${2}/steamclient.so" cp "${steamcmddir}/linux32/steamclient.so" "${2}/steamclient.so"
elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" ]; then
cp "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" "${2}/steamclient.so"
fi fi
fn_fix_msg_end fn_fix_msg_end
fi fi
@ -40,6 +42,8 @@ fn_fix_steamclient_so(){
cp "${HOME}/.steam/steamcmd/linux64/steamclient.so" "${2}/steamclient.so" cp "${HOME}/.steam/steamcmd/linux64/steamclient.so" "${2}/steamclient.so"
elif [ -f "${steamcmddir}/linux64/steamclient.so" ]; then elif [ -f "${steamcmddir}/linux64/steamclient.so" ]; then
cp "${steamcmddir}/linux64/steamclient.so" "${2}/steamclient.so" cp "${steamcmddir}/linux64/steamclient.so" "${2}/steamclient.so"
elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux64/steamclient.so" ]; then
cp "${HOME}/.local/share/Steam/steamcmd/linux64/steamclient.so" "${2}/steamclient.so"
fi fi
fn_fix_msg_end fn_fix_msg_end
fi fi
@ -47,27 +51,64 @@ fn_fix_steamclient_so(){
} }
# Helps fix: [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam,or a local steamclient.so. # Helps fix: [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam,or a local steamclient.so.
if [ ! -f "${HOME}/.steam/sdk64/steamclient.so" ]; then steamsdk64="${HOME}/.steam/sdk64"
fixname="steamclient.so sdk64" steamclientsdk64="${steamsdk64}/steamclient.so"
# remove any old unlinked versions of steamclient.so
if [ -f "${steamclientsdk64}" ]; then
if [ "$(stat -c '%h' "${steamclientsdk64}")" -eq 1 ]; then
fixname="steamclient.so sdk64 -- remove old file"
fn_fix_msg_start
rm -f "${steamclientsdk64}"
fn_fix_msg_end
fi
fi
# place new hardlink for the file to the disk
if [ ! -f "${steamclientsdk64}" ]; then
fixname="steamclient.so sdk64 hardlink"
fn_fix_msg_start fn_fix_msg_start
mkdir -p "${HOME}/.steam/sdk64" if [ ! -d "${steamsdk64}" ]; then
mkdir -p "${steamsdk64}"
fi
if [ -f "${HOME}/.steam/steamcmd/linux64/steamclient.so" ]; then if [ -f "${HOME}/.steam/steamcmd/linux64/steamclient.so" ]; then
cp "${HOME}/.steam/steamcmd/linux64/steamclient.so" "${HOME}/.steam/sdk64/steamclient.so" ln "${HOME}/.steam/steamcmd/linux64/steamclient.so" "${steamclientsdk64}"
elif [ -f "${steamcmddir}/linux64/steamclient.so" ]; then elif [ -f "${steamcmddir}/linux64/steamclient.so" ]; then
cp "${steamcmddir}/linux64/steamclient.so" "${HOME}/.steam/sdk64/steamclient.so" ln "${steamcmddir}/linux64/steamclient.so" "${steamclientsdk64}"
elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux64/steamclient.so" ]; then
ln "${HOME}/.local/share/Steam/steamcmd/linux64/steamclient.so" "${steamclientsdk64}"
else
fn_print_fail_nl "Could not copy any steamclient.so 64bit for the gameserver"
fi fi
fn_fix_msg_end fn_fix_msg_end
fi fi
# Helps fix: [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam,or a local steamclient.so. # Helps fix: [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam,or a local steamclient.so.
if [ ! -f "${HOME}/.steam/sdk32/steamclient.so" ]; then steamsdk32="${HOME}/.steam/sdk32"
fixname="steamclient.so sdk32" steamclientsdk32="${HOME}/.steam/sdk32/steamclient.so"
if [ -f "${steamclientsdk32}" ]; then
if [ " $(stat -c '%h' "${steamclientsdk32}")" -eq 1 ]; then
fixname="steamclient.so sdk32 -- remove old file"
fn_fix_msg_start
rm -f "${steamclientsdk32}"
fn_fix_msg_end
fi
fi
# place new hardlink for the file to the disk
if [ ! -f "${steamclientsdk32}" ]; then
fixname="steamclient.so sdk32 link"
fn_fix_msg_start fn_fix_msg_start
mkdir -p "${HOME}/.steam/sdk32" if [ ! -d "${steamsdk32}" ]; then
mkdir -p "${steamsdk32}"
fi
if [ -f "${HOME}/.steam/steamcmd/linux32/steamclient.so" ]; then if [ -f "${HOME}/.steam/steamcmd/linux32/steamclient.so" ]; then
cp "${HOME}/.steam/steamcmd/linux32/steamclient.so" "${HOME}/.steam/sdk32/steamclient.so" ln "${HOME}/.steam/steamcmd/linux32/steamclient.so" "${steamclientsdk32}"
elif [ -f "${steamcmddir}/linux32/steamclient.so" ]; then elif [ -f "${steamcmddir}/linux32/steamclient.so" ]; then
cp "${steamcmddir}/linux32/steamclient.so" "${HOME}/.steam/sdk32/steamclient.so" ln "${steamcmddir}/linux32/steamclient.so" "${steamclientsdk32}"
elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" ]; then
ln "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" "${steamclientsdk32}"
else
fn_print_fail_nl "Could not copy any steamclient.so 32bit for the gameserver"
fi fi
fn_fix_msg_end fn_fix_msg_end
fi fi

2
lgsm/functions/fix_vh.sh

@ -17,7 +17,7 @@ if [ -f "${modsinstalledlistfullpath}" ]; then
if ! grep -qE "^executable=\"./start_server_bepinex.sh\"" "${configdirserver}/${selfname}.cfg" if ! grep -qE "^executable=\"./start_server_bepinex.sh\"" "${configdirserver}/${selfname}.cfg"
then then
echo 'executable="./start_server_bepinex.sh"' >> "${configdirserver}/${selfname}.cfg" echo 'executable="./start_server_bepinex.sh"' >> "${configdirserver}/${selfname}.cfg"
executeable="./start_server_bepinex.sh" executable="./start_server_bepinex.sh"
fi fi
fi fi
fi fi

201
lgsm/functions/info_distro.sh

@ -10,19 +10,19 @@ functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
### Game Server pid ### Game Server pid
if [ "${status}" == "1" ]; then if [ "${status}" == "1" ]; then
gameserverpid=$(tmux list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}') gameserverpid="$(tmux list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}')"
if [ "${engine}" == "source" ]; then if [ "${engine}" == "source" ]; then
srcdslinuxpid=$(ps -ef | grep -v grep | grep "${gameserverpid}" | grep srcds_linux | awk '{print $2}') srcdslinuxpid="$(ps -ef | grep -v grep | grep "${gameserverpid}" | grep srcds_linux | awk '{print $2}')"
elif [ "${engine}" == "goldsrc" ]; then elif [ "${engine}" == "goldsrc" ]; then
hldslinuxpid=$(ps -ef | grep -v grep | grep "${gameserverpid}" | grep hlds_linux | awk '{print $2}') hldslinuxpid="$(ps -ef | grep -v grep | grep "${gameserverpid}" | grep hlds_linux | awk '{print $2}')"
fi fi
fi fi
### Distro information ### Distro information
## Distro ## Distro
# Returns architecture, kernel and distro/os. # Returns architecture, kernel and distro/os.
arch=$(uname -m) arch="$(uname -m)"
kernel=$(uname -r) kernel="$(uname -r)"
# Distro Name - Ubuntu 16.04 LTS # Distro Name - Ubuntu 16.04 LTS
# Distro Version - 16.04 # Distro Version - 16.04
@ -33,43 +33,53 @@ kernel=$(uname -r)
distro_info_array=( os-release lsb_release hostnamectl debian_version redhat-release ) distro_info_array=( os-release lsb_release hostnamectl debian_version redhat-release )
for distro_info in "${distro_info_array[@]}"; do for distro_info in "${distro_info_array[@]}"; do
if [ -f "/etc/os-release" ]&&[ "${distro_info}" == "os-release" ]; then if [ -f "/etc/os-release" ]&&[ "${distro_info}" == "os-release" ]; then
distroname=$(grep PRETTY_NAME /etc/os-release | sed 's/PRETTY_NAME=//g' | tr -d '="' | sed 's/\"//g') distroname="$(grep "PRETTY_NAME" /etc/os-release | awk -F\= '{gsub(/"/,"",$2);print $2}')"
distroversion=$(grep VERSION_ID /etc/os-release | sed 's/VERSION_ID=//g' | sed 's/\"//g') distroversion="$(grep "VERSION_ID" /etc/os-release | awk -F\= '{gsub(/"/,"",$2);print $2}')"
distroid=$(grep ID /etc/os-release | grep -v _ID | grep -v ID_ | sed 's/ID=//g' | sed 's/\"//g') # Special var for rhel like distros to removed point in number e.g 8.4 to just 8.
distrocodename=$(grep VERSION_CODENAME /etc/os-release | sed 's/VERSION_CODENAME=//g' | sed 's/\"//g') distroversionrh="$(sed -nr 's/^VERSION_ID="([0-9]*).+?"/\1/p' /etc/os-release)"
distroid="$(grep "ID=" /etc/os-release | grep -v _ID | awk -F\= '{gsub(/"/,"",$2);print $2}')"
distroidlike="$(grep "ID_LIKE=" /etc/os-release | grep -v _ID | awk -F\= '{gsub(/"/,"",$2);print $2}')"
distrocodename="$(grep "VERSION_CODENAME" /etc/os-release | awk -F\= '{gsub(/"/,"",$2);print $2}')"
elif [ "$(command -v lsb_release 2>/dev/null)" ]&&[ "${distro_info}" == "lsb_release" ]; then elif [ "$(command -v lsb_release 2>/dev/null)" ]&&[ "${distro_info}" == "lsb_release" ]; then
if [ -z "${distroname}" ];then if [ -z "${distroname}" ];then
distroname=$(lsb_release -sd) distroname="$(lsb_release -sd)"
elif [ -z "${distroversion}" ]; then elif [ -z "${distroversion}" ]; then
distroversion=$(lsb_release -sr) distroversion="$(lsb_release -sr)"
elif [ -z "${distroid}" ]; then elif [ -z "${distroid}" ]; then
distroid=$(lsb_release -si) distroid="$(lsb_release -si)"
elif [ -z "${distrocodename}" ]; then elif [ -z "${distrocodename}" ]; then
distrocodename=$(lsb_release -sc) distrocodename="$(lsb_release -sc)"
fi fi
elif [ "$(command -v hostnamectl 2>/dev/null)" ]&&[ "${distro_info}" == "hostnamectl" ]; then elif [ "$(command -v hostnamectl 2>/dev/null)" ]&&[ "${distro_info}" == "hostnamectl" ]; then
if [ -z "${distroname}" ];then if [ -z "${distroname}" ];then
distroname=$(hostnamectl | grep "Operating System" | sed 's/Operating System: //g') distroname="$(hostnamectl | grep "Operating System" | sed 's/Operating System: //g')"
fi fi
elif [ -f "/etc/debian_version" ]&&[ "${distro_info}" == "debian_version" ]; then elif [ -f "/etc/debian_version" ]&&[ "${distro_info}" == "debian_version" ]; then
if [ -z "${distroname}" ]; then if [ -z "${distroname}" ]; then
distroname="Debian $(cat /etc/debian_version)" distroname="Debian $(cat /etc/debian_version)"
elif [ -z "${distroversion}" ]; then elif [ -z "${distroversion}" ]; then
distroversion=$(cat /etc/debian_version) distroversion="$(cat /etc/debian_version)"
elif [ -z "${distroid}" ]; then elif [ -z "${distroid}" ]; then
distroid="debian" distroid="debian"
fi fi
elif [ -f "/etc/redhat-release" ]&&[ "${distro_info}" == "redhat-release" ]; then elif [ -f "/etc/redhat-release" ]&&[ "${distro_info}" == "redhat-release" ]; then
if [ -z "${distroname}" ]; then if [ -z "${distroname}" ]; then
distroname=$(cat /etc/redhat-release) distroname="$(cat /etc/redhat-release)"
elif [ -z "${distroversion}" ]; then elif [ -z "${distroversion}" ]; then
distroversion=$(rpm -qa \*-release | grep -Ei "oracle|redhat|centos|fedora" | cut -d"-" -f3) distroversion="$(rpm -qa \*-release | grep -Ei "oracle|redhat|centos|fedora" | cut -d"-" -f3)"
elif [ -z "${distroid}" ]; then elif [ -z "${distroid}" ]; then
distroid=$(awk '{print $1}' /etc/redhat-release) distroid="$(awk '{print $1}' /etc/redhat-release)"
fi fi
fi fi
done done
# some RHEL based distros use 8.4 instead of just 8.
if [[ "${distroidlike}" == *"rhel"* ]]||[ "${distroid}" == "rhel" ]; then
distroversioncsv="${distroversionrh}"
else
distroversioncsv="${distroversion}"
fi
# Check if distro supported by distro vendor. # Check if distro supported by distro vendor.
if [ "$(command -v distro-info 2>/dev/null)" ]; then if [ "$(command -v distro-info 2>/dev/null)" ]; then
distrosunsupported="$(distro-info --unsupported)" distrosunsupported="$(distro-info --unsupported)"
@ -89,7 +99,7 @@ fi
echo "${distrosupport}" echo "${distrosupport}"
## Glibc version ## Glibc version
# e.g: 1.17 # e.g: 1.17
glibcversion=$(ldd --version | sed -n '1s/.* //p') glibcversion="$(ldd --version | sed -n '1s/.* //p')"
## tmux version ## tmux version
# e.g: tmux 1.6 # e.g: tmux 1.6
@ -101,34 +111,38 @@ else
if [ "${tmuxvdigit}" -lt "16" ]; then if [ "${tmuxvdigit}" -lt "16" ]; then
tmuxv="$(tmux -V) (>= 1.6 required for console log)" tmuxv="$(tmux -V) (>= 1.6 required for console log)"
else else
tmuxv=$(tmux -V) tmuxv="$(tmux -V)"
fi fi
fi fi
if [ "$(command -V java 2>/dev/null)" ]; then if [ "$(command -V java 2>/dev/null)" ]; then
javaversion=$(java -version 2>&1 | grep "version") javaversion="$(java -version 2>&1 | grep "version")"
fi
if [ "$(command -v mono 2>/dev/null)" ]; then
monoversion="$(mono --version 2>&1 | grep -Po '(?<=version )\d')"
fi fi
## Uptime ## Uptime
uptime=$(</proc/uptime) uptime="$(</proc/uptime)"
uptime=${uptime/[. ]*/} uptime=${uptime/[. ]*/}
minutes=$(( uptime/60%60 )) minutes="$(( uptime/60%60 ))"
hours=$(( uptime/60/60%24 )) hours="$(( uptime/60/60%24 ))"
days=$(( uptime/60/60/24 )) days="$(( uptime/60/60/24 ))"
### Performance information ### Performance information
## Average server load ## Average server load
load=$(uptime|awk -F 'load average: ' '{ print $2 }') load="$(uptime|awk -F 'load average: ' '{ print $2 }')"
## CPU information ## CPU information
cpumodel=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//') cpumodel="$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')"
cpucores=$(awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo) cpucores="$(awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo)"
cpufreqency=$(awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//') cpufreqency="$(awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')"
# CPU usage of the game server pid # CPU usage of the game server pid
if [ -n "${gameserverpid}" ]; then if [ -n "${gameserverpid}" ]; then
cpuused=$(ps --forest -o pcpu -g "${gameserverpid}"|awk '{s+=$1} END {print s}') cpuused="$(ps --forest -o pcpu -g "${gameserverpid}"|awk '{s+=$1} END {print s}')"
cpuusedmhz=$(echo "${cpufreqency} * ${cpuused} / 100" | bc ) cpuusedmhz="$(echo "${cpufreqency} * ${cpuused} / 100" | bc)"
fi fi
## Memory information ## Memory information
@ -139,86 +153,86 @@ if [ "$(command -v numfmt 2>/dev/null)" ]; then
# Issue #2005 - Kernel 3.14+ contains MemAvailable which should be used. All others will be calculated. # Issue #2005 - Kernel 3.14+ contains MemAvailable which should be used. All others will be calculated.
# get the raw KB values of these fields. # get the raw KB values of these fields.
physmemtotalkb=$(grep MemTotal /proc/meminfo | awk '{print $2}') physmemtotalkb="$(grep MemTotal /proc/meminfo | awk '{print $2}')"
physmemfreekb=$(grep ^MemFree /proc/meminfo | awk '{print $2}') physmemfreekb="$(grep ^MemFree /proc/meminfo | awk '{print $2}')"
physmembufferskb=$(grep ^Buffers /proc/meminfo | awk '{print $2}') physmembufferskb="$(grep ^Buffers /proc/meminfo | awk '{print $2}')"
physmemcachedkb=$(grep ^Cached /proc/meminfo | awk '{print $2}') physmemcachedkb="$(grep ^Cached /proc/meminfo | awk '{print $2}')"
physmemreclaimablekb=$(grep ^SReclaimable /proc/meminfo | awk '{print $2}') physmemreclaimablekb="$(grep ^SReclaimable /proc/meminfo | awk '{print $2}')"
# check if MemAvailable Exists. # check if MemAvailable Exists.
if grep -q ^MemAvailable /proc/meminfo; then if grep -q ^MemAvailable /proc/meminfo; then
physmemactualfreekb=$(grep ^MemAvailable /proc/meminfo | awk '{print $2}') physmemactualfreekb="$(grep ^MemAvailable /proc/meminfo | awk '{print $2}')"
else else
physmemactualfreekb=$((physmemfreekb+physmembufferskb+physmemcachedkb)) physmemactualfreekb="$((physmemfreekb+physmembufferskb+physmemcachedkb))"
fi fi
# Available RAM and swap. # Available RAM and swap.
physmemtotalmb=$((physmemtotalkb/1024)) physmemtotalmb="$((physmemtotalkb/1024))"
physmemtotal=$(numfmt --to=iec --from=iec --suffix=B "${physmemtotalkb}K") physmemtotal="$(numfmt --to=iec --from=iec --suffix=B "${physmemtotalkb}K")"
physmemfree=$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K") physmemfree="$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K")"
physmemused=$(numfmt --to=iec --from=iec --suffix=B "$((physmemtotalkb-physmemfreekb-physmembufferskb-physmemcachedkb-physmemreclaimablekb))K") physmemused="$(numfmt --to=iec --from=iec --suffix=B "$((physmemtotalkb-physmemfreekb-physmembufferskb-physmemcachedkb-physmemreclaimablekb))K")"
physmemavailable=$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K") physmemavailable="$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K")"
physmemcached=$(numfmt --to=iec --from=iec --suffix=B "$((physmemcachedkb+physmemreclaimablekb))K") physmemcached="$(numfmt --to=iec --from=iec --suffix=B "$((physmemcachedkb+physmemreclaimablekb))K")"
swaptotal=$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapTotal /proc/meminfo | awk '{print $2}')K") swaptotal="$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapTotal /proc/meminfo | awk '{print $2}')K")"
swapfree=$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapFree /proc/meminfo | awk '{print $2}')K") swapfree="$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapFree /proc/meminfo | awk '{print $2}')K")"
swapused=$(numfmt --to=iec --from=iec --suffix=B "$(($(grep ^SwapTotal /proc/meminfo | awk '{print $2}')-$(grep ^SwapFree /proc/meminfo | awk '{print $2}')))K") swapused="$(numfmt --to=iec --from=iec --suffix=B "$(($(grep ^SwapTotal /proc/meminfo | awk '{print $2}')-$(grep ^SwapFree /proc/meminfo | awk '{print $2}')))K")"
# RAM usage of the game server pid # RAM usage of the game server pid
# MB # MB
if [ "${gameserverpid}" ]; then if [ "${gameserverpid}" ]; then
memused=$(ps --forest -o rss -g "${gameserverpid}" | awk '{s+=$1} END {print s}'| awk '{$1/=1024;printf "%.0f",$1}{print $2}') memused="$(ps --forest -o rss -g "${gameserverpid}" | awk '{s+=$1} END {print s}'| awk '{$1/=1024;printf "%.0f",$1}{print $2}')"
# % # %
pmemused=$(ps --forest -o %mem -g "${gameserverpid}" | awk '{s+=$1} END {print s}') pmemused="$(ps --forest -o %mem -g "${gameserverpid}" | awk '{s+=$1} END {print s}')"
fi fi
else else
# Older distros will need to use free. # Older distros will need to use free.
# Older versions of free do not support -h option. # Older versions of free do not support -h option.
if [ "$(free -h > /dev/null 2>&1; echo $?)" -ne "0" ]; then if [ "$(free -h > /dev/null 2>&1; echo $?)" -ne "0" ]; then
humanreadable="-m" humanreadable="-m"
else else
humanreadable="-h" humanreadable="-h"
fi fi
physmemtotalmb=$(free -m | awk '/Mem:/ {print $2}') physmemtotalmb="$(free -m | awk '/Mem:/ {print $2}')"
physmemtotal=$(free ${humanreadable} | awk '/Mem:/ {print $2}') physmemtotal="$(free ${humanreadable} | awk '/Mem:/ {print $2}')"
physmemfree=$(free ${humanreadable} | awk '/Mem:/ {print $4}') physmemfree="$(free ${humanreadable} | awk '/Mem:/ {print $4}')"
physmemused=$(free ${humanreadable} | awk '/Mem:/ {print $3}') physmemused="$(free ${humanreadable} | awk '/Mem:/ {print $3}')"
oldfree=$(free ${humanreadable} | awk '/cache:/') oldfree="$(free ${humanreadable} | awk '/cache:/')"
if [ "${oldfree}" ]; then if [ "${oldfree}" ]; then
physmemavailable="n/a" physmemavailable="n/a"
physmemcached="n/a" physmemcached="n/a"
else else
physmemavailable=$(free ${humanreadable} | awk '/Mem:/ {print $7}') physmemavailable="$(free ${humanreadable} | awk '/Mem:/ {print $7}')"
physmemcached=$(free ${humanreadable} | awk '/Mem:/ {print $6}') physmemcached="$(free ${humanreadable} | awk '/Mem:/ {print $6}')"
fi fi
swaptotal=$(free ${humanreadable} | awk '/Swap:/ {print $2}') swaptotal="$(free ${humanreadable} | awk '/Swap:/ {print $2}')"
swapused=$(free ${humanreadable} | awk '/Swap:/ {print $3}') swapused="$(free ${humanreadable} | awk '/Swap:/ {print $3}')"
swapfree=$(free ${humanreadable} | awk '/Swap:/ {print $4}') swapfree="$(free ${humanreadable} | awk '/Swap:/ {print $4}')"
fi fi
### Disk information ### Disk information
## Available disk space on the partition. ## Available disk space on the partition.
filesystem=$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $1}') filesystem="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $1}')"
totalspace=$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $2}') totalspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $2}')"
usedspace=$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $3}') usedspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $3}')"
availspace=$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $4}') availspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $4}')"
## LinuxGSM used space total. ## LinuxGSM used space total.
rootdirdu=$(du -sh "${rootdir}" 2> /dev/null | awk '{print $1}') rootdirdu="$(du -sh "${rootdir}" 2> /dev/null | awk '{print $1}')"
if [ -z "${rootdirdu}" ]; then if [ -z "${rootdirdu}" ]; then
rootdirdu="0M" rootdirdu="0M"
fi fi
## LinuxGSM used space in serverfiles dir. ## LinuxGSM used space in serverfiles dir.
serverfilesdu=$(du -sh "${serverfiles}" 2> /dev/null | awk '{print $1}') serverfilesdu="$(du -sh "${serverfiles}" 2> /dev/null | awk '{print $1}')"
if [ -z "${serverfilesdu}" ]; then if [ -z "${serverfilesdu}" ]; then
serverfilesdu="0M" serverfilesdu="0M"
fi fi
## LinuxGSM used space total minus backup dir. ## LinuxGSM used space total minus backup dir.
rootdirduexbackup=$(du -sh --exclude="${backupdir}" "${serverfiles}" 2> /dev/null | awk '{print $1}') rootdirduexbackup="$(du -sh --exclude="${backupdir}" "${serverfiles}" 2> /dev/null | awk '{print $1}')"
if [ -z "${rootdirduexbackup}" ]; then if [ -z "${rootdirduexbackup}" ]; then
rootdirduexbackup="0M" rootdirduexbackup="0M"
fi fi
@ -226,7 +240,7 @@ fi
## Backup info ## Backup info
if [ -d "${backupdir}" ]; then if [ -d "${backupdir}" ]; then
# Used space in backups dir. # Used space in backups dir.
backupdirdu=$(du -sh "${backupdir}" | awk '{print $1}') backupdirdu="$(du -sh "${backupdir}" | awk '{print $1}')"
# If no backup dir, size is 0M. # If no backup dir, size is 0M.
if [ -z "${backupdirdu}" ]; then if [ -z "${backupdirdu}" ]; then
backupdirdu="0M" backupdirdu="0M"
@ -238,15 +252,15 @@ if [ -d "${backupdir}" ]; then
# If there are backups in backup dir. # If there are backups in backup dir.
if [ "$(find "${backupdir}" -name "*.tar.gz" | wc -l)" -ne "0" ]; then if [ "$(find "${backupdir}" -name "*.tar.gz" | wc -l)" -ne "0" ]; then
# number of backups. # number of backups.
backupcount=$(find "${backupdir}"/*.tar.gz | wc -l) backupcount="$(find "${backupdir}"/*.tar.gz | wc -l)"
# most recent backup. # most recent backup.
lastbackup=$(ls -1t "${backupdir}"/*.tar.gz | head -1) lastbackup="$(ls -1t "${backupdir}"/*.tar.gz | head -1)"
# date of most recent backup. # date of most recent backup.
lastbackupdate=$(date -r "${lastbackup}") lastbackupdate="$(date -r "${lastbackup}")"
# no of days since last backup. # no of days since last backup.
lastbackupdaysago=$(( ( $(date +'%s') - $(date -r "${lastbackup}" +'%s') )/60/60/24 )) lastbackupdaysago="$(( ( $(date +'%s') - $(date -r "${lastbackup}" +'%s') )/60/60/24 ))"
# size of most recent backup. # size of most recent backup.
lastbackupsize=$(du -h "${lastbackup}" | awk '{print $1}') lastbackupsize="$(du -h "${lastbackup}" | awk '{print $1}')"
fi fi
fi fi
@ -256,7 +270,7 @@ netlink=$(${ethtoolcommand} "${netint}" 2>/dev/null| grep Speed | awk '{print $2
# External IP address # External IP address
if [ -z "${extip}" ]; then if [ -z "${extip}" ]; then
extip=$(curl --connect-timeout 10 -s https://api.ipify.org 2>/dev/null) extip="$(curl --connect-timeout 10 -s https://api.ipify.org 2>/dev/null)"
exitcode=$? exitcode=$?
# Should ifconfig.co return an error will use last known IP. # Should ifconfig.co return an error will use last known IP.
if [ ${exitcode} -eq 0 ]; then if [ ${exitcode} -eq 0 ]; then
@ -264,14 +278,14 @@ if [ -z "${extip}" ]; then
echo -e "${extip}" > "${tmpdir}/extip.txt" echo -e "${extip}" > "${tmpdir}/extip.txt"
else else
if [ -f "${tmpdir}/extip.txt" ]; then if [ -f "${tmpdir}/extip.txt" ]; then
extip=$(cat "${tmpdir}/extip.txt") extip="$(cat "${tmpdir}/extip.txt")"
else else
fn_print_error_nl "Unable to get external IP" fn_print_error_nl "Unable to get external IP"
fi fi
fi fi
else else
if [ -f "${tmpdir}/extip.txt" ]; then if [ -f "${tmpdir}/extip.txt" ]; then
extip=$(cat "${tmpdir}/extip.txt") extip="$(cat "${tmpdir}/extip.txt")"
else else
fn_print_error_nl "Unable to get external IP" fn_print_error_nl "Unable to get external IP"
fi fi
@ -288,26 +302,27 @@ else
fi fi
# Steam Master Server - checks if detected by master server. # Steam Master Server - checks if detected by master server.
if [ "$(command -v jq 2>/dev/null)" ]; then if [ -z "${displaymasterserver}" ]; then
if [ "${ip}" ]&&[ "${port}" ]; then if [ "$(command -v jq 2>/dev/null)" ]; then
if [ "${steammaster}" == "true" ]||[ ${commandname} == "DEV-QUERY-RAW" ]; then if [ "${ip}" ]&&[ "${port}" ]; then
# Will query server IP addresses first. if [ "${steammaster}" == "true" ]||[ "${commandname}" == "DEV-QUERY-RAW" ]; then
for queryip in "${queryips[@]}"; do # Will query server IP addresses first.
masterserver="$(curl --connect-timeout 10 -m 3 -s 'https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr='${queryip}':'${port}'&format=json' | jq '.response.servers[]|.addr' | wc -l 2>/dev/null)" for queryip in "${queryips[@]}"; do
done masterserver="$(curl --connect-timeout 10 -m 3 -s "https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${queryip}&format=json" | jq --arg port "${port}" --arg queryport "${queryport}" '.response.servers[] | select((.gameport == ($port|tonumber) or (.gameport == ($queryport|tonumber)))) | .addr' | wc -l 2>/dev/null)"
# Should that not work it will try the external IP. done
if [ "${masterserver}" == "0" ]; then # Should that not work it will try the external IP.
masterserver="$(curl --connect-timeout 10 -m 3 -s 'https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr='${extip}':'${port}'&format=json' | jq '.response.servers[]|.addr' | wc -l 2>/dev/null)" if [ "${masterserver}" == "0" ]; then
fi masterserver="$(curl --connect-timeout 10 -m 3 -s "https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${extip}&format=json" | jq --arg port "${port}" --arg queryport "${queryport}" '.response.servers[] | select((.gameport == ($port|tonumber) or (.gameport == ($queryport|tonumber)))) | .addr' | wc -l 2>/dev/null)"
if [ "${masterserver}" == "0" ]; then fi
displaymasterserver="false" if [ "${masterserver}" == "0" ]; then
else displaymasterserver="false"
displaymasterserver="true" else
displaymasterserver="true"
fi
fi fi
fi fi
fi fi
fi fi
# Sets the SteamCMD glibc requirement if the game server requirement is less or not required. # Sets the SteamCMD glibc requirement if the game server requirement is less or not required.
if [ "${appid}" ]; then if [ "${appid}" ]; then
if [ "${glibc}" = "null" ]||[ -z "${glibc}" ]||[ "$(printf '%s\n'${glibc}'\n' "2.14" | sort -V | head -n 1)" != "2.14" ]; then if [ "${glibc}" = "null" ]||[ -z "${glibc}" ]||[ "$(printf '%s\n'${glibc}'\n' "2.14" | sort -V | head -n 1)" != "2.14" ]; then

119
lgsm/functions/info_game.sh

@ -258,6 +258,26 @@ fn_info_game_bt1944(){
rconport=$((port+2)) rconport=$((port+2))
} }
fn_info_game_cd(){
if [ ! -f "${servercfgfullpath}" ]; then
servername="${unavailable}"
port="${zero}"
rconenabled="false"
rconport="${zero}"
rconpassword="${unavailable}"
steamport="${zero}"
maxplayers="${zero}"
else
servername=$(jq -r '.game_title' "${servercfgfullpath}")
port=$(jq -r '.game_port' "${servercfgfullpath}")
steamport=$(jq -r '.steam_port_messages' "${servercfgfullpath}")
rconenabled=$(jq -r '.rcon' "${servercfgfullpath}")
rconport=$(jq -r '.rcon_port' "${servercfgfullpath}")
rconpassword=$(jq -r '.rcon_password' "${servercfgfullpath}")
maxplayers=$(jq -r '.player_count' "${servercfgfullpath}")
fi
}
fn_info_game_cmw(){ fn_info_game_cmw(){
# Config # Config
if [ ! -f "${servercfgfullpath}" ]; then if [ ! -f "${servercfgfullpath}" ]; then
@ -442,6 +462,34 @@ fn_info_game_dodr(){
queryport=${queryport:-"27015"} queryport=${queryport:-"27015"}
} }
fn_info_game_dayz(){
# Config
if [ ! -f "${servercfgfullpath}" ]; then
servername="${unavailable}"
adminpassword="${unavailable}"
serverpassword="${unavailable}"
maxplayers="${zero}"
else
servername=$(sed -nr 's/^hostname\s*=\s*"(.*)"\s*;/\1/p' "${servercfgfullpath}")
adminpassword=$(sed -nr 's/^passwordAdmin\s*=\s*"(.*)"\s*;/\1/p' "${servercfgfullpath}")
serverpassword=$(sed -nr 's/^password\s*=\s*"(.*)"\s*;/\1/p' "${servercfgfullpath}")
maxplayers=$(sed -nr 's/^maxPlayers\s*=\s*([0-9]+)\s*;/\1/p' "${servercfgfullpath}")
queryport=$(sed -nr 's/^steamQueryPort\s*=\s*([0-9]+)\s*;/\1/p' "${servercfgfullpath}")
# Not Set
servername=${servername:-"NOT SET"}
adminpassword=${adminpassword:-"NOT SET"}
serverpassword=${serverpassword:-"NOT SET"}
maxplayers=${maxplayers:-"0"}
queryport=${queryport:-"27016"}
fi
# Parameters
port=${port:-"2302"}
steammasterport=$((port+2))
battleeyeport=$((port+4))
}
fn_info_game_dst(){ fn_info_game_dst(){
# Config # Config
if [ ! -f "${clustercfgfullpath}" ]; then if [ ! -f "${clustercfgfullpath}" ]; then
@ -790,6 +838,14 @@ fn_info_game_kf2(){
defaultmap=${defaultmap:-"NOT SET"} defaultmap=${defaultmap:-"NOT SET"}
} }
fn_info_game_lo(){
# Parameters
servername=${servername:-"NOT SET"}
port=${port:-"0"}
queryport=${queryport:-"0"}
maxplayers=${slots:-"0"}
}
fn_info_game_mc(){ fn_info_game_mc(){
# Config # Config
if [ ! -f "${servercfgfullpath}" ]; then if [ ! -f "${servercfgfullpath}" ]; then
@ -803,7 +859,7 @@ fn_info_game_mc(){
gamemode="${unavailable}" gamemode="${unavailable}"
gameworld="${unavailable}" gameworld="${unavailable}"
else else
servername=$(grep "motd" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/motd//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') servername=$(grep "motd" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/motd//g' | tr -d '=\";,:' | sed 's/\\u00A70//g;s/\\u00A71//g;s/\\u00A72//g;s/\\u00A73//g;s/\\u00A74//g;s/\\u00A75//g;s/\\u00A76//g;s/\\u00A77//g;s/\\u00A78//g;s/\\u00A79//g;s/\\u00A7a//g;s/\\u00A7b//g;s/\\u00A7c//g;s/\\u00A7d//g;s/\\u00A7e//g;s/\\u00A7f//g;s/\\u00A7l//g;s/\\u00A7o//g;s/\\u00A7n//g;s/\\u00A7m//g;s/\\u00A7k//g' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
rconpassword=$(grep "rcon.password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/rcon.password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') rconpassword=$(grep "rcon.password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/rcon.password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
rconport=$(grep "rcon.port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]') rconport=$(grep "rcon.port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
maxplayers=$(grep "max-players" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]') maxplayers=$(grep "max-players" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
@ -1077,7 +1133,9 @@ fn_info_game_pstbs(){
# Parameters # Parameters
port=${port:-"0"} port=${port:-"0"}
queryport=${port:-"0"} if [ -z "${queryport}" ]; then
queryport=${port:-"0"}
fi
rconport=${rconport:-"0"} rconport=${rconport:-"0"}
randommap=${randommap:-"NOT SET"} randommap=${randommap:-"NOT SET"}
maxplayers=${maxplayers:-"0"} maxplayers=${maxplayers:-"0"}
@ -1548,6 +1606,14 @@ fn_info_game_sdtd(){
fi fi
} }
fn_info_game_sf(){
# Parameters
servername=${selfname:-"NOT SET"}
port=${port:-"0"}
queryport=${queryport:-"0"}
beaconport=${beaconport:-"0"}
}
fn_info_game_sof2(){ fn_info_game_sof2(){
# Config # Config
if [ ! -f "${servercfgfullpath}" ]; then if [ ! -f "${servercfgfullpath}" ]; then
@ -1741,6 +1807,9 @@ fn_info_game_stn(){
port=$(sed -nr 's/^ServerPort=([0-9]+)/\1/p' "${servercfgfullpath}") port=$(sed -nr 's/^ServerPort=([0-9]+)/\1/p' "${servercfgfullpath}")
serverpassword=$(sed -nr 's/^ServerPassword=(.*)$/\1/p' "${servercfgfullpath}") serverpassword=$(sed -nr 's/^ServerPassword=(.*)$/\1/p' "${servercfgfullpath}")
queryport=$((port + 1)) queryport=$((port + 1))
# Not set
serverpassword=${serverpassword:-"NOT SET"}
else else
servername="${unavailable}" servername="${unavailable}"
configip=${configip:-"0.0.0.0"} configip=${configip:-"0.0.0.0"}
@ -1750,6 +1819,16 @@ fn_info_game_stn(){
fi fi
} }
fn_info_game_ti(){
if [ -f "${servercfgfullpath}" ]; then
servername=$(sed -nr 's/^ServerName="(.*)"/\1/p' "${servercfgfullpath}")
maxplayers=$(sed -nr 's/^MaxPlayerCount=([0-9]+)/\1/' "${servercfgfullpath}")
else
servername="${unavailable}"
maxplayers="${zero}"
fi
}
fn_info_game_ts3(){ fn_info_game_ts3(){
# Config # Config
if [ ! -f "${servercfgfullpath}" ]; then if [ ! -f "${servercfgfullpath}" ]; then
@ -1922,7 +2001,8 @@ fn_info_game_unt(){
# Parameters # Parameters
servername=${selfname:-"NOT SET"} servername=${selfname:-"NOT SET"}
port=${port:-"0"} port=${port:-"0"}
queryport=$((port+1)) queryport=${port}
steamport=$((port+1))
} }
fn_info_game_ut(){ fn_info_game_ut(){
@ -2035,6 +2115,27 @@ fn_info_game_vh(){
servername=${servername:-"NOT SET"} servername=${servername:-"NOT SET"}
} }
fn_info_game_vints(){
if [ ! -f "${servercfgfullpath}" ]; then
servername="${unavailable}"
maxplayers="${unavailable}"
serverpassword="${unavailable}"
port="${unavailable}"
queryport="${unavailable}"
configip="${unavailable}"
else
servername=$(jq -r '.ServerName' "${servercfgfullpath}")
maxplayers=$(jq -r '.MaxClients' "${servercfgfullpath}")
serverpassword=$(jq -r 'select(.Password != null) | .Password' "${servercfgfullpath}")
port=$(jq -r '.Port' "${servercfgfullpath}")
queryport=${port:-"0"}
configip=$(jq -r 'select(.Ip != null) | .Ip' "${servercfgfullpath}")
serverpassword=${serverpassword:-"NOT SET"}
configip=${configip:-"0.0.0.0"}
fi
}
fn_info_game_wet(){ fn_info_game_wet(){
# Config # Config
if [ ! -f "${servercfgfullpath}" ]; then if [ ! -f "${servercfgfullpath}" ]; then
@ -2166,6 +2267,8 @@ elif [ "${shortname}" == "bt" ]; then
fn_info_game_bt fn_info_game_bt
elif [ "${shortname}" == "bt1944" ]; then elif [ "${shortname}" == "bt1944" ]; then
fn_info_game_bt1944 fn_info_game_bt1944
elif [ "${shortname}" == "cd" ]; then
fn_info_game_cd
elif [ "${shortname}" == "cmw" ]; then elif [ "${shortname}" == "cmw" ]; then
fn_info_game_cmw fn_info_game_cmw
elif [ "${shortname}" == "cod" ]; then elif [ "${shortname}" == "cod" ]; then
@ -2180,6 +2283,8 @@ elif [ "${shortname}" == "codwaw" ]; then
fn_info_game_codwaw fn_info_game_codwaw
elif [ "${shortname}" == "col" ]; then elif [ "${shortname}" == "col" ]; then
fn_info_game_col fn_info_game_col
elif [ "${shortname}" == "dayz" ]; then
fn_info_game_dayz
elif [ "${shortname}" == "dodr" ]; then elif [ "${shortname}" == "dodr" ]; then
fn_info_game_dodr fn_info_game_dodr
elif [ "${shortname}" == "dst" ]; then elif [ "${shortname}" == "dst" ]; then
@ -2204,6 +2309,8 @@ elif [ "${shortname}" == "kf" ]; then
fn_info_game_kf fn_info_game_kf
elif [ "${shortname}" == "kf2" ]; then elif [ "${shortname}" == "kf2" ]; then
fn_info_game_kf2 fn_info_game_kf2
elif [ "${shortname}" == "lo" ]; then
fn_info_game_lo
elif [ "${shortname}" == "mc" ]||[ "${shortname}" == "pmc" ]; then elif [ "${shortname}" == "mc" ]||[ "${shortname}" == "pmc" ]; then
fn_info_game_mc fn_info_game_mc
elif [ "${shortname}" == "mcb" ]; then elif [ "${shortname}" == "mcb" ]; then
@ -2254,6 +2361,8 @@ elif [ "${shortname}" == "scpsl" ]||[ "${shortname}" == "scpslsm" ]; then
fn_info_game_scpsl fn_info_game_scpsl
elif [ "${shortname}" == "sdtd" ]; then elif [ "${shortname}" == "sdtd" ]; then
fn_info_game_sdtd fn_info_game_sdtd
elif [ "${shortname}" == "sf" ]; then
fn_info_game_sf
elif [ "${shortname}" == "sof2" ]; then elif [ "${shortname}" == "sof2" ]; then
fn_info_game_sof2 fn_info_game_sof2
elif [ "${shortname}" == "sol" ]; then elif [ "${shortname}" == "sol" ]; then
@ -2268,6 +2377,10 @@ elif [ "${shortname}" == "stn" ]; then
fn_info_game_stn fn_info_game_stn
elif [ "${shortname}" == "terraria" ]; then elif [ "${shortname}" == "terraria" ]; then
fn_info_game_terraria fn_info_game_terraria
elif [ "${shortname}" == "ti" ]; then
fn_info_game_ti
elif [ "${shortname}" == "ts3" ]; then
fn_info_game_ts3
elif [ "${shortname}" == "tu" ]; then elif [ "${shortname}" == "tu" ]; then
fn_info_game_tu fn_info_game_tu
elif [ "${shortname}" == "tw" ]; then elif [ "${shortname}" == "tw" ]; then

51
lgsm/functions/info_messages.sh

@ -658,7 +658,7 @@ fn_info_message_ports_edit(){
startparameterslocation="${red}UNKNOWN${default}" startparameterslocation="${red}UNKNOWN${default}"
# engines/games that require editing in the config file. # engines/games that require editing in the config file.
local ports_edit_array=( "ac" "arma3" "bo" "bt" "dst" "eco" "idtech2" "idtech3" "idtech3_ql" "jc2" "jc3" "lwjgl2" "mcb" "mumble" "pc" "pz" "qw" "refractor" "renderware" "rw" "sb" "sdtd" "st" "stn" "ts3" "tw" "terraria" "unreal" "unreal2" "unreal3" "vints" "wurm") local ports_edit_array=( "ac" "arma3" "bo" "bt" "cd" "dst" "eco" "idtech2" "idtech3" "idtech3_ql" "jc2" "jc3" "lwjgl2" "mcb" "mumble" "pc" "pz" "qw" "refractor" "renderware" "rw" "sb" "sdtd" "st" "stn" "ts3" "tw" "terraria" "unreal" "unreal2" "unreal3" "vints" "wurm")
for port_edit in "${ports_edit_array[@]}"; do for port_edit in "${ports_edit_array[@]}"; do
if [ "${shortname}" == "ut3" ]; then if [ "${shortname}" == "ut3" ]; then
startparameterslocation="${servercfgdir}/UTWeb.ini" startparameterslocation="${servercfgdir}/UTWeb.ini"
@ -669,7 +669,7 @@ fn_info_message_ports_edit(){
fi fi
done done
# engines/games that require editing the start parameters. # engines/games that require editing the start parameters.
local ports_edit_array=( "av" "col" "fctr" "goldsrc" "hw" "iw3.0" "ioquake3" "qfusion" "rust" "scpsl" "scpslsm" "sol" "spark" "source" "unreal4" "arma3" "unt" "vh" ) local ports_edit_array=( "av" "col" "fctr" "goldsrc" "hw" "iw3.0" "ioquake3" "qfusion" "rust" "scpsl" "scpslsm" "sol" "spark" "source" "unreal4" "arma3" "dayz" "unt" "vh" )
for port_edit in "${ports_edit_array[@]}"; do for port_edit in "${ports_edit_array[@]}"; do
if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]||[ "${shortname}" == "${port_edit}" ]; then if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]||[ "${shortname}" == "${port_edit}" ]; then
startparameterslocation="${configdirserver}" startparameterslocation="${configdirserver}"
@ -800,7 +800,7 @@ fn_info_message_arma3(){
fn_port "header" fn_port "header"
fn_port "Game" port udp fn_port "Game" port udp
fn_port "Voice" voiceport udp fn_port "Voice" voiceport udp
fn_port "Query Steam" queryport udp fn_port "Query" queryport udp
fn_port "Steam Master" steammasterport udp fn_port "Steam Master" steammasterport udp
fn_port "Voice (unused)" voiceunusedport udp fn_port "Voice (unused)" voiceunusedport udp
fn_port "BattleEye" battleeyeport udp fn_port "BattleEye" battleeyeport udp
@ -859,6 +859,15 @@ fn_info_message_bt1944(){
} | column -s $'\t' -t } | column -s $'\t' -t
} }
fn_info_messages_cd(){
{
fn_port "header"
fn_port "Game" port udp
fn_port "Steam" steamport udp
fn_port "RCON" rconport tcp
} | column -s $'\t' -t
}
fn_info_message_cmw(){ fn_info_message_cmw(){
fn_info_message_password_strip fn_info_message_password_strip
{ {
@ -929,6 +938,16 @@ fn_info_message_csgo(){
} | column -s $'\t' -t } | column -s $'\t' -t
} }
fn_info_message_dayz(){
{
fn_port "header"
fn_port "Game" port udp
fn_port "Query Steam" queryport udp
fn_port "Steam Master" steammasterport udp
fn_port "BattleEye" battleeyeport udp
} | column -s $'\t' -t
}
fn_info_message_dodr(){ fn_info_message_dodr(){
{ {
fn_port "header" fn_port "header"
@ -1332,6 +1351,15 @@ fn_info_message_sdtd(){
} | column -s $'\t' -t } | column -s $'\t' -t
} }
fn_info_message_sf(){
{
fn_port "header"
fn_port "Game" port udp
fn_port "Query" queryport udp
fn_port "Beacon" beaconport udp
} | column -s $'\t' -t
}
fn_info_message_sof2(){ fn_info_message_sof2(){
{ {
fn_port "header" fn_port "header"
@ -1356,7 +1384,7 @@ fn_info_message_source(){
fn_port "RCON" rconport tcp fn_port "RCON" rconport tcp
fn_port "SourceTV" sourcetvport udp fn_port "SourceTV" sourcetvport udp
# Will not show if unaviable # Will not show if unaviable
if [ "${steamport}" == "0" ]||[ -z "${steamport}" ]; then if [ "${steamport}" == "0" ]||[ -v "${steamport}" ]; then
fn_port "Steam" steamport udp fn_port "Steam" steamport udp
fi fi
fn_port "Client" clientport udp fn_port "Client" clientport udp
@ -1405,6 +1433,12 @@ fn_info_message_st(){
} | column -s $'\t' -t } | column -s $'\t' -t
} }
fn_info_message_ti(){
fn_port "header"
fn_port "Game" port udp
fn_port "Query" queryport udp
}
fn_info_message_ts3(){ fn_info_message_ts3(){
{ {
fn_port "header" fn_port "header"
@ -1508,6 +1542,7 @@ fn_info_message_unt(){
fn_port "header" fn_port "header"
fn_port "Game" port udp fn_port "Game" port udp
fn_port "Query" queryport udp fn_port "Query" queryport udp
fn_port "Steam" steamport udp
} | column -s $'\t' -t } | column -s $'\t' -t
} }
@ -1605,6 +1640,8 @@ fn_info_message_select_engine(){
fn_info_message_bt fn_info_message_bt
elif [ "${shortname}" == "bt1944" ]; then elif [ "${shortname}" == "bt1944" ]; then
fn_info_message_bt1944 fn_info_message_bt1944
elif [ "${shortname}" == "cd" ]; then
fn_info_messages_cd
elif [ "${shortname}" == "csgo" ]; then elif [ "${shortname}" == "csgo" ]; then
fn_info_message_csgo fn_info_message_csgo
elif [ "${shortname}" == "cmw" ]; then elif [ "${shortname}" == "cmw" ]; then
@ -1621,6 +1658,8 @@ fn_info_message_select_engine(){
fn_info_message_codwaw fn_info_message_codwaw
elif [ "${shortname}" == "col" ]; then elif [ "${shortname}" == "col" ]; then
fn_info_message_col fn_info_message_col
elif [ "${shortname}" == "dayz" ]; then
fn_info_message_dayz
elif [ "${shortname}" == "dodr" ]; then elif [ "${shortname}" == "dodr" ]; then
fn_info_message_dodr fn_info_message_dodr
elif [ "${shortname}" == "dst" ]; then elif [ "${shortname}" == "dst" ]; then
@ -1695,6 +1734,8 @@ fn_info_message_select_engine(){
fn_info_message_scpsl fn_info_message_scpsl
elif [ "${shortname}" == "sdtd" ]; then elif [ "${shortname}" == "sdtd" ]; then
fn_info_message_sdtd fn_info_message_sdtd
elif [ "${shortname}" == "sf" ]; then
fn_info_message_sf
elif [ "${shortname}" == "sof2" ]; then elif [ "${shortname}" == "sof2" ]; then
fn_info_message_sof2 fn_info_message_sof2
elif [ "${shortname}" == "sol" ]; then elif [ "${shortname}" == "sol" ]; then
@ -1707,6 +1748,8 @@ fn_info_message_select_engine(){
fn_info_message_stn fn_info_message_stn
elif [ "${shortname}" == "terraria" ]; then elif [ "${shortname}" == "terraria" ]; then
fn_info_message_terraria fn_info_message_terraria
elif [ "${shortname}" == "ti" ]; then
fn_info_message_ti
elif [ "${shortname}" == "ts3" ]; then elif [ "${shortname}" == "ts3" ]; then
fn_info_message_ts3 fn_info_message_ts3
elif [ "${shortname}" == "tu" ]; then elif [ "${shortname}" == "tu" ]; then

23
lgsm/functions/install_config.sh

@ -159,7 +159,6 @@ fn_list_config_locations(){
fi fi
echo -e "LinuxGSM Config: ${lgsmdir}/config-lgsm/${gameservername}" echo -e "LinuxGSM Config: ${lgsmdir}/config-lgsm/${gameservername}"
echo -e "Documentation: https://docs.linuxgsm.com/configuration/game-server-config" echo -e "Documentation: https://docs.linuxgsm.com/configuration/game-server-config"
echo -e ""
} }
if [ "${shortname}" == "sdtd" ]; then if [ "${shortname}" == "sdtd" ]; then
@ -352,6 +351,14 @@ elif [ "${shortname}" == "css" ]; then
fn_default_config_remote fn_default_config_remote
fn_set_config_vars fn_set_config_vars
fn_list_config_locations fn_list_config_locations
elif [ "${shortname}" == "dayz" ]; then
gamedirname="DayZ"
fn_check_cfgdir
array_configs+=( server.cfg )
fn_fetch_default_config
fn_default_config_remote
fn_set_config_vars
fn_list_config_locations
elif [ "${shortname}" == "dod" ]; then elif [ "${shortname}" == "dod" ]; then
gamedirname="DayOfDefeat" gamedirname="DayOfDefeat"
array_configs+=( server.cfg ) array_configs+=( server.cfg )
@ -681,6 +688,13 @@ elif [ "${shortname}" == "scpsl" ]||[ "${shortname}" == "scpslsm" ]; then
fn_default_config_remote fn_default_config_remote
fn_set_config_vars fn_set_config_vars
fn_list_config_locations fn_list_config_locations
elif [ "${shortname}" == "sf" ]; then
gamedirname="Satisfactory"
array_configs+=( GameUserSettings.ini )
fn_fetch_default_config
fn_default_config_remote
fn_set_config_vars
fn_list_config_locations
elif [ "${shortname}" == "sol" ]; then elif [ "${shortname}" == "sol" ]; then
gamedirname="Soldat" gamedirname="Soldat"
array_configs+=( soldat.ini ) array_configs+=( soldat.ini )
@ -751,6 +765,13 @@ elif [ "${shortname}" == "tfc" ]; then
fn_default_config_remote fn_default_config_remote
fn_set_config_vars fn_set_config_vars
fn_list_config_locations fn_list_config_locations
elif [ "${shortname}" == "ti" ]; then
gamedirname="TheIsle"
array_configs+=( Game.ini )
fn_fetch_default_config
fn_default_config_remote
fn_set_config_vars
fn_list_config_locations
elif [ "${shortname}" == "ts" ]; then elif [ "${shortname}" == "ts" ]; then
gamedirname="TheSpecialists" gamedirname="TheSpecialists"
array_configs+=( server.cfg ) array_configs+=( server.cfg )

1
lgsm/functions/install_server_dir.sh

@ -15,7 +15,6 @@ if [ -d "${serverfiles}" ]; then
fn_print_warning_nl "A server is already installed here." fn_print_warning_nl "A server is already installed here."
fi fi
pwd pwd
echo -e ""
if [ -z "${autoinstall}" ]; then if [ -z "${autoinstall}" ]; then
if ! fn_prompt_yn "Continue?" Y; then if ! fn_prompt_yn "Continue?" Y; then
exitcode=0 exitcode=0

3
lgsm/functions/install_server_files.sh

@ -27,7 +27,7 @@ fn_install_server_files(){
elif [ "${shortname}" == "codwaw" ]; then elif [ "${shortname}" == "codwaw" ]; then
remote_fileurl="http://linuxgsm.download/CallOfDutyWorldAtWar/codwaw-lnxded-1.7-full.tar.xz"; local_filedir="${tmpdir}"; local_filename="codwaw-lnxded-1.7-full.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="2c6be1bb66ea631b9b2e7ae6216c6680" remote_fileurl="http://linuxgsm.download/CallOfDutyWorldAtWar/codwaw-lnxded-1.7-full.tar.xz"; local_filedir="${tmpdir}"; local_filename="codwaw-lnxded-1.7-full.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="2c6be1bb66ea631b9b2e7ae6216c6680"
elif [ "${shortname}" == "etl" ]; then elif [ "${shortname}" == "etl" ]; then
remote_fileurl="http://linuxgsm.download/WolfensteinEnemyTerritory/etlegacy-v2.77.1-i386-et-260b.tar.xz"; local_filedir="${tmpdir}"; local_filename="etlegacy-v2.77.1-i386-et-260b.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="cc307a9232abd3999be499b42d8e4ea8" remote_fileurl="http://linuxgsm.download/WolfensteinEnemyTerritory/etlegacy-v2.78.1-i386-et-260b.tar.xz"; local_filedir="${tmpdir}"; local_filename="etlegacy-v2.78.1-i386-et-260b.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="7c08b52cb09b30eadb98ea05ef780fc7"
elif [ "${shortname}" == "mohaa" ]; then elif [ "${shortname}" == "mohaa" ]; then
remote_fileurl="http://linuxgsm.download/MedalofHonorAlliedAssault/moh_revival_v1.12_RC3.5.1.tar.xz"; local_filedir="${tmpdir}"; local_filename="moh_revival_v1.12_RC3.5.1.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="7c664538999252eeaf2b6d9949416480" remote_fileurl="http://linuxgsm.download/MedalofHonorAlliedAssault/moh_revival_v1.12_RC3.5.1.tar.xz"; local_filedir="${tmpdir}"; local_filename="moh_revival_v1.12_RC3.5.1.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="7c664538999252eeaf2b6d9949416480"
elif [ "${shortname}" == "ns" ]; then elif [ "${shortname}" == "ns" ]; then
@ -73,6 +73,7 @@ echo -e "================================="
fn_sleep_time fn_sleep_time
if [ "${appid}" ]; then if [ "${appid}" ]; then
remotelocation="SteamCMD"
fn_dl_steamcmd fn_dl_steamcmd
fi fi

6
lgsm/functions/mods_list.sh

@ -76,6 +76,9 @@ get5lastbuild=$(curl --connect-timeout 10 -sL https://ci.splewis.net/job/get5/la
get5latestfile=$(echo -e "${get5lastbuild}" | jq -r '.fileName') get5latestfile=$(echo -e "${get5lastbuild}" | jq -r '.fileName')
get5latestfilepath=$(echo -e "${get5lastbuild}" | jq -r '.relativePath') get5latestfilepath=$(echo -e "${get5lastbuild}" | jq -r '.relativePath')
get5url="https://ci.splewis.net/job/get5/lastSuccessfulBuild/artifact/${get5latestfilepath}" get5url="https://ci.splewis.net/job/get5/lastSuccessfulBuild/artifact/${get5latestfilepath}"
csgopracticelatest=$(curl --connect-timeout 10 -sL https://api.github.com/repos/splewis/csgo-practice-mode/releases/latest | jq '.assets[]')
csgopracticelatestfile=$(echo -e "${csgopracticelatest}" | jq -r '.name')
csgopracticelatestlink=$(echo -e "${csgopracticelatest}" | jq -r '.browser_download_url')
csgopuglatest=$(curl --connect-timeout 10 -sL https://api.github.com/repos/splewis/csgo-pug-setup/releases/latest | jq '.assets[]') csgopuglatest=$(curl --connect-timeout 10 -sL https://api.github.com/repos/splewis/csgo-pug-setup/releases/latest | jq '.assets[]')
csgopuglatestfile=$(echo -e "${csgopuglatest}" | jq -r '.name') csgopuglatestfile=$(echo -e "${csgopuglatest}" | jq -r '.name')
csgopuglatestlink=$(echo -e "${csgopuglatest}" | jq -r '.browser_download_url') csgopuglatestlink=$(echo -e "${csgopuglatest}" | jq -r '.browser_download_url')
@ -140,6 +143,7 @@ mod_info_stripper=( MOD "stripper" "Stripper Source" "http://www.bailopan.net/st
mod_info_gokz=( MOD "gokz" "GOKZ" "https://bitbucket.org/kztimerglobalteam/gokz/downloads/GOKZ-latest.zip" "gokz-latest.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://bitbucket.org/kztimerglobalteam/gokz/src/master/" "Implements the KZ game mode (requires SourceMod and MetaMod)" ) mod_info_gokz=( MOD "gokz" "GOKZ" "https://bitbucket.org/kztimerglobalteam/gokz/downloads/GOKZ-latest.zip" "gokz-latest.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://bitbucket.org/kztimerglobalteam/gokz/src/master/" "Implements the KZ game mode (requires SourceMod and MetaMod)" )
mod_info_ttt=( MOD "ttt" "Trouble in Terrorist Town" "https://csgottt.com/downloads/ttt-latest-dev-${sourcemodversion}.zip" "ttt-latest.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/Bara/TroubleinTerroristTown" "Implements the TTT game mode (requires SourceMod and MetaMod)" ) mod_info_ttt=( MOD "ttt" "Trouble in Terrorist Town" "https://csgottt.com/downloads/ttt-latest-dev-${sourcemodversion}.zip" "ttt-latest.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/Bara/TroubleinTerroristTown" "Implements the TTT game mode (requires SourceMod and MetaMod)" )
mod_info_get5=( MOD "get5" "Get 5" "${get5url}" "${get5latestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/splewis/get5" "Plugin for competitive matches/scrims (requires SourceMod and MetaMod)" ) mod_info_get5=( MOD "get5" "Get 5" "${get5url}" "${get5latestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/splewis/get5" "Plugin for competitive matches/scrims (requires SourceMod and MetaMod)" )
mod_info_prac=( MOD "prac" "csgo practice mode" "${csgopracticelatestlink}" "${csgopracticelatestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/splewis/csgo-practice-mode" "Practice Mode is a sourcemod plugin for helping players/teams run practices." )
mod_info_pug=( MOD "pug" "PUG" "${csgopuglatestlink}" "${csgopuglatestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/splewis/csgo-pug-setup" "plugin for setting up private pug/10man games" ) mod_info_pug=( MOD "pug" "PUG" "${csgopuglatestlink}" "${csgopuglatestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/splewis/csgo-pug-setup" "plugin for setting up private pug/10man games" )
mod_info_dhook=( MOD "dhook" "dhook" "https://forums.alliedmods.net/attachment.php?attachmentid=190123&d=1625050030" "dhooks-2.2.0d17.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://forums.alliedmods.net/showpost.php?p=2588686&postcount=589" "DHooks 2.2.0 - Required for GOKZ" ) mod_info_dhook=( MOD "dhook" "dhook" "https://forums.alliedmods.net/attachment.php?attachmentid=190123&d=1625050030" "dhooks-2.2.0d17.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://forums.alliedmods.net/showpost.php?p=2588686&postcount=589" "DHooks 2.2.0 - Required for GOKZ" )
mod_info_movement=( MOD "movementapi" "movementapi" "https://github.com/danzayau/MovementAPI/releases/download/2.1.0/MovementAPI-v2.1.0.zip" "MovementAPI-v2.1.0.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/danzayau/MovementAPI" "Movement API 2.1.0 - Required for GOKZ" ) mod_info_movement=( MOD "movementapi" "movementapi" "https://github.com/danzayau/MovementAPI/releases/download/2.1.0/MovementAPI-v2.1.0.zip" "MovementAPI-v2.1.0.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/danzayau/MovementAPI" "Movement API 2.1.0 - Required for GOKZ" )
@ -184,4 +188,4 @@ mod_info_sdtdoxide=( MOD "sdtdoxide" "Oxide for 7 Days To Die" "${oxidesdtdlates
mod_info_valheimplus=( MOD "valheimplus" "Valheim PLUS" "${valeimpluslatestlink}" "ValheimPlus.tar.gz" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://github.com/valheimPlus/ValheimPlus" "Mod to improve Valheim gameplay") mod_info_valheimplus=( MOD "valheimplus" "Valheim PLUS" "${valeimpluslatestlink}" "ValheimPlus.tar.gz" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://github.com/valheimPlus/ValheimPlus" "Mod to improve Valheim gameplay")
# REQUIRED: Set all mods info into the global array # REQUIRED: Set all mods info into the global array
mods_global_array=( "${mod_info_metamod[@]}" "${mod_info_base_amxx[@]}" "${mod_info_cs_amxx[@]}" "${mod_info_dod_amxx[@]}" "${mod_info_tfc_amxx[@]}" "${mod_info_ns_amxx[@]}" "${mod_info_ts_amxx[@]}" "${mod_info_metamodsource[@]}" "${mod_info_sourcemod[@]}" "${mod_info_steamworks[@]}" "${mod_info_gokz[@]}" "${mod_info_ttt[@]}" "${mod_info_get5[@]}" "${mod_info_pug[@]}" "${mod_info_dhook[@]}" "${mod_info_movement[@]}" "${mod_info_cleaner[@]}" "${mod_info_ulib[@]}" "${mod_info_ulx[@]}" "${mod_info_utime[@]}" "${mod_info_uclip[@]}" "${mod_info_acf[@]}" "${mod_info_acf_missiles[@]}" "${mod_info_acf_sweps[@]}" "${mod_info_advdupe2[@]}" "${mod_info_pac3[@]}" "${mod_info_wiremod[@]}" "${mod_info_wiremodextras[@]}" "${mod_info_darkrp[@]}" "${mod_info_darkrpmodification[@]}" "${mod_info_rustoxide[@]}" "${mod_info_hwoxide[@]}" "${mod_info_sdtdoxide[@]}" "${mod_info_advduplicator[@]}" "${mod_info_trackassemblytool[@]}" "${mod_info_physpropertiesadv[@]}" "${mod_info_controlsystemse2[@]}" "${mod_info_e2pistontiming[@]}" "${mod_info_propcannontool[@]}" "${mod_info_gearassemblytool[@]}" "${mod_info_spinnertool[@]}" "${mod_info_surfacefrictiontool[@]}" "${mod_info_magneticdipole[@]}" "${mod_info_environmentorganizer[@]}" "${mod_info_precision_alignment[@]}" "${mod_info_improved_stacker[@]}" "${mod_info_improved_weight[@]}" "${mod_info_improved_antinoclip[@]}" "${mod_info_laserstool[@]}" "${mod_info_valheimplus[@]}" ) mods_global_array=( "${mod_info_metamod[@]}" "${mod_info_base_amxx[@]}" "${mod_info_cs_amxx[@]}" "${mod_info_dod_amxx[@]}" "${mod_info_tfc_amxx[@]}" "${mod_info_ns_amxx[@]}" "${mod_info_ts_amxx[@]}" "${mod_info_metamodsource[@]}" "${mod_info_sourcemod[@]}" "${mod_info_steamworks[@]}" "${mod_info_gokz[@]}" "${mod_info_ttt[@]}" "${mod_info_get5[@]}" "${mod_info_prac[@]}" "${mod_info_pug[@]}" "${mod_info_dhook[@]}" "${mod_info_movement[@]}" "${mod_info_cleaner[@]}" "${mod_info_ulib[@]}" "${mod_info_ulx[@]}" "${mod_info_utime[@]}" "${mod_info_uclip[@]}" "${mod_info_acf[@]}" "${mod_info_acf_missiles[@]}" "${mod_info_acf_sweps[@]}" "${mod_info_advdupe2[@]}" "${mod_info_pac3[@]}" "${mod_info_wiremod[@]}" "${mod_info_wiremodextras[@]}" "${mod_info_darkrp[@]}" "${mod_info_darkrpmodification[@]}" "${mod_info_rustoxide[@]}" "${mod_info_hwoxide[@]}" "${mod_info_sdtdoxide[@]}" "${mod_info_advduplicator[@]}" "${mod_info_trackassemblytool[@]}" "${mod_info_physpropertiesadv[@]}" "${mod_info_controlsystemse2[@]}" "${mod_info_e2pistontiming[@]}" "${mod_info_propcannontool[@]}" "${mod_info_gearassemblytool[@]}" "${mod_info_spinnertool[@]}" "${mod_info_surfacefrictiontool[@]}" "${mod_info_magneticdipole[@]}" "${mod_info_environmentorganizer[@]}" "${mod_info_precision_alignment[@]}" "${mod_info_improved_stacker[@]}" "${mod_info_improved_weight[@]}" "${mod_info_improved_antinoclip[@]}" "${mod_info_laserstool[@]}" "${mod_info_valheimplus[@]}" )

3
lgsm/functions/query_gsquery.py

@ -59,10 +59,12 @@ class gsquery:
self.response = None self.response = None
self.sanity_checks() self.sanity_checks()
@staticmethod
def fatal_error(self, error_message, error_code=1): def fatal_error(self, error_message, error_code=1):
sys.stderr.write('ERROR: ' + str(error_message) + '\n') sys.stderr.write('ERROR: ' + str(error_message) + '\n')
sys.exit(error_code) sys.exit(error_code)
@staticmethod
def exit_success(self, success_message=''): def exit_success(self, success_message=''):
sys.stdout.write('OK: ' + str(success_message) + '\n') sys.stdout.write('OK: ' + str(success_message) + '\n')
sys.exit(0) sys.exit(0)
@ -140,6 +142,5 @@ if __name__ == '__main__':
help='Display debugging output.' help='Display debugging output.'
) )
options, arguments = parser.parse_args() options, arguments = parser.parse_args()
#
server = gsquery(options, arguments) server = gsquery(options, arguments)
server.responding() server.responding()

5
lgsm/functions/update_mta.sh

@ -99,10 +99,7 @@ fn_update_mta_localbuild(){
fn_update_mta_remotebuild(){ fn_update_mta_remotebuild(){
# Gets remote build info. # Gets remote build info.
majorversion=$(curl -s https://raw.githubusercontent.com/multitheftauto/mtasa-blue/master/Server/version.h | grep "#define MTASA_VERSION_MAJOR" | awk '{ print $3 }' | sed 's/\r//g') remotebuild=$(curl -s "https://api.github.com/repos/multitheftauto/mtasa-blue/releases/latest" | jq -r '.tag_name')
minorversion=$(curl -s https://raw.githubusercontent.com/multitheftauto/mtasa-blue/master/Server/version.h | grep "#define MTASA_VERSION_MINOR" | awk '{ print $3 }' | sed 's/\r//g')
maintenanceversion=$(curl -s https://raw.githubusercontent.com/multitheftauto/mtasa-blue/master/Server/version.h | grep "#define MTASA_VERSION_MAINTENANCE" | awk '{ print $3 }' | sed 's/\r//g')
remotebuild="${majorversion}.${minorversion}.${maintenanceversion}"
if [ "${firstcommandname}" != "INSTALL" ]; then if [ "${firstcommandname}" != "INSTALL" ]; then
fn_print_dots "Checking remote build: ${remotelocation}" fn_print_dots "Checking remote build: ${remotelocation}"
# Checks if remotebuild variable has been set. # Checks if remotebuild variable has been set.

2
linuxgsm.sh

@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x set -x
fi fi
version="v21.2.5" version="v21.4.1"
shortname="core" shortname="core"
gameservername="core" gameservername="core"
commandname="CORE" commandname="CORE"

2
tests/tests_fctrserver.sh

@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x set -x
fi fi
version="v21.2.5" version="v21.4.1"
shortname="fctr" shortname="fctr"
gameservername="fctrserver" gameservername="fctrserver"
commandname="CORE" commandname="CORE"

2
tests/tests_jc2server.sh

@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x set -x
fi fi
version="v21.2.5" version="v21.4.1"
shortname="jc2" shortname="jc2"
gameservername="jc2server" gameservername="jc2server"
commandname="CORE" commandname="CORE"

2
tests/tests_mcserver.sh

@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x set -x
fi fi
version="v21.2.5" version="v21.4.1"
shortname="mc" shortname="mc"
gameservername="mcserver" gameservername="mcserver"
commandname="CORE" commandname="CORE"

2
tests/tests_ts3server.sh

@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x set -x
fi fi
version="v21.2.5" version="v21.4.1"
shortname="ts3" shortname="ts3"
gameservername="ts3server" gameservername="ts3server"
commandname="CORE" commandname="CORE"

Loading…
Cancel
Save