Înapoi la blogToate tutorialele Metin2
Tutoriale Metin2 · Lecția 86 din 99

Cum pregătești mediul de compilare pentru sursa Metin2 pe FreeBSD

2 noiembrie 2026 6 min de citit

Cele mai multe eșecuri la compilare nu vin din cod, ci dintr-un sistem nepotrivit: alt compilator, altă arhitectură, o unealtă lipsă. Pe internet găsești zeci de tutoriale de tipul „instalează gcc 4.9 și copiază librăriile în /usr/lib”. Majoritatea sunt vechi și făcute pentru alte surse. În lecția asta înveți să afli **ce cere sursa ta** și să pregătești un server de test potrivit.

Pe scurt: compilezi pe un server de test, nu pe live. Verifici întâi arhitectura binarelor actuale (32 sau 64 de biți), citești din Makefile ce compilator cere sursa, apoi instalezi exact uneltele de care are nevoie: gmake, compilatorul și câteva librării.

Nivel: Avansat. Ce trebuie să știi înainte: lecția game, db, client și sursă, comenzile de bază prin SSH și să ai un server de test cu FreeBSD.

Cuvinte pe care le vei întâlni

CuvântCe înseamnă
CompilatorProgramul care face compilarea. Aici: clang++ (sau, în surse mai vechi, g++).
gmakeUnealta care citește Makefile-ul și pornește compilatorul în ordinea corectă. Pe FreeBSD se numește gmake, nu make.
MakefileFișierul-rețetă: ce fișiere se compilează, cu ce opțiuni, ce librării se folosesc.
ArhitecturăPe câți biți lucrează programul: i386 (32 de biți) sau amd64 (64 de biți).
FlagO opțiune dată compilatorului, de exemplu -m32 („fă program pe 32 de biți”).

Pasul 1: Află pe ce sistem rulează serverul tău

Pe serverul unde merge jocul (doar citești, nu schimbi nimic), rulează:

sh
uname -m
freebsd-version
file /usr/home/game/share/bin/game
  • uname -m spune arhitectura sistemului: i386 sau amd64.
  • freebsd-version spune versiunea FreeBSD.
  • file spune pentru ce a fost construit binarul game (calea e un exemplu, folosește-o pe a ta).

Ce ar trebui să vezi: în pachetul verificat de noi, file arată ELF 32-bit ... Intel i386 ... for FreeBSD 13.0. Asta înseamnă: program pe 32 de biți, făcut pe FreeBSD 13.0. Notează ce vezi la tine.

Pasul 2: Citește ce cere sursa

Copiază sursa pe serverul de test, de exemplu în /usr/home/sursa, cu WinSCP. Apoi caută liniile importante din Makefile-uri:

sh
cd /usr/home/sursa
grep -n "^CC\|^CXX\|^CFLAGS" Makefile game/src/Makefile db/src/Makefile

grep -n afișează rândurile care încep cu CC, CXX sau CFLAGS, cu numărul lor. În sursa pe care am verificat-o am găsit:

Ce am găsitCe înseamnă pentru tine
CC = clang++-develSursa cere o comandă numită exact clang++-devel.
-m32 în game/src/Makefilegame se construiește pe 32 de biți.
-std=c++2aCere un compilator destul de nou (standardul C++20).
GAMEDIR = /usr/metin2/server/share/binDupă compilare, game e mutat automat în acel folder.
python2.7 update_limit_time.pyRețeta generală folosește Python 2.7 la un pas.
makedependO unealtă care calculează legăturile dintre fișiere.

La tine valorile pot fi altele. Scrie-le într-un fișier text, „fișa de compatibilitate” a sursei tale.

Pasul 3: Instalează uneltele

Uneltele de bază, de care au nevoie aproape toate sursele:

sh
pkg install gmake makedepend

Apoi verifică ce compilatoare ai:

sh
which gmake makedepend clang++ clang++-devel

