RE:NODE

Provoz11 min čtení

Fixace verze herního serveru a návrat zpět

Jak udržet herní server na známém buildu, použít Steam beta větve, stáhnout starší depot a vrátit server i jeho svět zpět, když se aktualizace nepovede.

2 čtenáři

Fixace verze herního serveru znamená nenechat ho přejít na nový build, dokud se sám nerozhodneš; návrat zpět znamená vrátit ho na starší build poté, co se aktualizace nepovedla. U her, které si stahuješ sám - Minecraft, Factorio, FiveM, Terraria - je to obojí snadné: starý soubor serveru si necháš a vrátíš ho zpět. U her ze Steamu je to těžší, protože SteamCMD vždy nainstaluje aktuální build dané větve, takže jedinými podporovanými cestami zpět jsou beta větev, kterou vývojář pro starší verze zveřejní, nebo ruční stažení depotu, a obojí je k ničemu, pokud hráči nemohou na své straně spustit stejnou starou verzi. A ve všech hrách se musí vrátit i svět: aktualizace, která převedla save, obvykle nedovolí starému buildu ho přečíst. Počítej s tím předem, ne v noci, kdy se vše rozbije a zjistíš, že stará větev neexistuje.

Tento článek popisuje, kdy se fixace vyplatí, jak fungují větve a depoty, jak zafixovat jednotlivé běžné druhy serverů a postup návratu zpět, který vrátí server i jeho svět. Rutinní automatizace aktualizací je v článku Automatizace aktualizací herních serverů, samotný SteamCMD v článku SteamCMD vysvětlený.

Proč vůbec fixovat verzi#

Většina vanilla serverů by nic fixovat neměla. Klienti se aktualizují, takže server musí následovat. Fixace dává smysl, když:

  • Mody nejsou připravené. Modovaný server Valheimu, Rustu, 7 Days to Die nebo Minecraftu závisí na modech postavených pro jednu verzi hry. Dokud se neaktualizují, nová verze znamená rozbitý server.
  • Probíhá akce. Turnaj, závěr sezóny nebo dlouho plánovaný raid by neměly v půlce měnit pravidla.
  • Aktualizace je rozbitá. Vývojáři vydávají chyby. Někdy je správnou reakcí na patch, který shazuje servery, zůstat na předchozím buildu, než dorazí oprava.
  • Komunita zvolila verzi. Servery s modpacky, servery na Minecraftu ve starší verzi kvůli konkrétnímu modu, skupiny na Factoriu uprostřed rozehrané hry.

Omezení, které rozhoduje o všem, je, jestli na staré verzi mohou zůstat i hráči. Zafixovaný server, na který se nikdo nepřipojí, je jen zastavený server s dalšími kroky navíc.

Omezení na straně klienta, hra po hře#

HraMohou hráči zvolit starší verzi?Praktický důsledek
Minecraft JavaAno, libovolnou verzi v launcheruFixuj libovolně; hráči zvolí odpovídající verzi
FactorioAno, starší verze se nabízejí jako Steam betyFixuj libovolně; skupina se dohodne na verzi
FiveMKlienti následují build serveru v podporovaných rozsazíchFixuj artefakty serveru; hlídej okna podpory
TerrariaNe snadno; Steam aktualizuje klientaJen krátké fixace, než tModLoader nebo TShock dohoní
7 Days to DieObvykle; starší verze jsou jako Steam beta větveFixuj na větev; hráči se přihlásí do stejné
ValheimJen kolem veřejného testu, ne obecně pro staré buildyDlouhodobá fixace prakticky není
Rust, CS2, PalworldNeŽádná fixace; server musí následovat klienta
Project ZomboidHlavní buildy běžely jako dobrovolné beta větveFixuj na výchozí build nebo ten, do kterého ses přihlásil

