LinuxGSM is the fastest way to turn a fresh Linux VPS into a running game server. One command installs the server. One command starts it. One command updates it. This guide covers the full workflow from fresh Ubuntu install to a running server with automatic updates, monitoring, and systemd auto-start — with real working examples for Rust, Counter-Strike 2, Minecraft, TF2, and Valheim.

01 // What is LinuxGSM?

LinuxGSM (Linux Game Server Manager) is a free, open-source bash-based command-line tool that installs, updates, and manages dedicated game servers on Linux. It was created by Daniel Gibbs in 2012 and has become the most widely-used tool for self-hosted game servers — with over 15,000 GitHub stars and support for more than 100 games.

Unlike heavy web panels like Pterodactyl or AMP, LinuxGSM is just a set of bash scripts. There is no web UI, no database, no daemon process — just one script per game server. That minimalism is its biggest strength: it is fast, lightweight, easy to debug, and works on almost any Linux distribution with zero configuration overhead.

The LinuxGSM Philosophy

LinuxGSM wraps SteamCMD and game-specific binaries with sane defaults, standardised commands, and automation hooks. You always use the same verbs (start, stop, update, backup, monitor) regardless of whether you are running Rust, CS2, or Minecraft. Learn it once, use it everywhere.

Key features

  • 100+ supported games — Source engine (CS2, TF2, GMod, L4D2), Valve dedicated (Rust, 7DTD, Valheim), ARK, Minecraft Java/Bedrock, Unturned, Factorio, Terraria, Squad, Project Zomboid, Palworld, and many more
  • One-command install./server auto-install fetches the game files via SteamCMD and configures everything
  • Built-in monitoring./server monitor detects crashes and auto-restarts; integrates with Discord, Slack, email, Telegram, Pushbullet, Pushover, and more
  • Alerts via webhooks — Get notified when your server crashes, updates, or misses its heartbeat
  • Config file generation — Auto-generates sane default configs for CS2, TF2, and most Source games
  • Backups built in./server backup creates timestamped tarballs of your save data
  • Detailed diagnostics./server details and ./server debug make troubleshooting painless
  • Completely free — MIT licensed, no paid tiers, no license servers, no phone-home

02 // Which Game Server? (Interactive Picker)

LinuxGSM supports over 100 games. Pick yours below to see the exact server script name, hardware requirement, and honest notes. All commands in this guide assume a fresh Ubuntu 22.04 LTS system.

03 // Requirements

LinuxGSM is strict about prerequisites. Install everything below before you try to install a game server — otherwise you will get cryptic errors halfway through the install.

Supported operating systems

  • Ubuntu 22.04 LTS (recommended — this guide uses it)
  • Ubuntu 24.04 LTS (supported, works identically)
  • Debian 12 Bookworm (supported)
  • CentOS Stream 9 / Rocky 9 / AlmaLinux 9 (supported, dnf instead of apt)
  • Fedora 40+ (works, not officially QA-ed)
Warning — don't use Ubuntu Server Minimal

Cloud providers (including Hostinger) sometimes ship an "Ubuntu Minimal" image that lacks curl, wget, tmux, and other baseline tools. Either pick the full Ubuntu image at install time, or run apt install ubuntu-server -y first to restore the expected baseline.

Hardware requirements

See the game picker above for per-game RAM. In general:

  • CPU: 2 vCPU minimum for any game; 4 vCPU for Rust/ARK; 8 vCPU for modded servers
  • RAM: 4GB floor, 16GB for most serious servers
  • Disk: 25GB minimum (games + updates eat space fast); SSD/NVMe strongly recommended
  • Bandwidth: Unmetered or 2TB+/month; 100 Mbps symmetric minimum
  • Root / sudo access is required to install dependencies (not to run the server)

04 // Install Dependencies

LinuxGSM needs 32-bit libraries because SteamCMD and many game binaries are still 32-bit. On a fresh Ubuntu 22.04 install, run everything below as root:

# Update the system first
apt update && apt upgrade -y

# Enable 32-bit architecture (required by SteamCMD)
dpkg --add-architecture i386
apt update

# Install all LinuxGSM base dependencies
apt install -y curl wget file tar bzip2 gzip unzip bsdmainutils \
  python3 util-linux ca-certificates binutils bc jq tmux netcat-openbsd \
  lib32gcc-s1 lib32stdc++6 libsdl2-2.0-0:i386 steamcmd

