--- title: "How to Install a CS 1.6 Server with LinuxGSM" excerpt: "Install and manage a CS 1.6 server with LinuxGSM's csserver script, which wraps SteamCMD, tmux, and a self-healing monitor." category: "installation" tags: "linuxgsm, linux" image: "" read_time: "8 min read" ---
LinuxGSM is a bash management script that wraps the whole lifecycle of a game server — install, start, stop, update, backup and monitor — behind one command. For CS 1.6 it drives SteamCMD to download app 90 and then manages the hlds process for you. The CS 1.6 server code in LinuxGSM is csserver. This guide installs it from scratch on a Debian/Ubuntu box.
LinuxGSM refuses to run as root and it is right to — a game server should never run with root privileges. Create a service user first:
sudo adduser csserver sudo su - csserver
Everything below runs as this unprivileged user, in its home directory.
CS 1.6 is a 32-bit engine, so you need i386 libraries plus the tools LinuxGSM uses (tmux, curl). On a 64-bit Debian/Ubuntu host, enable i386 and install:
sudo dpkg --add-architecture i386 sudo apt update sudo apt install -y curl wget tmux lib32gcc-s1 lib32stdc++6
LinuxGSM's own dependency checker will tell you exactly what is missing later, but these cover a standard CS 1.6 server. The 32-bit libs are the ones people forget, and their absence produces a silent failure to start.
Fetch the bootstrap script and hand it the CS 1.6 server code. This does not download the game yet — it creates a tailored csserver management script:
wget -O linuxgsm.sh https://linuxgsm.sh chmod +x linuxgsm.sh ./linuxgsm.sh csserver
You now have a csserver script in the home directory. Every operation from here is ./csserver <command>.
Run the install command. LinuxGSM checks dependencies, then invokes SteamCMD to pull down app 90:
./csserver install
This is the step that runs app_update 90 under the hood — the same download covered manually in the SteamCMD guide. It downloads the full CS 1.6 server files into serverfiles/. If the cstrike folder comes down incomplete (a known Steam quirk on app 90), run ./csserver install again — it resumes rather than restarts.
LinuxGSM keeps its settings separate from the game's own configs. The management config — ports, start parameters — lives here:
lgsm/config-lgsm/csserver/csserver.cfg
Copy the settings you want to override out of _default.cfg (never edit _default.cfg directly) into csserver.cfg. The in-game settings — hostname, rcon, cvars — still live in the normal server.cfg under serverfiles/cstrike/. LinuxGSM's startparameters line is where you set the map, maxplayers and port, mirroring the HLDS command-line parameters.
./csserver start ./csserver details ./csserver monitor
start launches HLDS inside a tmux session; details prints the ports, IP and query status; monitor checks the server is alive and responding to A2S queries, restarting it if not. Add ./csserver monitor to cron every few minutes and LinuxGSM becomes a self-healing watchdog. To reach the live console, ./csserver console attaches to the tmux session — detach with the tmux prefix, not Ctrl-C, or you kill the server.
LinuxGSM wraps the maintenance jobs too. ./csserver update re-runs SteamCMD to pull any CS 1.6 update, ./csserver backup archives the server files, and ./csserver restart cycles the process cleanly. Put update and backup on their own cron schedules so the server stays current and recoverable without you logging in. Everything LinuxGSM does is still plain SteamCMD and hlds underneath — the script just gives each step a memorable command and a log under log/.
apt install the named packages. The 32-bit libs are the usual culprit.lib32gcc-s1 or lib32stdc++6. Check log/console/csserver-console.log for a loader error.cstrike folder is incomplete. Re-run ./csserver install.csserver user.Run ./csserver details and confirm it reports the server running with a query port responding. From another machine, add the server's IP and port in the CS browser (favourites, add by address) and confirm it appears with the right map and player count. Then run ./csserver monitor and confirm it reports the server healthy. Once monitor passes, wire it into cron so LinuxGSM restarts the server automatically if it ever dies.