Mettre en place un serveur Metin2 sous Linux ressemble à première vue à une simple tâche de type « copie les fichiers et lance-les ». Mais comme la partie serveur de Metin2 a été écrite dès l'origine pour FreeBSD, le passage à Linux demande bien plus de préparation qu'on ne le pense. Dans ce guide, je présente les moyens réalistes de faire tourner le serveur sous Ubuntu (ou Debian) plutôt que FreeBSD, les limites de compatibilité et la logique d'installation étape par étape.
Pourquoi migrer un serveur Metin2 vers Linux ?
FreeBSD est stable et rapide, mais les serveurs que la plupart des gens administrent au quotidien tournent sous Linux. La grande majorité des hébergeurs proposent Ubuntu/Debian par défaut ; Docker, systemd, les outils de supervision modernes et les habitudes de votre équipe vivent tous dans l'univers Linux. La réponse à « pourquoi Linux ? » n'est donc généralement pas une supériorité technique mais un confort opérationnel : vous voulez gérer le site web, MySQL, les sauvegardes et le processus de jeu sur la même machine avec des outils familiers.
La vérité la plus importante : les binaires FreeBSD ne tournent pas sous Linux
Avant de commencer, clarifions l'erreur la plus fréquente. Vous ne pouvez pas prendre les binaires game et db compilés sous FreeBSD, les copier sous Linux et les exécuter. Les deux systèmes ont des interfaces d'appels système (syscall) et des ABI différentes. Le point intéressant : FreeBSD peut exécuter des binaires Linux grâce à sa couche Linuxulator — mais l'inverse est impossible, Linux n'a aucune couche de compatibilité pour exécuter des binaires FreeBSD. C'est pourquoi la seule façon correcte de faire tourner le serveur sous Linux est de recompiler le code source pour Linux.
Voie 1 : compiler la source pour Linux (recommandé)
C'est la solution la plus propre. La source de Metin2 dépend du modèle réseau de FreeBSD basé sur kqueue et de certains en-têtes spécifiques à BSD ; sous Linux, vous devez fournir leurs équivalents. De nombreuses sources adaptées à Linux existent dans la communauté, et elles incluent généralement ces modifications :
- kqueue → epoll : la boucle d'événements réseau est réécrite avec l'API
epollde Linux. La plupart des sources modernes l'abstraient déjà. - Différences d'en-têtes : équivalents Linux à la place des en-têtes BSD comme
<sys/event.h>; les#includemanquants sont ajoutés. - Compilation 32 bits : la source classique est en 32 bits, donc sous Linux
gcc-multilibet les bibliothèques 32 bits sont indispensables.
Une installation typique des dépendances sous Ubuntu 22.04 LTS ressemble à ceci :
sudo apt update
sudo apt install build-essential gcc-multilib g++-multilib \
libc6-dev-i386 cmake scons \
libmysqlclient-dev libboost-all-dev liblzo2-dev
Crypto++ (cryptopp) est généralement livré avec la source ; pour éviter tout conflit avec la version système, le plus sûr est d'utiliser celle fournie avec la source. L'ordre de compilation suit la même logique que sous FreeBSD : les bibliothèques d'abord, puis les processus exécutables.
libthecore -> abstractions système de base
libpoly -> géométrie / collision
libsql -> couche base de données (MySQL)
libgame -> logique de jeu partagée
db -> processus de base de données
game -> processus de jeu
Lors d'une compilation 32 bits, assurez-vous que l'option -m32 est passée à chaque étape ; sinon, tenter de lier ensemble des objets 64 bits et 32 bits provoquera des erreurs « incompatible » de l'éditeur de liens.
Voie 2 : faire tourner FreeBSD dans une machine virtuelle
Si vous ne voulez pas vous occuper de la compilation et que vos fichiers sont déjà compilés pour FreeBSD, la solution la plus pragmatique est de faire tourner une machine virtuelle FreeBSD sur un hôte Linux. Avec Proxmox, KVM/QEMU ou VirtualBox, vous installez un invité FreeBSD, vous y faites tourner le serveur et vous n'utilisez le côté Linux que pour le site web, le reverse proxy et les sauvegardes. Cette approche ne répond pas pleinement à l'objectif « tourner sous Linux », mais elle vous permet de conserver les binaires d'origine intacts au sein d'une infrastructure Linux familière.
Voie 3 : empaqueter avec Docker
Les conteneurs Docker partagent le noyau Linux, ce qui signifie que vous ne pouvez pas non plus exécuter un binaire FreeBSD dans Docker. Mais placer un serveur compilé pour Linux dans une image Docker a beaucoup de sens : cela fige les bibliothèques 32 bits dans l'image, garde MySQL dans un conteneur séparé et rend toute l'installation reproductible. Un squelette de Dockerfile simple commence ainsi :
FROM ubuntu:22.04
RUN dpkg --add-architecture i386 && apt-get update && \
apt-get install -y libc6:i386 libstdc++6:i386 \
libmysqlclient21 && rm -rf /var/lib/apt/lists/*
COPY ./server /server
WORKDIR /server
CMD ["./game"]
La ligne dpkg --add-architecture i386 est critique : les binaires 32 bits ont besoin de bibliothèques d'exécution 32 bits pour démarrer.
Base de données et configuration
Quelle que soit la voie choisie, la couche base de données reste la même. Metin2 utilise MySQL ; sous Linux, MariaDB est une alternative compatible. Chargez les schémas player, account, common et log, puis modifiez le port, l'IP et les informations de connexion à la base dans les fichiers CONFIG. Au premier démarrage, surveillez impérativement :
tail -f syserr # erreurs d'exécution
tail -f syslog # flux général
La plupart des plaintes « ça ne démarre pas sous Linux » viennent en réalité d'un mauvais chemin de bibliothèque, d'un paquet 32 bits manquant ou d'une impossibilité de se connecter à MySQL — vous pouvez vérifier rapidement les bibliothèques partagées manquantes avec ldd game et le bon chemin d'en-têtes avec mysql_config --include.
Démarrage automatique avec systemd
L'un des gains les plus concrets du passage à Linux est systemd. En reliant le processus serveur à un fichier de service, vous pouvez le faire démarrer automatiquement au redémarrage de la machine et le relancer tout seul en cas de plantage. Un fichier d'unité simple ressemble à ceci :
[Unit]
Description=Metin2 game core
After=network.target mysql.service
[Service]
Type=simple
User=metin2
WorkingDirectory=/home/metin2/server
ExecStart=/home/metin2/server/game
Restart=on-failure
[Install]
WantedBy=multi-user.target
Enregistrez le fichier sous /etc/systemd/system/metin2-game.service, activez-le avec systemctl enable --now metin2-game et suivez ses journaux en direct avec journalctl -u metin2-game -f. Cette approche semble plus familière à la plupart des administrateurs que les scripts rc.d de FreeBSD et garantit que le cœur de jeu reste constamment opérationnel.
Questions fréquentes
Puis-je copier mes fichiers FreeBSD sous Linux et les exécuter ?
Non. Les binaires game/db compilés sous FreeBSD ne tourneront pas sur le noyau Linux ; l'ABI et les appels système diffèrent. Pour fonctionner sous Linux, vous devez recompiler la source pour Linux ou faire tourner FreeBSD dans une machine virtuelle.
Dois-je compiler en 32 bits ou 64 bits sous Linux ?
Les sources classiques de Metin2 sont en 32 bits, donc pour la plupart des installations, compiler en 32 bits avec gcc-multilib pose le moins de problèmes. Si vous disposez d'une source entièrement adaptée au 64 bits, vous pouvez l'utiliser, mais préparez-vous aux erreurs liées à la différence de taille des pointeurs.
Quelle version d'Ubuntu utiliser ?
Une version à support long terme (LTS) comme 22.04 est le choix le plus sûr : elle offre des dépôts de paquets stables, des correctifs de sécurité à jour et un large soutien de la communauté. Sur les versions très anciennes, trouver des paquets 32 bits devient difficile.
Vous souhaitez migrer votre serveur Metin2 de FreeBSD vers Linux ? Si vous êtes bloqué sur la compilation de la source pour Linux, la résolution des dépendances 32 bits ou l'empaquetage dans Docker, contactez-moi — posons ensemble votre installation sur des bases solides.