Ce ar trebui să vezi: o cale pentru fiecare unealtă găsită, de exemplu /usr/local/bin/gmake. FreeBSD are deja clang++ în sistem. Comanda clang++-devel apare doar dacă instalezi pachetul de compilator care o aduce (în colecția FreeBSD, de obicei llvm-devel; verifică cu pkg search llvm). Ai două variante:

  1. Instalezi pachetul care oferă clang++-devel, dacă există pentru sistemul tău.
  2. Schimbi, într-o copie a sursei, clang++-devel în clang++ peste tot unde apare (în Makefile-uri e scris la CC sau CXX), iar în liblua/config schimbi clang-devel în clang. E mai simplu, dar trebuie testat: alt compilator poate da alte erori.

Ca să vezi toate locurile, rulează grep -rn "clang" --include=Makefile --include=config . din folderul sursei.

Nu instala un compilator vechi doar pentru că apare într-un tutorial. Folosește ce cere sursa ta.

Sursa verificată mai leagă game de câteva librării de imagini luate din sistem (-lIL -lpng -ltiff -lmng -llcms -ljpeg). Caută pachetele lor cu pkg search devil, pkg search png și așa mai departe. Numele exacte diferă între versiunile FreeBSD. MySQL, boost și cryptopp vin incluse în folderul etc/ al sursei.

Pasul 4: Atenție la 32 de biți

Toate librăriile gata compilate din sursa verificată (libthecore.a, libgame.a, liblua.a, clientul MySQL, cryptopp) sunt pe 32 de biți. Doar game și libserverkey au -m32 scris în Makefile. Pe un FreeBSD i386 asta nu contează, totul iese pe 32 de biți. Pe un FreeBSD amd64, librăriile fără -m32 ar ieși pe 64 de biți și nu s-ar mai potrivi cu game.

De aceea, cel mai simplu drum pentru un începător: un server de test cu aceeași arhitectură ca binarele tale (aici i386). Mutarea pe 64 de biți e un proiect separat, discutat în lecția despre portarea pe un FreeBSD modern.

Pasul 5: Oprește mutarea automată spre serverul live

Pasul ăsta e ușor de uitat și periculos. Makefile-ul din game/src și cel din db/src mută programul compilat într-un folder fix (GAMEDIR și DBDIR). Dacă acel folder e chiar share/bin al unui server pornit, compilarea îți înlocuiește programul fără să te întrebe.

În copia ta de sursă, deschide cu Notepad++ game/src/Makefile și db/src/Makefile și schimbă rândurile în:

text
GAMEDIR = /usr/home/build
DBDIR = /usr/home/build

Apoi creează folderul:

sh
mkdir -p /usr/home/build

Acum tot ce compilezi ajunge într-un loc separat, de unde îl verifici înainte să-l folosești.

Greșeli des întâlnite

  • Folosești make în loc de gmake. Makefile-urile acestea sunt scrise pentru GNU make. make-ul din FreeBSD dă erori ciudate de sintaxă.
  • Compilezi pe serverul live. Compilarea ocupă procesorul minute întregi, iar jucătorii simt lag.
  • Amesteci 32 și 64 de biți. Primești erori de tipul file in wrong format sau incompatible.
  • Copiezi librării „găsite” în /usr/lib. E greu de urmărit ce ai schimbat și poți strica alte programe.
  • Uiți de GAMEDIR. Primul gmake reușit îți poate suprascrie jocul pornit.

Întrebări frecvente

Pot compila pe Windows?

Sursa verificată are și fișiere Visual Studio vechi (m2server.2008.sln), dar binarele de pe server se fac pe FreeBSD. Pentru începători, recomandarea e un FreeBSD de test, ca un VirtualBox pe calculatorul tău.

Trebuie să am exact FreeBSD 13.0?

Nu neapărat, dar cu cât sistemul de test e mai apropiat de cel pentru care a fost făcută sursa, cu atât ai mai puține surprize. FreeBSD 13.0 nu mai primește actualizări de securitate, deci pentru un server nou verifică pe site-ul FreeBSD ce versiuni sunt încă suportate.

Cât spațiu îmi trebuie?

Câțiva GB liberi sunt suficienți pentru sursă și fișierele intermediare. Verifică cu df -h.

Ce urmează

Continuă cu compilarea librăriilor. Toate lecțiile sunt în lista tutorialelor Metin2.

Server Metin2 gata de joc

Găzduire Metin2 în România, cu instalare de serverfiles, bază de date MySQL și protecție Anti-DDoS inclusă.

DiscordWhatsApp