Dostupnost větví se v čase mění a rozhoduje o ní každý vývojář, takže si seznam pro svou hru zkontroluj, než se na něj spolehneš. V klientu Steamu ukazuje větve dostupné hráčům záložka Properties a Betas u hry; větve dedikovaného serveru vypíše app_info_print ve SteamCMD, nebo je najdeš na SteamDB v sekci depotů a větví dané aplikace.

Steam beta větve#

Větev je pojmenovaný build, který vývojář zveřejnil vedle výchozí větve public. SteamCMD nainstaluje větev pomocí -beta:

bash
# install or switch to a named branch$ ./steamcmd.sh +force_install_dir /srv/7dtd +login anonymous \    +app_update 294420 -beta latest_experimental validate +quit# branches protected by a password$ ./steamcmd.sh +force_install_dir /srv/game +login anonymous \    +app_update <appid> -beta <branch> -betapassword <password> +quit# back to the default$ ./steamcmd.sh +force_install_dir /srv/7dtd +login anonymous \    +app_update 294420 -beta public validate +quit

Při přepínání větví přidej validate. Soubory z jedné větve, které v té druhé neexistují, by jinak zůstaly na disku a server běžící se směsicí souborů je server, který padá zvláštními způsoby.

Chceš-li zjistit, jaké větve existují pro serverovou aplikaci, aniž bys otevíral Steam:

bash
$ ./steamcmd.sh +login anonymous +app_info_update 1 \    +app_info_print 294420 +quit | grep -A 40 '"branches"'

Výstup vypíše každou větev s build id a, pokud je nastaveno, popisem a informací, jestli vyžaduje heslo. Formát tohoto výstupu není zdokumentované rozhraní a už se změnil, takže ho čti, místo abys ho slepě parsoval.

Na větve všude platí dvě pravidla. Klient a server musí být na stejné větvi a chyba nesouladu o větvích málokdy mluví - píše „version mismatch“ nebo „incompatible“. A jakmile je větev nastavená, všechny další aktualizace zůstávají na ní, včetně automatických aktualizací přepínače update-on-restart, což je přesně to, co z ní dělá fixaci.

V panelu postaveném na Pterodactylu mnoho eggů pro Steam nabízí větev (a někdy i heslo větve) jako startovací proměnnou vedle přepínače automatické aktualizace. Názvy se mezi eggy liší; podívej se na záložku Startup svého serveru.

Fixace přesného buildu pomocí download_depot#

Tam, kde pro potřebnou verzi větev neexistuje, má SteamCMD nízkoúrovňový příkaz, který stáhne konkrétní historický manifest depotu:

code
download_depot <appid> <depotid> <manifestid>

Depot je balík souborů uvnitř aplikace - typicky jeden pro každý operační systém plus sdílený obsah - a manifest je jeden zveřejněný stav tohoto depotu. Id najdeš na stránkách SteamDB pro danou aplikaci, které vypisují každý depot a historii jeho manifestů. Příkaz stahuje do vlastní složky SteamCMD, do steamapps/content/app_<appid>/depot_<depotid>/, ne do serveru; ty soubory pak zkopíruješ přes instalaci.

Funguje to, ale s podmínkami, které je dobré znát dřív, než se na to spolehneš:

  • Obvykle vyžaduje skutečný Steam login, ne anonymní, a u některých aplikací účet, který hru vlastní. Použij záložní účet, ne ten hlavní.
  • Není to podporovaný postup. Valve ho pro tento účel nedokumentuje a občas byl nespolehlivý.
  • Další běžná aktualizace ho zruší. Pozdější app_update nebo přepínač update-on-restart vidí instalaci jako zastaralou a nahradí ji. Nejdřív vypni automatické aktualizace.
  • Klienti se stále musí shodovat. Pokud hráči nemohou také spustit starý build, bude na něm server sám.

V praxi je download_depot nástroj na nouzi jedné noci u hry, jejíž klienty lze zadržet, nebo pro soukromou skupinu ochotnou udělat totéž na své straně. Není to způsob, jak veřejně provozovat starou verzi Rustu.

Fixace her mimo Steam#

U her, které stahuješ jako soubor, je fixace jen uchování toho souboru.

