Prérequis
- Un serveur sous Ubuntu, Debian, AlmaLinux, Rocky, CentOS, Fedora ou openSUSE : voir nos VPS au Canada
- Une connexion SSH ouverte en root : Se connecter en SSH à votre VPS
- 10 Go de disque libre et 4 Go de RAM
Ce guide installe le serveur dédié Insurgency: Sandstorm avec SteamCMD, l'outil de Valve : un utilisateur dédié, le serveur (4,7 Go), ses réglages et ses administrateurs, un script de démarrage qui porte la carte, le scénario, le nom et les ports, un service qui l'arrête proprement, la sonde qui prouve qu'il répond, le pare-feu, la connexion depuis le jeu 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).
apt update && apt upgrade -y... 212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded. (les nombres dépendent de l'âge de l'image)
dnf upgrade -y... Complete!
dnf upgrade -y... Complete!
zypper -n refresh && zypper -n updateAll repositories have been refreshed. ...
dpkg --add-architecture i386 && apt update && apt install -y lib32gcc-s1 lib32stdc++6 curldnf install -y glibc.i686 libstdc++.i686dnf install -y glibc.i686 libstdc++.i686zypper -n install glibc-32bit libstdc++6-32bitopenSUSE 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).
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="ia32_emulation=1 /' /etc/default/grub && grub2-mkconfig -o /boot/grub2/grub.cfg && rebootgrep -o ia32_emulation=1 /proc/cmdlineia32_emulation=1
2Créer un utilisateur dédié et installer SteamCMD
Le serveur ne tourne jamais en root : un utilisateur sandstorm, dont le dossier personnel est /opt/sandstorm, 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.
mkdir -p /opt/sandstorm/server /opt/sandstorm/steamcmd && useradd -r -s /bin/bash -d /opt/sandstorm sandstorm && chown -R sandstorm:sandstorm /opt/sandstormsu - sandstorm -c "cd /opt/sandstorm/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"linux32 steamcmd.sh
3Télécharger le serveur Insurgency: Sandstorm (4,7 Go)
SteamCMD télécharge l'application 581330, le serveur dédié Insurgency: Sandstorm : quelques minutes. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '581330' (Missing configuration) » sans rien télécharger : relancez la même commande, elle passe.
su - sandstorm -c "/opt/sandstorm/steamcmd/steamcmd.sh +force_install_dir /opt/sandstorm/server +login anonymous +app_update 581330 validate +quit"... Success! App '581330' fully installed.
du -sh /opt/sandstorm/server && ldd /opt/sandstorm/server/Insurgency/Binaries/Linux/InsurgencyServer-Linux-Shipping | grep -c 'not found'4.7G /opt/sandstorm/server 0
4Réglages et administrateurs
Les réglages de partie vont dans Insurgency/Saved/Config/LinuxServer/Game.ini, section [/Script/Insurgency.INSGameMode] ; les administrateurs dans Insurgency/Config/Server/Admins.txt, un SteamID64 par ligne. Remplacez 76561197960287930 par votre SteamID64 (17 chiffres, visible sur votre profil Steam).
mkdir -p /opt/sandstorm/server/Insurgency/Saved/Config/LinuxServer /opt/sandstorm/server/Insurgency/Config/Server
cat > /opt/sandstorm/server/Insurgency/Saved/Config/LinuxServer/Game.ini << 'EOF'
[/Script/Insurgency.INSGameMode]
bKillFeed=True
bDeadSay=True
FriendlyFireModifier=0.2
EOF
cat > /opt/sandstorm/server/Insurgency/Config/Server/Admins.txt << 'EOF'
76561197960287930
EOF
chown -R sandstorm:sandstorm /opt/sandstormbKillFeed=True- Affiche les éliminations à tous
bDeadSay=True- Les morts peuvent parler aux vivants
FriendlyFireModifier=0.2- Part des dégâts infligés aux coéquipiers (0 à 1)
5Créer le script de démarrage et le service
La ligne de commande porte la carte (Farmhouse), le scénario (Checkpoint, côté Security), le nombre de joueurs, le nom affiché et les deux ports : 27102 pour le jeu, 27131 pour la liste des serveurs. Changez le nom. Le serveur quitte par une erreur quand il reçoit l'ordre d'arrêt : le script relaie l'arrêt et rend 0 au service, qui affiche alors un arrêt propre.
cat > /opt/sandstorm/start.sh << 'EOF'
#!/bin/sh
# Le serveur quitte par une erreur (SIGSEGV) quand il recoit SIGTERM : ce script relaie
# l'arret et rend 0 au service quand c'est lui qui l'a demande.
cd /opt/sandstorm/server
./Insurgency/Binaries/Linux/InsurgencyServer-Linux-Shipping Farmhouse?Scenario=Scenario_Farmhouse_Checkpoint_Security?MaxPlayers=8 -hostname="Mon serveur Insurgency" -Port=27102 -QueryPort=27131 -log &
PID=$!
trap 'kill $PID; wait $PID; exit 0' TERM
wait $PID
EOF
chmod +x /opt/sandstorm/start.sh && chown sandstorm:sandstorm /opt/sandstorm/start.shFarmhouse?Scenario=Scenario_Farmhouse_Checkpoint_Security- La carte et le scénario de départ ; les 63 scénarios du cycle par défaut (Scenario_Hideout_Firefight_East, Scenario_Refinery_Push_Insurgents...) sont listés dans le journal
MaxPlayers=8- Le nombre de joueurs
-hostname=- Le nom affiché dans la liste des serveurs
-Port=27102, -QueryPort=27131- Le port du jeu et le port d'interrogation, en UDP
cat > /etc/systemd/system/sandstorm.service << 'EOF'
[Unit]
Description=Serveur Insurgency: Sandstorm
After=network.target
[Service]
User=sandstorm
Group=sandstorm
WorkingDirectory=/opt/sandstorm/server
ExecStart=/opt/sandstorm/start.sh
KillMode=mixed
LimitNOFILE=100000
LimitCORE=0
TimeoutStopSec=60
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload && systemctl enable --now sandstormCreated symlink /etc/systemd/system/multi-user.target.wants/sandstorm.service → /etc/systemd/system/sandstorm.service.
systemctl is-active sandstorm && grep -h 'listening on port\|Match State Changed from LoadingAssets' /opt/sandstorm/server/Insurgency/Saved/Logs/Insurgency.log | cut -c1-120 && ss -lunp | grep Insurg | awk '{print $4}' | sortactive [2026.09.22-00.18.35:725][ 0]LogNet: GameNetDriver IpNetDriver_2147482538 IpNetDriver listening on port 27102 [2026.09.22-00.18.37:437][ 6]LogGameState: Match State Changed from LoadingAssets to WaitingToStart 0.0.0.0:27102 0.0.0.0:27131
La sonde ci-dessous interroge le port 27131 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', 27131)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
s.sendto(q + r[5:9], ('127.0.0.1', 27131)); r = s.recvfrom(4096)[0]
p = r[6:].split(b'\x00')
print(p[0].decode(), '|', p[1].decode(), '|', p[2].decode())
EOFMon serveur Insurgency | Farmhouse | sandstorm
6Gérer le serveur : journal, arrêt, redémarrage
tail -f /opt/sandstorm/server/Insurgency/Saved/Logs/Insurgency.logsystemctl status sandstormsystemctl stop sandstormsystemctl start sandstormsystemctl restart sandstorm7Ouvrir les ports dans le pare-feu
Les joueurs se connectent en UDP sur le port 27102 ; le port 27131 en UDP sert à la liste des serveurs. La commande active le pare-feu du système en gardant SSH autorisé, puis ouvre les ports.
apt install -y ufw && ufw allow 22/tcp && ufw allow 27102/udp && ufw allow 27131/udp && ufw --force enable... Firewall is active and enabled on system startup
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=27102/udp --add-port=27131/udp && firewall-cmd --reload... success success
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=27102/udp --add-port=27131/udp && firewall-cmd --reload... success success
firewall-cmd --permanent --add-port=27102/udp --add-port=27131/udp && firewall-cmd --reloadsuccess success
ufw statusStatus: active 22/tcp ALLOW Anywhere 27102/udp ALLOW Anywhere 27131/udp ALLOW Anywhere
firewall-cmd --list-ports27102/udp 27131/udp
firewall-cmd --list-ports27102/udp 27131/udp
firewall-cmd --list-ports27102/udp 27131/udp
8Se connecter au serveur
- Lancez Insurgency: Sandstorm, ouvrez la liste des serveurs communautaires et cherchez le nom donné à -hostname (Mon serveur Insurgency).
- Les administrateurs déclarés dans Admins.txt ont le menu d'administration dans le jeu.
9Mettre à jour le serveur
Après une mise à jour du jeu, mettez le serveur à jour : la même commande que l'installation, serveur arrêté.
systemctl stop sandstorm && su - sandstorm -c "/opt/sandstorm/steamcmd/steamcmd.sh +force_install_dir /opt/sandstorm/server +login anonymous +app_update 581330 +quit" && systemctl start sandstorm... Success! App '581330' already up to date. (« fully installed » quand une mise à jour a été téléchargée)
Serveur prêt
Votre serveur Insurgency: Sandstorm démarre avec la machine, s'arrête proprement, se relance s'il tombe et écoute sur le port 27102. Donnez le nom du serveur à vos joueurs.
Erreurs fréquentes
L'image du serveur a été construite sur un autre disque et GRUB demande où se réinstaller : choisissez le disque de la machine (celui que lsblk affiche, en général /dev/sda) ; la mise à jour continue ensuite.
Un raté passager côté Steam : relancez la même commande, le téléchargement reprend.
Le système n'a pas été mis à jour avant : faites la première boîte de l'étape 1, puis réessayez.
Les programmes 32 bits sont désactivés dans le noyau : appliquez la dernière boîte de l'étape 1 et redémarrez.
Plusieurs serveurs de jeux tournent sur la même machine, chacun avec son utilisateur, et SteamCMD a déjà créé dix dossiers /tmp/dumps, /tmp/dumps01... /tmp/dumps09 qui appartiennent aux autres : lancez rm -rf /tmp/dumps* en root, puis relancez la commande.
Le serveur tourne sans jeton de statistiques : c'est facultatif, la ligne revient à chaque démarrage sans rien empêcher.
Le service a envoyé l'arrêt directement au serveur, qui quitte par une erreur. Utilisez le start.sh de l'étape 5 (il relaie l'arrêt et rend 0) avec KillMode=mixed dans le service, puis systemctl daemon-reload et systemctl reset-failed sandstorm.
Le serveur n'a pas fini de charger la carte, ou le service n'est pas actif : attendez une minute et vérifiez systemctl status sandstorm. Depuis une autre machine, il faut aussi le pare-feu de l'étape 7.