RE:NODE

Aktualizace Valheim serveru a řešení „Incompatible version“

Text: Tým RE:NODE
11 min čtení


„Incompatible version“ na serveru Valheimu znamená, že hra na PC hráče a server jedou na různých buildech, a oprava je skoro vždy stejná - aktualizovat server: čistě ho zastavit, spustit steamcmd +login anonymous +app_update 896660 validate +quit nad jeho instalační složkou a znovu ho nastartovat. Hra se aktualizuje přes Steam ve chvíli, kdy vyjde patch; dedikovaný server je samostatná aplikace, která se aktualizuje, až když jí to něco přikáže. Zbytek článku se věnuje případům, kdy tento jediný příkaz nestačí - modované servery, hráči na veřejné testovací větvi, hráči na Xboxu a Game Passu o den pozadu a party, které nechtějí kvůli patchi ztratit celý večer.

Proč se verze rozcházejí#

Valheim jsou ve Steamu dva produkty. Hra je aplikace 892970, dedikovaný server aplikace 896660. Vycházejí společně, ale instalují se a aktualizují odděleně:

  • Klient se aktualizuje přes Steam automaticky, obvykle hned, jak hráč po patchi otevře Steam. Hráči mohou aktualizaci jen těžko odmítnout.
  • Server se aktualizuje, když SteamCMD nebo klient Steamu spustí aktualizaci jeho instalace. Server, který běží týden, jede na buildu, který byl aktuální při jeho posledním startu s aktualizací.

Běžný průběh v den patche je tedy takový: Iron Gate vydá patch, polovině party se hra aktualizuje, hráči se zkusí připojit a server je odmítne. Nic není rozbité. Server je jen o den starší.

Rozchod verzí může jít i dalšími dvěma směry:

  • Server je novější než klient. Hráč, který nerestartoval Steam nebo má pozastavené aktualizace, je pozadu. Chyba je stejná.
  • Různé platformy se aktualizují v různé dny. Steam dostává patche první. Buildy pro Microsoft Store a Xbox někdy dorazí později, takže crossplay parta může mít hráče na Steamu, kteří potřebují nový server, a hráče na Xboxu, kteří se na něj zatím nepřipojí. Tento případ rozebírá článek Valheim crossplay a hráči na Xboxu.

Jak zjistit verzi na obou stranách#

Než cokoli změníš, potvrď, že jde opravdu o rozdíl verzí.

Na klientovi je verze vypsaná v rohu hlavní nabídky - řetězec jako 0.219.14. Každý hráč ji přečte za dvě vteřiny.

Na serveru je verze vypsaná u začátku logu při startu:

code
Valheim version: l-0.219.14 (network version 34)

Předpona l- je typ buildu, není součástí čísla. Číslo v závorce je síťová verze, proti které se v posledních buildech kompatibilita připojení ve skutečnosti kontroluje - dva buildy se stejnou síťovou verzí spolu dokážou komunikovat. Iron Gate ji mezi obsahovými patchi nedrží stabilní a hráč nemá spolehlivý způsob, jak předem poznat, jestli ji daný hotfix změnil, takže praktické pravidlo je jednodušší: pokud se čísla v nabídce a v logu liší, aktualizuj tu stranu, která je pozadu.

Když je hráč odmítnut, zaznamená to i log serveru. Přesné znění se mezi buildy měnilo, ale řádek uvádí protistranu i obě verze, takže hned poznáš, která strana je starší.

Aktualizace přes SteamCMD#

Na tvém vlastním stroji je aktualizace stejný příkaz jako instalace. SteamCMD porovná nainstalovaný build s aktuálním a stáhne jen to, co se změnilo.

bash
$ sudo systemctl stop valheim$ steamcmd +force_install_dir /home/valheim/server \    +login anonymous +app_update 896660 validate +quit$ sudo systemctl start valheim

Na pořadí záleží:

  1. Nejdřív server čistě zastav. Čisté zastavení zapíše svět. Aktualizace pod běžícím serverem svět přímo nepoškodí, ale následný restart ano, pokud se proces místo zastavení zabije. Počkej na World saved v logu.
  2. Spusť aktualizaci pod uživatelem, kterému soubory patří. SteamCMD spuštěný jako root nad složkou vlastněnou uživatelem valheim zanechá soubory vlastněné rootem, které server později nemůže přepsat, a další aktualizace selže v půlce.
  3. Používej pokaždé stejné `+force_install_dir`. Pokud omylem zadáš jinou cestu, SteamCMD tam nainstaluje druhou, aktuální kopii, zatímco tvoje služba dál startuje tu starou.
  4. Nastartuj a přečti řádek s verzí. Pokud se nezměnil, aktualizace nedopadla tam, kam si myslíš.

+force_install_dir musí být v současných buildech SteamCMD před +login, jinak se s varováním ignoruje. Anonymní přihlášení je správně - dedikovaný server nepotřebuje účet, který hru vlastní.

Ve Windows je příkaz stejný, jen se steamcmd.exe a windowsovou cestou. Pokud jsi server nainstaloval přes část Tools v klientu Steamu, aktualizuje ho Steam jako každou jinou aplikaci; zkontroluj, že jsou pro něj ve vlastnostech zapnuté automatické aktualizace, a server zastav, než Steam začne přepisovat jeho soubory.

