vhserver z LinuxGSM je hotový správcovský skript pro dedicated server Valheimu na Linuxu. Vytvoříš uživatele vhserver, stáhneš linuxgsm.sh, spustíš bash linuxgsm.sh vhserver a pak ./vhserver install a dostaneš jeden příkaz, který nainstaluje server přes SteamCMD, spustí ho v relaci tmux, čistě ho zastaví, ověří aktualizace na Steamu, archivuje zálohy, restartuje ho, když spadne, a posílá upozornění na Discord nebo e-mail. Nastavení patří do lgsm/config-lgsm/vhserver/vhserver.cfg, nikdy do _default.cfg. Tři řádky cronu - monitor každých pět minut, update každých třicet, update-lgsm týdně - z toho udělají server, který se většinou stará sám o sebe. Cenou je vrstva shell skriptů mezi tebou a hrou a vhserver, který se aktualizuje sám, je špatná výchozí volba pro svět s mody.
Článek pokrývá instalaci, konfigurační soubory a proměnné, na kterých záleží, všechny příkazy, které budeš používat, plán cronu, zálohy a upozornění, mody a poctivé srovnání s obyčejným startovacím skriptem pod systemd.
Co je LinuxGSM a co dělá pro Valheim#
LinuxGSM (Linux Game Server Managers) je open-source sada skriptů v Bashi, která stejnými příkazy spravuje výrazně přes sto dedicated serverů. vhserver je jeho modul pro Valheim. Nenahrazuje herní server ani nemění, jak funguje: pod povrchem pořád instaluje Steam app 896660 s anonymním přihlášením a spouští valheim_server.x86_64 se stejnými argumenty, které bys zadal sám. Přidává provozní obal kolem:
- Instalace a kontrola závislostí. Řekne ti, které balíčky pro tvou distribuci chybí, a nainstaluje SteamCMD pro uživatele.
- Relace tmux pro každý server. Server běží odpojený;
./vhserver consolese k němu připojí. - Kontrola aktualizací. Porovná nainstalovaný build s aktuálním na Steamu a server zastaví, jen když je co instalovat.
- Zálohy. Komprimované archivy s limitem počtu a stáří.
- Monitoring. Kontrola, že server běží a odpovídá, s restartem a upozorněním, pokud ne.
- Upozornění. Discord, e-mail, Telegram, Slack, Pushover a další, nastavené v jednom souboru.
- Detaily.
./vhserver detailsvypíše porty, heslo, cesty a startovací řádek na jednom místě.
Valheim nemá vlastní konfigurační soubor - každé nastavení je argument při spuštění - takže konfigurační soubor LinuxGSM je prakticky konfigurací serveru. Pokud argumenty neznáš, přehled spouštěcích argumentů Valheimu je vypisuje všechny i s výchozími hodnotami.
Instalace vhserveru#
LinuxGSM podporuje běžné serverové distribuce; Ubuntu LTS a stabilní Debian jsou ty, které většina lidí používá. Všechno dělej pod vyhrazeným neprivilegovaným uživatelem - LinuxGSM odmítá běžet jako root.
$ sudo adduser vhserver$ sudo su - vhserver$ curl -Lo linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh$ bash linuxgsm.sh vhserver$ ./vhserver installKrok instalace nejdřív zkontroluje závislosti. Pokud něco chybí, vypíše přesný řádek sudo apt install pro tvou distribuci a skončí; spusť ho pod uživatelem s právy sudo a pak znovu ./vhserver install. Na 64bitovém Debianu a Ubuntu seznam obsahuje 32bitové knihovny pro SteamCMD, což znamená, že musel proběhnout dpkg --add-architecture i386 - vypsané pokyny ho obsahují, když je potřeba. Seznam balíčků se mezi vydáními LinuxGSM i verzemi distribucí mění, takže ho opiš z výstupu instalátoru nebo ze stránky vhserveru na linuxgsm.com, ne ze starého návodu.
Instalátor pak stáhne server do ~/serverfiles, asi 2 GB, a položí pár otázek. ./vhserver auto-install na ně odpoví výchozími hodnotami, což je verze vhodná pro provisioning skript.
Po dokončení vypadá domovský adresář takto:
| Cesta | Co obsahuje |
|---|---|
~/vhserver | Příkaz, kterým spouštíš všechno |
~/serverfiles/ | Server Valheimu ze SteamCMD |
~/lgsm/config-lgsm/vhserver/ | Konfigurační soubory LinuxGSM pro tento server |
~/lgsm/backup/ | Archivy záloh |
~/log/ | Logy konzole a skriptů LinuxGSM |
~/.config/unity3d/IronGate/Valheim/ | Světy a seznamy adminů, banů a povolených hráčů |
Poslední řádek je výchozí adresář savů samotného Valheimu, ne LinuxGSM. Světy leží ve worlds_local uvnitř něj a adminlist.txt, bannedlist.txt a permittedlist.txt leží vedle té složky. Kde Valheim drží své soubory popisuje, co se změní, když nastavíš -savedir.
Konfigurační soubory a proměnné, na kterých záleží#
LinuxGSM čte tři soubory v pořadí, přičemž každý přepisuje ten předchozí:
_default.cfg- každá proměnná s výchozí hodnotou. Přepíše se, když se LinuxGSM aktualizuje. Čti ho, nikdy ho needituj.common.cfg- nastavení sdílená všemi servery LinuxGSM pod tímto uživatelem, například přihlašovací údaje k upozorněním.vhserver.cfg- nastavení této jedné instance. Sem patří tvoje změny.
Obvyklá chyba je upravit _default.cfg, vidět, že změna funguje, a při dalším update-lgsm o ni přijít. Zkopíruj řádky, které chceš změnit, z _default.cfg do vhserver.cfg a uprav je tam:
servername="Longship Crew"serverpassword="herring-barrel-42"port="2456"gameworld="Midgard"public="1"Názvy proměnných výše jsou ty, které výchozí hodnoty vhserveru používají dlouho, a startovací řádek se z nich skládá v proměnné startparameters. Názvy se mezi vydáními LinuxGSM občas mění, takže otevři svůj _default.cfg a opiš z něj, místo abys věřil jakémukoli návodu, tomuto včetně:
$ grep -nE '^(servername|serverpassword|port|gameworld|public|startparameters)=' \ ~/lgsm/config-lgsm/vhserver/_default.cfgPro argumenty, které předdefinované proměnné nepokrývají - crossplay, interval ukládání, modifikátory světa - zkopíruj startparameters do vhserver.cfg a rozšiř ho. Zachovej odkazy na proměnné, aby jednoduchá nastavení výše dál fungovala:
startparameters="-name '${servername}' -password '${serverpassword}' -port ${port} -world '${gameworld}' -public ${public} -crossplay -saveinterval 900 -backups 4 -preset casual"Pokud už tvůj _default.cfg má samostatné nastavení crossplaye, použij to místo ručního přidávání přepínače. Potom ./vhserver details vypíše výsledný startovací řádek, což je nejrychlejší způsob, jak ověřit, že uvozovky přežily.
Pravidla samotné hry platí navíc nad LinuxGSM: dotazovací port je vždy herní port plus jedna, takže port="2456" znamená, že UDP 2456 a 2457 musí být dosažitelné. Porty Valheimu 2456-2458 vysvětleně obsahuje pravidla firewallu.
Příkazy, které budeš používat#
Každý příkaz má krátkou formu, kterou nápověda LinuxGSM ukazuje v závorkách. ./vhserver bez argumentu vypíše úplný seznam pro tvou verzi.
| Příkaz | Zkratka | Co dělá |
|---|---|---|
start | st | Spustí server v relaci tmux |
stop | sp | Zastaví ho řádně, takže se svět uloží |
restart | r | Stop a pak start |
details | dt | Porty, heslo, cesty, startovací řádek, stav |
console | c | Připojí se k relaci tmux |
monitor | m | Zkontroluje, že server běží; když ne, restartuje ho |
update | u | Aktualizuje server, pokud má Steam novější build |
check-update | cu | Oznámí, zda aktualizace existuje, nic nemění |
force-update | fu | Aktualizuje i tehdy, když build vypadá aktuální |
validate | v | Ověří soubory serveru proti Steamu |
backup | b | Vytvoří archiv zálohy |
update-lgsm | ul | Aktualizuje vlastní skripty LinuxGSM |
test-alert | ta | Pošle zkušební zprávu na nastavená upozornění |
debug | d | Spustí server na popředí pro řešení problémů |
mods-install | mi | Vypíše a nainstaluje mody, které LinuxGSM zná |
Dva z nich si zaslouží varování. console tě připojí k živému procesu serveru; odejdeš z něj stiskem Ctrl+b a pak d. Stisk Ctrl+C v konzoli pošle serveru přerušení a zastaví ho - LinuxGSM tohle varování vypíše při připojení a lidé to přesto dělají. Valheim ze standardního vstupu nečte nic, takže konzole je na sledování, ne na zadávání příkazů; admin příkazy se spouštějí z konzole F5 herního klienta hráči uvedenými v adminlist.txt.
validate přepíše změněné herní soubory kopiemi ze Steamu. To zahrnuje start_server.sh a na instalaci s mody to může vrátit zpět soubory, na které se BepInEx spoléhá. Spouštěj ho, když podezříváš poškození, ne rutinně.
debug je příkaz, po kterém sáhneš, když start hlásí úspěch a server není k nalezení. Spustí server ve tvém terminálu s viditelným výstupem, takže chyba, kterou odpojená relace skryla, ti proběhne před očima. Obvyklí podezřelí - porušení pravidla hesla, obsazený port, chybějící knihovna, svět, který se nenačte - jsou popsaní v článku pád serveru Valheim při startu.
Cron: monitor, aktualizace a samotný LinuxGSM#
LinuxGSM sám od sebe neplánuje nic; cron úlohy pro uživatele vhserver přidáš přes crontab -e. Sada, kterou doporučuje dokumentace LinuxGSM, plus noční záloha a týdenní restart:
*/5 * * * * /home/vhserver/vhserver monitor > /dev/null 2>&1*/30 * * * * /home/vhserver/vhserver update > /dev/null 2>&10 0 * * 0 /home/vhserver/vhserver update-lgsm > /dev/null 2>&115 5 * * * /home/vhserver/vhserver backup > /dev/null 2>&10 5 * * 1 /home/vhserver/vhserver restart > /dev/null 2>&1@reboot /home/vhserver/vhserver start > /dev/null 2>&1Co ti který řádek přináší:
- `monitor` každých pět minut. Pokud relace tmux zmizela nebo server přestal odpovídat na dotazovacím portu, LinuxGSM ho restartuje a pošle upozornění. Tenhle řádek nahrazuje restart po selhání ze systemd.
- `update` každých třicet minut. Zkontroluje na Steamu nový build. Pokud existuje, server čistě zastaví, aktualizuje a znovu spustí. Na vanilla serveru to znamená, že záplata Valheimu se použije do půl hodiny, dřív než většina hráčů spustí aktualizovaného klienta.
- `update-lgsm` týdně. Udržuje skripty aktuální. Tvůj
vhserver.cfgzůstane nedotčený;_default.cfgse nahradí, a proto ho nikdy needituješ. - `backup` každou noc a `restart` týdně v hodinách, kdy nikdo nehraje. Pondělní záloha běží patnáct minut po restartu. Plány restartů, které pomáhají vysvětlují, proč u Valheimu obvykle stačí týdenní.
- `@reboot` spustí server při startu stroje. Alternativou je unit systemd, viz níže.
Cron spouští úlohy s minimálním prostředím. Používej úplné cesty jako výše a pokud se zdá, že úloha nedělá nic, spusť stejný řádek ručně jako uživatel vhserver a přečti si ~/log/script/. Syntaxe s pěti poli je v článku výrazy cronu vysvětleně.
Start při bootu přes systemd místo @reboot#
@reboot funguje, ale server při vypínání stroje nezastaví čistě - relace tmux se prostě zabije spolu se vším ostatním. Malý unit systemd, který volá vlastní start a stop LinuxGSM, to opraví:
[Unit]Description=LinuxGSM vhserverWants=network-online.targetAfter=network-online.target[Service]Type=forkingUser=vhserverWorkingDirectory=/home/vhserverRemainAfterExit=yesExecStart=/home/vhserver/vhserver startExecStop=/home/vhserver/vhserver stopTimeoutStopSec=180Restart=no[Install]WantedBy=multi-user.targetRestart=no je záměrné: zotavení po pádu zůstává na monitor a nechceš, aby se dva dohlížitelé prali o stejný proces. S tímto unitem zapnutým vyhoď řádek @reboot z cronu. Pokud bys raději LinuxGSM vynechal a nechal systemd dohlížet na server přímo, Valheim jako služba systemd staví takový unit od nuly.
Zálohy a upozornění#
./vhserver backup zapíše komprimovaný archiv do ~/lgsm/backup/. Archivuje adresář LinuxGSM, což je u výchozí instalace domovský adresář uživatele vhserver, bez samotné složky záloh - takže soubory světa pod ~/.config/unity3d/IronGate/Valheim se přibalí. Než na to spolehneš, ověř to na vlastní instalaci:
$ ./vhserver backup$ ls -lh ~/lgsm/backup/$ tar -tzf ~/lgsm/backup/vhserver-*.tar.gz | grep -E 'worlds_local/.*\.(db|fwl)$'Pokud poslední příkaz vypíše soubory tvého světa, záloha obsahuje to podstatné. Pokud nevypíše nic, tvoje savy leží mimo archivovaný strom - obvykle kvůli -savedir - a potřebuješ samostatnou kopii.
Chování řídí proměnné, které můžeš přepsat ve vhserver.cfg. Názvy a výchozí hodnoty zkontroluj ve svém _default.cfg; důležité jsou maximální počet uchovávaných archivů (maxbackups), maximální stáří ve dnech (maxbackupdays) a to, zda se má server během archivace zastavit (stoponbackup). Zastavení je bezpečnější - zaručuje čerstvé uložení a žádný soubor se nezapisuje uprostřed archivace - za cenu minuty offline v 5 ráno, které si nikdo nevšimne.
Dvě upozornění. Archiv obsahuje 2 GB souborů serveru, takže je mnohem větší než svět, který chrání; na malém disku sniž počet. A ~/lgsm/backup/ leží na stejném disku jako server, takže archivy kopíruj i jinam. Zálohy serveru Valheim a poškození světa popisují obnovu a jak vypadá poškozený svět.
Upozornění se nastavují v common.cfg, takže je sdílí všechny servery pod uživatelem. Pro Discord nastav discordalert="on", vlož webhook kanálu do discordwebhook a spusť ./vhserver test-alert. Ostatní služby se řídí stejným vzorem <service>alert a přihlašovacích údajů; _default.cfg vypisuje všechny podporované služby a jejich proměnné. Upozornění na restarty z monitor je nejužitečnější jednotlivá notifikace, kterou malý server může mít - opakované restarty jsou první znamení umírajícího světa nebo rozbitého modu.
Mody s LinuxGSM#
LinuxGSM má příkaz mods-install a nedávné verze mezi možnostmi uvádějí balíček BepInEx pro Valheim. Zda je v seznamu, jaký build BepInEx stahuje a jak zapojí startovací skript, závisí na tvém vydání LinuxGSM, takže spusť ./vhserver mods-install, přečti si seznam a po dalším startu zkontroluj v logu vlastní úvodní řádky BepInEx. Pokud chybí, server běží vanilla.
Jednotlivé mody LinuxGSM nespravuje. Jejich soubory .dll patří do ~/serverfiles/BepInEx/plugins a jejich konfigurace se objeví v ~/serverfiles/BepInEx/config po prvním startu. Ruční instalace BepInEx, která funguje i pod LinuxGSM, je v článku mody Valheimu s BepInEx na serveru. Tři pravidla odtamtud mají pod LinuxGSM větší váhu kvůli jeho automatizaci: vypni automatickou cron úlohu update, nikdy nespouštěj validate jen tak a před každou aktualizací si uschovej kopii fungující složky BepInEx, abys mohl vrátit stav za minutu.
LinuxGSM, nebo obyčejný skript: kompromisy#
LinuxGSM je dobrý. Je to ale hodně shellu mezi tebou a jedním procesem Unity. Co je lepší, záleží na tom, co chceš vlastnit.
| LinuxGSM vhserver | Obyčejný skript pod systemd | |
|---|---|---|
| Doba nastavení | Pár minut | Patnáct až třicet minut |
| Aktualizace | update zkontroluje build a restartuje jen když je potřeba | SteamCMD ručně nebo při každém startu |
| Zotavení po pádu | monitor z cronu, až o pět minut později | Restart=on-failure, vteřiny |
| Logy | Soubory v ~/log/ | Journal, nebo soubor podle tvé volby |
| Upozornění | Zabudovaná | Vlastní skript |
| Konzole | Připojitelná relace tmux | Žádná, což Valheim sotva potřebuje |
| Pohyblivé části | LinuxGSM, tmux, cron | Jen systemd |
| Víc serverů | bash linuxgsm.sh vhserver znovu vytvoří vhserver-2 | Šablonový unit |
Vyber LinuxGSM, pokud chceš detekci aktualizací, upozornění a zálohy bez psaní vlastních, nebo už provozuješ jiné servery LinuxGSM a líbí se ti jedna sada příkazů. Vyber obyčejný skript, pokud chceš co nejméně vrstev, rychlejší zotavení po pádu, logy v journalu a instalaci, kde je každý řádek tvůj. Ani jedno není špatně; špatné je jejich míchání - jeden dohlížitel na server.
Ať běží kdekoli, stroj potřebuje mít základy v pořádku: firewall povolující jen SSH a dva porty UDP, SSH jen s klíči a dost paměti. Valheim na Linuxovém VPS pokrývá dimenzování a firewall a příkazy Linuxu pro správce serverů jsou dobré osvěžení, pokud je shell pro tebe nový.
FAQ#
Kde jsou světy v instalaci Valheimu pod LinuxGSM?
Ve výchozím adresáři savů Valheimu pro uživatele vhserver: ~/.config/unity3d/IronGate/Valheim/worlds_local/, jako dvojice .db a .fwl pro každý svět. LinuxGSM je nepřesouvá, pokud nepřidáš -savedir do startovacích parametrů.
Proč moje změna konfigurace zmizela?
Upravil jsi _default.cfg, který update-lgsm přepisuje. Změny dávej do vhserver.cfg pro tento server nebo do common.cfg pro všechny servery pod uživatelem. Oba soubory aktualizace přežijí.
Ukládá ./vhserver stop svět?
Ano, zastaví server řádně, takže Valheim před ukončením svět zapíše. Poprvé po zastavení zkontroluj log konzole. Zabití relace tmux nebo procesu napřímo uložení přeskočí.
Jak spustit dva servery Valheim s LinuxGSM?
Spusť bash linuxgsm.sh vhserver znovu ve stejném domovském adresáři; vytvoří vhserver-2 s vlastním vhserver-2.cfg. Dej mu jiný port, aspoň o dva vyšší než první, jiný název světa a jiný název serveru.
Je bezpečné automaticky aktualizovat LinuxGSM na serveru s mody?
Aktualizace samotného LinuxGSM přes update-lgsm je v pořádku. Automatická aktualizace hry přes update ne, protože záplata Valheimu rozbije mody pro BepInEx, dokud nejsou znovu sestavené. Použij check-update a aktualizuj ručně.


