Een Minecraft-server opzetten op een Raspberry Pi
Minecraft is een van de populairste spellen ooit gemaakt. Je kunt het met je vrienden spelen in de multiplayer spelmodus. Wist je dat een Raspberry Pi 4 krachtig genoeg is om een Minecraft-server te draaien? In dit artikel leer je de basis van welke verschillende variaties er bestaan, een beetje van de geschiedenis van Minecraft, en hoe je je eigen Minecraft-server op je Raspberry Pi kunt opzetten en bedienen.
De geschiedenis van Minecraft-servers
Om over Minecraft servers te praten, moeten we kort de twee "grote" vorken van Minecraft bespreken.
Mojang, de makers van Minecraft, creëerden Minecraft oorspronkelijk in Java.
Leuke kanttekening: Hoewel Java verondersteld wordt echt portable te zijn ("write once and run anywhere"), hangt het spel af van native libraries die x86 zijn. Dit betekent dat de Java-versie van Minecraft niet zal draaien op andere platformen, zoals de Raspberry Pi. De Raspberry Pi is ARM-gebaseerd (ARMv6 / ARMv7 / ARMv8, afhankelijk van welke Raspberry Pi je bekijkt).
Raspi Berry's Java uitleg
Deze Java Minecraft versie draait op PC, Mac en Linux (x86) machines.
Dienovereenkomstig is er serversoftware die compatibel is met de Java-editie (zie hieronder voor een volledige bespreking van de verschillende beschikbare keuzes).
Een tweede versie van Minecraft, vanaf nul geschreven, heette MCPE (Minecraft Pocket Edition). Het verscheen oorspronkelijk op Android, en was geschreven in C++. Deze editie werd geport naar Windows 10, iOS, PlayStation 4, XBox en Nintendo Switch. Het is nu bekend als Minecraft Bedrock editie. (Bedrock verwijst naar de in C++ geschreven engine). Dit is nu de hoofdversie, inclusief cross-platform spelen.
Helaas is de Bedrock editie niet compatibel met de Java editie. Dit betekent dat Mac en Linux spelers niet mee kunnen doen aan het cross-platform spel ermee.
Belangrijker nog, het vereist zijn eigen server software, waar we hieronder kort op in zullen gaan.
Installatie van Spigot op Raspberry Pi OS 32 bit
Dit zal u door de installatie van Spigot leiden. Ik gebruik hiervoor een 8 GB Raspberry Pi 4, onder het standaard 32 bit OS om mee te beginnen.
Voorbereiding van de installatie
Open een terminal, en voer de volgende commando's uit:
sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build
Dit zal de packages lijst updaten, en git en OpenJDK 8 (Java Runtime Environment, JRE) installeren. Ook zal het een nieuwe directory aanmaken voor het bouwen van Spigot, en zal het daarin veranderen.
Download dan de meest recente BuildTools.jar van de SpigotMC website. U kunt gebruik maken van wget voor dit:
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
Dit is een snelle download van ongeveer 4 MB.
Bouw Spigot
Begin nu met de bouw:
java -jar BuildTools.jar
Ik ben begonnen met de bouw op 13:00met mijn Raspberry Pi 4 8GB, en het eindigde op ongeveer 13:15 - dus het duurde ongeveer een uur en 15 minuten. Hier is een screenshot van de initiële output die je zult zien:
Het bouwproces gebruikt meerdere kernen op uw Raspberry Pi:
En hier is het laatste scherm dat je zult zien:
Zodra het bouwen klaar is, zal je zien waar het afgewerkte Spigot server .jar bestand werd opgeslagen. In mijn geval (aangezien het spigot-1.16.4.jar heeft gebouwd), is het:
/home/pi/spigot-build/./spigot-1.16.4.jar
De overige bestanden zijn niet meer nodig, we hebben alleen de laatste spigot-*.jar nodig
Installeer je nieuwe Minecraft-server
Ik stel voor om de Minecraft server te installeren in de /opt directory hiërarchie. Laten we dat in de volgende stap doen en het .jar bestand hernoemen naar alleen spigot.jar:
sudo mkdir /opt/spigot
sudo mv /home/pi/spigot-build/spigot-*.jar /opt/spigot/spigot.jar
sudo chown -R pi:pi /opt/spigot
Het laatste commando verandert de eigenaar van deze directory in de gebruiker pi, wat het gemakkelijker maakt voor u om aan de slag te gaan met de nodige rechten, zonder dat u een nieuwe gebruiker moet aanmaken. Voor een systeem dat door meerdere mensen gebruikt wordt, en voor extra veiligheid / controle over rechten, zou u misschien een eigen systeemgebruiker willen aanmaken om spigot onder te draaien.
beveiligingstip
Nu kun je proberen om je nieuwe Minecraft server te starten, door er 2 GB RAM aan toe te wijzen:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Het toewijzen van meer dan 2700M aan spigot op een 32bit Raspberry Pi OS heeft er bij mij toe geleid dat de server niet startte:
[47.195s][warning][os,thread] Mislukt om thread te starten - pthread_create mislukt (EAGAIN) voor attributen: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [Server thread/ERROR]: Een onverwachte uitzondering tegengekomen
java.lang.OutOfMemoryError: kan geen eigen thread aanmaken: mogelijk geen geheugen of proces-/resourcelimieten bereikt
at java.lang.Thread.start0(Native Method) ~[?:?]
at java.lang.Thread.start(Thread.java:803) ~[?:?]
at java.util.Timer.(Timer.java:177) ~[?:?]
at org.spigotmc.Metrics.start(Metrics.java:217) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at org.spigotmc.SpigotConfig.registerCommands(SpigotConfig.java:91) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:149) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:809) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at java.lang.Thread.run(Thread.java:834) [?:?]
[07:57:48] [Server thread/ERROR]: Dit crashrapport is opgeslagen in: /opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [Server thread/INFO]: Stoppen server
[07:57:48] [Server thread/INFO]: Spelers opslaan
[07:57:49] [Server thread/INFO]: Werelden opslaanZoals hieronder uiteengezet (foutafhandeling / onvoldoende geheugen), zelfs als de server OK start, kan hij crashen met fouten wegens gebrek aan geheugenals je het te veel geheugen geeft - daarom houden we het bij een veilige maximaal 2 GB hier. Op een 64 bit OS kan dat hoger zijn, zodat u meer RAM van de Raspberry Pi 4 / 8 GB kunt gebruiken.
Spigot geheugenlimieten op 32 bit Raspberry Pi OS
Spigot zal nu twee nieuwe bestanden genereren (eula.txt & server.properties) en een directory (logs). U zult een fout zien bij de eerste run, omdat de EULA nog niet geaccepteerd is:
Bibliotheken worden geladen, even geduld...
[15:01:09] [main/ERROR]: Mislukt om eigenschappen te laden van bestand: server.properties
[15:01:09] [main/WARN]: Mislukt om eula.txt te laden
[15:01:09] [main/INFO]: U moet akkoord gaan met de EULA om de server te kunnen draaien. Ga naar eula.txt voor meer info.
Als je eula.txt bekijkt, zie je het volgende:
#BDoor de onderstaande instelling op TRUE te zetten, geeft u aan dat u akkoord gaat met onze EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun 22 Nov 15:01:09 CET 2020
eula=valse
Ga naar de website van Mojang en lees de EULA (licentieovereenkomst voor eindgebruikers), voordat u deze daadwerkelijk accepteert.
Hier is hoe je het aanneemt. Start
nano /opt/spigot/eula.txt
En verander de laatste regel zodat er staat
eula=true
Opslaan met Ctrl + O (en druk op Enter), en afsluiten met Ctrl + X
Spigot starten vanaf de commandoregel
Probeer nu het commando uit te voeren om de server opnieuw te starten:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
De Spigot Minecraft server zal nu starten en initialiseren.
Gedurende deze tijd zal uw CPU-belasting bijna 100 % op alle cores zijn:
Tijdens de start wordt enige nuttige informatie getoond (hier een uittreksel):
[15:09:05] [Server thread/INFO]: Start minecraft server versie 1.16.4
[15:09:06] [Server thread/INFO]: Standaard speltype: SURVIVAL
[15:09:09] [Server thread/INFO]: Start Minecraft server op *:25565
De laatste regel hierboven laat zien dat je Minecraft server bindt aan alle IP adressen op de Raspberry Pi, en aan poort 25565 op die IP adressen.
De startup nam 190.812 s (of ongeveer drie minuten) op mijn standaard Raspbery Pi 4 / 8GB. Als het klaar is, zie je een prompt:
Interactie met de Spigot-server
Type
help
op deze prompt (zonder de /), om een lijst van mogelijke commando's te krijgen:
Bijvoorbeeld, met het commando lijstkunt u zien hoeveel spelers er online zijn:
Met de opdracht versiekunt u de huidige versie van uw server zien, en of er een nieuwere server beschikbaar is. Merk op dat u de spigot.jar zal moeten herbouwen om de server te updaten.
Kan het niet bijhouden! Is de server overbelast? De Running achter waarschuwing
U zult hoogstwaarschijnlijk uitvoer zien zoals
[08:06:11] [Server thread/WARN]: Kan het niet bijhouden! Is de server overbelast? Loopt 8444ms of 168 ticks achter
Zoek het IP-adres van uw Raspberry Pi Minecraft-server
Als u niet zeker weet wat het IP-adres van uw Raspberry Pi is, kunt u het eenvoudig vinden door te typen:
ip -4 addr show
Dit zal uitvoer tonen zoals het volgende:
Zoek naar de vermelding eth0 (2 in mijn geval), dat is het LAN op de Raspberry Pi. Het IP adres is het stukje na inet, en voor de schuine streep. In mijn geval is dat 192.168.1.235 :
Verbind met uw Minecraft server
Je hebt (natuurlijk 🙂 Minecraft nodig, die je kunt krijgen van de officiële website van Minecraft. Je hebt de Java versie van Minecraft nodig, zoals eerder besproken.
Als je Minecraft nog niet hebt, en het wilt kopen, moet je een Mojang Account aanmaken. Je krijgt een ontvangst-e-mail bij je aankoop, met daarin de downloadlinks voor Windows, macOS, Linux, Arch Linux en Debian (let op: dit moeten x86-systemen zijn zoals eerder besproken!)
Voor Windows, bijvoorbeeld, krijg je MinecraftInstaller.msi:
Als je Minecraft opstart, krijg je een inlogscherm te zien:
Nadat u bent ingelogd, ziet u een overzichtsscherm, met een afspeelknop.
Nadat het downloaden is voltooid, verschijnt het hoofdscherm van het spel:
Klik hier op Multiplayer. Je krijgt een waarschuwing over online spelen door derden, klik op ga verder hier (optioneel: u kunt ook het vakje laat dit scherm niet meer zien).
Nu krijg je een Windows (als je onder Windows speelt) beveiligingsprompt:
Klik op Toegang hier toestaan ("Zugriff zulassen" in het Duits).
U ziet nu het volgende scherm:
Om snel te beginnen, klik op Directe verbinding, en voer hier het IP adres van uw server in (zie hierboven voor hoe u erachter kunt komen wat het is):
Minecraft zal het IP adres voor de volgende sessie onthouden, en het je automatisch voorstellen
Klik op Join Server. Er wordt verbinding gemaakt, en er verschijnt kort een laadscherm:
ip -4 addr show
Tenslotte zie je het Spelmenu:
Klik op "Terug naar spel" om te beginnen met spelen op je nieuwe Minecraft server!
U kunt op F3 drukken tijdens het spelen, om een overlay met informatie te tonen, waar u kunt zien dat u inderdaad verbonden bent met een Spigot server, en de Minecraft versie kunt controleren:
Output op uw Raspberry Pi Minecraft server
Als je eenmaal verbonden bent, is er wat extra uitvoer op je Minecraft server:
[15:53:32] [User Authenticator #1/INFO]: UUID van speler buyzero is e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [Server thread/INFO]: buyzero[/192.168.1.202:51388] ingelogd met entiteit id 435 op ([world]25.5, 64.0, 137.5)
De opdracht lijst laat nu zien dat er één gebruiker is ingelogd:
[15:57:05] [Server thread/INFO]: Er zijn 1 van de max. 20 spelers online: buyzero
Ook gebeurtenissen met betrekking tot uw spelers zullen worden getoond:
[16:04:24] [Server thread/INFO]: buyzero is gedood door Zombie
Met de opdracht op buyzero kunt u de gebruiker buyzero een server operator maken (vervang uw gebruikersnaam indien nodig):
op buyzero [08:09:18] [Server thread/INFO]: Maakte buyzero een server operator
Het stoppen van de spigot Minecraft server
Als u op de prompt van uw Minecraft-server bent, typt u stop gevolgd door Enter. Dit zal de server stoppen, de wereld opslaan, en u terugbrengen naar de commandoregel prompt:
stop
[08:36:57] [Server thread/INFO]: Stoppen van de server
[08:36:57] [Server thread/INFO]: Stoppen server
[08:36:57] [Server thread/INFO]: Spelers opslaan
[08:36:57] [Server thread/INFO]: buyzero heeft verbinding verloren: Server gesloten
[08:36:57] [Server thread/INFO]: buyzero heeft het spel verlaten
[08:36:57] [Server thread/INFO]: Werelden opslaan
[08:36:57] [Server thread/INFO]: Opslaan van chunks voor level 'ServerLevel[world]'/minecraft:overworld
[08:37:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (wereld): Alle chunks zijn opgeslagen
[08:37:02] [Server thread/INFO]: Chunks opslaan voor level 'ServerLevel[world_nether]'/minecraft:the_nether
[08:37:05] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): Alle chunks zijn opgeslagen
[08:37:05] [Server thread/INFO]: Opslaan van chunks voor level 'ServerLevel[world_the_end]'/minecraft:the_end
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): Alle chunks zijn opgeslagen
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (wereld): Alle chunks zijn opgeslagen
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): Alle chunks zijn opgeslagen
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): Alle chunks zijn opgeslagen
Uw gebruikers krijgen het volgende scherm te zien:
Aanmaken van een systemd service
https://github.com/sindastra/systemd-minecraft
Foutafhandeling
onvoldoende geheugen
De schermafbeelding hierboven toont de foutmelding die de spelers die verbinding maken met je server te zien krijgen, terwijl je aan de serverkant de volgende logoutput te zien krijgt:
Er is onvoldoende geheugen voor de Java Runtime Environment om door te gaan.
Native geheugentoewijzing (malloc) slaagde er niet in 1438248 bytes toe te wijzen voor Chunk::new
Een fout rapport bestand met meer informatie is opgeslagen als:
/opt/spigot/hs_err_pid1531.log
Compiler replay gegevens worden opgeslagen als:
/opt/spigot/replay_pid1531.log
In dit geval moet u uw geheugeninstellingen aanpassen. Volgens de de aanbeveling van dit artikel, zou het ongeveer 1000 MB tot 1500 MB lager moeten zijn dan het beschikbare systeemgeheugen op je Raspberry Pi. Bedenk, dat voor een 32bit OS het proces slechts iets minder dan 4 GB RAM in totaal kan aanspreken, dus zelfs met een 32bit Raspberry Pi, moet het totaal dat u aan uw Minecraft server geeft minder dan 2500 MB - 2000 MB zijn om aan de veilige kant te zijn (2GB).
Conclusie
Als u deze gids volgt, kunt u uw eigen Raspberry Pi Minecraft-servers draaien en samen met uw vrienden spelen.
Referenties / Verdere lectuur
- Een beetje geschiedenis van Minecraft Servers (meestal Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (Minecraft Java Editie server gemeenschap)
- Spigot Installatiegids (Spigotmc.org)
[Je kunt een Raspberry Pi gebruiken als webserver, bestandsserver, printserver, mediaserver, Minecraft-server en IoT-server [...].