Så här ställer du in en Minecraft-server på en Raspberry Pi
Minecraft är ett av de mest populära spelen som någonsin skapats. Du kan spela det med dina vänner i flerspelarläget. Visste du att en Raspberry Pi 4 är tillräckligt kraftfull för att driva en Minecraft-server? I den här artikeln får du lära dig grunderna om vilka olika varianter som finns, lite om Minecrafts historia och hur du sätter upp och driver din egen Minecraft-server på din Raspberry Pi.
Historien om Minecrafts servrar
För att tala om Minecraft-servrar måste vi kort diskutera de två "stora" gafflarna av Minecraft.
Mojang, skaparna av Minecraft, skapade Minecraft ursprungligen i Java.
En rolig sidoanteckning: Även om Java ska vara riktigt portabelt ("skriv en gång och kör var som helst") är spelet beroende av infödda bibliotek som är x86-baserade. Detta innebär att Java-versionen av Minecraft inte kan köras på andra plattformar, som Raspberry Pi. Raspberry Pi är ARM-baserad (ARMv6 / ARMv7 / ARMv8, beroende på vilken Raspberry Pi du tittar på).
Raspi Berry's Java-förklaringar
Den här Java Minecraft-versionen kan köras på PC, Mac och Linux (x86).
Följaktligen finns det serverprogramvara som är kompatibel med Java-utgåvan (se nedan för en fullständig diskussion om de olika tillgängliga alternativen).
En andra version av Minecraft, skriven från grunden, kallades MCPE (Minecraft Pocket Edition). Den fanns ursprungligen på Android och var skriven på följande språk C++. Den här utgåvan har anpassats till Windows 10, iOS, PlayStation 4, XBox och Nintendo Switch. Den är nu känd som Minecraft Bedrock edition. (Bedrock är den motor som är skriven i C++). Detta är nu huvudversionen, som inkluderar spel på flera plattformar.
Tyvärr är Bedrock-utgåvan inte kompatibel med Java-utgåvan. Detta innebär att Mac- och Linux-spelare inte kan delta i det plattformsoberoende spelet med den.
Viktigare är att det krävs en egen serverprogramvara, som vi kommer att gå igenom kortfattat nedan.
Installation av Spigot på Raspberry Pi OS 32 bit
Detta kommer att leda dig genom installationen av Spigot. Jag använder en Raspberry Pi 4 med 8 GB för detta, med standard 32-bitars operativsystem till att börja med.
Förbered installationen
Öppna en terminal och kör följande kommandon:
sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build
Detta uppdaterar paketlistan och installerar git och OpenJDK 8 (Java Runtime Environment, JRE). Dessutom skapas en ny katalog för att bygga Spigot, och den kommer att ändras till den.
Ladda sedan ner den senaste versionen av BuildTools.jar från webbplatsen SpigotMC. Du kan använda wget för detta:
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
Detta är en snabb nedladdning på cirka 4 MB.
Bygg spigot
Börja nu med att bygga:
java -jar BuildTools.jar
Jag har börjat bygga på 13:00, med min Raspberry Pi 4 8GB, och det slutade på ca. 13:15 - så det tog ungefär en timme och 15 minuter. Här är en skärmdump av det första resultatet du kommer att se:
Byggprocessen använder flera kärnor på din Raspberry Pi:
Och här är den sista skärmen som du kommer att se:
När byggningen är klar ser du var den färdiga Spigot server .jar-filen sparades. I mitt fall (eftersom den har byggt spigot-1.16.4.jar) är det:
/home/pi/spigot-build/./spigot-1.16.4.jar
De återstående filerna behövs inte längre, vi behöver bara den slutliga spigot-*.jar
Installera din nya Minecraft-server
Jag föreslår att du installerar Minecraft-servern i /opt-kataloghierarkin. Låt oss göra det i nästa steg, och döpa om .jar-filen till bara 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
Det sista kommandot ändrar ägaren till katalogen till användaren pi, vilket gör det lättare för dig att komma igång med de nödvändiga rättigheterna utan att behöva skapa en ny användare. För ett system som används av flera personer, och för extra säkerhet/kontroll över rättigheter, kanske du vill skapa en egen systemanvändare att köra spigot under.
säkerhetstips
Nu kan du försöka starta din nya Minecraft-server och tilldela den 2 GB RAM-minne:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Att tilldela mer än 2700M till spigot på ett 32bit Raspberry Pi OS har lett till att servern inte startar för mig:
[47.195s][varning][os,tråd] Misslyckades med att starta tråd - pthread_create misslyckades (EAGAIN) för attribut: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [Servertråd/ERROR]: Det finns ett oväntat undantag.
java.lang.OutOfMemoryError: kan inte skapa en inhemsk tråd: möjligen slut på minne eller process-/resursgränserna har nåtts.
at java.lang.Thread.start0(Inhemska metoden) ~[?:?]
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] [Servertråd/ERROR]: Den här kraschrapporten har sparats till: /opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [Servertråd/INFO]: Stoppar servern
[07:57:48] [Servertråd/INFO]: Spara spelare
[07:57:49] [Servertråd/INFO]: Spara världarSåsom beskrivs nedan (felhantering / otillräckligt minne), Även om servern startar OK kan den krascha med fel i minnet.om du ger den för mycket minne - det är därför vi håller oss till en säker högst 2 GB här. På ett 64-bitars operativsystem kan det vara högre, så att du kan använda mer av Raspberry Pi 4/8 GB:s RAM-minne.
Spigot minnesgränser på 32 bitars Raspberry Pi OS
Spigot kommer nu att generera två nya filer (eula.txt & egenskaper för server.properties) och en katalog (loggar). Du kommer att se ett fel vid den första körningen, eftersom EULA inte har godkänts ännu:
Laddar bibliotek, vänligen vänta...
[15:01:09] [main/ERROR]: misslyckades med att läsa in egenskaper från filen: server.properties
[15:01:09] [main/WARN]: misslyckades med att ladda eula.txt
[15:01:09] [main/INFO]: Du måste godkänna EULA för att kunna köra servern. Gå till eula.txt för mer information.
Om du tittar på eula.txt ser du följande:
# Genom att ändra inställningen nedan till TRUE anger du att du godkänner vår EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Nov 22 15:01:09 CET 2020
eula=false
Gå gärna till Mojangs webbplats och läsa EULA (licensavtal för slutanvändare) innan du accepterar det.
Så här accepterar du det. Kör
nano /opt/spigot/eula.txt
Ändra den sista raden så att den lyder
eula=true
Spara med Ctrl + O (och tryck Enter) och avsluta med Ctrl + X.
Starta Spigot från kommandoraden
Försök nu att köra kommandot för att starta servern igen:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Spigot Minecraft-servern kommer nu att starta och initialiseras.
Under denna tid kommer din CPU-belastning att vara nära 100 % på alla kärnor:
Under starten visas en del användbar information (utdrag här):
[15:09:05] [Servertråd/INFO]: Startar Minecraft-server version 1.16.4
[15:09:06] [Servertråd/INFO]: Standardspeltyp: ÖVERLEVNAD
[15:09:09] [Servertråd/INFO]: Startar Minecraft-server på *:25565
Den sista raden ovan visar att din Minecraft-server binder sig till alla IP-adresser på Raspberry Pi och till Port 25565 på dessa IP-adresser.
Den nystartade verksamheten tog 190.812 s (eller cirka tre minuter) på min Raspbery Pi 4 / 8GB. När den är klar får du se en uppmaning:
Interagera med Spigot-servern
Typ
help
vid denna uppmaning (utan /) för att få en lista över möjliga kommandon:
Till exempel, med kommandot listakan du se hur många spelare som är online:
Användning av kommandot versionkan du se den aktuella versionen av din server och om en nyare server är tillgänglig. Observera att du måste bygga om spigot.jar för att uppdatera servern.
Kan inte hänga med! Är servern överbelastad? Löpningen bakom varningen
Du kommer troligen att se en utskrift som
[08:06:11] [Servertråd/WARN]: Kan inte hänga med! Är servern överbelastad? Den ligger 8444ms eller 168 ticks efter.
Hitta din Raspberry Pi Minecraft-servers IP-adress
Om du inte är säker på vad din Raspberry Pis IP-adress är kan du enkelt hitta den genom att skriva:
ip -4 addr show
Detta kommer att visa en utskrift som liknar följande:
Leta efter eth0-posten (2 i mitt fall), som är Raspberry Pis LAN. IP-adressen är biten efter inet och före snedstrecket. I mitt fall 192.168.1.235 :
Anslut till din Minecraft-server
Du behöver (förstås 🙂 Minecraft, som du kan få tag på från den officiella Minecraft-webbplatsen. Du behöver Java-versionen av Minecraft, som vi diskuterade tidigare.
Om du inte har Minecraft ännu och vill köpa det måste du skapa ett Mojang-konto. Du kommer att få ett e-postkvitto med ditt köp, som innehåller nedladdningslänkar för Windows, macOS, Linux, Arch Linux och Debian (observera att dessa måste vara x86-system som vi diskuterade tidigare!).
För Windows får du till exempel MinecraftInstaller.msi:
När du startar Minecraft visas en inloggningsskärm:
När du har loggat in visas en översiktsskärm med en uppspelningsknapp.
När nedladdningen är klar visas spelets huvudskärm:
Klicka på Multiplayer här. Du kommer att få en varning om onlinespel från tredje part, klicka på Fortsätt här (valfritt: du kan också kryssa i rutan Visa inte den här skärmen igen.).
Nu får du en säkerhetsprövning från Windows (om du spelar i Windows):
Klicka på Tillåt åtkomst här ("Zugriff zulassen" på tyska).
Du får nu följande bildskärm:
Om du vill komma igång snabbt klickar du på Direktanslutning och anger serverns IP-adress här (se ovan för hur du tar reda på den):
Minecraft kommer att komma ihåg IP-adressen för nästa session och föreslår den automatiskt.
Klicka på Join Server. Den ansluter och visar kort en laddningsskärm:
ip -4 addr show
Slutligen visas spelmenyn:
Klicka på "Tillbaka till spelet" för att börja spela på din nya Minecraft-server!
Du kan trycka på F3 när du spelar för att visa en överlagring med information, där du kan se att du verkligen är ansluten till en Spigot-server och kontrollera Minecraft-versionen:
Utskrift på din Minecraft-server på Raspberry Pi
När du har anslutit dig finns det ytterligare en del utdata på din Minecraft-server:
[15:53:32] [Användarautentiserare #1/INFO]: UUID för spelaren buyzero är e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [Servertråd/INFO]: buyzero[/192.168.1.202:51388] loggade in med entitetsid 435 på ([world]25.5, 64.0, 137.5)
Kommandot lista visar nu att en användare är inloggad:
[15:57:05] [Servertråd/INFO]: Det finns 1 av högst 20 spelare online: buyzero
Dessutom visas händelser som rör dina spelare:
[16:04:24] [Servertråd/INFO]: buyzero dödades av Zombie
Användning av kommandot op buyzero kan du göra användaren buyzero till serveroperatör (byt ut ditt användarnamn på lämpligt sätt):
op buyzero [08:09:18] [Servertråd/INFO]: Buyzero blev en serveroperatör
Stoppa Minecraft-servern för spigot
Om du befinner dig på din Minecraft-server skriver du följande stoppa följt av Enter. Detta stoppar servern, sparar världen och återvänder till kommandoradsinställningarna:
stoppa
[08:36:57] [Servertråd/INFO]: Stoppar servern
[08:36:57] [Servertråd/INFO]: Stoppar servern
[08:36:57] [Servertråd/INFO]: Spara spelare
[08:36:57] [Servertråd/INFO]: buyzero förlorade anslutningen: Server stängd
[08:36:57] [Servertråd/INFO]: buyzero lämnade spelet
[08:36:57] [Servertråd/INFO]: Spara världar
[08:36:57] [Servertråd/INFO]: Spara delar för nivån 'ServerLevel[world]'/minecraft:overworld
[08:37:02] [Servertråd/INFO]: ThreadedAnvilChunkStorage (world): Alla delar är sparade
[08:37:02] [Servertråd/INFO]: Spara delar för nivån 'ServerLevel[world_nether]'/minecraft:the_nether
[08:37:05] [Servertråd/INFO]: ThreadedAnvilChunkStorage (DIM-1): Alla delar är sparade
[08:37:05] [Servertråd/INFO]: Spara delar för nivån 'ServerLevel[world_the_end]'/minecraft:the_end
[08:37:10] [Servertråd/INFO]: ThreadedAnvilChunkStorage (DIM1): Alla delar är sparade
[08:37:10] [Servertråd/INFO]: ThreadedAnvilChunkStorage (world): Alla delar är sparade
[08:37:10] [Servertråd/INFO]: ThreadedAnvilChunkStorage (DIM-1): Alla delar är sparade
[08:37:10] [Servertråd/INFO]: ThreadedAnvilChunkStorage (DIM1): Alla delar är sparade
Användarna kommer att se följande skärm:
Skapa en systemd-tjänst
https://github.com/sindastra/systemd-minecraft
Hantering av fel
otillräckligt minne
Skärmbilden ovan visar felmeddelandet som spelarna som ansluter till din server kommer att se, medan du på serversidan ser följande loggutgång:
Det finns inte tillräckligt med minne för att Java Runtime Environment ska kunna fortsätta.
Den ursprungliga minnesallokeringen (malloc) misslyckades med att allokera 1438248 bytes för Chunk::new
En felrapportfil med mer information sparas som:
/opt/spigot/hs_err_pid1531.log
Uppspelningsdata från kompilatorn sparas som:
/opt/spigot/replay_pid1531.log
I det här fallet måste du justera dina minnesinställningar. Enligt denna artikels rekommendationDet bör vara ungefär 1000 till 1500 MB mindre än det systemminne som finns tillgängligt på din Raspberry Pi. Tänk på att processen för ett 32-bitars operativsystem endast kan hantera lite mindre än 4 GB RAM totalt, så även med en 32-bitars Raspberry Pi bör den totala mängden som du ger till din Minecraft-server vara mindre än 2500 MB - 2000 MB för att vara på den säkra sidan (2 GB).
Slutsats
Om du följer den här guiden kan du köra dina egna Raspberry Pi Minecraft-servrar och spela tillsammans med dina vänner.
Referenser / Ytterligare läsning
- Lite historia om Minecraft-servrar (främst Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (servergemenskap för Minecraft Java Edition)
- Installationsguide för spikstuds (Spigotmc.org)
[...] du kan använda en Raspberry Pi som en webbserver, en filserver, en utskriftsserver, en medieserver, en Minecraft-server och en IoT [...].