# Some games need extra libs — install the kitchen sink here,
# it costs you 200MB and saves hours of debugging later
apt install -y libtinfo5 libncurses5:i386 libcurl3-gnutls:i386 \
  libstdc++6:i386 libgcc-s1:i386 lib32z1 libgdiplus libsdl2-2.0-0
Ubuntu 24.04 note

On 24.04 the package libtinfo5 was removed. Skip it — LinuxGSM does not strictly need it on modern systems, and the servers that did need it now accept libtinfo6. If a specific game complains, install libtinfo5 from the 22.04 repo manually.

05 // Create a Dedicated User

Never run a game server as root. If the server binary is exploited (and it happens, Source engine servers have had RCE bugs), the attacker owns your entire VPS. LinuxGSM's own documentation mandates a dedicated unprivileged user per game server. Convention: name the user after the game script.

# Example for Rust — change 'rustserver' to match your game:
adduser rustserver
#   you will be prompted for a password — make it strong and save it
#   leave all the other prompts blank (press Enter)

# Switch to the new user for every command from now on
su - rustserver

Every step in this guide after this point assumes you are logged in as the dedicated user, not as root. Your prompt should look like rustserver@hostname:~$.

06 // Download LinuxGSM

LinuxGSM is a single bash script that bootstraps the game-specific script. The one-liner from linuxgsm.com is:

# Run this as your dedicated user, NOT as root
wget -O linuxgsm.sh https://linuxgsm.com/dl/linuxgsm.sh
chmod +x linuxgsm.sh
Tip — verify the download

The LinuxGSM maintainers sign releases. If you care about supply-chain integrity (you should), pin to a specific release from the GitHub releases page instead of the always-latest one-liner. The linuxgsm.com/dl/linuxgsm.sh URL always serves the latest stable tag.

07 // Install Your First Game Server

Now the magic happens. The same pattern works for every game — just swap in the script name from the picker above.

Step 1: Bootstrap the game-specific script

# Replace 'rustserver' with whatever game you picked
bash linuxgsm.sh rustserver

This downloads the rustserver script (or cs2server, mcserver, etc.) and all its helper modules from the LinuxGSM GitHub repo. Takes about 10 seconds.

Step 2: Auto-install

# One command. Fetches SteamCMD, downloads the game, generates configs
./rustserver auto-install

This step takes 5-30 minutes depending on the game and your connection speed:

  • Rust: ~8 GB download, 10-15 min on a 100 Mbps link
  • CS2: ~35 GB (yes, really), 40-60 min
  • Minecraft Java: ~50 MB, 30 seconds
  • ARK: ~20 GB, 20-30 min
  • Valheim: ~1 GB, 2-3 min
What auto-install actually does

1) Installs SteamCMD if missing. 2) Creates the directory structure (serverfiles/, log/, lgsm/, backups/). 3) Prompts you for game-specific values like server name, RCON password, seed, map size. 4) Downloads the game via SteamCMD. 5) Generates lgsm/config-lgsm/rustserver/common.cfg. 6) Runs a validation check. You can re-run auto-install any time to repair a broken install.

08 // Essential LinuxGSM Commands

Every LinuxGSM script supports the same set of commands. Learn these eight and you can manage any game server with no documentation lookup.

Command What it does
./server startBoot the server inside a detached tmux session
./server stopGracefully shut down the server (sends exit command first, then SIGTERM)
./server restartStop then start — also auto-triggered by monitor on crash
./server updateRun SteamCMD update — pulls new game version if available
./server monitorCheck if server is alive — if not, restart and send alert (cron this every 5 min)
./server backupCreate timestamped tarball of save data in backups/
./server consoleAttach to the live tmux session to watch logs / type commands. Detach with Ctrl+B then D — never with Ctrl+C, that kills the server.
./server detailsShow config summary, IP, ports, RCON password, running status
./server debugRun the server attached to your terminal — shows startup errors you cannot see otherwise
./server postdetailsUpload sanitised diagnostics to a pastebin — the #1 thing support will ask for
The attach/detach trap

Ninety percent of "my server died when I closed SSH" tickets are caused by people pressing Ctrl+C to leave the console. LinuxGSM runs your server inside tmux. Leave with Ctrl+B then D (detach). Closing with Ctrl+C sends SIGINT and kills the game process.

09 // Configuration Files

LinuxGSM uses a three-layer config system. Understanding it saves hours of "why is my change not persisting" frustration.

