Alle Anleitungen, die ich zum Einrichten eines dedizierten Valheim-Servers unter Linux gefunden habe, hatten an der einen oder anderen Stelle Lücken, also beschloss ich, mein eigenes Setup zum Nutzen anderer zu dokumentieren. Diese Anleitung richtet sich an Benutzer, die den Valheim Dedicated Server auf einem Headless-Linux-Server einrichten möchten. Wenn Sie dies einfach auf einem Always-On-Desktop mit grafischer Anmeldung ausführen möchten, ist diese Anleitung möglicherweise nicht so nützlich für Sie.
Diese Anleitung wurde für Debian 11 (Bullseye) geschrieben, aber vieles, wenn nicht alles, gilt auch für Ubuntu, da es auf Debian basiert. Kredit muss an die gehen Hosting-Server-Leitfaden im Valheim Fandom-Wiki für grundlegende Informationen darüber, wie die ausführbare Serverdatei aufgerufen wird, welche Ports für die Außenwelt offengelegt werden müssen, und Konfigurationsoptionen.
Installieren Sie das Spiel über SteamCMD
SteamCMD ist im Grunde Headless Steam für Headless-Server. Wir benötigen es, um den Valheim Dedicated Server herunterzuladen.
Multiarch einrichten
SteamCMD wird von Debian bereitgestellt, jedoch als i386-Paket (32-Bit x86), sodass Sie die i386-Architektur zu dpkg auf Ihrem System hinzufügen müssen, um i386-Pakete zu installieren. (Weitere Informationen siehe MultiArch/HOWTO im Debian-Wiki.) Führen Sie dazu die folgenden Befehle aus.
$ sudo dpkg --add-architecture $ sudo apt-get update
SteamCMD installieren
Installieren Sie nun SteamCMD selbst.
$ sudo apt-get install Steamcmd
Richten Sie einen separaten Benutzer und eine separate Gruppe für Steam ein
Es ist immer am besten, Dienste als dedizierter Benutzer und Gruppe von allem anderen auf Ihrem System auszuführen, sodass ein Angreifer nur auf die Dateien dieses Dienstes zugreifen kann, wenn ein Dienst kompromittiert wird. (Wir werden den Valheim-Systemdienst später weiter härten.) Normalerweise würden Sie einen „System“-Benutzer für Systemdienste erstellen, aber Steam, selbst das kopflose SteamCMD, scheint sich nicht richtig zu verhalten, es sei denn, es wird in einer normalen Benutzerumgebung ausgeführt. (Einzelheiten dazu, wie sich ein Systembenutzer von einem normalen Benutzer unterscheidet, finden Sie in der Manpage adduser(8).)
Erstellen Sie den Steam-Benutzer mit dem Befehl „adduser“ und deaktivieren Sie die Anmeldungen, da wir dieses Konto nur über „sudo“ verwenden werden.
$ sudo adduser --disabled-login Steam
Führen Sie SteamCMD aus
Leider hat SteamCMD keine sehr gute Benutzeroberfläche, daher wird dieser nächste Teil für diejenigen unter Ihnen, die bereits mit der Linux-Befehlszeile vertraut sind, etwas umständlich sein. Führen Sie die Befehle wie folgt aus (Befehlsausgabe wird weggelassen.)
$ sudo -iu steam # Öffnet eine Login-Shell als „steam“-Benutzer. Siehe Manpage sudo(8). $ steamcmd Steam>login anonymous Steam>force_install_dir ./valheim/ # Der Valheim-Server hat eine andere AppID als der Client. Überprüfen Sie dies Link. Steam>app_update 896660 Steam>beenden ^C
Wenn der Befehl „Beenden“ das Programm einfach ohne Eingabeaufforderung hängen lässt, geben Sie Strg+C ein, um es vollständig zu beenden. Dies scheint ein Fehler in SteamCMD zu sein.
Nachdem Sie den Valheim Dedicated Server installiert haben, ist es an der Zeit, den Dienst für die Ausführung einzurichten.
Führen Sie den Valheim-Server über Systemd aus
Der Valheim Dedicated Server wird mit einem Wrapper-Skript zum Ausführen des Servers geliefert, aber wir werden die ausführbare Serverdatei direkt für unsere systemd-Diensteinheit ausführen.
Die Systemd-Unit
Schreiben Sie den folgenden Code in die Datei „/usr/local/lib/systemd/system/valheim.service“.
[Unit] Description=Valheim Dedicated Server After=network-online.target [Service] Type=exec User=steam Group=steam Environment="LD_LIBRARY_PATH=/home/steam/valheim/linux64" "SteamAppId=892970" ExecStart=/home /steam/valheim/valheim_server.x86_64 -name "Ich habe vergessen, meinem Server einen Namen zu geben" -world "Midgard" -port 2456 -password "secret" # Sicherheitseinstellungen LockPersonality=true NoNewPrivileges=true RestrictRealtime=true RestrictNamespaces=true SystemCallArchitectures=native SystemCallFilter =~@obsolete @clock @debug @module @mount @privileged @reboot @setuid @cpu-emulation CapabilityBoundingSet= RestrictAddressFamilies=AF_INET AF_INET6 RestrictSUIDSGID=true PrivateDevices=true PrivateTmp=true PrivateMounts=true PrivateUsers=true ProtectControlGroups=true ProtectHome=tmpfs BindPaths =/home/steam ProtectKernelModules=true ProtectKernelTunables=true ProtectSystem=full ProtectClock=true ProtectKernelLogs=true ProtectProc=unsichtbar ProtectHostname=true RemoveIPC=true InaccessiblePaths=/srv/
Eine vollständige Erklärung der systemd-Direktiven, die in dieser Lektion verwendet werden, würde den Rahmen dieses Handbuchs sprengen, aber für Interessierte sind die entsprechenden Manpages wie folgt.
- systemd.unit(5)
- systemd.service(5)
- systemd.exec(5)
- systemd.resource-control(5)
Angabe einer Welt
Das Argument „-world“ ist optional; Wenn Sie es weglassen, generiert der Server beim ersten Durchlauf aus einem zufälligen Seed eine Welt für Sie.
Andernfalls gibt es den Namen einer zu verwendenden Welt an, die im Verzeichnis „/home/steam/.config/unity3d/IronGate/Valheim/worlds/“ existieren muss. In der obigen systemd-Einheit geben wir die Welt mit dem Namen „Midgard“ an, also muss eine Datei mit dem Namen „/home/steam/.config/unity3d/IronGate/Valheim/worlds/Midgard.fwl“ existieren. Auf diese Weise können Sie eine von woanders kopierte Welt verwenden.
Wenn Sie eine vorhandene Welt von Ihrem PC verwenden und Ihren Fortschritt beibehalten möchten, müssen Sie auch die entsprechende „.db“-Datei an denselben Speicherort wie die „.fwl“-Datei kopieren.
Wenn Sie eine neue Welt, aber mit einem bestimmten Startwert verwenden möchten, müssen Sie die Welt mit dem Spielclient erstellen, da der Server keine Möglichkeit bietet, einen Startwert für die anfängliche Welterstellung anzugeben.
Aktivieren des Dienstes
Das definiert den Dienst, aber Systemd weiß nichts davon, bis es Einheiten neu lädt. Tun Sie dies, indem Sie laufen
$ sudo systemctl daemon-reload
Aktivieren Sie es dann mit
$ sudo systemctl aktiviert valheim.service
Jetzt startet der Valheim-Server automatisch beim Booten, aber erst, wenn das Netzwerk hochgefahren ist (das macht die Zeile „After=network-online.target“.) Um ihn jetzt ohne Neustart zu starten, führen Sie ihn aus
$ sudo systemctl startet valheim.service
Das ist alles, was wir heute dafür teilen Valheim führen. Dieses Handbuch wurde ursprünglich erstellt und geschrieben von Aidalgol. Falls wir dieses Handbuch nicht aktualisieren, finden Sie das neueste Update, indem Sie diesen folgen Link.