Minecraft (Paper). Server je jar. Uchovej funkční verzi pod názvem, který říká, co to je - paper-<version>-<build>.jar - a nasměruj na ni start. Nový build Paperu v rámci téže verze Minecraftu bývá oprava; nová verze Minecraftu při prvním načtení převede svět a je to záměrný upgrade, popsaný v článku Upgrady verzí Minecraftu. Pluginy se fixují stejně: nech si jar, který funguje, a složku s předchozími verzemi.

Factorio. Starší headless buildy zůstávají ke stažení v archivu na factorio.com. Uchovej verzi, kterou provozuješ, a pamatuj, že save otevřený v novější verzi pak nejde otevřít ve starší.

FiveM. Buildy serveru - artefakty - jsou číslované a ty si vybíráš, který poběží. Herní build, který používají klienti, se fixuje zvlášť pomocí sv_enforceGameBuild v server.cfg, což všechny přinutí na konkrétní build GTA V. Staré artefakty časem přestanou být podporované, takže fixace je tam odklad, ne trvalý stav; cyklus doporučených buildů popisuje Aktualizace serveru FiveM a artefakty.

Terraria a tModLoader. Dedikovaný server je ke stažení pro každou verzi zvlášť; uchovej zip. tModLoader na Steamu nabízí starší verze jako větve právě z tohoto důvodu - kompatibility modů.

Zafixovat je potřeba i mody#

Zafixovaná hra s nezafixovanými mody není zafixovaná. Mody se vyvíjejí podle vlastního rozvrhu:

  • Steam Workshop vždy poskytuje nejnovější verzi položky. Server, který při startu stahuje položky z Workshopu, dostane to, co autor nahrál včera večer. Chceš-li zafixovat, zkopíruj mod z cache Workshopu do lokální složky modů hry, kde hra lokální mody podporuje, a přestaň ho stahovat z Workshopu - s tím úskalím, že klienti pak musí stejnou verzi získat jinak.
  • Weby s mody jako Thunderstore, CurseForge, Modrinth a Nexus mají staré verze dál ke stažení. Zapisuj si, kterou verzi provozuješ.
  • Frameworky pro pluginy - Oxide, Carbon, SourceMod, BepInEx - jsou samy mody a na verzi frameworku záleží stejně jako na verzi každého pluginu.

Manifest verzí - prostý textový soubor s výpisem buildu hry, loaderu a každého modu s jeho verzí - promění fixaci i návrat zpět v čtení seznamu. Jeden ukazuje Testovací server vedle produkčního a vrácení jednoho modu popisuje Co dělat, když aktualizace modu rozbije server.

Savy jdou dopředu, zpět jen zřídka#

Svět je část návratu, na kterou lidé zapomínají. Mnoho aktualizací mění formát savu a hra svět při prvním načtení novým buildem převede. Pak platí:

  • Světy Minecraftu otevřené v novější verzi nejsou ve starší podporované. Klient před tím v singleplayeru varuje; server prostě načte, co dostane, a výsledkem mohou být chybějící bloky, ztracené předměty nebo pád.
  • Savy Factoria starší verze odmítnou.
  • Hlavní verze 7 Days to Die obecně vyžadují nový svět tak jako tak; drobné patche si obvykle zachovávají kompatibilitu v rámci verze.
  • Survival hry na Unrealu (Palworld, Satisfactory, Abiotic Factor) převádějí savy dopředu při načtení, s různou tolerancí k návratu zpět.

Návrat samotného serveru je proto jen půlka návratu. Druhou půlkou je svět v podobě před aktualizací - který existuje, jen pokud jsi udělal zálohu před prvním startem na novém buildu. Ta záloha je nejdůležitější krok každé aktualizace a důvod, proč existují zamykatelné zálohy v panelu: na RE:NODE zamčenou zálohu plán nikdy nerotuje pryč, takže kopie před aktualizací tam je i o týden později, když si někdo problému všimne. Co má záloha pro jednotlivé hry obsahovat, popisuje Strategie záloh herního serveru.

