Installer un serveur Counter-Strike 1.6 sur Linux (Ubuntu, Debian, AlmaLinux)

Tutoriels Linux › Serveurs de jeux

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur Counter-Strike 1.6 sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 21/09/2026
335 vues
Intermédiaire
30 minutes

Prérequis

Votre serveur :

Ce guide installe le serveur dédié Counter-Strike 1.6 (HLDS, le moteur GoldSrc) avec SteamCMD, l'outil de Valve : un utilisateur dédié, le serveur (moins de 1 Go), server.cfg, un service qui le démarre avec la machine, la sonde qui prouve qu'il répond, le pare-feu, la connexion depuis le jeu, RCON et la mise à jour. Choisissez votre système ci-dessus. Copiez la commande avec le bouton Copier, collez-la dans votre terminal, et comparez avec le résultat attendu.

1Mettre à jour le système et installer les bibliothèques 32 bits

SteamCMD, l'outil de Valve qui télécharge les serveurs de jeux, est un programme 32 bits : il lui faut les bibliothèques 32 bits du système. On met d'abord le système à jour ; sans cela, l'installation 32 bits échoue sur AlmaLinux, Rocky, CentOS et Fedora (conflit avec une bibliothèque plus ancienne), et SteamCMD ne peut pas joindre Steam sur une Fedora fraîche (certificats absents).

Mettre à jour le système
apt update && apt upgrade -y
Résultat attendu
...
212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded.
(les nombres dépendent de l'âge de l'image)
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
zypper -n refresh && zypper -n update
Résultat attendu
All repositories have been refreshed.
...
Installer les bibliothèques 32 bits et curl
dpkg --add-architecture i386 && apt update && apt install -y lib32gcc-s1 lib32stdc++6 curl
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
zypper -n install glibc-32bit libstdc++6-32bit

openSUSE Leap 16 livre son noyau avec l'exécution des programmes 32 bits désactivée : sans cette étape, SteamCMD répond « Exec format error ». On l'active dans GRUB et on redémarre (reconnectez-vous en SSH après une minute).

Activer les programmes 32 bits dans le noyau, puis redémarrer
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="ia32_emulation=1 /' /etc/default/grub && grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
Après le redémarrage : vérifier que l'option est active
grep -o ia32_emulation=1 /proc/cmdline
Résultat attendu
ia32_emulation=1

2Créer un utilisateur dédié et installer SteamCMD

Le serveur ne tourne jamais en root : un utilisateur cs16, dont le dossier personnel est /opt/cs16, possède SteamCMD et le serveur. Le dossier est créé avant l'utilisateur : sur Rocky et CentOS, SELinux refuse à useradd de le créer lui-même sous /opt.

Créer les dossiers et l'utilisateur cs16
mkdir -p /opt/cs16/server /opt/cs16/steamcmd && useradd -r -s /bin/bash -d /opt/cs16 cs16 && chown -R cs16:cs16 /opt/cs16
Télécharger SteamCMD (en tant que cs16)
su - cs16 -c "cd /opt/cs16/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"
Résultat attendu
linux32
steamcmd.sh

3Télécharger le serveur Counter-Strike 1.6

Le serveur Counter-Strike 1.6 est l'application 90 de Steam, le serveur Half-Life, avec le mod cstrike : l'option +app_set_config 90 mod cstrike dit à SteamCMD de prendre ce mod. Une à deux minutes. Si le passage se termine sur « ERROR! Failed to install app '90' (Missing configuration) » sans rien télécharger : relancez la même commande, elle passe.

