How to Update HLDS to the Latest Build Safely

September 24, 2025 Daemon666 8 min read 189 views

Updating HLDS is the same command you used to install it — app_update 90 validate — but running it blind on a live, modded server is how people wake up to a dead Metamod and a server nobody can join. Valve occasionally pushes engine changes that shift file layouts or reset defaults. The safe update is: back up, stop the server, update, re-validate the mod stack, and verify before you re-open. This covers each step and what tends to break.

1. Back up before you touch anything

An update can overwrite files you customised. Archive the mod folder first, following the configs, bans and stats backup guide:

cd /home/hlds/cstrike-server
tar czf pre-update-$(date +%F).tar.gz cstrike/

Pay special attention to liblist.gam and any file Metamod or a mod launcher edited — those are the ones a Valve update is most likely to revert.

2. Stop the server cleanly

Never update a running server. Announce it, empty the box, and stop the process (Ctrl+C in the console, quit via RCON, or stopping the systemd/screen session). SteamCMD writing over files that HLDS has open produces a half-updated, corrupt install.

3. Run the update with validate

Point SteamCMD at the same install directory you used originally and run the update. The commands mirror downloading app 90:

./steamcmd.sh +force_install_dir /home/hlds/cstrike-server \
  +login anonymous \
  +app_update 90 validate \
  +quit

validate is not optional here — it repairs any file the update touched and confirms the tree is consistent. Point force_install_dir at your existing install so the update lands in place rather than creating a second copy.

4. Restore anything the update reverted

An engine update can overwrite liblist.gam, resetting the gamedll line that Metamod hooks into. If Metamod stops loading after an update, this line is the usual culprit — compare it against your backup and restore the Metamod entry. The update should not touch addons/, but always diff your critical configs against the pre-update tarball to be sure nothing important was reset to default.

5. Start and check the mod stack

Bring the server up and immediately confirm the plugin chain loaded. In the server console:

meta list
amxx plugins

meta list must show Metamod running with AMX Mod X loaded; amxx plugins should show your plugins as running, not bad load. A bad load after an update usually means a module needs recompiling against the new engine, or liblist.gam was not restored.

6. Have a rollback ready

SteamCMD always pulls the current build — there is no per-version pin for app 90 — so your rollback path is the tarball from step 1, not a downgrade command. If the update breaks something you cannot quickly fix, stop the server, restore the backup over the install, and re-open on the known-good tree while you investigate offline. This is why the backup is the first step and not the last.

Common errors

  • Metamod stopped loading after the updateliblist.gam was overwritten and lost its gamedll/Metamod line. Restore that file from the backup.
  • Every plugin shows "bad load" — a module needs rebuilding against the new engine, or the AMX Mod X path broke. Reinstall the affected modules.
  • Server will not start / segfaults on boot — a half-applied update. Re-run app_update 90 validate to completion, or restore the backup.
  • Custom cvar defaults reverted — the update reset a stock config. Re-apply your server.cfg values; they are read after the defaults.
  • Clients get "server is using a different version" — you updated the server after the client update wave; players on the old build must update their client, or you roll the server back to the legacy branch.

Verification

After the update, connect from a client and play a round. Confirm meta list shows the full stack and amxx plugins shows everything running. Check that stats still write (say /rank increments) and a banned SteamID is still blocked. Watch the server console during the first map load for any red error lines — a module that failed to load or a config that could not be read announces itself there, and catching it before players arrive is the whole point of updating on an empty server. Restart once more and confirm it comes up clean a second time, since some breakage only appears on the second boot when a regenerated file is re-read. Only when a full map rotation has passed without a bad load should you consider the update settled — and keep the pre-update tarball until then.

Contributors: Daemon666 ✦
Share: