Repository navigation
Release v26.4.0 - #5092
Merged
Merged
Release v26.4.0#5092
Conversation
* feat(workshop): download Steam Workshop mods for Arma 3 and DayZ Arma 3 and DayZ servers can't download Workshop content themselves. Add workshopmods (item and collection IDs) and a workshop-update command that downloads changed items with one SteamCMD login, installs them to serverfiles/workshop/@<id>, lowercases them, copies BattlEye keys and removes mods no longer listed. update and check-update include Workshop mods, and start appends installed mods to -mod= in order. * chore(workshop): make workshop_core.sh executable * fix(workshop): download before stopping the server, and skip the restart when nothing changed
…5009) * feat(workshop): add Steam Workshop downloads for Squad and Starbound * fix(workshop): remove the saved mod list once no Workshop mods are left
…on: Harsh Doorstop (#5012) * feat(workshop): add Steam Workshop downloads for Squad 44 and Operation: Harsh Doorstop * fix(workshop): install OHD mods as their plugin folder so the game can mount them
…oneers (#5014) * feat(workshop): add Steam Workshop downloads for Barotrauma and Stationeers * fix(workshop): restore an empty Barotrauma regularpackages element to its original form
* feat(workshop): add Steam Workshop downloads for Colony Survival * refactor(workshop): edit Colony Survival worldconfig.json with jq instead of Python
fn_monitor_check_starting and fn_monitor_check_stopping printed "Checking start" / "Checking stop" on screen but wrote "Checking backup" to the script log, a leftover from copying fn_monitor_check_backup. Fixes #5010 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Daniel Gibbs <me@danielgibbs.co.uk>
…ull path (#5015) Monitor only found commands started as ./gameserver <command>, because the checks used pgrep -x with the /bin/bash ./ prefix. The cron, systemd and Docker examples in the docs run the script by its full path, so monitor missed updates and backups and restarted the server in the middle of them. One helper now builds a single pattern per check that accepts any path to the script. Fixes #5013. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Daniel Gibbs <me@danielgibbs.co.uk>
* feat(newserver): add Running With Rifles server * fix(rwrserver): show rwr_server in the port diagnostic command * feat(rwrserver): start game modes from their own package with startpackage * fix(rwrserver): add the 32-bit libgpg-error dependency * docs(rwrserver): note the game and DLC ownership requirements in the config
…5022) * fix(config): correct consoleinteract for servers that do or don't read console input * fix(config): correct stop modes and accept the SCP:SL EULA on install
IOSoccer moved to a 64-bit server (srcds_run_64) on 7 October 2026. The new engine executes the server cfg on every map load, so the map line in the default cfg caused an endless map reload. Add fix_ios.sh to comment it out on existing installs, and bump glibc to 2.29. Fixes #5023
… retry postponed updates (#5025) * feat(stop): warn players in-game before stop, restart and update, and retry postponed updates * fix(stop): exit when players prevent a stop during update or backup, keep module modes * fix(stop): mark variables shared between modules for shellcheck * refactor(stop): shorten check_players_online module description * refactor(stop): keep chat commands out of the config, clean up locks when a stop is cancelled, exit on CTRL-C * feat(stop): say why the player count is unavailable * fix(monitor): run postponed updates in the background, keep a long update's lockfile, retry forced updates as forced * fix(monitor): mark exitcode as used by core_exit for shellcheck
…ty (#5029) * feat(stop): warn players in-game before stop, restart and update, and retry postponed updates * fix(stop): exit when players prevent a stop during update or backup, keep module modes * fix(stop): mark variables shared between modules for shellcheck * refactor(stop): shorten check_players_online module description * refactor(stop): keep chat commands out of the config, clean up locks when a stop is cancelled, exit on CTRL-C * feat(backup): run backups postponed by players once the server is empty, and keep long backups' lockfile * feat(stop): say why the player count is unavailable * fix(monitor): run postponed updates in the background, keep a long update's lockfile, retry forced updates as forced * fix(monitor): run postponed backups in the background * fix(monitor): mark exitcode as used by core_exit for shellcheck * fix(monitor): mark exitcode as used by core_exit for shellcheck
…cesse and Rising World (#5033)
Patch 469f no longer ships System64 and puts the 64-bit ucc-bin in System, so fresh installs failed with Executable was not found.
Moves 134 docker-gameserver images from ubuntu-24.04 to ubuntu-26.04 by changing the os column of lgsm/data/serverlist.csv. Every server was installed fresh and checked with monitor on both 24.04 and 26.04; full results are in #5027. Staying on 24.04: cod, cod2, coduo and mohaa (libstdc++5:i386, #5026) and scpslsm (retired Steam app, #5038). ios, ut99 and rwr also need #5024, #5034 and #5021, which ship in the same release. Refs #5027
App 111710 only ships the Linux server binaries. Its content depot 17711 is a shared install from the Nuclear Dawn game app (17710), which SteamCMD records under SharedDepots and never downloads, so servers fail with "Unable to find gameinfo.txt". app_update 17710 does not work either, as SteamCMD treats it as shared only. Require a Steam account that owns Nuclear Dawn and add fix_nd.sh, run post install and pre start, which downloads depot 17711 with download_depot when gameinfo.txt is missing and merges it into serverfiles without overwriting the server files. app_info_print is run first as download_depot fails with "missing app info" on a cold cache. Fixes #5039
Removes SCP: Secret Laboratory ServerMod (scpslsm). Steam app 786920 has been retired by the publisher, so SteamCMD returns "No subscription" for every account and the server can no longer be installed. Modded SCP:SL servers are covered by scpsl with LabAPI or EXILED.
…5043) * fix(bf1942,bfv): provide 32-bit ncurses 5 libraries on newer distros Ubuntu 24.04+, Debian 13 and RHEL 9 no longer package the i386 libncurses.so.5 and libtinfo.so.5 that the Battlefield 1942 and Battlefield: Vietnam server binaries need. The new fix modules download them into serverfiles when the system does not provide them, and add serverfiles to LD_LIBRARY_PATH. The static binaries only need ncurses 5 and the 32-bit libc, so the libstdc++5 dependency and the Ubuntu 22.04 / Debian 12 support block in check_deps are removed. * feat(bf1942,bfv): move Docker images to Ubuntu 26.04 * fix(bf1942,bfv): install the LinuxGSM default serversettings.con The server archives ship their own serversettings.con with gameSpyPort 0. install_config skips copying the LinuxGSM default when the file already exists, so a fresh install had no query port and monitor failed with "queryport is not set". The bundled file is removed first so the default config is copied. install_config only runs on install, right after the archive has been extracted, so no user settings are lost. * fix(bf1942,bfv): preserve configs by repacking server archives * fix(bf1942,bfv): document shared module variables for ShellCheck
) The fastdl command is offered for GoldSrc servers and already copies files instead of compressing them, but it gathered files using the Source layout (materials, particles, resource and Source file types). GoldSrc custom content was therefore left out: wad files in the mod root, map .res files, sprites, sky and detail textures in gfx, and overviews. When the engine is goldsrc, the preview and build steps now use a GoldSrc directory list and per-directory file types from a single shared function: - mod root: *.wad (top level only) - maps: *.bsp *.res *.txt - models: *.mdl - sound: *.wav - sprites: *.spr *.txt - gfx: *.tga *.bmp - overviews: *.bmp *.tga *.txt Source and Garry's Mod behaviour is unchanged. Fixes #1778
…5042) * fix(core): stop prompts looping forever when no input is available fn_prompt_yn read the answer in an endless loop. When stdin is not a terminal (cron, piped input, a container started without -it), read hits EOF, the answer stays empty and "Please answer yes or no." is printed forever at full CPU. Running ./vhserver install with stdin from /dev/null wrote over 3 million lines (83 MB) in 60 seconds at the server directory prompt. Without a terminal bash also ignores read -e, -i and -p, so the prefilled default is never applied and taking the default is not an option. Several prompts default to Y on actions that must not happen unattended (accept EULA, enable stats, delete all modules, overwrite the fastdl directory, remove a mod), and treating no input as "no" would exit 0 on an aborted install. Prompts now check the read return code. If read fails with no answer, the command prints an error and exits with code 2. Scripted answers such as "yes |" or "printf 'y\n' |" keep working, including an answer with no trailing newline. The same check is added to: - fn_prompt_message, which returns 1, and command_send, which exits with an error because core_exit.sh inside $() only ends the subshell. - the mods-install and mods-remove selection loops, which looped forever on "is not a valid addon/mod" in the same way. * fix(core): document shared prompt exit codes for ShellCheck
* Update port number for jk2server * Add jk3server LinuxGSM configuration This adds Jedi Knight: Jedi Academy configuation to LinuxGSM Similar to jk2server configuration but with minor differences. * Update port number and defaultmap for jk3server * feat(new server): Jedi Knight: Jedi Academy * fix(jk3): misplaced number * Update serverlist.csv Try to add new server to serverlist * add update jk3 module also added jk3 to serverlistmenu * update jk3s lgsm config * remove serverlistmenu.csv not meant to be there * Update missing info for lgsm modules - jk3server * fix typos * add condition for starting jk3server in tmux * fix(jk3server): select Academy app and bound release lookups * fix(jk3server): omit unavailable config version from details * refactor(jk3server): follow shared updater conventions --------- Co-authored-by: Alexander Silva <alexander.silva@my.jcu.edu.au> Co-authored-by: Daniel Gibbs <me@danielgibbs.co.uk>
* chore: sync PR milestones to linked issues Assign the next open milestone to new PRs into develop and copy the PR milestone to issues referenced with Fixes, Closes, Resolves or Related to. On merge, move referenced issues to the PR milestone. * chore: label fixed issues and close them when the release merges
* chore: enforce PR template and closing keywords for agents Add AGENTS.md with pull request rules, a PR Body Check workflow that fails when the template is dropped or the issue placeholder is left in, and closing keyword guidance in the PR template. * fix: only flag an unedited Fixes #[issue] placeholder line * chore: drop AGENTS.md and tidy PR template sections * chore: avoid a real issue reference in the checklist wording
…5082) Synced from dgibbs64/repo-sync@5b50822 — feat(sync): sync each group in a parallel matrix job (#25) Co-authored-by: dgibbs64 <dgibbs64@users.noreply.github.com>
…5084) Synced from dgibbs64/repo-sync@50af2c5 — perf(workflows): use slim super-linter and lint changed files on PRs (#26) Co-authored-by: dgibbs64 <dgibbs64@users.noreply.github.com>
Minecraft 26.1 and later need Java 25 and refuse to start on Java 21. jammy-updates packages openjdk-25-jre, which hyt already uses on 22.04, so mc and pmc now install it too.
* fix(deps): update Java and libstdc++ 5 deps for the RHEL family Minecraft 26.1+ needs Java 25. EL9 AppStream packages java-25-openjdk, so mc and pmc use it on AlmaLinux, CentOS Stream, RHEL and Rocky 9. EL7 and EL8 keep their older Java packages for pinned older releases, and the Minecraft Java runtime check stops with guidance when the configured version needs a newer Java. Hytale's java-25-openjdk is not packaged on EL7 or EL8, so the hyt rows there have no packages and check_deps warns that Java 25 must be installed manually, as it already does on older Debian and Ubuntu. compat-libstdc++-33.i686 is not packaged on EL8 or EL9. The cod, cod2, coduo and mohaa fix modules already provide libstdc++.so.5 when it is missing, so those rows have no packages there, matching rhel-9. EL7 still packages it and is unchanged. * fix(pvr): provide libc++ on distros that do not package it The Pavlov VR server links against libc++.so.1 and libc++abi.so.1. The RHEL family lists asked for libcxx, which no EL8 or EL9 repo provides, including EPEL and CRB. When ldd reports either library missing, fix_pvr now downloads libcxx-amd64-11.0.1-2.tar.xz (md5 pinned) and extracts it into serverfiles/linux64, which is already on LD_LIBRARY_PATH. The tarball holds the unmodified libraries and copyright files from Debian bullseye's libc++1-11 and libc++abi1-11 11.0.1-2 packages. LLVM 11 is used because it needs only glibc 2.18 and libatomic, so it also runs on EL8. The existing libc++.so copy now falls back to the bundled library. libcxx is replaced with libatomic in the RHEL family lists. Distros that package libc++1 are unaffected, as ldd finds the system library.
#5055) * fix(steamcmd): stream progress output and propagate SteamCMD exit code SteamCMD output was piped through uniq before tee. uniq writes to a pipe, so it block-buffers its output and progress only reached the terminal and logs when SteamCMD exited, defeating unbuffer. stdbuf -oL is not a portable fix: it has no effect on uutils coreutils (the Ubuntu 26.04 default), and mawk also buffers pipe input. Replace uniq with fn_dl_steamcmd_output, a bash read loop that drops consecutive duplicate lines (keeping the #3010 behaviour) and writes each line immediately. exitcode=$? after the pipelines was tee's status, so a SteamCMD crash without an "Error!" line was reported as success. Capture ${PIPESTATUS[0]} after each SteamCMD pipeline instead, so non-zero exits are reported and retried. unbuffer passes the child exit code through. Fixes #3655 * fix(steamcmd): restore executable bit on core_dl.sh
* feat(ceserver): add Conan Exiles server Adds the native Linux dedicated server for Conan Exiles (Enhanced), Steam appid 443030. Resolves #4923 * feat(ceserver): add stop mode for Conan Exiles The first CTRL+c runs the engine shutdown but the process then hangs. A second CTRL+c exits it. * fix(ceserver): require glibc 2.28
Brings the v26.3.0 release and the master-only CI commits into develop. Keeps develop's action-milestone-sync.yml, which already has #5091.
install_server_files.sh runs update_steamcmd.sh with forceupdate=1. Since #5060 that branch calls fn_update_apply, which is defined in command_update.sh and is not loaded during install, so every SteamCMD install printed "fn_update_apply: command not found" and only downloaded the game through the missing appmanifest fallback. It also left an update.lock behind. During install, download directly and write last-updated.lock, as before #5060. force-update still uses fn_update_apply.
This was referenced Oct 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v26.4.0.
version(linuxgsm.sh) andmodulesversion(core_modules.sh) tov26.4.0.masterwas merged intodevelopfirst (62a79ca), so this branch already contains everymaster-only commit: the v26.3.0 release, the triage fixes (#5064, #5066), the milestone workflows and PR template (#5085) and issue-labeler 3.5.action-milestone-sync.yml, resolved withdevelop's version, which already includes #5091.developwas merged in again after #5093 (4d947fd).develop, this branch changes only the two version strings.Pre-release testing
A fresh
tf2serverinstall fromdevelopon Ubuntu 26.04, connected to with the game client:details: the server runs assrcds_linux64, anddetailsshows./srcds_run_64(#5059).warnplayerstimer="1",restartshowed the warning in the in-game chat (#5025).-norestart).Release summary (draft release notes)
Team Fortress 2 now uses the 64-bit server
tf2server starts
./srcds_run_64by default, with-norestartadded tostartparametersso a graceful stop completes (#5059).startparameters: if your own config setsstartparameters, add-norestartyourself. Without it, stop still works but falls back to killing the session after 60 seconds.executable="./srcds_run_64"in your instance config.SCP: Secret Laboratory ServerMod (scpslsm) removed
Steam has retired app 786920, so ServerMod can no longer be installed or updated by anyone (#5038). Existing installs keep running on their current files, but
update-lgsmnow fails for them. For a modded server, installscpslserverand use LabAPI or EXILED.Highlights
workshopmodsand runworkshop-update(wu), or letupdatehandle it. Mods are installed, kept up to date and added to the start parameters (#5008, #5009, #5012, #5014, #5016, #5017, #5018, #5019, #5020).warnplayerstimerto the number of minutes to warn for (off by default). Works on servers whose console accepts chat commands (#5025, #5033).stoponlyifnoplayers="on", an update or backup that finds players online is postponed, andmonitorruns it once the server is empty. Abackup-postponedalert is sent if a backup has waited over 24 hours (#5025, #5029).detailsandpost-details, so they are included in support links.detailsno longer tries to install packages (#5041).linuxgsm.downloadfile, and an HTTPS download can no longer be redirected to HTTP (#4954, #5054, #5070)./datavolumes, game files and configs are kept (#5028).Changes to existing behaviour
stoponlyifnoplayersnow works forupdate,backupandworkshop-update. Before, a prevented stop could leave the server stopped and not updated. Abackupwithstoponbackup="on"is now postponed while players are online instead of stopping the server (#5025, #5029).update-failedalert and starts the server again, instead of being reported as a successful update (#5060).updateonstartnow starts the server after applying an update (#5056).-it) now exit with an error (code 2) instead of looping forever. Scripted answers such asyes | ./gameserver ...still work (#5042).New servers
Newer distros
Game server fixes
Engine.inion every stop (#5061).expect(#5051).quit, which saves the world (#5022).quit, the same as Left 4 Dead 2 (#5022).shutdown(#5031).detailsreads the web admin setting and port fromUTWeb.ini(#5044).details(#5046).Other fixes
detailsreports CPU cores and frequency accurately (#5076).What's Changed
New Contributors
Full Changelog: v26.3.0...v26.4.0