* feat(tf2c): add Team Fortress 2 Classified server (#4898)
* Release v26.1.0
* fix(alert_slack): add missing closing brace on section object
The 'section' block containing 'fields' and 'accessory' was missing its
closing '}' before EOF, producing malformed JSON and breaking all Slack
alerts silently (jq -c . would fail on the payload).
Also add missing ntfy alert settings to tf2cserver _default.cfg for
consistency with other server configs.
* fix: address review feedback
- core_dl.sh: use array assignment for steamcmdcommand instead of
read -r -a to avoid word-splitting on paths
- fix_st.sh: correct module header typo (fix_ts.sh -> fix_st.sh)
- command_skeleton.sh: fix grammar 'Creates an copy' -> 'Creates a copy'
- serverlist-validate-game-icons.sh: anchor grep to start-of-line and
require trailing comma to prevent false positives (e.g. 'tf' matching
'tf2' entries)
- cs2server/_default.cfg: remove duplicate ntfy alert settings block
* fix(vints): assign remotebuild instead of unused remotebuildversion
The API version lookup was setting remotebuildversion but all subsequent
jq queries used ${remotebuild}, which was never populated. This caused
'Unable to get remote build' on every install/update.
* fix(xnt): unset exitbypass after command_stop.sh in fn_update_localbuild
* fix(ci): resolve super-linter failures
- Set DEFAULT_BRANCH to current branch to fix 'master not found' error
- Use fetch-depth: 0 so GITHUB_BEFORE_SHA can be resolved
- Set update_etl.sh executable bit (BASH_EXEC)
- Fix .codespellrc tab indentation (EDITORCONFIG)
- Add .gitleaks.toml allowlist for GA4 Measurement Protocol API secret (GITLEAKS)
- Fix .markdown-lint.yml: disable MD030/MD013/MD033/MD041/MD051 to match
existing repo style (MARKDOWN)
* chore(ci): upgrade webfactory/ssh-agent from v0.9.0 to v0.10.0
v0.10.0 upgrades from Node.js 20 to Node.js 24, resolving the
deprecation warning ahead of the June 2026 forced migration.
* fix(steamcmd): add libtinfo.so.5 symlink fix for readline warning (#4899)
* fix(steamcmd): add libtinfo.so.5 symlink fix for readline warning
On distros shipping libtinfo.so.6 but not libtinfo.so.5 (Ubuntu 22.04+,
Debian 12+), SteamCMD prints:
WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5.
Please install (lib32tinfo5 / ncurses-libs.i686 / equivalent) to
enable readline.
lib32tinfo5 does not exist on Ubuntu 24.04. Creating a user-space
symlink inside the steamcmd directory resolves the warning without
requiring root or a missing package.
* fix(steamcmd): address Copilot review feedback on libtinfo symlink fix
- Iterate over all candidate steamcmd dirs (HOME/.steam/steamcmd,
steamcmddir, HOME/.local/share/Steam/steamcmd) matching the pattern
used for steamclient.so fixes elsewhere in the module
- Replace '! -f && ! -L' guard with '! -e' so broken/dangling symlinks
are also repaired rather than silently skipped
- Add mkdir -p before ln in case the directory does not exist yet
- Capture exitcode=$? after ln so fn_fix_msg_end reports failures
---------
Co-authored-by: LinuxGSM <[email protected]>
* feat(newserver): Military Conflict: Vietnam
Add support for the Military Conflict: Vietnam dedicated game server.
Supersedes #4594 (original WIP PR from @knoxed — completing the implementation).
Changes:
- Added mcvserver default configuration
- Added mcv to serverlist and all distro CSV files
- Added install_config handler for mcvserver
- Added dependency info for all distros
- Added game icons
- Fixed CI workflow issues
Co-authored-by: Knoxed <[email protected]>
* fix: support legacy game servers on older Ubuntu/Debian runners (#4903)
* fix(workflows): support legacy game servers on older Ubuntu/Debian runners
Multiple game servers have glibc compatibility requirements that prevent
them from running on Ubuntu 24.04:
- bfv, bf1942: Require Ubuntu <= 22.04 or Debian <= 12 (glibc 2.31)
- btl, onset: Require Ubuntu <= 20.04 or Debian <= 11 (glibc 2.31)
Changes:
- Add runner field to details-check matrix generation
- Map legacy servers to appropriate ubuntu-XX.04 LTS runners
- Modern servers continue on ubuntu-latest (24.04)
- Update details-check.yml to use dynamic runner from matrix
This ensures all server tests pass in CI without breaking modern server
testing on current GitHub Actions runners.
* fix(workflows): run details-check on PRs and normalize ref resolution
Details Check was not running for PR #4903 because the workflow only
triggered on push to develop/workflow_dispatch. Also, pull_request refs
(refs/pull/*) are not valid raw-content refs for GitHub downloads.
Changes:
- Trigger Details Check on pull_request to develop
- Add LGSM_REF env resolved to PR head SHA or branch ref name
- Use LGSM_REF for linuxgsm.sh download and LGSM_GITHUBBRANCH usage
- Use LGSM_REF in matrix generation when fetching serverlist.csv
This ensures legacy server jobs (bfv, bf1942, btl, onset) are included
and executed during PR validation.
* fix(workflows): run update-check on PRs and normalize ref resolution
Apply the same PR-safe workflow behavior used in details-check:
- Trigger update-check on pull_request to develop
- Resolve LGSM_REF to PR head SHA or branch ref name
- Use LGSM_REF for linuxgsm.sh download and LGSM_GITHUBBRANCH calls
This ensures update-check validates PR changes instead of only running on
develop pushes.
* fix(check_deps): avoid false Debian version check on Ubuntu
Ubuntu reports ID_LIKE=debian, which caused Debian upper-version checks to
run on Ubuntu and incorrectly fail legacy titles on Ubuntu 22.04.x.
Use distroid==debian for Debian limits in legacy compatibility guards so:
- bf1942/bfv pass on Ubuntu 22.04.x as intended
- btl/onset limits still apply correctly
- Debian limits still apply on Debian only
* fix(workflows): add PR trigger to version-check; replace archived action in docker trigger
version-check.yml:
- Add pull_request trigger targeting develop so version format is
validated on PRs before merge
trigger-docker-build.yml:
- Replace archived convictional/[email protected] with
native gh CLI approach (trigger + watch run ID)
- Uses GH_TOKEN env var with PERSONAL_ACCESS_TOKEN secret
- gh workflow run dispatches the workflow; gh run watch polls for
completion and exits non-zero on failure, preserving job dependencies
* fix(workflows): use timestamp filter to reliably identify triggered run ID
Using --limit 1 to find the run ID is a race condition if another run
of the same workflow starts concurrently. Capture a timestamp before
dispatching and pass --created >=${before} to gh run list so we
always select the run we just triggered.
* remove pr check
* chore(deps): bump dessant/lock-threads from 5 to 6 (#4864)
Bumps [dessant/lock-threads](https://github.com/dessant/lock-threads) from 5 to 6.
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dessant/lock-threads/compare/v5...v6)
---
updated-dependencies:
- dependency-name: dessant/lock-threads
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Daniel Gibbs <[email protected]>
* papermc: add OpenJDK-25 (headless) dependency
Dev builds of papermc will not work on older jre, albeit it's still in alpha/beta, some time in the future it will be the stable build. I have not noticed any issues running the stable build with jre-25.
* fix(pmc): use openjdk-25-jre instead of headless variant, update vpmc to java 25
* feat(deps): update Java deps to openjdk-25-jre and add Ubuntu 26.04 support (#4908)
- ubuntu-24.04: update pz, rw, wmc to openjdk-25-jre
- debian-13: update vpmc to openjdk-25-jre, fix wmc typo (openjdk21-jre -> openjdk-25-jre)
- add ubuntu-26.04.csv with all Java deps on openjdk-25-jre
* chore: synced file(s) with dgibbs64/repo-sync (#4904)
* chore: synced local '.github/' with remote 'general/.github/'
* chore: synced local './' with remote 'bash/'
---------
Co-authored-by: unknown <[email protected]>
* fix(jbep3): add distro deps entries and game icon
* feat(bb): add BrainBread server update functionality (#4912)
* feat(bb): add BrainBread server update functionality
* Implemented `update_bb.sh` to handle updates for BrainBread servers.
* Integrated new update checks in `command_check_update.sh` and `command_update.sh`.
* Updated `install_server_files.sh` to include BrainBread server installation logic.
Co-authored-by: Copilot <[email protected]>
* feat(bb): enhance BrainBread update process
* Updated `fn_update_dl` to use `remotebuildhash` for file integrity.
* Added handling for missing `remotebuildhash` to default to "nohash".
* Included `update_steamcmd.sh` call to ensure both Steam app and GitHub package updates are performed.
Co-authored-by: Copilot <[email protected]>
* fix(steamcmd): ensure core HL1 files are present after appid 90 update
* Added checks to verify the presence of core HL1 files after updating appid 90.
* If files are missing, an update is forced and errors are logged.
* Exits the script if files are still missing after the retry.
* fix(steamcmd): update error messages for GoldSrc engine
* Changed appid 90 references to GoldSrc for clarity.
* Updated error messages to reflect the correct engine context.
* Ensures users are informed about missing core HL1 files after GoldSrc updates.
Co-authored-by: Copilot <[email protected]>
* feat(serverlist): add Military Conflict: Vietnam server entry
* Introduced new server entry for `Military Conflict: Vietnam` in `serverlist.csv`.
* Enhances the variety of game servers available for users.
---------
Co-authored-by: Copilot <[email protected]>
* fix(deps): update .NET runtime version for Vintage Story (#4913)
* Changed `dotnet-runtime-8.0` to `dotnet-runtime-10.0` in dependency lists for Ubuntu and Debian.
* Enhanced the `check_deps.sh` script to dynamically check for the required .NET runtime version.
* Added a warning for users on older distributions regarding potential missing .NET runtimes.
* feat(newserver): Jabroni Brawl: Episode 3 (#4702)
* Added jbep3server
* fix(jbep3): add distro deps entries and game icon
* fix(jbep3): bootstrap config from server.sample.cfg
* chore(prettier): format code
---------
Co-authored-by: Daniel Gibbs <[email protected]>
Co-authored-by: dgibbs64 <[email protected]>
* chore: add AI issue triage workflow and structured-field label rules (#4915)
- Add AI triage workflow that flags low-quality issues and requests missing info
- Add sync-game-labels script and workflow to maintain game labels from serverlist
- Add structured label rules for severity, reproducibility, priority, and scope
- Update labeler workflow to support both issues and PRs with dedicated config
- Add PR review guidance instructions for maintainers
* chore: update issue templates, PR template, and CoC (#4914)
- bug_report: add expected/actual behavior fields, script name,
pre-check checkbox, required steps to reproduce, and AI triage
metadata (severity, reproducibility, regression, affects-latest)
- feature_request: add priority field, problem statement, scope/impact,
alternatives considered; make command optional; remove irrelevant
bug-specific triage fields
- server_request: add dedicated server checkbox, official docs and
Linux binary proof fields; fix CoC placeholder URL; remove
irrelevant bug/feature triage fields
- config.yml: add private security reporting contact link
- pull_request_template: add testing, risk/rollback, breaking changes,
and documentation impact sections
- CODE_OF_CONDUCT: upgrade from Contributor Covenant v2.1 to v3.0;
fill reporting placeholders with GitHub advisory and Discord links
* fix: use is-sponsor-label-action v2 (v3 does not exist)
The v3 release does not exist for JasonEtco/is-sponsor-label-action.
Use v2 which is the latest stable release. The Node.js 24 compatibility
is handled by the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 environment variable.
* fix: remove AI triage workflow
The GitHub Models API requires specialized authentication that is not available
through secrets.GITHUB_TOKEN. The workflow consistently fails with 401 Unauthorized.
The rule-based label automation (labeler.yml) continues to function correctly
and provides automated labeling based on structured template fields.
* Revert "fix: remove AI triage workflow"
This reverts commit
|
1 hour ago | |
|---|---|---|
| .devcontainer | style: standardize prettier config and 2-space json policy | 3 months ago |
| .github | Merge remote-tracking branch 'origin/master' into release/v26.2.0 | 1 hour ago |
| .vscode | style: standardize prettier config and 2-space json policy | 3 months ago |
| lgsm | Release v26.2.0 | 1 hour ago |
| .editorconfig | style: standardize prettier config and 2-space json policy | 3 months ago |
| .gitattributes | chore: use prettier for code tidy (#3901) | 4 years ago |
| .gitignore | chore: synced file(s) with dgibbs64/repo-sync (#4810) | 11 months ago |
| .prettierignore | fix(ci): make Prettier workflow pass on develop (#4941) | 4 hours ago |
| .prettierrc.json | chore(sync): synced file(s) with dgibbs64/repo-sync (#4919) | 9 hours ago |
| .shellcheckrc | fix (alerts): Alerts on update uses the old game server version not the new one (#4854) | 4 months ago |
| CODE_OF_CONDUCT.md | chore: unify issue labeling automation and reduce false positives | 3 months ago |
| CONTRIBUTING.md | fix (alerts): Alerts on update uses the old game server version not the new one (#4854) | 4 months ago |
| LICENSE.md | docs(license): update copyright year(s) (#4866) | 4 months ago |
| README.md | chore: unify issue labeling automation and reduce false positives | 3 months ago |
| linuxgsm.sh | Release v26.2.0 | 1 hour ago |
| package-lock.json | style: standardize prettier config and 2-space json policy | 3 months ago |
| package.json | style: standardize prettier config and 2-space json policy | 3 months ago |
README.md
LinuxGSM is the command-line tool for quick, simple deployment and management of Linux dedicated game servers.
Hassle-Free Dedicated Game Servers
Traditionally game servers are not easy to manage yourself. Admins often have to spend hours messing around trying to get their servers working. LinuxGSM is a command-line tool designed to be as simple as possible, allowing admins to spend less time on management and more time gaming.
Main features
100+ game servers supported
- 🚚 Installer
- 🔍 Monitor
- ☎️ Alerts
- ☁️ Updater
- 📘 Server Details
- 💾 Backup
- 💻 Console
🐧 Compatibility
LinuxGSM will run on popular distros as long as the minimum requirements are met.
- Ubuntu
- Debian
- CentOS
Other distros are likely to work but are not fully tested.
🔧 Requirements
Each game server has specific dependency requirements. Visit a specific game server installation page on the LinuxGSM website to check dependency requirements for the game server you want to install.
📘 Documentation
Documentation is found at linuxgsm.com and docs.linuxgsm.com.
❓ Support
There are various ways to get support, check out the support page for the right support.
❤️ Sponsor
If you would like to sponsor to the project there are several ways you can, via GitHub Sponsors and PayPal. 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
A big thank you goes to all the wonderful people who contribute ideas, code, docs, and support to this project.