Co dělá validate a kdy ho vynechat

validate donutí SteamCMD zkontrolovat každý nainstalovaný soubor podle manifestu a stáhnout znovu ty, které se liší. Opraví poškozenou nebo nedokončenou instalaci. Zároveň přepíše každý soubor v instalační složce, který jsi změnil - včetně start_server.sh nebo start_headless_server.bat, pokud jsi upravil kopii nainstalovanou Steamem.

Dva důsledky:

  • Svůj vlastní startovací skript pojmenuj jinak, například start_valheim.sh, aby validate nikdy neresetovalo tvé spouštěcí argumenty.
  • Soubory BepInEx nejsou součástí manifestu, takže validate nechává BepInEx/, doorstop_libs a start_server_bepinex.sh na pokoji. Pokud modovaný server po aktualizaci přesto přestane načítat mody, zkontroluj, že se pořád startuje přes start_server_bepinex.sh a ne přes vanilla skript, a pak přes server znovu nainstaluj aktuální BepInExPack - balíčky se občas aktualizují spolu s patchem hry.

Prostý +app_update 896660 bez validate je pro běžné aktualizace v pořádku. validate použij, když se server po aktualizaci chová divně nebo byla instalace přerušena. Obecně o tomto kompromisu pojednává článek Automatizace aktualizací herních serverů.

Modované servery: počkej na mody#

Na vanilla serveru je aktualizace v den patche vždy správně. Na serveru s BepInEx je často špatně.

Mody se napojují na kód hry. Patch, který přejmenuje nebo změní metodu, již mod upravuje, mod rozbije - někdy chybou při startu, někdy potichu, někdy poškozením toho, co mod ukládá. A protože hráči mají stejné mody i na svých klientech, jejich hra je po aktualizaci ze Steamu ve stejném stavu.

Rozumné pořadí na modovaném serveru:

  1. Než je patch kdekoli nainstalovaný, zálohuj svět a zkopíruj celou složku BepInEx, pluginy i konfiguraci.
  2. Zkontroluj stránku každého modu kvůli aktualizaci nebo poznámce, že stále funguje. Knihovny jako Jotunn se obvykle aktualizují první; mody, které na nich závisí, následují.
  3. Server aktualizuj, až když je připraven každý mod, na který spoléháš. Do té doby se hráči, kteří už aktualizovali, nepřipojí - to je cena za provoz modů.
  4. Mody aktualizuj na serveru i na všech klientech společně, nejlépe ze sdíleného profilu správce modů, aby se verze přesně shodovaly.
  5. Nastartuj server a přečti `BepInEx/LogOutput.log`, jestli se nějaké pluginy nenačetly, dřív než se připojí kdokoli.

Hráči, kteří hru aktualizovali dřív, než byly mody připravené, dostanou buď nesoulad verzí od hry, nesoulad modů od Jotunnu nebo ServerSync, nebo obojí. Jsou to různé chyby s různými opravami - té s mody se věnuje článek vykopnutí kvůli nesouladu verzí modů ve Valheimu. Návrat u jednoho rozbitého modu popisuje co dělat, když aktualizace modu něco rozbije.

Vrácení aktualizace serveru#

Steam v běžném provozu nenabízí starší buildy dedikovaného serveru. Jakmile SteamCMD instalaci aktualizuje, stará verze je pryč, pokud sis ji nenechal.

Praktický návrat proto znamená kopii vytvořenou předem:

bash
$ sudo systemctl stop valheim$ cp -a /home/valheim/server /home/valheim/server-0.219.14$ steamcmd +force_install_dir /home/valheim/server \    +login anonymous +app_update 896660 +quit

Pokud je nový build špatný, zastav server, nové instalaci uhni z cesty a vrať kopii. Funguje to jen tehdy, když hráči stále mohou provozovat starou verzi, což obvykle nemohou - Steam jim hru už aktualizoval. Vrácení serveru se hodí hlavně pro modovanou partu, která se všichni dohodnou zůstat na starém buildu, a to vyžaduje, aby měl starou hru i každý hráč, což je víc, než většina part zvládne.

Častěji je správným „návratem“ svět: pokud patch a rozbitý mod společně poškodily uložení, obnov svět z doby před aktualizací, ne binárku serveru. Proto je záloha z prvního kroku seznamu pro modované servery důležitější než kopie instalace.

Veřejná testovací větev#

Iron Gate testuje velké aktualizace na veřejné testovací větvi před vydáním. Hráči se přihlásí přes Steam: Vlastnosti hry, záložka Betas a kód, který Iron Gate s každým testem zveřejní - historicky yesimadebackups, což dobře vypovídá o tom, co si o vynechávání záloh myslí.

Hráč na veřejném testovacím buildu se nepřipojí na běžný server a běžný hráč se nepřipojí na testovací. Pro provoz testovacího serveru nainstaluj odpovídající větev serveru:

bash
$ steamcmd +force_install_dir /home/valheim/ptb \    +login anonymous \    +app_update 896660 -beta public-test -betapassword yesimadebackups validate \    +quit

