Come impostare un server Minecraft su un Raspberry Pi
Minecraft è uno dei giochi più popolari mai creati. Potete giocarci con i vostri amici in modalità multiplayer. Sapevate che un Raspberry Pi 4 è abbastanza potente per eseguire un server Minecraft? In questo articolo, imparerete le basi di quali diverse varianti esistono, un po' della storia di Minecraft, e come impostare e far funzionare il vostro server Minecraft sul vostro Raspberry Pi.
La storia dei server Minecraft
Per parlare dei server di Minecraft, dobbiamo discutere brevemente i due "grandi" fork di Minecraft.
Mojang, i creatori di Minecraft, ha originariamente creato Minecraft in Java.
Nota a margine: anche se Java dovrebbe essere davvero portatile ("scrivi una volta ed esegui ovunque"), il gioco dipende da librerie native che sono x86. Questo significa che la versione Java di Minecraft non funzionerà su altre piattaforme, come il Raspberry Pi. Il Raspberry Pi è basato su ARM (ARMv6 / ARMv7 / ARMv8, a seconda di quale Raspberry Pi guardi).
Spiegazioni Java di Raspi Berry
Questa versione Java di Minecraft funziona su PC, Mac e Linux (x86).
Di conseguenza, esiste un software server compatibile con l'edizione Java (vedi sotto per una discussione completa delle diverse scelte disponibili).
Una seconda versione di Minecraft, scritta da zero, si chiamava MCPE (Minecraft Pocket Edition). È apparso originariamente su Android, ed è stato scritto in C++. Questa edizione è stata portata su Windows 10, iOS, PlayStation 4, XBox e Nintendo Switch. Ora è conosciuto come Minecraft Bedrock edizione. (Bedrock si riferisce al motore scritto in C++). Questa è ora la versione principale, incluso il gioco multipiattaforma.
Purtroppo l'edizione Bedrock non è compatibile con l'edizione Java. Questo significa che i giocatori Mac e Linux non possono partecipare al gioco multipiattaforma con esso.
Ancora più importante, richiede un proprio software di server, che approfondiremo brevemente più avanti.
Installazione di Spigot su Raspberry Pi OS 32 bit
Questo vi guiderà attraverso l'installazione di Spigot. Io uso un Raspberry Pi 4 da 8 GB per questo, con il sistema operativo predefinito a 32 bit per cominciare.
Preparare l'installazione
Aprite un terminale ed eseguite i seguenti comandi:
sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build
Questo aggiornerà la lista dei pacchetti e installerà git e OpenJDK 8 (Java Runtime Environment, JRE). Inoltre, creerà una nuova directory per la costruzione di Spigot, e si cambierà in essa.
Poi, scaricate il più recente BuildTools.jar dal sito web di SpigotMC. Puoi usare wget per questo:
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
Questo è un download veloce con circa 4 MB.
Costruire il rubinetto
Ora inizia la costruzione:
java -jar BuildTools.jar
Ho iniziato la costruzione a 13:00usando il mio Raspberry Pi 4 8GB, e ha finito a circa 13:15 - quindi ci è voluta circa un'ora e 15 minuti. Ecco uno screenshot dell'output iniziale che vedrete:
Il processo di compilazione utilizza più core sul tuo Raspberry Pi:
Ed ecco la schermata finale che vedrete:
Una volta che la compilazione è finita, vedrai dove è stato salvato il file .jar del server Spigot finito. Nel mio caso (dato che ha costruito spigot-1.16.4.jar), è:
/home/pi/spigot-build/./spigot-1.16.4.jar
I file rimanenti non sono più necessari, abbiamo solo bisogno dello spigot-*.jar finale
Installare il nuovo server Minecraft
Suggerisco di installare il server Minecraft nella directory /opt. Lo faremo nel prossimo passo e rinomineremo il file .jar semplicemente in 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
L'ultimo comando cambia il proprietario di questa directory nell'utente pi, che renderà più facile per voi iniziare con i diritti necessari, senza dover creare un nuovo utente. Per un sistema usato da più persone, e per una maggiore sicurezza/controllo sui diritti, potreste voler creare il vostro utente di sistema sotto il quale eseguire spigot.
consiglio di sicurezza
Ora potete provare ad avviare il vostro nuovo server Minecraft, assegnandogli 2 GB di RAM:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Allocare più di 2700M a spigot su un sistema operativo Raspberry Pi a 32bit ha fatto sì che il server non si avviasse per me:
[47.195s][warning][os,thread] Fallito l'avvio del thread - pthread_create fallito (EAGAIN) per gli attributi: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [thread del server/ERRORE]: Incontrata un'eccezione inaspettata
java.lang.OutOfMemoryErrorImpossibile creare un thread nativo: probabilmente la memoria è esaurita o sono stati raggiunti i limiti di processo/risorse
in java.lang.Thread.start0(metodo nativo) ~[?:?]
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] [thread del server/ERRORE]: Questo rapporto di crash è stato salvato in: /opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [thread/INFO del server]: Arresto del server
[07:57:48] [Filetto del server/INFO]: Salvataggio dei giocatori
[07:57:49] [Filetto del server/INFO]: Salvare i mondiCome indicato di seguito (gestione degli errori / memoria insufficiente), anche se il server parte bene, potrebbe bloccarsi con errori di memoria esauritase gli date troppa memoria - ecco perché ci atteniamo a un sicuro massimo di 2 GB qui. Su un sistema operativo a 64 bit che può essere più alto, in modo da poter utilizzare più della RAM del Raspberry Pi 4 / 8 GB.
Limiti di memoria di Spigot su 32 bit Raspberry Pi OS
Spigot genererà ora due nuovi file (eula.txt & server.properties) e una directory (registri). Vedrete un errore alla prima esecuzione, perché l'EULA non è stato ancora accettato:
Caricamento delle librerie, attendere prego...
[15:01:09] [main/ERROR]: Fallito il caricamento delle proprietà dal file: server.properties
[15:01:09] [main/WARN]: Fallito il caricamento di eula.txt
[15:01:09] [main/INFO]: Devi accettare l'EULA per far funzionare il server. Vai su eula.txt per maggiori informazioni.
Se date un'occhiata a eula.txt, vedrete quanto segue:
#B Cambiando l'impostazione qui sotto su TRUE stai indicando il tuo consenso al nostro EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Nov 22 15:01:09 CET 2020
eula=falso
Andate sul sito web di Mojang e leggere l'EULA (accordo di licenza con l'utente finale), prima di accettarlo effettivamente.
Ecco come accettarlo. Esegui
nano /opt/spigot/eula.txt
E modificare l'ultima riga per leggere
eula=true
Salvare con Ctrl + O (e premere Invio), ed uscire con Ctrl + X
Avviare Spigot dalla riga di comando
Ora provate ad eseguire il comando per avviare nuovamente il server:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Il server Spigot Minecraft verrà avviato e inizializzato.
Durante questo periodo, il carico della CPU sarà vicino a 100 % su tutti i core:
Durante l'avvio, verranno mostrate alcune informazioni utili (estratte qui):
[15:09:05] [thread/INFO del server]: Avvio del server minecraft versione 1.16.4
[15:09:06] [Filetto del server/INFO]: Tipo di gioco predefinito: SURVIVAL
[15:09:09] [thread/INFO del server]: Avvio del server Minecraft su *:25565
L'ultima linea citata sopra mostra che il vostro server Minecraft si lega a tutti gli indirizzi IP sul Raspberry Pi, e a porta 25565 su quegli indirizzi IP.
La startup ha preso 190.812 s (o circa tre minuti) sul mio Raspbery Pi 4 / 8GB stock. Una volta che ha finito, vedrai un prompt:
Interazione con il server Spigot
Tipo
help
a questo prompt (senza il /), per ottenere una lista di possibili comandi:
Per esempio, con il comando elenco, puoi vedere quanti giocatori sono online:
Usando il comando versioneè possibile vedere la versione corrente del vostro server e se è disponibile un server più recente. Nota che dovrai ricostruire il file spigot.jar per aggiornare il server.
Non si riesce a tenere il passo! Il server è sovraccarico? La corsa dietro l'avviso
Molto probabilmente vedrete un output come
[08:06:11] [Discussione sul server/WARN]: Non riesco a tenere il passo! Il server è sovraccarico? Sta girando a 8444ms o 168 ticks indietro
Trova l'indirizzo IP del tuo server Raspberry Pi Minecraft
Se non siete sicuri di quale sia l'indirizzo IP del vostro Raspberry Pi, potete semplicemente trovarlo digitando:
ip -4 addr show
Questo mostrerà un output simile al seguente:
Cerca la voce eth0 (2 nel mio caso), che è la LAN sul Raspberry Pi. L'indirizzo IP è il bit dopo inet, e prima della barra. Nel mio caso 192.168.1.235 :
Collegati al tuo server Minecraft
Avrete (ovviamente 🙂 bisogno di Minecraft, che potete ottenere da il sito ufficiale di Minecraft. Avete bisogno della versione Java di Minecraft, come discusso in precedenza.
Se non hai ancora Minecraft e hai bisogno di comprarlo, dovrai creare un account Mojang. Riceverai una e-mail di ricevuta con il tuo acquisto, che include i link per il download per Windows, macOS, Linux, Arch Linux e Debian (nota che questi devono essere sistemi x86 come discusso prima!)
Per Windows, per esempio, otterrete MinecraftInstaller.msi:
All'avvio di Minecraft, ti verrà presentata una schermata di accesso:
Dopo aver effettuato l'accesso, vedrai una schermata riassuntiva, con un pulsante di riproduzione.
Dopo che il download è finito, apparirà la schermata principale del gioco:
Clicca su Multiplayer qui. Riceverai un avvertimento sul gioco online di terze parti, clicca su procedere qui (opzionale: puoi anche spuntare la casella non mostrare più questa schermata).
Ora avrete un prompt di sicurezza di Windows (se state giocando su Windows):
Clicca su Consenti accesso qui ("Zugriff zulassen" in tedesco).
Ora vedrete la seguente schermata:
Per iniziare rapidamente, clicca su Connessione diretta e inserisci qui l'indirizzo IP del tuo server (vedi sopra come scoprire qual è):
Minecraft ricorderà l'indirizzo IP per la prossima sessione e te lo suggerirà automaticamente
Clicca su Join Server. Si connetterà e mostrerà brevemente una schermata di caricamento:
ip -4 addr show
Infine, vedrete il menu di gioco:
Clicca su "Back to Game" per iniziare a giocare sul tuo nuovo server Minecraft!
Puoi premere F3 mentre giochi, per mostrare un overlay con informazioni, dove puoi vedere che sei effettivamente connesso a un server Spigot, e controllare la versione di Minecraft:
Uscita sul tuo server Raspberry Pi Minecraft
Una volta che ti sei connesso, ci sono alcuni output aggiuntivi sul tuo server Minecraft:
[15:53:32] [Autenticatore utente #1/INFO]: UUID del giocatore buyzero è e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [Server thread/INFO]: buyzero[/192.168.1.202:51388] si è connesso con l'entità id 435 a ([mondo]25.5, 64.0, 137.5)
Il comando elenco ora mostra che un utente è loggato:
[15:57:05] [Filetto/INFO del server]: Ci sono 1 di un massimo di 20 giocatori online: buyzero
Inoltre, verranno mostrati gli eventi relativi ai tuoi giocatori:
[16:04:24] [Server thread/INFO]: buyzero è stato ucciso da Zombie
Usando il comando op buyzero puoi rendere l'utente buyzero un operatore del server (sostituisci il tuo nome utente come appropriato):
op buyzero [08:09:18] [thread/INFO del server]: Reso buyzero un operatore del server
Fermare il server Minecraft del rubinetto
Se sei al prompt del tuo server Minecraft, digita fermare seguito da Invio. Questo fermerà il server, salverà il mondo e tornerà al prompt della linea di comando:
fermare
[08:36:57] [Filetto del server/INFO]: Arresto del server
[08:36:57] [Filetto del server/INFO]: Arresto del server
[08:36:57] [Filetto del server/INFO]: Salvataggio dei giocatori
[08:36:57] [Server thread/INFO]: buyzero ha perso la connessione: Server chiuso
[08:36:57] [Server thread/INFO]: buyzero ha lasciato il gioco
[08:36:57] [thread/INFO del server]: Salvare i mondi
[08:36:57] [thread/INFO del server]: Salvataggio dei chunks per il livello 'ServerLevel[world]'/minecraft:overworld
[08:37:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (mondo): Tutti i chunks sono salvati
[08:37:02] [Filetto del server/INFO]: Salvataggio chunks per il livello 'ServerLevel[world_nether]'/minecraft:the_nether
[08:37:05] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): Tutti i chunks sono salvati
[08:37:05] [thread/INFO del server]: Salvataggio chunks per il livello 'ServerLevel[world_the_end]'/minecraft:the_end
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): Tutti i chunks sono salvati
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (mondo): Tutti i chunks sono salvati
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): Tutti i chunks sono salvati
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): Tutti i chunks sono salvati
I vostri utenti vedranno la seguente schermata:
Creare un servizio systemd
https://github.com/sindastra/systemd-minecraft
Gestione degli errori
memoria insufficiente
Lo screenshot qui sopra mostra il messaggio di errore che i giocatori che si connettono al tuo server vedranno, mentre sul lato server, vedrai il seguente output di log:
La memoria è insufficiente per il Java Runtime Environment per continuare.
L'allocazione della memoria nativa (malloc) non è riuscita ad allocare 1438248 byte per Chunk::new
Un file di rapporto di errore con più informazioni è salvato come:
/opt/spigot/hs_err_pid1531.log
I dati di replay del compilatore sono salvati come:
/opt/spigot/replay_pid1531.log
In questo caso è necessario modificare le impostazioni della memoria. Come per la raccomandazione di questo articolo, dovrebbe essere circa 1000 MB a 1500 MB inferiore alla memoria di sistema disponibile sul vostro Raspberry Pi. Considera che per un sistema operativo a 32bit il processo può indirizzare solo un po' meno di 4 GB di RAM in totale, quindi anche con un Raspberry Pi a 32bit, il totale che dai al tuo server Minecraft dovrebbe essere meno di 2500 MB - 2000 MB per essere sul sicuro (2GB).
Conclusione
Seguendo questa guida, sarete in grado di eseguire i vostri server Raspberry Pi Minecraft e giocare insieme ai vostri amici.
Riferimenti / Ulteriori letture
- Un po' di storia dei server di Minecraft (soprattutto Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (comunità di server Minecraft Java Edition)
- Guida all'installazione del rubinetto (Spigotmc.org)
[...] è possibile utilizzare un Raspberry Pi come server web, file server, server di stampa, media server, server Minecraft e IoT [...]