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

Cum pui binarele noi game și db pe server fără să strici nimic

2 noiembrie 2026 5 min de citit

Ai compilat, ai testat, totul merge pe serverul de test. Acum urmează momentul cel mai delicat: să pui noul `game` sau `db` pe serverul cu jucători. Un fișier compilat e doar un fișier. Ce face diferența între o actualizare liniștită și o seară pierdută este **ordinea pașilor**: verifici că e fișierul corect, oprești corect, faci copie, înlocuiești, testezi și ai pregătită calea de întoarcere.

Pe scurt: urci fișierul pe server într-un folder separat, verifici că amprenta sha256 e aceeași ca pe test, oprești serverul, faci copie la binarele vechi, le înlocuiești, pornești și testezi. Dacă ceva nu merge, pui copia înapoi.

Nivel: Avansat. Ce trebuie să știi înainte: compilarea game și compilarea db, oprirea și restartul, backup și modificări sigure cu rollback.

Cuvinte pe care le vei întâlni

CuvântCe înseamnă
DeployPunerea unei versiuni noi pe serverul real.
RollbackÎntoarcerea la versiunea veche, care mergea.
Link simbolicUn „scurtătură” spre alt fișier. În pachetul verificat, fiecare core are un link game spre share/bin/game.
ManifestO fișă cu ce pui pe server: nume fișier, dată, amprentă, ce s-a schimbat.

Înainte de orice: fișa versiunii

Scrie în jurnalul de modificări, pentru fiecare fișier:

text
2026-11-02  game  sursa: /usr/home/sursa (copie din 2026-11-01)
  sha256: a1b2...  (exemplu)
  schimbare: mesajul comenzii /who tradus
  testat pe serverul de test: login, drop, cufar, NPC, schimbare canal, relog

Dacă nu poți completa rândul „testat”, nu e momentul pentru deploy.

Pasul 1: Află unde stau binarele la tine

În pachetul verificat, core-urile nu au fiecare copia lor de game, ci un link spre același fișier:

sh
cd /usr/home/game
ls -l auth/auth channel1/game1/game db/db

Ce ar trebui să vezi: săgeți spre fișierul real, de exemplu game -> ../../share/bin/game și db -> ../share/bin/db. Asta înseamnă: înlocuiești un singur fișier, share/bin/game, și toate core-urile îl folosesc.

Dacă la tine nu vezi săgeți, fiecare folder are propria copie. Atunci trebuie să le înlocuiești pe toate. Le găsești cu find /usr/home/game -name game -type f.

Pasul 2: Urcă fișierul și verifică amprenta

Cu WinSCP, urcă fișierul în /usr/home/build pe serverul live (nu direct peste share/bin). Asigură-te că transferul e în modul Binary, nu Text. Apoi:

sh
sha256 /usr/home/build/game-2026-11-02

Ce ar trebui să vezi: exact aceeași amprentă pe care ai notat-o pe serverul de test. Dacă diferă măcar un caracter, fișierul s-a stricat la transfer sau ai urcat alt fișier. Nu continua.

Pasul 3: Anunță și oprește corect

Anunță jucătorii din timp (vezi mentenanța fără pierderi) și fă un backup al bazei de date. Apoi oprește serverul cu scriptul lui (în pachetul verificat, sh close.sh din folderul principal) și așteaptă să se închidă tot:

sh
ps -ax -o pid,comm | grep -wE "game|db|auth"

Ce ar trebui să vezi: nimic. -o pid,comm afișează doar numărul și numele fiecărui proces, iar grep -w caută numele întregi, ca să nu prindă și MySQL. Cât timp mai apar procese, așteaptă. db salvează datele la oprire și are nevoie de câteva secunde.

De ce nu înlocuiești fișierul cu serverul pornit? Sistemul refuză să scrie peste un program care rulează (eroarea Text file busy). Și chiar dacă ai reuși printr-un ocoliș, ai avea core-uri vechi și noi amestecate.

Pasul 4: Copie, apoi înlocuire

sh
cd /usr/home/game/share/bin
cp -p game game.bak-2026-11-02
cp /usr/home/build/game-2026-11-02 game
ls -l game game.bak-2026-11-02
  • Prima comandă păstrează vechiul game (cu -p, păstrează și permisiunile).
  • A doua pune noul fișier în locul lui.
  • A treia îți arată ambele. Permisiunile (primele caractere, de tipul -rwxr--r--) trebuie să fie la fel. Dacă noul fișier nu are x (dreptul de a rula), îl adaugi cu chmod u+x game. Nu folosi niciodată chmod 777.

Pentru db faci la fel, cu fișierul db.

Pasul 5: Pornește și verifică

Pornește serverul cu scriptul obișnuit (în pachetul verificat, sh start.sh; scriptul pornește singur db primul, apoi auth, apoi canalele). Apoi:

  1. Verifică procesele: ps -ax -o pid,comm | grep -wE "game|db|auth".
  2. Citește syserr din db, auth și din câteva canale.
  3. Intră în joc și fă testul scurt: login, monstru, cufăr, NPC, schimbare de canal, relogare.

Ce ar trebui să vezi: toate core-urile pornite, fără erori noi, iar jocul se comportă ca pe serverul de test.

Rollback: cum revii în două minute

Dacă ceva nu e în regulă, nu încerca reparații pe loc, cu jucătorii conectați:

sh
cd /usr/home/game
sh close.sh
cp -p share/bin/game.bak-2026-11-02 share/bin/game
sh start.sh

Oprești, pui copia înapoi, pornești. Apoi analizezi liniștit problema pe serverul de test. Dacă între timp ai schimbat și baza de date, rollback-ul trebuie să includă și ea, după planul din restaurarea unui backup.

Greșeli des întâlnite

  • Urci direct peste share/bin/game. Dacă transferul se întrerupe, rămâi cu un fișier stricat și fără copie.
  • Pui game nou cu db vechi (sau invers), din surse diferite. Cele două trebuie să vină din aceeași sursă dacă ai atins ceva comun.
  • Nu verifici amprenta. Un transfer în modul Text strică binarul fără să-ți spună.
  • Uiți de un core cu copie proprie. Un canal rămâne pe versiunea veche și apar diferențe greu de explicat.
  • Ștergi backup-urile vechi prea repede. Păstrează măcar ultimele două versiuni care au mers.

Întrebări frecvente

Trebuie să opresc tot serverul pentru un game nou?

În pachetul verificat, da: toate core-urile folosesc același fișier. Fă-o într-o fereastră de mentenanță anunțată.

Pot pune binarul și să repornesc mai târziu?

Nu poți scrie peste un program pornit, iar o versiune pusă „pentru mai târziu” e ușor de uitat. Fă totul într-un singur pas controlat.

Clientul trebuie schimbat și el?

Doar dacă modificarea schimbă ce își trimit serverul și clientul. Vezi protocolul game–client.

Ce urmează

Treci la compilarea questurilor cu qc. 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