Installer le serveur Counter-Strike 1.6
su - cs16 -c "/opt/cs16/steamcmd/steamcmd.sh +force_install_dir /opt/cs16/server +login anonymous +app_set_config 90 mod cstrike +app_update 90 validate +quit"
Résultat attendu
...
Success! App '90' fully installed.
Vérifier la taille, la présence du lanceur et le nombre de cartes
du -sh /opt/cs16/server && ls -l /opt/cs16/server/hlds_run && ls /opt/cs16/server/cstrike/maps/*.bsp | wc -l
Résultat attendu
1.1G	/opt/cs16/server
-rwxrwxr-x 1 cs16 cs16 7778 Sep 21 23:18 /opt/cs16/server/hlds_run
25
(931M à 1.1G selon le système ; les droits et la date varient)
Vérifier qu'aucune bibliothèque ne manque au moteur et au jeu (0 = rien ne manque)
cd /opt/cs16/server && LD_LIBRARY_PATH=. ldd hlds_linux engine_i486.so cstrike/dlls/cs.so | grep -c 'not found'; cd /

4Préparer le serveur : bibliothèque Steam, configuration, script de démarrage

Le serveur est un programme 32 bits : il cherche steamclient.so dans ~/.steam/sdk32, on y met un lien vers celui de SteamCMD. Le jeu livre un server.cfg d'exemple ; celui ci-dessous le remplace avec le nom du serveur et le mot de passe RCON : changez-les.

Lier steamclient.so pour le serveur
su - cs16 -c "mkdir -p ~/.steam/sdk32 && ln -sf /opt/cs16/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so"
Créer server.cfg
cat > /opt/cs16/server/cstrike/server.cfg << 'EOF'
hostname "Mon serveur Counter-Strike 1.6"
rcon_password "ChangezMoi"
sv_password ""
sv_region 0
sv_aim 0
pausable 0
sv_cheats 0
mp_timelimit 20
mp_friendlyfire 0
EOF
chown cs16:cs16 /opt/cs16/server/cstrike/server.cfg

Le script de démarrage porte la carte et le nombre de joueurs.

Créer start.sh
cat > /opt/cs16/start.sh << 'EOF'
#!/bin/sh
cd /opt/cs16/server
exec ./hlds_run -game cstrike -console -condebug -norestart -ip 0.0.0.0 -port 27015 +maxplayers 16 +map de_dust2
EOF
chmod +x /opt/cs16/start.sh && chown -R cs16:cs16 /opt/cs16
+map de_dust2
La carte de départ ; 25 cartes sont livrées dans cstrike/maps (de_dust, de_inferno, de_nuke, de_train, de_aztec, cs_office, cs_italy, cs_assault...)
+maxplayers 16
Le nombre de joueurs
-condebug
Écrit la console du serveur dans cstrike/qconsole.log
mp_timelimit
Dans server.cfg : la durée d'une carte en minutes
mp_friendlyfire
Dans server.cfg : 1 pour que les tirs blessent aussi les coéquipiers
sv_aim, pausable, sv_cheats
Dans server.cfg : la visée assistée, la pause par les joueurs et les triches, tous à 0
cstrike/mapcycle.txt
L'ordre des cartes, livré avec le jeu : une carte par ligne

5Démarrer le serveur comme un service

Le service systemd lance start.sh avec l'utilisateur cs16, relance le serveur s'il plante et le démarre avec la machine.

Créer le service cs16
cat > /etc/systemd/system/cs16.service << 'EOF'
[Unit]
Description=Serveur Counter-Strike 1.6
After=network.target

[Service]
User=cs16
Group=cs16
WorkingDirectory=/opt/cs16/server
ExecStart=/opt/cs16/start.sh
Restart=on-failure
RestartSec=15
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now cs16
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/cs16.service → /etc/systemd/system/cs16.service.

Le serveur est prêt en moins d'une minute : il annonce sa connexion à Steam dans cstrike/qconsole.log et écoute sur le port 27015. Il prend 130 Mo de mémoire sans joueur.

Une minute plus tard : le serveur est connecté à Steam et écoute
systemctl is-active cs16 && grep -E 'Connection to Steam|VAC secure' /opt/cs16/server/cstrike/qconsole.log && ss -lunp | grep 27015
Résultat attendu
active
Connection to Steam servers successful.
   VAC secure mode is activated.
UNCONN 0      0            0.0.0.0:27015      0.0.0.0:*    users:(("hlds_linux",pid=50785,fd=10))

La sonde ci-dessous interroge le serveur comme le fait la liste des serveurs.

Interroger le serveur comme le fait la liste des serveurs
python3 - << 'EOF'
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(5)
q = b'\xff\xff\xff\xffTSource Engine Query\x00'
s.sendto(q, ('127.0.0.1', 27015)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
    s.sendto(q + r[5:9], ('127.0.0.1', 27015)); r = s.recvfrom(4096)[0]
p = r[6:].split(b'\x00')
print(p[0].decode(), '|', p[1].decode(), '|', p[2].decode())
EOF
Résultat attendu
Mon serveur Counter-Strike 1.6 | de_dust2 | cstrike

6Ouvrir les ports dans le pare-feu

Les joueurs se connectent en UDP sur le port 27015 ; le TCP sert à RCON. La commande active le pare-feu du système en gardant SSH autorisé, puis ouvre les ports.

Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
apt install -y ufw && ufw allow 22/tcp && ufw allow 27015/udp && ufw allow 27015/tcp && ufw --force enable
Résultat attendu
...
Firewall is active and enabled on system startup
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=27015/udp --add-port=27015/tcp && firewall-cmd --reload
Résultat attendu
...
success
success
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=27015/udp --add-port=27015/tcp && firewall-cmd --reload
Résultat attendu
...
success
success
Ouvrir les ports du jeu (firewalld est déjà actif sur openSUSE)
firewall-cmd --permanent --add-port=27015/udp --add-port=27015/tcp && firewall-cmd --reload
Résultat attendu
success
success
Vérifier les règles
ufw status
Résultat attendu
Status: active
22/tcp                     ALLOW       Anywhere
27015/udp                  ALLOW       Anywhere
27015/tcp                  ALLOW       Anywhere
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
27015/udp 27015/tcp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
27015/udp 27015/tcp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
27015/udp 27015/tcp

7Se connecter et administrer

  1. Lancez Counter-Strike 1.6 et activez la console dans les options (Clavier, Avancé, Activer la console de développement).
  2. Ouvrez la console avec la touche ~ (ou ` selon le clavier).
  3. Si le serveur a un mot de passe (sv_password), tapez d'abord : password votre_mot_de_passe
  4. Tapez : connect 203.0.113.42:27015 (l'adresse IP de votre serveur).

Depuis la console du jeu, une fois connecté, vous commandez le serveur avec le mot de passe RCON de server.cfg :

S'identifier comme administrateur (une fois par session)
rcon_password ChangezMoi
Changer de carte
rcon changelevel de_inferno
Expulser un joueur (le nom vient de rcon status)
rcon kick NOM
Voir les joueurs connectés
rcon status
Mettre un mot de passe au serveur
rcon sv_password motdepasse
Changer la durée d'une carte
rcon mp_timelimit 30

8Gérer et mettre à jour le serveur

Voir l'état du service
systemctl status cs16
Voir la console du serveur en direct (Ctrl+C pour sortir)
tail -f /opt/cs16/server/cstrike/qconsole.log
Redémarrer
systemctl restart cs16
Arrêter
systemctl stop cs16

Après une mise à jour du jeu, mettez le serveur à jour : la même commande que l'installation, serveur arrêté.

Mettre à jour le serveur (serveur arrêté, puis relancé)
systemctl stop cs16 && su - cs16 -c "/opt/cs16/steamcmd/steamcmd.sh +force_install_dir /opt/cs16/server +login anonymous +app_set_config 90 mod cstrike +app_update 90 +quit" && systemctl start cs16
Résultat attendu
... Success! App '90' already up to date.
(« fully installed » quand une mise à jour a été téléchargée)
Serveur prêt

Votre serveur Counter-Strike 1.6 démarre avec la machine, se relance s'il tombe et écoute sur le port 27015. La même base SteamCMD sert aux autres serveurs de jeux.

Erreurs fréquentes

💬 Écrivez-nous sur Messenger !