Postup návratu zpět#

Když se aktualizace pokazila a oprava směrem dopředu dnes večer nejde:

  1. Zastav server a vypni všechno, co ho aktualizuje automaticky - přepínač automatické aktualizace, plánované restarty, které aktualizují.
  2. Udělej zálohu aktuálního stavu a zamkni ji. Obsahuje vše, co hráči udělali na nové verzi, což možná budeš chtít později obnovit.
  3. Obnov zálohu před aktualizací. Pokud obsahuje kromě světa i herní soubory, obnoví se obojí najednou. Pokud tvoje zálohy binárky vynechávají (což obvykle mají), vrať starý build zvlášť: přepni na starou větev, použij stažení depotu, nebo nahraď soubor serveru.
  4. Zkontroluj verzi ve startovacím logu, jestli odpovídá té, kterou jsi chtěl.
  5. Zkontroluj svět, že se načetl pod svým skutečným názvem a s očekávaným postupem.
  6. Řekni hráčům, jakou verzi mají spustit a jak - kterou beta větev zvolit, který profil launcheru použít - a na jaký čas byl svět obnoven.
  7. Zapiš si, co se rozbilo a co ti umožní aktualizovat znovu: vydání modu, hotfix, změna konfigurace. Fixace je dočasná; vědět, co ji ukončí.

Vracet zpět, nebo opravit dopředu?#

Návrat zpět je správnou odpovědí méně často, než se zdá ve 23 hodin večer. Hrubý vodítko:

SituaceObvykle lepší
Vanilla server, klienti už aktualizovaníOprava dopředu; klienty vrátit nejde
Jeden mod rozbitý, ostatní fungujíOdstraň nebo vyměň ten mod, zůstaň na nové verzi
Mnoho modů rozbitých, autoři aktualizují do pár dníVrať zpět, pokud klienti mohou následovat; jinak jeď vanilla, dokud to neudělají
Save převedený a poškozenýObnov svět před aktualizací na nové verzi, pokud se načte, jinak vrať zpět obojí
Samotná aktualizace hry shazuje serveryVrať zpět tam, kde to větve dovolí; hlídej hotfix

Tak či onak je rozhodnutí snazší, když byla aktualizace nejdřív vyzkoušena na kopii - viz Kontrolní seznam pro den aktualizace.

FAQ#

Můžu dedikovaný server ze Steamu vrátit na starší verzi?

Jen pokud vývojář starší verzi zveřejní jako beta větev, nebo stažením starého manifestu depotu pomocí download_depot, což obvykle vyžaduje Steam login a není podporované. Tak či onak musí starou verzi moct spustit i hráči, což většina her ze Steamu nedovoluje.

Jak zastavím automatické aktualizace serveru?

Vypni startovací nastavení automatické aktualizace, pokud ho tvůj server má, a ujisti se, že žádná plánovaná úloha aktualizaci nespouští. Na vlastním stroji odstraň volání SteamCMD ze startovacího skriptu. Nastavení beta větve také drží aktualizace na této větvi.

Bude můj svět fungovat, když server vrátím zpět?

Jen pokud byl uložen před aktualizací. Světy převedené novější verzí starší verze obvykle nedokážou správně přečíst. Obnov zálohu pořízenou před aktualizací spolu se starým buildem serveru.

Proč se moji kamarádi nemohou připojit po přepnutí na beta větev?

Jejich klienti jsou na výchozí větvi a tvůj ne. Každý hráč se musí přihlásit do stejné větve na záložce Betas ve Steamu, nebo musíš server přepnout zpět na public.

Jak dlouho můžu zůstat na zafixované verzi?

Dokud se na ni hráči mohou připojit a vyhovuje ti být bez oprav. U Minecraftu a Factoria to mohou být roky. U her s vynucenými aktualizacemi klienta je to do dalšího patche, a proto je tam fixace hlavně o hodinách nebo dnech kolem aktualizace.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000