Désactiver le préchargeur
Tutoriels Linux Serveurs de jeux

Installer un serveur Core Keeper sur Linux (Ubuntu, Debian, AlmaLinux)

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur Core Keeper sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 21/09/2026
11 vues
Intermédiaire
30 minutes

Prérequis

Votre serveur :

Ce guide installe le serveur dédié Core Keeper sur Linux : SteamCMD, un utilisateur dédié, le serveur (567 Mo), l'écran virtuel dont il a besoin, un script de démarrage qui porte le nom du monde et le mot de passe, un service qui sauvegarde le monde à l'arrêt, le Game ID et l'adresse que vos joueurs utiliseront, le pare-feu, une sauvegarde chaque nuit 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 corekeeper, dont le dossier personnel est /opt/corekeeper, 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 corekeeper
mkdir -p /opt/corekeeper/server /opt/corekeeper/steamcmd && useradd -r -s /bin/bash -d /opt/corekeeper corekeeper && chown -R corekeeper:corekeeper /opt/corekeeper
Télécharger SteamCMD (en tant que corekeeper)
su - corekeeper -c "cd /opt/corekeeper/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 Core Keeper

SteamCMD télécharge le serveur dédié (application 1963720, 567 Mo) dans /opt/corekeeper/server. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '1963720' (Missing configuration) » : relancez la même commande, le téléchargement reprend.

Télécharger le serveur (une minute)
su - corekeeper -c "/opt/corekeeper/steamcmd/steamcmd.sh +force_install_dir /opt/corekeeper/server +login anonymous +app_update 1963720 validate +quit"
Résultat attendu
...
Success! App '1963720' fully installed.

4Installer l'écran virtuel

Le serveur est un programme Unity qui exige un écran X, même sans rien afficher (une partie de la génération du monde passe par le pilote graphique). Xvfb fournit cet écran en mémoire, et libXi est la bibliothèque d'entrée X que le serveur charge avec lui.

Installer Xvfb et libXi
apt install -y xvfb libxi6
Installer Xvfb et libXi
dnf install -y xorg-x11-server-Xvfb libXi
Installer Xvfb et libXi
dnf install -y xorg-x11-server-Xvfb libXi
Installer Xvfb et libXi
zypper -n install xorg-x11-server-Xvfb libXi6
Vérifier qu'aucune bibliothèque ne manque au serveur
LD_LIBRARY_PATH=/opt/corekeeper/server/linux64 ldd /opt/corekeeper/server/CoreKeeperServer | grep -c 'not found'

5Créer le script de démarrage

Le script ouvre l'écran virtuel, puis lance le serveur avec sa bibliothèque Steam (linux64), le dossier de données /opt/corekeeper/data, le monde 0, son nom, le nombre de joueurs, le port 27015 (qui ouvre les connexions directes par IP, en plus du Game ID Steam) et le mot de passe de ces connexions directes. Changez le nom et le mot de passe avant de créer le script. À l'arrêt, le script demande au serveur de quitter, ce qui sauvegarde le monde, puis ferme l'écran.

Créer start.sh (changez le nom du monde et le mot de passe)
cat > /opt/corekeeper/start.sh << 'EOF'
#!/bin/sh
# Le serveur a besoin d'un ecran X virtuel (Xvfb) ; a l'arret, on quitte le serveur d'abord, l'ecran ensuite
cd /opt/corekeeper/server
Xvfb :99 -screen 0 1x1x24 -nolisten tcp &
XPID=$!
DISPLAY=:99 LD_LIBRARY_PATH=/opt/corekeeper/server/linux64 ./CoreKeeperServer -batchmode -logfile /opt/corekeeper/data/CoreKeeperServerLog.txt -datapath /opt/corekeeper/data -world 0 -worldname "Mon serveur Core Keeper" -maxplayers 8 -port 27015 -password "ChangezMoi" &
PID=$!
trap 'kill $PID; wait $PID; kill $XPID; exit 0' TERM
wait $PID
kill $XPID
EOF
mkdir -p /opt/corekeeper/data && chmod +x /opt/corekeeper/start.sh && chown -R corekeeper:corekeeper /opt/corekeeper

6Démarrer le serveur comme un service

Le service lance start.sh avec l'utilisateur corekeeper, le démarre avec la machine et le relance s'il plante. Le serveur écrit GameInfo.txt en une trentaine de secondes, puis finit de charger le monde : comptez une minute.

Créer le service corekeeper
cat > /etc/systemd/system/corekeeper.service << 'EOF'
[Unit]
Description=Serveur Core Keeper
After=network.target

[Service]
User=corekeeper
Group=corekeeper
WorkingDirectory=/opt/corekeeper/server
ExecStart=/opt/corekeeper/start.sh
KillMode=mixed
TimeoutStopSec=60
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now corekeeper
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/corekeeper.service → /etc/systemd/system/corekeeper.service.
Une minute plus tard : lire le Game ID et l'adresse de connexion, vérifier les ports
systemctl is-active corekeeper && cat /opt/corekeeper/server/GameInfo.txt && ss -lunp | grep CoreKeeper | awk '{print $4}' | sort
Résultat attendu
active
No GameID found. Creating new GameID for the session.

Allowed platforms: All
Steam GameID: ...
Local IP: 0.0.0.0
Public IP: 203.0.113.42
Port: 27015
Password: ChangezMoi

