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

Portarea unei surse Metin2 vechi pe un FreeBSD modern, fără improvizații

2 noiembrie 2026 6 min de citit

Multe pachete Metin2 au fost construite pentru versiuni de FreeBSD care nu mai primesc actualizări de securitate. Pachetul pe care l-am verificat are binarele făcute pentru FreeBSD 13.0, pe 32 de biți. Mai devreme sau mai târziu vei vrea să muți serverul pe un sistem actual. Asta se numește **portare**. Nu e o comandă, e un mic proiect. Făcut în grabă, cu librării vechi copiate de prin forumuri, produce un server care „pornește” dar cade sau strică date. Făcut în pași mici, e perfect realizabil.

Pe scurt: păstrezi build-ul actual ca referință, faci inventarul a tot ce folosește sursa (compilator, librării, Python, arhitectură), muți întâi pe un sistem nou cu aceeași arhitectură, repari erorile una câte una într-o copie separată și declari portarea gata doar când trec toate testele de joc. Trecerea de la 32 la 64 de biți e un proiect separat.

Nivel: Avansat. Ce trebuie să știi înainte: tot drumul de compilare din acest capitol, de la mediul de compilare până la erorile de compilare, plus depanarea cu gdb și versionarea.

Cuvinte pe care le vei întâlni

CuvântCe înseamnă
PortareAdaptarea unui program ca să meargă pe alt sistem sau cu alte unelte.
EOL (end of life)O versiune care nu mai primește reparații de securitate.
DependențăOrice program sau librărie de care are nevoie sursa ca să se compileze sau să ruleze.
ReferințăVersiunea actuală, care merge, cu care compari rezultatul nou.

Pasul 1: Păstrează referința

Înainte de orice, pune deoparte versiunea care merge: binarele game și db, sursa exactă, fișierele serverului și un backup al bazei de date de test. Notează amprentele sha256. Tot ce faci de aici încolo compari cu ea.

Pasul 2: Fă inventarul

Notează tot ce folosește sursa. Pentru pachetul verificat, inventarul arată așa:

CeCe am găsitDe ce contează
Sistem și arhitecturăFreeBSD 13.0, i386 (32 de biți)Versiunea nu mai primește actualizări
Compilatorclang++-devel, standardul -std=c++2aPe sistemul nou poate avea alt nume sau altă versiune
Client MySQLinclus în sursă, versiunea 5.1.35, pe 32 de bițiFoarte vechi; poate avea probleme cu servere MySQL/MariaDB noi
boost, cryptoppincluse în etc/ (1.72 și 8.4)Pot cere ajustări cu compilatoare noi
Lua5.0.3, inclusFolosit de questuri și de qc
Librării de imaginidevil, png, tiff, jpeg etc., din sistemNumele pachetelor se schimbă între versiuni
Pythonmake.py și update_limit_time.py sunt scrise în Python 2Python 2 poate lipsi pe sistemele noi

Comenzile din lecția despre mediul de compilare te ajută să completezi tabelul pentru sursa ta.

Pasul 3: Alege ținta și fă un singur salt

Verifică pe freebsd.org ce versiuni sunt încă suportate și pe ce arhitecturi. Versiunile noi renunță treptat la unele platforme pe 32 de biți, deci verifică asta înainte să alegi.

Cel mai sigur drum are două etape separate:

  1. Aceeași arhitectură, sistem mai nou. Dacă binarele tale sunt pe 32 de biți și ținta suportă încă așa ceva, mută întâi doar versiunea de FreeBSD. Schimbi un singur lucru major.
  2. Trecerea pe 64 de biți, ca proiect separat, după ce prima etapă e stabilă.

Să faci amândouă deodată înseamnă că, la prima problemă, nu știi care dintre ele e vinovată.

Pasul 4: Repară erorile pe rând, într-o copie