Aktuální název větve a heslo si před použitím ověř v oznámení od Iron Gate; roky byly stabilní, ale je na nich, zda je změní.

Pravidla pro testovací servery:

  • Používej samostatnou instalační složku a samostatnou složku s uloženými daty. Svět otevřený na testovacím buildu se může uložit ve formátu, který vydaný build nepřečte.
  • Nikdy nesměřuj testovací server na svůj hlavní svět. Zkopíruj ho a smiř se s tím, že kopii můžeš ztratit.
  • Hráči se musí ve Steamu odhlásit z testu, aby se mohli vrátit na běžný server, a Steam pak stáhne vydaný build.

Načasování aktualizací pro partu#

Cenou aktualizace Valheimu není stahování, které trvá minutu. Je to půlhodina zmatku, když se parta sejde ke hře a nikdo se nedostane dovnitř. Trocha rutiny to odstraní.

  • Aktualizuj při startu, ne uprostřed hry. Na vanilla serveru nech aktualizaci proběhnout při každém startu serveru a naplánuj denní restart na hodinu, kdy nikdo nehraje. Den patche se pak vyřeší přes noc.
  • Vědět, kdy patche vycházejí. Iron Gate oznamuje aktualizace ve Steamu a na svých kanálech. Pokud jeden vyjde, zatímco jsou lidé online, čistý restart s aktualizací trvá pár minut; předem to oznam.
  • Určit jednoho zodpovědného. Někdo z party po každém patchi ověří, že řádek s verzí serveru odpovídá hře. Na modovaném serveru stejný člověk rozhoduje, kdy aktualizovat.
  • Restartuj Steam na klientovi. Hráč, který pořád dostává „Incompatible version“ i po aktualizaci serveru, má starou hru; restart Steamu obvykle spustí stahování.

Jak aktualizace probíhá na hostingu s panelem, se liší. Mnohé panely spouštějí SteamCMD při každém startu serveru, takže restart je aktualizace; jiné mají pro ni přepínač mezi startovacími proměnnými. Na RE:NODE záložka Startup ukazuje proměnné, se kterými server startuje, tlačítko Restart pošle čisté zastavení, takže se svět nejdřív uloží, a záložka Schedules umí v pevnou hodinu spustit zálohu a pak restart. Pro vanilla partu je to celá rutina aktualizací; u modované dohlédni, aby nic v tomto plánu nestáhlo nový build hry dřív, než jsou připravené tvé mody. Příklady rozumného načasování najdeš v článku plány restartů, které pomáhají.

Aktualizace a soubor světa#

Formát světa se s některými aktualizacemi mění. Valheim starší svět převede, když ho načte novější build, a uloží ho v novém formátu. To má dva důsledky, které stojí za to znát:

  • Pro takový svět neexistuje cesta zpět. Jakmile ho nový build uloží, starší build ho může odmítnout načíst. Tvoje záloha před aktualizací je jediná kopie, kterou stará verze přečte.
  • První start po velké aktualizaci je pomalejší. Převod a nové uložení velkého světa mohou trvat citelně déle než běžný start. Proces neukončuj jen proto, že je konzole tichá; nech ho dokončit a uložit.

Dobrým zvykem je ruční záloha těsně před každou aktualizací, označená verzí, na které vznikla. Kontrolní seznam pro den aktualizace herního serveru funguje pro Valheim tak, jak je.

FAQ#

Proč Valheim hlásí Incompatible version, když se nic nezměnilo?

Něco se změnilo - patch hry se dostal k hráčům dřív než k serveru. Porovnej verzi v hlavní nabídce s řádkem Valheim version v logu serveru a aktualizuj tu stranu, která je pozadu.

Musím server aktualizovat při každém hotfixu?

Ber to tak. Některé drobné hotfixy mají stejnou síťovou verzi a zůstanou kompatibilní, ale předem to nepoznáš a aktualizace na vanilla serveru stojí jen restart.

Můžu zabránit Steamu v aktualizaci hry, aby moje parta zůstala na staré verzi?

Spolehlivě ne. Steam aktualizace posílá při startu a vydaná větev starší buildy nenabízí. Party, které potřebují zmrazenou verzi, bojují proti platformě; snazší je počkat na mody a aktualizovat společně.

Smaže validate můj svět?

Ne. Kontroluje jen soubory v instalační složce podle manifestu Steamu. Světy žijí ve složce s uloženými daty mimo instalaci, pokud jsi -savedir nesměřoval dovnitř - což je dobrý důvod to nedělat.

Proč se můj kamarád na Xboxu nemůže připojit po aktualizaci serveru?

Buildy pro Xbox a Microsoft Store někdy dostávají patche později než Steam. Dokud mu nedorazí ten jeho, jede na starší verzi a aktualizovaný server ho odmítne. Obvykle pomůže počkat den.

Jak dlouho trvá aktualizace Valheim serveru?

Stahování obvykle zabere minutu nebo dvě. Přičti čisté zastavení, start a načtení světa a počítej s pěti minutami - déle při prvním startu po velké obsahové aktualizaci.