Einen Metin2 Linux Server aufzusetzen sieht auf den ersten Blick nach einer einfachen "Dateien kopieren und starten"-Aufgabe aus. Doch weil die Serverseite von Metin2 von Anfang an für FreeBSD geschrieben wurde, erfordert der Umzug nach Linux weit mehr Planung als gedacht. In dieser Anleitung zeige ich die realistischen Wege, den Server unter Ubuntu (oder Debian) statt FreeBSD zu betreiben, die Kompatibilitätsgrenzen und die schrittweise Installationslogik.
Warum einen Metin2 Server nach Linux verlagern?
FreeBSD ist stabil und schnell, aber die Server, die die meisten Leute täglich verwalten, laufen unter Linux. Die große Mehrheit der Hosting-Anbieter liefert standardmäßig Ubuntu/Debian; Docker, systemd, moderne Monitoring-Werkzeuge und die Gewohnheiten deines Teams leben alle in der Linux-Welt. Die Antwort auf "warum Linux?" ist daher meist keine technische Überlegenheit, sondern operativer Komfort: Du willst die Website, MySQL, Backups und den Spielprozess auf derselben Maschine mit vertrauten Werkzeugen verwalten.
Die wichtigste Wahrheit: FreeBSD-Binaries laufen nicht unter Linux
Bevor wir anfangen, räumen wir mit dem häufigsten Fehler auf. Du kannst die unter FreeBSD kompilierten game- und db-Binaries nicht einfach nach Linux kopieren und ausführen. Die beiden Systeme haben unterschiedliche Syscall-Schnittstellen und ABIs. Das Interessante: FreeBSD kann dank seiner Linuxulator-Schicht Linux-Binaries ausführen — der umgekehrte Fall ist jedoch unmöglich, Linux besitzt keine Kompatibilitätsschicht zum Ausführen von FreeBSD-Binaries. Deshalb ist der einzig richtige Weg, den Server unter Linux zu betreiben, den Quellcode für Linux neu zu kompilieren.
Weg 1: die Source für Linux kompilieren (empfohlen)
Das ist die sauberste Lösung. Die Metin2-Source hängt vom kqueue-basierten Netzwerkmodell von FreeBSD und einigen BSD-spezifischen Headern ab; unter Linux musst du deren Entsprechungen bereitstellen. In der Community gibt es viele an Linux angepasste Sources, und diese enthalten in der Regel folgende Änderungen:
- kqueue → epoll: die Netzwerk-Eventschleife wird mit der
epoll-API von Linux neu geschrieben. Die meisten modernen Sources abstrahieren das bereits. - Header-Unterschiede: Linux-Entsprechungen statt BSD-Header wie
<sys/event.h>; fehlende#includes werden ergänzt. - 32-Bit-Build: die klassische Source ist 32-Bit, daher sind unter Linux
gcc-multilibund 32-Bit-Bibliotheken zwingend erforderlich.
Eine typische Installation der Abhängigkeiten unter Ubuntu 22.04 LTS sieht so aus:
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) wird meist mit der Source ausgeliefert; um Konflikte mit der Systemversion zu vermeiden, ist es am sichersten, die mit der Source gelieferte Version zu verwenden. Die Kompilierreihenfolge folgt derselben Logik wie unter FreeBSD: zuerst die Bibliotheken, dann die ausführbaren Prozesse.
libthecore -> grundlegende Systemabstraktionen
libpoly -> Geometrie / Kollision
libsql -> Datenbankschicht (MySQL)
libgame -> gemeinsame Spiellogik
db -> Datenbankprozess
game -> Spielprozess
Achte beim 32-Bit-Build darauf, dass das Flag -m32 bei jedem Schritt übergeben wird; andernfalls führt der Versuch, 64-Bit- und 32-Bit-Objekte zusammenzulinken, zu "incompatible"-Linkerfehlern.
Weg 2: FreeBSD in einer virtuellen Maschine betreiben
Wenn du dich nicht mit dem Kompilieren der Source befassen willst und deine Dateien bereits für FreeBSD gebaut sind, ist die pragmatischste Lösung, eine FreeBSD-VM auf einem Linux-Host zu betreiben. Mit Proxmox, KVM/QEMU oder VirtualBox installierst du einen FreeBSD-Gast, lässt den Server dort laufen und nutzt die Linux-Seite nur für Website, Reverse Proxy und Backups. Dieser Ansatz erfüllt das Ziel "unter Linux laufen lassen" nicht vollständig, erlaubt es dir aber, die Original-Binaries unverändert innerhalb einer vertrauten Linux-Infrastruktur zu behalten.
Weg 3: mit Docker paketieren
Docker-Container teilen sich den Linux-Kernel, das heißt, du kannst auch in Docker keine FreeBSD-Binary ausführen. Aber einen für Linux kompilierten Server in ein Docker-Image zu packen, ergibt sehr viel Sinn: es fixiert die 32-Bit-Bibliotheken im Image, hält MySQL in einem separaten Container und macht die gesamte Installation reproduzierbar. Ein einfaches Dockerfile-Gerüst beginnt so:
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"]
Die Zeile dpkg --add-architecture i386 ist entscheidend: 32-Bit-Binaries benötigen 32-Bit-Laufzeitbibliotheken, um zu starten.
Datenbank und Konfiguration
Egal welchen Weg du wählst, die Datenbankschicht bleibt gleich. Metin2 verwendet MySQL; unter Linux ist MariaDB eine kompatible Alternative. Lade die Schemata player, account, common und log und passe anschließend Port, IP und Datenbankverbindungsdaten in den CONFIG-Dateien an. Beim ersten Start solltest du unbedingt beobachten:
tail -f syserr # Laufzeitfehler
tail -f syslog # allgemeiner Ablauf
Die meisten "startet nicht unter Linux"-Beschwerden kommen in Wirklichkeit von einem falschen Bibliothekspfad, einem fehlenden 32-Bit-Paket oder dem Scheitern der Verbindung zu MySQL — fehlende Shared Libraries kannst du schnell mit ldd game prüfen und den richtigen Header-Pfad mit mysql_config --include.
Automatischer Start mit systemd
Einer der konkretesten Gewinne des Umstiegs auf Linux ist systemd. Indem du den Serverprozess an eine Service-Datei bindest, kannst du ihn beim Neustart der Maschine automatisch starten und nach einem Absturz selbstständig neu hochfahren lassen. Eine einfache Unit-Datei sieht so aus:
[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
Speichere die Datei als /etc/systemd/system/metin2-game.service, aktiviere sie mit systemctl enable --now metin2-game und verfolge ihre Logs live mit journalctl -u metin2-game -f. Dieser Ansatz fühlt sich für die meisten Administratoren vertrauter an als die rc.d-Skripte von FreeBSD und garantiert, dass der Game Core dauerhaft läuft.
Häufige Fragen
Kann ich meine FreeBSD-Dateien nach Linux kopieren und ausführen?
Nein. Die unter FreeBSD kompilierten game/db-Binaries laufen nicht auf dem Linux-Kernel; ABI und Systemaufrufe unterscheiden sich. Um unter Linux zu laufen, musst du die Source für Linux neu kompilieren oder FreeBSD in einer virtuellen Maschine betreiben.
Soll ich unter Linux 32-Bit oder 64-Bit bauen?
Die klassischen Metin2-Sources sind 32-Bit, daher verursacht das Bauen in 32-Bit mit gcc-multilib bei den meisten Setups die wenigsten Probleme. Wenn du eine vollständig auf 64-Bit angepasste Source hast, kannst du sie verwenden, sei aber auf Fehler durch den Unterschied in der Zeigergröße gefasst.
Welche Ubuntu-Version sollte ich verwenden?
Eine Long-Term-Support-Version (LTS) wie 22.04 ist die sicherste Wahl: sie bietet stabile Paket-Repositories, aktuelle Sicherheits-Patches und breite Community-Unterstützung. Auf sehr alten Versionen wird das Finden von 32-Bit-Paketen schwierig.
Möchtest du deinen Metin2 Server von FreeBSD nach Linux verlagern? Wenn du beim Kompilieren der Source für Linux, beim Auflösen der 32-Bit-Abhängigkeiten oder beim Paketieren in Docker feststeckst, nimm Kontakt mit mir auf — bringen wir deine Installation gemeinsam auf ein solides Fundament.