lgsm/config-default/config-lgsm/rustserver/_default.cfg   # DO NOT EDIT — overwritten by updates
lgsm/config-lgsm/rustserver/common.cfg                    # edit for all-instance settings
lgsm/config-lgsm/rustserver/rustserver.cfg                # edit for this-instance-only settings

Rule: always edit common.cfg or the instance-specific cfg, never _default.cfg. The defaults file is reset on every LinuxGSM update. Settings in the instance cfg override common.cfg, which overrides _default.cfg.

The actual game config (like Rust's server.cfg, CS2's gamemode_competitive.cfg, or Minecraft's server.properties) lives under serverfiles/. LinuxGSM does not touch those — edit them with the game's own documentation.

10 // Game-Specific Config Examples

Real working examples for the five most-asked-about games. Each block shows the minimum edits to get a production-quality server.

Rust (rustserver)

Edit lgsm/config-lgsm/rustserver/rustserver.cfg:

servername="Your Server Name"
servertags="monthly,vanilla,NA"
port="28015"
rconport="28016"
rconpassword="CHANGE-THIS-LONG-RANDOM-STRING"
maxplayers="100"
worldsize="4000"
seed="12345"
saveinterval="300"
fps="60"
# Force a wipe by changing the seed on the first Thursday of the month — see our
# https://hostingbuff.com/blog/rust-server-wipe-guide.html for the full wipe schedule

Counter-Strike 2 (cs2server)

Edit lgsm/config-lgsm/cs2server/cs2server.cfg:

servername="Your CS2 Server"
rconpassword="CHANGE-THIS"
defaultmap="de_mirage"
maxplayers="10"
tickrate="128"
port="27015"
gametype="0"
gamemode="1"
# CS2 requires a Steam Game Server Login Token (GSLT) to appear in the public browser.
# Get one free at https://steamcommunity.com/dev/managegameservers (App ID 730)
gslt="your-gslt-token-here"

Minecraft Java (mcserver)

LinuxGSM uses the vanilla Minecraft jar by default. For better performance, swap to PaperMC after install:

# Download latest Paper build (replace 1.20.6 with current version)
cd ~/serverfiles
wget https://api.papermc.io/v2/projects/paper/versions/1.20.6/builds/latest/downloads/paper-1.20.6-latest.jar -O server.jar

# Tell LinuxGSM to use optimal JVM flags
# Edit lgsm/config-lgsm/mcserver/mcserver.cfg:
javaram="6144"   # 6GB heap for an 8GB VPS
startparameters="-Xms${javaram}M -Xmx${javaram}M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -jar ${executable} nogui"

See our dedicated Minecraft JVM flags guide for the full Aikar flags and per-player tuning.

TF2 (tf2server)

servername="Your TF2 Server"
rconpassword="CHANGE-THIS"
maxplayers="24"
defaultmap="pl_badwater"
port="27015"
# TF2 needs a GSLT too (App ID 440)
gslt="your-gslt-token-here"

Valheim (vhserver)

servername="Your Valheim Server"
serverpassword="CHANGE-THIS-MIN-5-CHARS"
worldname="Midgard"
port="2456"
public="1"
# Valheim's crossplay option — enables Xbox players to join
crossplay="1"

11 // Monitoring & Alerts (Discord / Email / More)

A server you do not monitor is a server that dies silently at 3 AM. LinuxGSM's monitor subcommand is the answer. Pair it with Discord alerts and you'll know about crashes before your players do.

Enable Discord alerts

  1. In your Discord server, open the channel settings → IntegrationsWebhooksNew Webhook. Copy the URL.
  2. Edit lgsm/config-lgsm/rustserver/common.cfg (or your game's equivalent):
    discordalert="on"
    discordwebhook="https://discord.com/api/webhooks/xxx/yyy"
  3. Test: ./rustserver test-alert — a test message should appear in your Discord channel within 2 seconds.

Other supported alert channels

  • Email (emailalert="on") — needs mailutils installed and a working mail relay
  • Slack (slackalert="on") — webhook URL from Slack's incoming-webhook app
  • Telegram (telegramalert="on") — bot token + chat ID from BotFather
  • Pushbullet, Pushover, Rocket.Chat, Gotify, IFTTT, Mailgun — all supported with similar config blocks

12 // Auto-Start on Boot with systemd

If your VPS reboots (and it will — security updates, provider maintenance, kernel panics), your server should come back up automatically. LinuxGSM does not install a systemd unit for you, so do it manually. This is the exact unit every production server should use.

As root, create /etc/systemd/system/rustserver.service (replace rustserver everywhere with your game):

[Unit]
Description=Rust Dedicated Server (LinuxGSM)
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=rustserver
Group=rustserver
WorkingDirectory=/home/rustserver
ExecStart=/home/rustserver/rustserver start
ExecStop=/home/rustserver/rustserver stop
ExecReload=/home/rustserver/rustserver restart
Restart=on-failure
RestartSec=30
TimeoutStartSec=900
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target

Enable it:

systemctl daemon-reload
systemctl enable rustserver
systemctl start rustserver
systemctl status rustserver
Why Type=forking, not Type=simple

LinuxGSM starts the game inside a detached tmux session and then exits. A Type=simple unit would immediately mark the service as "exited" and systemd would loop-restart forever. forking tells systemd the parent exit is expected.

13 // Cron Automation: Monitoring, Updates, Backups

Run crontab -e as your game server user (not root) and paste this battle-tested block. It is what every serious LinuxGSM server runs.

# LinuxGSM recommended cron for rustserver — adjust game name as needed
# ======================================================================

# Check every 5 minutes that the server is alive; restart + alert if not
*/5 * * * * /home/rustserver/rustserver monitor > /dev/null 2>&1

# Check for and apply game updates every 30 minutes
*/30 * * * * /home/rustserver/rustserver update > /dev/null 2>&1

# Update LinuxGSM itself weekly (Sunday 4 AM)
0 4 * * 0 /home/rustserver/rustserver update-lgsm > /dev/null 2>&1

# Backup daily at 5 AM — keeps all backups, clean up manually
0 5 * * * /home/rustserver/rustserver backup > /dev/null 2>&1

# Full restart every 12 hours (optional — Project Zomboid / ARK need this)
0 6,18 * * * /home/rustserver/rustserver restart > /dev/null 2>&1
Update during force-wipe days

For Rust specifically, the update cron catches the monthly update that Facepunch ships on force-wipe Thursdays at 19:00 UTC. Your server will auto-update within 30 minutes. Combined with monitor, your players will see the server come back online before most competing servers. See our Rust Server Wipe Guide for the full force-wipe calendar.

14 // Honest Pros & Cons

No sugar-coating. If LinuxGSM is the wrong tool for your use case, another panel will save you days of headaches.

✓ Wins

  • Lightest footprint of any panel — zero daemons, zero database, zero web server. Idle memory usage: about 0 MB.
  • Works everywhere — pure bash + POSIX tools. Runs on any Linux in the last 10 years.
  • Learn it once, use it everywhere — same commands across 100+ games
  • Completely free and MIT licensed — no trial period, no paid tier, no license server
  • Fast, readable scripts — you can cat any file and understand what it does; great for debugging and customisation
  • Excellent alerting — 10+ channels out of the box, including Discord, Telegram, Slack, email
  • Large active community — 15k+ GitHub stars, responsive maintainers, Discord server with 20k+ members
  • Built-in diagnosticspostdetails generates a sanitised support report in one command

✗ Drawbacks

  • No web UI — if you want a browser dashboard, this is the wrong tool. Use Pterodactyl or AMP.
  • SSH required — you must be comfortable with a Linux terminal. If typing cd ~/serverfiles scares you, start with Pterodactyl or managed Nitrado instead.
  • No multi-user management — everyone who can SSH in as the game user can do everything. No permission system, no sub-users.
  • One instance per user directory — running 5 servers means 5 Linux users, 5 home directories, 5 cron files. Workable, but not as clean as Pterodactyl's node model.
  • Windows unsupported — the name is literal. Use WindowsGSM on Windows.
  • No automatic plugin management — you install Rust Oxide / Minecraft Paper plugins / SourceMod manually

15 // LinuxGSM vs Other Panels

Pick the right tool for your actual use case. Below is the honest breakdown — we link to each panel's full guide so you can compare apples to apples.

Feature LinuxGSM Pterodactyl AMP WindowsGSM
PriceFreeFree€10+/licenseFree
Web UI✓ Excellent✓ Best✓ Desktop app
OS supportLinuxLinuxLinux + WinWindows
Supported games100+Via eggs, 200+100+30+
Multi-user✓ Full RBAC✓ Full RBAC
Learning curveEasyModerateEasy-ModerateVery easy
Resource overheadZero~300MB~200MB~100MB
Best forSingle-person, single-VPS, CLI-comfortableHosting businesses, teams, clientsProsumers, small hosts wanting paid supportHome Windows PC hosts

16 // Troubleshooting — Top 10 Problems

These are the issues that show up over and over in the LinuxGSM Discord. Ninety percent of tickets are on this list.

1. "Command not found" when running ./server start

You are logged in as root. Switch to the dedicated user: su - rustserver. LinuxGSM refuses to run as root for security reasons.

2. Server starts but nobody can connect

Firewall. Open the game's ports in ufw. Example for Rust: ufw allow 28015/udp && ufw allow 28016/tcp && ufw allow 28082/tcp. Check with ./server details for the exact port list, then test with nc -u -z <your-ip> 28015 from another machine.

3. "SteamCMD is not installed" or "SteamCMD validation failed"

Usually a missing 32-bit library. Reinstall the full dependency list from section 04. On Ubuntu 24.04 specifically, run apt install steamcmd to get the Canonical-packaged version which auto-resolves deps.

4. Server dies the moment I close SSH

You pressed Ctrl+C to leave the console. Always detach with Ctrl+B then D. Better: use the systemd unit from section 12 so the server is not tied to your login session.

5. Server crashes every few hours with no log message

Almost always OOM (out of memory). Check with dmesg | grep -i "killed process". Solutions: add swap (fallocate -l 4G /swapfile && mkswap /swapfile && swapon /swapfile), lower max players, or upgrade to a larger VPS.

6. Rust server not visible in the community browser

Three causes. (a) Server hasn't done its first query to the master list yet — wait 5 minutes. (b) Port 28017 is not open (Rust uses it for the server listing query). (c) Your hostname has special characters Facepunch rejects — use plain ASCII only.

7. CS2 / TF2 server shows in LAN but not in community browser

Missing GSLT (Game Server Login Token). Valve requires one for public listing. Get a free token at steamcommunity.com/dev/managegameservers using app ID 730 (CS2) or 440 (TF2), then paste into gslt="..." in the LinuxGSM cfg.

8. Update fails with "Steam Guard" or "appid not found"

You are using a Steam account that needs Steam Guard. LinuxGSM uses anonymous Steam login by default — it should not need credentials for dedicated server downloads. If the game requires a real account (rare), set steamuser and steampass in the cfg and temporarily disable 2FA.

9. "gslt is expired" / token stopped working

Valve auto-expires GSLTs after 30 days of server downtime. Generate a new token (free) and update the cfg. Set a cron reminder — LinuxGSM does not alert on this yet.

10. Minecraft: "unable to access jarfile server.jar"

LinuxGSM expects the Minecraft jar to be named server.jar and live in ~/serverfiles/. If you manually downloaded Paper, rename it with mv ~/serverfiles/paper-*.jar ~/serverfiles/server.jar.

The magic debug command

When nothing else works, run ./server debug. It starts the server attached to your terminal — you will see every error, missing library, permission problem, and config typo that LinuxGSM normally hides. Then run ./server postdetails and paste the resulting link to the LinuxGSM Discord for help.

17 // Where to Run LinuxGSM

LinuxGSM is just software — it needs a Linux machine to run on. You have three realistic options, each suited to different skill levels and use cases.

Option 1 — Recommended for most people

Hostinger KVM 2 or KVM 4 VPS

Full root access on a dedicated KVM slice. The KVM 2 (2 vCPU, 8GB RAM, 100GB NVMe) handles Minecraft, CS2, TF2, Valheim, and most small community servers at €8.49/mo. For Rust, ARK, or modded Minecraft, step up to KVM 4 (4 vCPU, 16GB RAM, 200GB NVMe) at €12.99/mo — Hostinger's own docs recommend 12GB+ for Rust. Both include unmetered bandwidth, free nightly backups, and 1-Gbps uplinks.

Get KVM 2 →   Get KVM 4 →
Option 2 — For serious modded / multi-server setups

Hostinger KVM 8

8 vCPU, 32GB RAM, 400GB NVMe at €24.99/mo. Right-sized for ARK clusters, heavy modpacks (ATM, Create), or running multiple LinuxGSM instances on one box. Same unmetered bandwidth and management features as the lower tiers.

Get KVM 8 →
Option 3 — Skip LinuxGSM entirely

Nitrado Managed Hosting

If reading this guide feels overwhelming, or if you just want a server running in 2 minutes without touching a terminal, Nitrado offers managed one-click game servers. No Linux knowledge required. They handle updates, backups, and infrastructure — you get a web panel. Trade-off: less control and higher per-slot cost than a self-managed VPS.

Get Nitrado →

18 // Next Steps

Your LinuxGSM server is running. Here is what to do next — ordered by how much return you get for the effort.