Paste to ip-field in "join via IP" menu to easily fill all values
203.0.113.42;27015;;ChangezMoi

0.0.0.0:27016
0.0.0.0:43703
*:27015
(le Game ID est une chaîne de 15 caractères propre à votre serveur ; Public IP est votre adresse publique, IPv4 ou IPv6 ; le troisième port change à chaque démarrage)

La sonde ci-dessous interroge le port 27016 comme le fait la liste des serveurs Steam.

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', 27016)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
    s.sendto(q + r[5:9], ('127.0.0.1', 27016)); r = s.recvfrom(4096)[0]
p = r[6:].split(b'\x00')
print(p[0].decode(), '|', p[2].decode())
EOF
Résultat attendu
Mon serveur Core Keeper | Core Keeper

7Gérer le serveur : journal, arrêt, monde

Le journal est /opt/corekeeper/data/CoreKeeperServerLog.txt ; le monde est /opt/corekeeper/data/worlds/0.world.gzip, écrit à l'arrêt. Le Game ID est gardé dans /opt/corekeeper/server/GameID.txt : tant que ce fichier existe, il ne change pas.

Suivre le journal du serveur en direct (Ctrl+C pour sortir)
tail -f /opt/corekeeper/data/CoreKeeperServerLog.txt
Voir l'état du service
systemctl status corekeeper
Arrêter proprement (le monde est sauvegardé, 2 à 3 secondes)
systemctl stop corekeeper
Vérifier que le monde a été sauvegardé à l'arrêt
grep -h 'Running quit handlers\|WorldSave' /opt/corekeeper/data/CoreKeeperServerLog.txt && ls -la /opt/corekeeper/data/worlds
Résultat attendu
Allocating a new file write buffer of size 8.000MB for WorldSave. Total buffer size for this file including pool is 8.000MB
Running quit handlers
-rw-r--r-- 1 corekeeper corekeeper 44082 ... 0.world.gzip
(la taille grandit avec le monde)
Démarrer
systemctl start corekeeper
Redémarrer (après un changement de start.sh)
systemctl restart corekeeper

8Ouvrir les ports dans le pare-feu

Les connexions directes par IP arrivent en UDP sur le port 27015 ; le port 27016 en UDP sert à la liste des serveurs. Les joueurs Steam qui entrent le Game ID passent par le relais de Steam et n'ont besoin d'aucun port. 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:27016/udp && 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-27016/udp && 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-27016/udp && 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-27016/udp && 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:27016/udp            ALLOW       Anywhere
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
27015-27016/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
27015-27016/udp
Vérifier les règles
firewall-cmd --list-ports
Résultat attendu
27015-27016/udp

9Se connecter au serveur

  1. Joueurs Steam : dans Core Keeper, rejoignez une partie avec le Game ID de GameInfo.txt (étape 6) ; aucun mot de passe n'est demandé, le Game ID en tient lieu.
  2. Autres plateformes (ou Steam par IP) : rejoignez par IP en collant la ligne « 203.0.113.42;27015;;ChangezMoi » de GameInfo.txt (avec votre adresse et votre mot de passe) dans le champ IP : elle remplit tous les champs.
  3. Ne donnez le Game ID qu'à vos joueurs : il suffit pour entrer.

10Sauvegarder le monde chaque nuit

Le script archive les mondes, les réglages, la liste des administrateurs et le Game ID dans /opt/corekeeper/backups en gardant les 7 dernières archives ; cron le lance chaque nuit à 4 h.

Créer le script de sauvegarde
cat > /opt/corekeeper/backup.sh << 'EOF'
#!/bin/sh
BACKUP_DIR=/opt/corekeeper/backups
DATE=$(date +%Y-%m-%d_%H-%M)
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/corekeeper-$DATE.tar.gz -C /opt/corekeeper data/worlds data/ServerConfig.json data/Admins.json server/GameID.txt
cd $BACKUP_DIR && ls -t | tail -n +8 | xargs -r rm
EOF
chmod +x /opt/corekeeper/backup.sh && chown corekeeper:corekeeper /opt/corekeeper/backup.sh
Tester une sauvegarde tout de suite
su - corekeeper -c '/opt/corekeeper/backup.sh && ls -la /opt/corekeeper/backups'
Résultat attendu
-rw-rw-r-- 1 corekeeper corekeeper 42832 ... corekeeper-2026-09-21_22-33.tar.gz
(la taille grandit avec le monde)
Installer et démarrer cron
apt install -y cron && systemctl enable --now cron
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
zypper -n install cronie && systemctl enable --now cron
Programmer la sauvegarde chaque nuit à 4 h
su - corekeeper -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/corekeeper/backup.sh") | crontab - && crontab -l'
Résultat attendu
0 4 * * * /opt/corekeeper/backup.sh

11Mettre à jour le serveur

Après une mise à jour du jeu, mettez le serveur à jour. La commande arrête le serveur (ce qui sauvegarde le monde), passe par SteamCMD, puis le relance ; le monde et le Game ID sont conservés.

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

Erreurs fréquentes

Serveur prêt

Votre serveur Core Keeper démarre avec la machine, sauvegarde son monde à l'arrêt et chaque nuit, et accepte vos joueurs par Game ID ou par IP sur le port 27015. Donnez le Game ID (joueurs Steam) ou l'adresse et le mot de passe (autres) à vos joueurs.

💬 Écrivez-nous sur Messenger !