aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2 Linux Server: draaien op Ubuntu

Het opzetten van een Metin2 Linux server lijkt op het eerste gezicht een simpele klus van "kopieer de bestanden en start ze". Maar omdat de serverkant van Metin2 vanaf het begin voor FreeBSD is geschreven, vraagt de overstap naar Linux veel meer planning dan verwacht. In deze gids loop ik de realistische manieren door om de server op Ubuntu (of Debian) te draaien in plaats van FreeBSD, de compatibiliteitsgrenzen en de stapsgewijze installatielogica.

Waarom een Metin2 server naar Linux verplaatsen?

FreeBSD is stabiel en snel, maar de servers die de meeste mensen dagelijks beheren draaien op Linux. De overgrote meerderheid van hostingproviders levert standaard Ubuntu/Debian; Docker, systemd, moderne monitoringtools en de gewoontes van je team leven allemaal in de Linux-wereld. Het antwoord op "waarom Linux?" is dus meestal geen technische superioriteit maar operationeel gemak: je wilt de website, MySQL, back-ups en het spelproces op dezelfde machine beheren met vertrouwde tools.

De belangrijkste waarheid: FreeBSD-binaries draaien niet op Linux

Voordat we beginnen, eerst de meest gemaakte fout uit de weg. Je kunt game- en db-binaries die op FreeBSD zijn gecompileerd niet zomaar naar Linux kopiëren en uitvoeren. De twee systemen hebben verschillende syscall-interfaces en ABI's. Het interessante: FreeBSD kan dankzij zijn Linuxulator-laag wel Linux-binaries draaien — maar andersom is het onmogelijk, Linux heeft geen compatibiliteitslaag om FreeBSD-binaries uit te voeren. Daarom is de enige juiste manier om de server op Linux te draaien het opnieuw compileren van de broncode voor Linux.

Weg 1: de source voor Linux compileren (aanbevolen)

Dit is de schoonste oplossing. De Metin2-source is afhankelijk van het kqueue-gebaseerde netwerkmodel van FreeBSD en enkele BSD-specifieke headers; op Linux moet je daar equivalenten voor leveren. In de community bestaan veel naar Linux aangepaste sources, en die bevatten doorgaans deze wijzigingen:

  • kqueue → epoll: de netwerk-eventloop wordt herschreven met de epoll-API van Linux. De meeste moderne sources abstraheren dit al.
  • Headerverschillen: Linux-equivalenten in plaats van BSD-headers zoals <sys/event.h>; ontbrekende #include's worden toegevoegd.
  • 32-bit build: de klassieke source is 32-bit, dus op Linux zijn gcc-multilib en 32-bit bibliotheken verplicht.

Een typische installatie van de afhankelijkheden op Ubuntu 22.04 LTS ziet er zo uit:

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) wordt meestal met de source meegeleverd; om botsingen met de systeemversie te voorkomen, is het het veiligst om de met de source meegeleverde versie te gebruiken. De compilatievolgorde volgt dezelfde logica als op FreeBSD: eerst de bibliotheken, daarna de uitvoerbare processen.

libthecore  ->  basis systeemabstracties
libpoly     ->  geometrie / botsing
libsql      ->  databaselaag (MySQL)
libgame     ->  gedeelde spellogica
db          ->  databaseproces
game        ->  spelproces

Zorg er bij een 32-bit build voor dat de vlag -m32 bij elke stap wordt meegegeven; anders krijg je "incompatible" linkerfouten wanneer je 64-bit en 32-bit objecten samen probeert te linken.

Weg 2: FreeBSD in een virtuele machine draaien

Als je je niet met het compileren van de source wilt bezighouden en je bestanden al voor FreeBSD zijn gebouwd, is de meest pragmatische oplossing om een FreeBSD virtuele machine bovenop een Linux-host te draaien. Met Proxmox, KVM/QEMU of VirtualBox installeer je een FreeBSD-gast, draai je daar de server en gebruik je de Linux-kant alleen voor de website, reverse proxy en back-ups. Deze aanpak voldoet niet volledig aan het doel "op Linux draaien", maar je houdt er de originele binaries onveranderd mee binnen een vertrouwde Linux-infrastructuur.

Weg 3: inpakken met Docker

Docker-containers delen de Linux-kernel, wat betekent dat je ook in Docker geen FreeBSD-binary kunt draaien. Maar een voor Linux gecompileerde server in een Docker-image plaatsen is heel zinvol: het zet de 32-bit bibliotheken vast in de image, houdt MySQL in een aparte container en maakt de hele installatie reproduceerbaar. Een eenvoudig Dockerfile-skelet begint zo:

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"]

De regel dpkg --add-architecture i386 is cruciaal: 32-bit binaries hebben 32-bit runtime-bibliotheken nodig om te starten.

Database en configuratie

Welke weg je ook kiest, de databaselaag blijft hetzelfde. Metin2 gebruikt MySQL; op Linux is MariaDB een compatibel alternatief. Laad de schema's player, account, common en log, en pas vervolgens de poort, het IP en de databaseverbindingsgegevens in de CONFIG-bestanden aan. Houd bij de eerste start zeker in de gaten:

tail -f syserr        # runtime-fouten
tail -f syslog        # algemene stroom

De meeste klachten van "hij start niet op Linux" komen in werkelijkheid van een verkeerd bibliotheekpad, een ontbrekend 32-bit pakket of het niet kunnen verbinden met MySQL — je kunt ontbrekende gedeelde bibliotheken snel controleren met ldd game en het juiste headerpad met mysql_config --include.

Automatisch starten met systemd

Een van de meest concrete voordelen van de overstap naar Linux is systemd. Door het serverproces aan een servicebestand te koppelen, kun je het automatisch laten starten wanneer de machine opnieuw opstart en zichzelf laten herstarten wanneer het proces crasht. Een eenvoudig unit-bestand ziet er zo uit:

[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

Sla het bestand op als /etc/systemd/system/metin2-game.service, activeer het met systemctl enable --now metin2-game en bekijk de logs live met journalctl -u metin2-game -f. Deze aanpak voelt voor de meeste beheerders vertrouwder dan de rc.d-scripts van FreeBSD en garandeert dat de game core continu blijft draaien.

Veelgestelde vragen

Kan ik mijn FreeBSD-bestanden naar Linux kopiëren en uitvoeren?

Nee. De op FreeBSD gecompileerde game/db-binaries draaien niet op de Linux-kernel; de ABI en systeemaanroepen verschillen. Om op Linux te draaien moet je de source opnieuw voor Linux compileren of FreeBSD in een virtuele machine draaien.

Moet ik op Linux 32-bit of 64-bit bouwen?

De klassieke Metin2-sources zijn 32-bit, dus voor de meeste installaties geeft 32-bit bouwen met gcc-multilib de minste problemen. Als je een volledig naar 64-bit aangepaste source hebt, kun je die gebruiken, maar wees voorbereid op fouten door het verschil in pointergrootte.

Welke Ubuntu-versie moet ik gebruiken?

Een release met langdurige ondersteuning (LTS) zoals 22.04 is de veiligste keuze: het biedt stabiele pakketrepository's, actuele beveiligingspatches en brede communityondersteuning. Op zeer oude versies wordt het vinden van 32-bit pakketten lastiger.

Wil je je Metin2 server van FreeBSD naar Linux verplaatsen? Als je vastloopt op het compileren van de source voor Linux, het oplossen van 32-bit afhankelijkheden of het inpakken in Docker, neem dan contact met me op — laten we je installatie samen op een stevige basis zetten.

Bu kategorideki tüm yazılar →

Devamı için