Lucrează într-o copie a sursei (ideal în Git, pe o ramură separată) și urmează regula din erori de compilare: prima eroare, o reparație, recompilare. Tipuri de probleme pe care le vei întâlni la un compilator mai nou:

  • funcții vechi scoase din limbaj (de exemplu bind1st, mem_fun), pe care codul vechi încă le folosește;
  • verificări mai stricte, care transformă în eroare ce înainte era tolerat;
  • librării ale căror funcții s-au schimbat (de exemplu OpenSSL, dacă sursa ta îl folosește).

Notează fiecare reparație în jurnal. Dacă la un moment dat ai nevoie de un artificiu „temporar”, scrie-l separat, ca să nu rămână uitat.

Pasul 5: Testele de după compilare

Un program care se compilează nu e încă un program portat. Pe serverul de test verifici:

  • pornesc toate core-urile, în ordine: db, auth, canalele;
  • login, creare personaj, salvare și relogare;
  • inventar, depozit, trade, iteme cu bonusuri, questuri, dungeon-uri;
  • core-urile rămân pornite ore întregi, fără .core noi;
  • compari valorile din baza de date cu cele de pe referință.

Capcane reale

Librării din pachetele sistemului care nu merg pe 32 de biți. Într-un caz real, pe un FreeBSD i386, librăria de criptare instalată din pachetele sistemului avea o problemă pe 32 de biți: auth cădea la fiecare conectare a unui client. Codul jocului era corect. Soluția a fost compilarea acelei librării din sursa ei. Lecția: când un crash apare chiar în codul unei librării externe, verifică și librăria, nu doar codul tău. gdb (vezi depanarea unui crash) îți arată unde s-a oprit.

Trecerea pe 64 de biți schimbă mărimile. Pe 64 de biți, unele tipuri de date devin mai mari (de exemplu long și pointerii). Dacă un astfel de tip apare într-un pachet trimis clientului (care rămâne pe 32 de biți) sau într-o structură salvată ca atare în baza de date, mărimile nu se mai potrivesc. Rezultatul: clientul deconectat sau date citite greșit. De aceea fiecare pachet și fiecare structură salvată trebuie verificate. Vezi protocolul game–client.

Un MySQL nou cu un client MySQL vechi. Clientul MySQL inclus în sursa verificată e foarte vechi. Cu un server MySQL sau MariaDB recent, pot apărea probleme de autentificare sau de setări. Testează conexiunea înainte de orice altceva.

Ce nu faci

  • Nu recomanzi și nu instalezi pentru un server nou o versiune de FreeBSD care a ieșit din suport.
  • Nu folosești binare gata făcute din surse necunoscute ca „să meargă repede”.
  • Nu dezactivezi verificări de securitate ca serverul să pornească.
  • Nu muți jucătorii pe sistemul nou înainte ca testele să treacă de mai multe ori.

Greșeli des întâlnite

  • Schimbi sistemul, compilatorul și arhitectura deodată.
  • Copiezi librării vechi în /usr/lib ca să scapi de erori.
  • Testezi doar pornirea. Problemele de portare apar la salvare, la comerț, după ore de rulare.
  • Nu păstrezi referința. Nu mai ai cu ce compara.

Întrebări frecvente

Cât durează o portare?

Depinde mult de sursă. O mutare pe aceeași arhitectură poate dura câteva zile de lucru și testare; trecerea pe 64 de biți poate dura mult mai mult. Planifică fără grabă.

Pot rula binarele vechi pe 32 de biți pe un FreeBSD pe 64 de biți?

FreeBSD pe 64 de biți poate rula programe pe 32 de biți dacă are instalate librăriile de compatibilitate (lib32), dar toate librăriile cerute de ldd trebuie să existe în varianta pe 32 de biți. Poate fi o soluție de tranziție, dar trebuie testată la fel de atent.

Merită să plătesc pe cineva pentru portare?

Dacă nu ai timp sau experiență, da, dar cere-i același lucru ca aici: referință, jurnal de modificări, teste și plan de rollback.

Ce urmează

Ultima lecție adună tot: checklist-ul final pentru administrator. 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