This documentation details the process for installing and configuring a Counter-Strike 1.6 Dedicated Server (HLDS) on **Ubuntu Server 24.04 LTS (64-bit)**.
Since the CS 1.6 server uses 32-bit binaries, this guide includes the installation of necessary 32-bit compatibility libraries and the subsequent service management using a dedicated systemd script.
The 64-bit architecture of Ubuntu 24.04 mandates the enabling of the i386 architecture to successfully execute the HLDS engine.
Execute all following commands as a user with sudo permissions.
It is **critical** to enable the 32-bit architecture before installing dependencies.
# 1. Enable the 32-bit architecture (i386), CRITICAL for CS 1.6
sudo dpkg --add-architecture i386
# 2. Update the package list and upgrade the system
sudo apt update && sudo apt upgrade -y
Install basic system utilities and essential 32-bit libraries (i386).
# 3. Install System Utilities
sudo apt install wget curl tar mailutils unzip nano tmux net-tools binutils -y
# 4. Install 32-bit Libraries required by HLDS
sudo apt install lib32gcc-s1 lib32z1 libbz2-1.0:i386 libc6:i386 libncursesw6:i32 libstdc++6:i386 libgcc-s1:i386 -y
# 5. Install Additional Libraries for GoldSrc engine dependencies
sudo apt install libsdl2-2.0-0:i32 libfontconfig1:i32 libxtst6:i32 -y
For security best practices, the server must run under a dedicated, non-root account (csserver).
sudo useradd csserver
sudo passwd csserver
A strong password should be set for the account.
sudo mkdir /home/csserver
sudo chown csserver:csserver /home/csserver
su - csserver
csserver user unless explicitly stated otherwise.
A preconfigured package is used, followed by a validation step using SteamCMD to ensure binary compatibility with Ubuntu 24.04.
Execute as csserver.
# Download the preconfigured package
wget "https://downloads.sourceforge.net/project/cs16serverpreconfiguredlinux/beta2014/linuxserver%2BdprotoDualnosteam.tar.gz"
# Unpack the contents, creating the /home/csserver/27020 directory
tar xvzf linuxserver+dprotoDualnosteam.tar.gz
SteamCMD is used to download the latest HLDS binaries, ensuring compatibility.
Execute as csserver.
wget "http://media.steampowered.com/client/steamcmd_linux.tar.gz"
tar xvfz steamcmd_linux.tar.gz
chmod +x steamcmd.sh
./steamcmd.sh
Inside the SteamCMD console, execute the following commands:
force_install_dir /home/csserver/27020/
login anonymous
app_update 90 validate
exit
To prevent conflicts between old packaged libraries and modern system libraries, the conflicting files are renamed, forcing the system to use its newer libraries.
Execute as csserver inside the server directory.
cd /home/csserver/27020
# Rename old libraries (backup)
mv libstdc++.so.6 libstdc++.so.6.BAK
mv libgcc_s.so.1 libgcc_s.so.1.BAK
# Create symbolic link for steamclient.so
mkdir -p ~/.steam/sdk32
ln -s /home/csserver/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
Determine the server's public IP address for use in the startup parameters.
curl ifconfig.me
Replace XXX.XXX.XXX.XXX with the public IP address obtained.
cd /home/csserver/27020
./hlds_run -game cstrike +ip XXX.XXX.XXX.XXX +port 27020 -pingboost 3 +maxplayers 22 +map de_dust -autoupdate
To stop the server: Press Ctrl + C.
screenTo run the server detached from the terminal (temporary):
screen -A -m -d -S csserver \
./hlds_run -game cstrike +ip XXX.XXX.XXX.XXX +port 27020 -pingboost 3 +maxplayers 22 +map de_dust -autoupdate &
screen -r csserverCtrl + A then Dsystemd Service InstallationA dedicated script is used to install and enable the service unit for persistent operation.
Execute as csserver.
cd /home/csserver
wget "https://downloads.sourceforge.net/project/cs16serverpreconfiguredlinux/beta2014/systemd/install_cstrike_service.sh"
Execute as sudoer (requires sudo).
sudo chmod +x /home/csserver/install_cstrike_service.sh
sudo /home/csserver/install_cstrike_service.sh
cstrike_server.service unit file and enables it for automatic startup.
Execute as sudoer.
sudo systemctl status cstrike_server
The following UDP ports must be open on the host firewall and forwarded on your network router:
| Port (UDP) | Function |
|---|---|
| **27005** | Server monitoring and status |
| **27020** | Primary game communication (matching the +port setting) |
DProto is **optional** and is only required if you need to support both Steam and Non-Steam clients connecting to your server. If you only plan to host for official Steam clients, you can skip this section.
Execute as csserver.
cd /home/csserver/27020
touch dproto.cfg
# Primary Source (Recommended)
wget -O dproto.cfg "https://downloads.sourceforge.net/project/cs16serverpreconfiguredlinux/beta2014/dual_protocol/dproto.cfg"
# Alternative Source (Backup)
# wget -O dproto.cfg "https://pastebin.com/raw/crb5bNk5"
server.cfg:**
Add the following line to /home/csserver/27020/cstrike/server.cfg:
dp_rejmsg_nosteam47 "Sorry, you're using an old client, download a newer version."
This guide is based on established HLDS deployment procedures and updated for current Ubuntu versions, adhering to standards similar to those used by LinuxGSM.