{"id":7795,"date":"2022-05-31T11:23:00","date_gmt":"2022-05-31T09:23:00","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=7795"},"modified":"2024-01-26T22:13:01","modified_gmt":"2024-01-26T20:13:01","slug":"minecraft-server-auf-dem-raspberry-pi-installieren-spigot-und-performance-test-wie-gut-lauft-minecraft-auf-dem-raspberry-pi-4","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/minecraft-server-auf-dem-raspberry-pi-installieren-spigot-und-performance-test-wie-gut-lauft-minecraft-auf-dem-raspberry-pi-4\/","title":{"rendered":"Minecraft Server auf dem Raspberry Pi installieren (Spigot) und Performance-Test: Wie gut l\u00e4uft Minecraft auf dem Raspberry Pi 4?"},"content":{"rendered":"<p>Das bislang meist verkaufte Computerspiel Minecraft erfreut sich nach wie vor gro\u00dfer Beliebtheit. Ein Grund daf\u00fcr: Man kann einen eigenen Server betreiben und diesen auf Wunsch auch mit Erweiterungen (Mods) anpassen. Die umfangreichen M\u00f6glichkeiten des Open World Spieles werden dadurch noch zus\u00e4tzlich erweitert. <\/p>\n<p>In diesem Beitrag zeige ich dir, wie du deinen eigenen Minecraft-Server auf einem Raspberry Pi einrichten kannst. Dabei werfen wir auch einen Blick auf den grundlegenden Aufbau dahinter. Au\u00dferdem wird gezeigt, wie man das Spiel nativ (ohne Docker) automatisch beim Starten des Pis ebenfalls starten kann. Schlussendlich folgt ein Leistungstest mit zwei Spielern.<\/p>\n<h2 class=\"wp-block-heading\">Voraussetzungen: Was ben\u00f6tigst du?<\/h2>\n<ul class=\"wp-block-list\">\n<li>Einen Raspberry Pi &#8211; theoretisch sind auch \u00e4ltere Modelle mit mindestens 1GB Arbeitsspeicher m\u00f6glich. Am besten l\u00e4uft es aber auf einem aktuellen Raspberry Pi 4 mit mindestens 2 GB Arbeitsspeicher. Besser sind 4 GB oder mehr, vor allem f\u00fcr mehrere Spieler steigt der Speicherverbrauch.<\/li>\n<li>Im folgenden wird das Raspberry Pi OS auf Basis von Debian 11 Bullseye in der 64 Bit Edition verwendet. 64 Bit wird bei mehr wie 2 GB Arbeitsspeicher empfohlen.<\/li>\n<li>Eine zus\u00e4tzliche K\u00fchlung ist zu empfehlen, da v.a. beim Start die CPU des Pi stark ausgelastet wird. Diese muss nicht aktiv sein, durch passive K\u00fchlk\u00f6rper kann man die Temperatur bereits deutlich senken.<\/li>\n<li>Java in der aktuellsten LTS-Version. <a href=\"https:\/\/www.spigotmc.org\/wiki\/buildtools\/#linux\" target=\"_blank\" rel=\"nofollow\">Derzeit ist das Java 17 f\u00fcr Minecraft 1.17 oder neuer<\/a>. Die Vorversion funktioniert ebenfalls (also derzeit Java 16 und 17). Aufgrund der l\u00e4ngeren Unterst\u00fctzung w\u00fcrde ich prinzipiell die LTS-Version bevorzugen. <a href=\"https:\/\/u-labs.de\/portal\/java-auf-dem-raspberry-pi-installieren-aktuelle-jre-laufzeitumgebung-jdk-z-b-java-17-kostenfrei-legal-2021\/\" title=\"Java auf dem Raspberry Pi installieren: Aktuelle JRE Laufzeitumgebung\/JDK (z.B. Java 17) kostenfrei &amp; legal 2021\">Wie man diese auf dem Raspberry Pi installieren kann, habe ich in einem eigenen Beitrag bereits an dieser Stelle gezeigt<\/a>. Zu bevorzugen w\u00e4re der Weg \u00fcber die Paketverwaltung mit dem Liberica JDK, der wird <a href=\"https:\/\/u-labs.de\/portal\/aktuelles-java-17-11-und-weitere-ueber-die-paketverwaltung-mit-liberica-jdk-auf-dem-raspberry-pi-und-x86-linux-systemen-installieren\/\" title=\"Aktuelles Java (17, 11 und weitere) \u00fcber die Paketverwaltung mit Liberica JDK auf dem Raspberry Pi und x86 Linux-Systemen installieren\">in diesem Beitrag erkl\u00e4rt<\/a>.<\/li>\n<li>F\u00fcr den Server selbst ben\u00f6tigt ihr keine Lizenz. Um ihn zu nutzen, ist allerdings eine Lizenz f\u00fcr das Minecraft-Spiel notwendig. Selbst wenn ihr das Spiel kauft, erzwingt Microsoft zudem mittlerweile das Anlegen eines Microsoft-Kontos.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Warum Spigot f\u00fcr einen Minecraft-Server?<\/h2>\n<p>Um das zu verstehen, werfen wir einen kurzen Blick auf die Struktur und Geschichte hinter Minecraft: Die originale Server-Software wird <strong><em>Vanilla<\/em> <\/strong>bezeichnet. Sie stammt mittlerweile von Microsoft, nachdem der Konzern den urspr\u00fcnglichen Minecraft-Entwickler namens Mojang gekauft hatte. Sie wurde vor allem fr\u00fcher viel kritisiert, unter anderem weil man nicht alles konfigurieren konnte, es zu Fehlern kam und der Server teilweise hing.<\/p>\n<p>F\u00fcr die zuvor erw\u00e4hnten Mods wurde <strong>CraftBukkit <\/strong>entwickelt: Es baut <strong>Bukkit <\/strong>in die Vanilla-Version ein. Bukkit ist eine Programmierschnittstelle, mit der man Erweiterungen entwickeln und das Spiel so ver\u00e4ndern kann. Dar\u00fcber hinaus bietet CraftBukkit ein paar zus\u00e4tzliche Einstellungen und Fehlerbehebungen gegen\u00fcber Vanilla. Man kann es Softwaretechnisch als Fork ansehen. Allerdings erlaubt es keine Verteilung von Binaries, sodass man sich diese anhand des Quellcodes selbst bauen muss, um es nutzen zu k\u00f6nnen.<\/p>\n<p>Spigot basiert wiederum auf CraftBukkit und f\u00fcgt viele eigene Verbesserungen hinzu. <a href=\"https:\/\/www.spigotmc.org\/wiki\/what-is-spigot-craftbukkit-bukkit-vanilla-forg\/\" target=\"_blank\" rel=\"nofollow\">Es gibt noch eine Reihe anderer Projekte<\/a>, die auf CraftBukkit oder anderen aufbauen. Spigot geh\u00f6rt zu den verbreitesten Mincraft-Serverprojekten, der sich auch um Bukkit k\u00fcmmert und wird sowohl quelloffen als auch kostenfrei angeboten. Das Projekt eignet sich daher als solide Basis f\u00fcr einen Minecraft-Server. Zudem wurden Performance-Optimierungen eingebaut, die man mit limitierten Ressourcen wie auf dem Raspberry Pi nicht schaden.<\/p>\n<h2 class=\"wp-block-heading\">DCMA: Deswegen musst du den Quellcode selbst bauen<\/h2>\n<p>Im Java-Umfeld werden fertige Programme meist als JAR-Datei fertig gepackt bereitgestellt. Aufgrund einer DCMA-Klage (DMCA ist ein Urheberrechtsgesetz in den USA) zu Bukkit <a href=\"https:\/\/www.spigotmc.org\/wiki\/faq\/#where-do-i-get-the-spigot-or-bukkit-jar-file-for-my-server\" target=\"_blank\" rel=\"nofollow\">darf daf\u00fcr keine solche JAR-Datei angeboten werden<\/a>. Da Bukkit die zentrale Schnittstelle f\u00fcr Erweiterungen ist und auch Spigot sie verwendet, muss man sich den Quellcode herunterladen und anhand der Buildtools selbst eine JAR-Datei erstellen.<\/p>\n<p>Vereinzelt stellen Seiten wie z.B. <a href=\"https:\/\/getbukkit.org\/download\/spigot\" target=\"_blank\" rel=\"nofollow\">GetBukkit <\/a>dennoch fertige Jars zum Download bereit. <a href=\"https:\/\/www.spigotmc.org\/threads\/skip.220358\/#post-2258935\" target=\"_blank\" rel=\"nofollow\">Dies verst\u00f6\u00dft jedoch gegen das Urheberrecht<\/a>, weswegen ich diese meiden w\u00fcrde. Und wie generell bei Binaries aus Drittanbieter-Quellen wei\u00df man nie, ob diese m\u00f6glicherweise unerw\u00fcnschte Software als Beigabe beinhalten. Es ist aber auch gar nicht n\u00f6tig, auf solche Seiten zur\u00fcck zu greifen. Das selbst erstellen der JAR-Datei ist kein Hexenwerk und dauert auf einem neueren Raspberry Pi 4 mit knapp 14 Minuten nicht all zu lange.<\/p>\n<h2 class=\"wp-block-heading\">Jar-Datei erstellen<\/h2>\n<p>Zuerst downloaden wir die BuildTools. Das ist ein kleines Programm, um CraftBukkit und Spigot inklusive aller Abh\u00e4ngigkeiten in eine JAR-Datei zu packen. Leer- und Ausrufezeichen im Pfad k\u00f6nnen zu Problemen f\u00fchren. Am besten erstellen wir uns ein eigenes Verzeichnis, da dort sp\u00e4ter noch einige Dateien\/Ordner vom Minecraft-Server dazu kommen. Beispielsweise im Home-Verzeichnis des  \/home\/pi<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nwget https:\/\/hub.spigotmc.org\/jenkins\/job\/BuildTools\/lastSuccessfulBuild\/artifact\/target\/BuildTools.jar\n<\/pre>\n<\/div>\n<p>Da die BuildTools verschiedenen Code von Open Source Projekten herunterladen m\u00fcssen, ben\u00f6tigen wir zudem git:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo apt install git\n<\/pre>\n<\/div>\n<p>Bevor wir mit dem Bauen beginnen, m\u00fcssen wir sicherstellen, dass die Git-Einstellung <strong>core.autocrlf<\/strong> nicht gesetzt ist. Sie scheint mit Spigot Probleme zu verursachen. Es geht dabei darum, <a href=\"https:\/\/www.git-scm.com\/book\/en\/v2\/Customizing-Git-Git-Configuration#_formatting_and_whitespace\" title=\"https:\/\/www.git-scm.com\/book\/en\/v2\/Customizing-Git-Git-Configuration#_formatting_and_whitespace\" target=\"_blank\" rel=\"nofollow\">dass Windows Zeilenenden anders markiert als Linux und MacOS<\/a> und Git die dadurch verursachten falsch erkannten \u00c4nderungen mit der Einstellung <strong>core.autocrlf<\/strong> je nach Betriebssystem korrigieren kann.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ngit config --global --unset core.autocrlf\n<\/pre>\n<\/div>\n<p>Um das Erzeugen der JAR-Datei zu starten, einfach BuildTools.jar mithilfe von Java starten:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\njava -jar BuildTools.jar\n<\/pre>\n<\/div>\n<p>Dies erzeugt automatisch die neueste stabile Version, zum Zeitpunkt der Erstellung des Artikels war das 1.18.2. Falls gew\u00fcnscht, kann man mit &#8211;rev auch eine \u00e4ltere Version nutzen, beispielsweise<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\njava -jar BuildTools.jar --rev 1.16.5\n<\/pre>\n<\/div>\n<p>Wobei grunds\u00e4tzlich die aktuellste stabile Version bevorzugt werden sollte, wie auch bei anderer Software. Alle vom BuildTool unterst\u00fctzten Versionen <a href=\"https:\/\/www.spigotmc.org\/wiki\/buildtools\/\" target=\"_blank\" rel=\"nofollow\">sind hier dokumentiert<\/a>.<\/p>\n<p>Im aktuellen Arbeitsverzeichnis befindet sich nach gut 14 Minuten auf einem Raspberry Pi 4 nun ein JAR-Archiv namens spigot-1.XX.X.jar, wobei XX.X die Version kennzeichnet. Man sieht dies auch in den letzten Zeilen der Logs: <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nSuccess! Everything completed successfully. Copying final .jar files now.\nCopying spigot-1.18.2-R0.1-SNAPSHOT.jar to \/home\/pi\/.\/spigot-1.18.2.jar\n  - Saved as .\/spigot-1.18.2.jar\n\n<\/pre>\n<\/div>\n<h2 class=\"wp-block-heading\">Starten des Minecraft-Servers<\/h2>\n<p>Nun k\u00f6nnen wir den Server starten:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\njava -Xms1G -Xmx1G -XX:+UseG1GC -jar spigot-1.18.2.jar nogui\n<\/pre>\n<\/div>\n<p><strong>-Xms1G<\/strong> legt den Arbeitsspeicher zum Start fest, <strong>-Xmx1G<\/strong> den maximalen f\u00fcr Spigot. Mit der dynamischen Speicherverwaltung sind meine Erfahrungen nicht \u00fcberm\u00e4\u00dfig gut, daher setzt ich diese meist gleich &#8211; in diesem Falle auf 1GB mit <strong>-Xmx1G<\/strong>. Allerdings gilt dies nur f\u00fcr Java und ist kein absolutes Limit, durch Overhead kann auch etwas mehr verbraucht werden. Ihr solltet daher nicht 100% eures RAMs vergeben. Auf einem RPI4 mit 2GB Speicher also nicht die vollen 2GB, sondern 1 &#8211; 1,5GB. Empfohlen werden seitens Spigot 1GB, mehr ist nat\u00fcrlich immer gut, sofern m\u00f6glich.<\/p>\n<p>Fr\u00fcher hatte ich zus\u00e4tzlich <strong>&#8211;noconsole<\/strong> gesetzt: Er ist in der offiziellen Installationsanleitung nicht beschrieben. Allerdings \u00f6ffnet er ohne diesen Schalter eine interaktive Konsole, die permanent f\u00fcr eine hohe CPU-Auslastung von 70-90% sorgt. Dieses Problem scheint mittlerweile behoben zu sein. Zwar ist die Auslastung nach dem Start noch einige Zeit hoch, sinkt dann aber auf teils unter 10% im Leerlauf.<\/p>\n<p>Der erste Start wird fehlgeschlagen, da ihr zun\u00e4chst die Lizenz akzeptieren m\u00fcsst:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ java -Xms1G -Xmx1G -XX:+UseG1GC -jar spigot-1.18.2.jar nogui --noconsole\nLoading libraries, please wait...\n&#x5B;16:03:42] &#x5B;main\/ERROR]: Failed to load properties from file: server.properties\n&#x5B;16:03:42] &#x5B;main\/WARN]: Failed to load eula.txt\n&#x5B;16:03:42] &#x5B;main\/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.\n<\/pre>\n<\/div>\n<p>\u00c4ndert dazu einfach die <strong>eula.txt<\/strong> und ersetzt <strong>eula=false<\/strong> mit <strong>eula=true<\/strong>. Anschlie\u00dfend den obigen Java-Aufruf erneut ausf\u00fchren, dann startet euer Server. Oder setzt das Attribut bereits vorab: <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\necho &#039;eula=true&#039; &gt; eula.txt\n<\/pre>\n<\/div>\n<p>Vor allem beim ersten Start kann dies einige Zeit dauern, euer Pi wird dabei zu 100% auf allen Kernen ausgelastet sein:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-32.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"105\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-32-1024x105.png\" alt=\"\" class=\"wp-image-7834\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-32-1024x105.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-32-300x31.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-32-768x79.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-32-70x7.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-32.png 1034w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Das ist normal und ein Grund, warum eine zus\u00e4tzliche K\u00fchlung definitiv empfehlenswert ist. Ansonsten wird sich der Pi herunter takten, wodurch der Start l\u00e4nger dauert. Generell sind hohe Temperaturen f\u00fcr die Lebensdauer der Hardware nicht f\u00f6rderlich.<\/p>\n<p>Wenn <em>Done (224.733s)! For help, type &#8222;help&#8220;<\/em> im Log auf der Konsole steht, ist der Server zwar in so weit gestartet, dass man sich verbinden kann. Allerdings scheint er im Hintergrund noch einige optionale Dinge zu initialisieren, die CPU-Last verbleibt f\u00fcr mehrere Minuten auf fast 100%. Dies l\u00e4sst sich in einem 2. Terminal z.B. mit htop pr\u00fcfen, oder unter Windows \u00fcber MobaXterm mit aktiviertem <em>Remote-monitoring<\/em>:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-33.png\"><img loading=\"lazy\" decoding=\"async\" width=\"115\" height=\"26\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-33.png\" alt=\"\" class=\"wp-image-7835\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-33.png 115w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-33-70x16.png 70w\" sizes=\"auto, (max-width: 115px) 100vw, 115px\" \/><\/a><\/figure>\n<p>Ungef\u00e4hr <strong>12 Minuten<\/strong> nachdem die <em>Done<\/em> Meldung im Log erscheint, geht die CPU-Last deutlich herunter und bleibt ohne Spieler im Einstelligen Prozentbereich.<\/p>\n<h2 class=\"wp-block-heading\">So verbindet ihr euch auf eueren Minecraft-Server<\/h2>\n<p>Euer Server ist nun nutzbar und man kann sich mit einem Minecraft-Client darauf verbinden. Startet dazu das Spiel und klickt auf <strong>Mehrspieler<\/strong>.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-34.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"590\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-34-1024x590.png\" alt=\"\" class=\"wp-image-7836\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-34-1024x590.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-34-300x173.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-34-768x443.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-34-70x40.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-34.png 1235w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>F\u00fcr eine einmalige Verbindung k\u00f6nntet ihr unten auf <strong>Direktverbindung<\/strong> klicken. Da ihr den Server aber vermutlich noch \u00f6fter nutzen m\u00f6chtet, macht es Sinn, diesen in der Serverliste zu speichern. Dazu den <strong>Server hinzuf\u00fcgen<\/strong> Knopf anklicken:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-36.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"590\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-36-1024x590.png\" alt=\"\" class=\"wp-image-7838\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-36-1024x590.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-36-300x173.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-36-768x443.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-36-70x40.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-36.png 1235w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Der Name oben ist frei w\u00e4hlbar. Gebt in das Feld <strong>Serveradresse<\/strong> einfach den Hostname oder die IP-Adresse des Raspberry Pi ein und best\u00e4tigt mit <strong>Fertig<\/strong>:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-37.png\"><img loading=\"lazy\" decoding=\"async\" width=\"460\" height=\"496\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-37.png\" alt=\"\" class=\"wp-image-7839\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-37.png 460w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-37-278x300.png 278w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-37-65x70.png 65w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/a><\/figure>\n<p>Nun erscheint der neue Server in der Liste, \u00fcber das Symbol links kann man sich verbinden:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-39.png\"><img loading=\"lazy\" decoding=\"async\" width=\"657\" height=\"334\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-39.png\" alt=\"\" class=\"wp-image-7841\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-39.png 657w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-39-300x153.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/grafik-39-70x36.png 70w\" sizes=\"auto, (max-width: 657px) 100vw, 657px\" \/><\/a><\/figure>\n<p>Nach wenigen Sekunden steht die Verbindung:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/javaw_bdi6aFil3f.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"616\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/javaw_bdi6aFil3f-1024x616.png\" alt=\"\" class=\"wp-image-7842\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/javaw_bdi6aFil3f-1024x616.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/javaw_bdi6aFil3f-300x180.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/javaw_bdi6aFil3f-768x462.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/javaw_bdi6aFil3f-70x42.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/10\/javaw_bdi6aFil3f.png 1237w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Euer Pi wird nun eine etwas erh\u00f6hte CPU-Last von ca 20-40% aufweisen, je nachdem was im Spiel gemacht wird.<\/p>\n<h2 class=\"wp-block-heading\">Autostart<\/h2>\n<p>Zwar funktioniert der Server nun grunds\u00e4tzlich. Es gibt jedoch noch einige Dinge, die ihr f\u00fcr einen dauerhaften Betrieb umsetzen solltet. Nicht alle sind zwingend n\u00f6tig, aber einige zumindest empfehlenswert. <\/p>\n<h3 class=\"wp-block-heading\">Autostart im Hintergrund mit Systemd-Dienst<\/h3>\n<p>Zu letzteren geh\u00f6rt der Autostart. Derzeit l\u00e4uft der Minecraft-Server auf der Konsole im Vordergrund. Das hei\u00dft: Sobald ihr die SSH-Sitzung schlie\u00dft oder den Pi neu startet, l\u00e4uft euer Server nicht mehr. Deswegen sollten wir Minecraft als Hintergrundprozess starten und in den Autostart legen. Es gibt verschiedene M\u00f6glichkeiten dies zu l\u00f6sen. Bei Programmen die direkt ohne Docker auf dem Pi laufen, ist ein Systemd-Dienst in meinen Augen die sinnvollste L\u00f6sung.<\/p>\n<p>Der Dienst wird in der Datei <strong>\/etc\/systemd\/system\/minecraft.service<\/strong> (mit root-Rechten \u00f6ffnen) wie folgt angelegt:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;Unit]\nDescription=Spigot Minecraft Server\n\n&#x5B;Service]\nWorkingDirectory=\/home\/pi\/minecraft\/\nExecStart=java -Xms1G -Xmx1G -XX:+UseG1GC -jar spigot-1.18.2.jar nogui\nUser=pi\nType=simple\nRestart=on-failure\n\n&#x5B;Install]\nWantedBy=multi-user.target\n<\/pre>\n<\/div>\n<p>Damit der neue Dienst erkannt wird, m\u00fcssen wir den Systemd-Daemon neu laden. Anschlie\u00dfend Minecraft aktivieren und starten. Der Status sollte auf <em>active (running)<\/em> stehen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ sudo systemctl daemon-reload\n$ sudo systemctl enable minecraft\n$ sudo systemctl start minecraft\n$ sudo systemctl status minecraft\n\u25cf minecraft.service - Spigot Minecraft Server\n     Loaded: loaded (\/etc\/systemd\/system\/minecraft.service; enabled; vendor preset: enabled)\n     Active: active (running) since Mon 2022-05-30 13:12:38 BST; 3s ago\n\n<\/pre>\n<\/div>\n<p>Wer den Start verfolgen m\u00f6chte, kann dies \u00fcber das Protokoll tun. Darin finden sich auch etwaige Fehler, falls der Dienst nicht gestartet werden konnte:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\njournalctl -fu minecraft\n<\/pre>\n<\/div>\n<h3 class=\"wp-block-heading\">Senden von Serverbefehlen<\/h3>\n<p>Sobald der Minecraft-Server gestartet ist, kann man Konsolenbefehle eingeben. Beim manuellen Start wie anfangs beschrieben funktioniert dies problemlos. Daf\u00fcr l\u00e4uft der Prozess jedoch im Vordergrund, d.H. manuelles starten und sobald man die Konsole\/Sitzung schlie\u00dft, wird der komplette Server beendet. Dieses Problem wurde durch den Systemd-Dienst gel\u00f6st. Allerdings k\u00f6nnen wir dadurch keine Befehle mehr an die Konsole senden. Dies kann <a href=\"https:\/\/unix.stackexchange.com\/a\/612118\/214989\" title=\"mit einem Socket\" target=\"_blank\" rel=\"nofollow\">mit einem Socket<\/a> umgesetzt werden. In der Unit-Datei des Dienstes unter <strong>[Service]<\/strong> in <strong>\/etc\/systemd\/system\/minecraft.service<\/strong> dazu folgende Zeilen erg\u00e4nzen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;Service]\n# Vorherige Anweisungen ...\nSockets=minecraft.socket\nStandardInput=socket\nStandardOutput=journal\nStandardError=journal\n<\/pre>\n<\/div>\n<p>Und ein zweites Unit in der Datei <strong>\/etc\/systemd\/system\/minecraft.socket<\/strong> anlegen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;Unit]\nPartOf=minecraft.service\n\n&#x5B;Socket]\nListenFIFO=%t\/minecraft.stdin\n<\/pre>\n<\/div>\n<p>Damit die \u00c4nderungen wirksam werden, wieder den Systemd-Daemon neu laden und einen Neustart des Minecraft-Dienstes durchf\u00fchren:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ sudo systemctl daemon-reload\n$ sudo systemctl restart minecraft\n<\/pre>\n<\/div>\n<p>Alles was ihr nun in<strong> \/run\/minecraft.stdin<\/strong> schreibt, leitet Systemd weiter an Stdin von Minecraft &#8211; Und verh\u00e4lt sich damit identisch, als w\u00fcrdet ihr auf der h\u00e4ndisch gestarteten Serverkonsole Befehle eingeben:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\necho &quot;list&quot; &gt; \/run\/minecraft.stdin\n<\/pre>\n<\/div>\n<p>Die Ausgabe der Befehle kann man \u00fcber das Journal (journalctl) sehen. Am besten \u00f6ffnet man dazu ein zweites Terminalfenster:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/grafik-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"586\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/grafik-4-1024x586.png\" alt=\"\" class=\"wp-image-9001\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/grafik-4-1024x586.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/grafik-4-300x172.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/grafik-4-768x439.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/grafik-4-70x40.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/grafik-4.png 1318w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Alternativ ist die <a href=\"https:\/\/www.spigotmc.org\/resources\/webconsole.70370\/\" title=\"Erweiterung WebConsole\" target=\"_blank\" rel=\"nofollow\">Erweiterung WebConsole<\/a> ein komfortablerer Weg: Damit k\u00f6nnt ihr die Konsole in jedem Internetbrowser nutzen und seht die Ergebnisse lokal. Dar\u00fcber hinaus zeigt sie ein paar grunds\u00e4tzliche Infos \u00fcber den Server, wie etwa Anzahl der Spieler oder Prozessor\/Arbeitsspeicherauslastung.<\/p>\n<h2 class=\"wp-block-heading\">Praxistest<\/h2>\n<p>Bereits mit nur einem Spieler ist die Prozessorauslastung des Raspberry Pi immer wieder hoch. Vor allem wenn neue Bereiche der Karte angezeigt werden kommt man durchaus in den Bereich von 90-100% auf allen Kernen. Allerdings bleibt das Spiel dennoch fl\u00fcssig. Auch mit einem zweiten Spieler \u00e4ndert sich daran wenig. Etwa 1,6 GB Arbeitsspeicher wurden allokiert, w\u00e4hrend f\u00fcr die Java-VM als Limit 1 GB angegeben wurden. Der Overhead ist vor allem bei Java-Anwendungen normal.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/vlcsnap-2022-05-30-23h50m27s289.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/05\/vlcsnap-2022-05-30-23h50m27s289.jpg\" alt=\"\" class=\"wp-image-9009\"\/><\/a><\/figure>\n<p>Im Vergleich mit einem vollwertigen X86 Server macht sich haupts\u00e4chlich die langsame Startzeit bemerkbar. Was dort nur einige Sekunden dauert, ben\u00f6tigt beim Pi Minuten. Danach merkt man wenig Unterschiede. Ein kleinerer Pi mit 2 GB Arbeitsspeicher reicht f\u00fcr ein paar Spieler aus. Mehr ist f\u00fcr eine gr\u00f6\u00dfere Anzahl an Spielern oder umfangreichere Karten zu empfehlen. Grunds\u00e4tzlich ist der Raspberry Pi als Mini Minecraft-Server durchaus tauglich, zumal der Stromverbrauch es mit g\u00fcnstigen vServern aufnehmen kann.<\/p>\n<h2 class=\"wp-block-heading\">Erweiterungen<\/h2>\n<p>Als n\u00e4chstes k\u00f6nnt ihr euren Server einrichten, etwa durch die Vergabe von Berechtigungen. Dies zeigt euch Luis aus der U-Labs Community, er ist dort als <em>Hase<\/em> bekannt. Wenn ihr mit Personen au\u00dferhalb eures Netzwerkes \u00fcber das Internet spielen m\u00f6chtet, ist eine NAT-Portfreigabe im DSL-Modem notwendig. Dazu empfiehlt sich ein Anbieter f\u00fcr dynamisches DNS. Alternativ kann man auch einen virtuellen Server in einem Rechenzentrum f\u00fcr ein paar Euro pro Monat anmieten. Dieser ist im Internet erreichbar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das bislang meist verkaufte Computerspiel Minecraft erfreut sich nach wie vor gro\u00dfer Beliebtheit. Ein Grund daf\u00fcr: Man kann einen eigenen Server betreiben und diesen auf Wunsch auch mit Erweiterungen (Mods) anpassen. Die umfangreichen M\u00f6glichkeiten des Open World Spieles werden dadurch noch zus\u00e4tzlich erweitert. In diesem Beitrag zeige ich dir, wie du deinen eigenen Minecraft-Server auf &#8230;<\/p>\n","protected":false},"author":5,"featured_media":9008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220],"tags":[87,1050],"class_list":["post-7795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gaming","tag-java","tag-minecraft"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=7795"}],"version-history":[{"count":18,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7795\/revisions"}],"predecessor-version":[{"id":12232,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7795\/revisions\/12232"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/9008"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=7795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=7795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=7795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}