Server Minecraft Bedrock con Linux
Amate Minecraft? I vostri figli amano Minecraft? Volete giocare o farli giocare on line in un ambiente controllato? Create un server tutto vostro.
Server Java o server Bedrock?
Esistono due tipi di server Minecraft:
- Java: permette il collegamento a tutti quelli utenti che usano la versione Java di Minecraft
- Bedrock: permette il collegamento a tutti gli utenti compresi quelli che hanno una versione mobile del gioco.
Avendo acquistato la versione mobile del gioco ho scelto la versione Bedrock.
Prerequisiti
Il tutorial (vedi fonte) che ho seguito viene segnalato come funzionante con Ubuntu (e derivate) ma ho installato il tutto con successo su una Debian 11.
Per prima cosa è necessario installare alcuni pacchetti
sudo apt install curl wget unzip grep screen openssl -y
Curl e wget sono utili al download dell'archivio contenente il server, unzip ha un nome piuttosto esplicativo mentre screen ci servirà per interagire con il server.
Un server è un servizio particolare, per motivi di sicurezza è bene non farlo operare con pieni poteri, creiamo quindi un utente per il nostro servizio:
sudo useradd mcserver
Assieme all'utente abbiamo creato anche un gruppo nel quale inseriamo il nostro utente preferito che per comodità deve poter operare con i file:
sudo usermod -a -G mcserver $USER
Per rendere effettive le modifiche dobbiamo effettuare il logout, non è necessario un riavvio.
Installazione del Server
Creiamo una cartella dalla quale eseguire il server, io ho optato per una subdirectory di /opt
sudo mkdir -p /opt/minecraft_bedrock
L'opzione -p fa si che non vengano mostrati errori se la directory esiste già.
Adesso possiamo scaricare il pacchetto utilizzando curl e wget. Il primo comando serve a settare una serie di parametri che ci permetteranno di scaricare da linea di comando come se fossimo da web, con tanto di accettazione della licenza, il secondo per il download vero e proprio (all'interno della cartella da noi specificata):
'DOWNLOAD_URL=$(curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)" https://minecraft.net/en-us/download/server/bedrock/ | grep -o 'https://minecraft.azureedge.net/bin-linux/[^"]*')
sudo wget $DOWNLOAD_URL -O /opt/minecraft_bedrock/bedrock-server.zip
Scompattiamo il pacchetto all'interno della nostra cartella:
sudo unzip /opt/minecraft_bedrock/bedrock-server.zip -d /opt/minecraft_bedrock/
Per i motivi di sicurezza di cui sopra cambiamo il proprietario dei file all'interno della cartella (utente mcserver, gruppo mcserver)
sudo chown -R mcserver:mcserver /opt/minecraft_bedrock
L'opzione -R ha il significato di recursive quindi si applica i permessi a tutti i file di tutte le sotto cartelle
Aggiornamento del 21/10/2024
Il file zip non è più hostato su azure ma è stato spostato sul server minecraft.net, è necessario aggiornare i comandi per il download:
DOWNLOAD_URL=$(curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)" https://www.minecraft.net/en-us/download/server/bedrock/ | grep -o 'https://www.minecraft.net/bedrockdedicatedserver/bin-linux/[^"]*')
Per scaricare il file dal server minecraft.net serve l'autenticazione quindi abbiamo abbandonato wget in favore di curl:
curl -o /opt/bedrock-server.zip $DOWNLOAD_URL -H "Accept-Encoding: identity" -H "Accept-Language: en" -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)"
Configurare il server
Adesso possiamo configurare il nostro server, si opera direttamente sul file di configurazione (un semplice file di testo):
sudo nano /opt/minecraft_bedrock/server.properties
Per la configurazione completa vi rimando alla documentazione ufficiale, vediamo però le opzioni più comuni:
- server-name non è il nome vero e proprio ma la descrizione che gli utenti vedranno prima di collegarsi
- gamemode è la modalità di gioco predefinita possiamo scegliere fra creative, survival e adventure
- force-gamemode se true il gamemode è fisso se false l'utente può scegliere
- difficulty possiamo usare peaceful (senza mostri), easy, normal e hard
- level-name è il nome vero e proprio del nostro mondo, il server creerà una cartella omonima in /opt/minecraft-bedrock/worlds
- allow-cheats se true i trucchi sono abilitati, consiglio di abilitarli il gioco diventa più divertente
- max-players è il numero massimo di utenti che possiamo far connettere, ovviamente più utenti vogliamo più potente deve essere la macchina dove gira il server
- online-mode se true per connettersi serve un account xbox live se false non è necessario
Avviare il server
E' arrivato il momento possiamo provare il nostro server, avviiamolo:
cd /opt/minecraft_bedrock
sudo LD_LIBRARY_PATH=. ./bedrock_server
Prima di avviare il server abbiamo settato la cartella dalla quale leggere le librerie di sistema.
Se tutto è andato per il verso giusto il nostro terminale mostra una serie di messaggi e rimane occupato. Nei messaggi possiamo leggere buona parte delle impostazioni che abbiamo settato e la porta di connessione (di default 19132) Anche se non mostra un prompt il terminale accetta i comandi minecraft, per fermare il server possiamo digitare stop.
Connessione
Apriamo l'applicazione Minecraft sul nostro dispositivo preferito e selezioniamo Gioca dopo di che la scheda Server.
Scorrendo alla fine della videata troviamo Aggiungi Server, qui possiamo inserire
- il nome che vogliamo visualizzare in Minecraft per il nostro server
- l'indirizzo IP della macchina che fa da server (reperibili con il comando hostname -I) oppure il dominio
- la porta che se lasciata di default è 19132
Con Salva (e accettando alcune condizioni) nella lista dei server appare una nuova voce selezioniamola e clicchiamo Entra nel server (se tutto funziona vediamo quanti utenti sono collegati al server e abbiamo un valore di ping).
Attendiamo qualche secondo così che il server ed il client creino il mondo.
Si gioca.
Nota: perché l tutto funzioni il server ed il client devono avere lo stesso numero di versione.
Avvio automatico del server
Se abbiamo un server dedicato o una macchina che rimane online è conveniente far partire il server all'avvio della macchina, vediamo come
Script di avvio
Nella cartella /opt creiamo uno script:
sudo nano /opt/start_server.sh
#!/usr/bin/env bash
SERVER_PATH=/opt/minecraft_bedrock
/usr/bin/screen -dmS mcbedrock /bin/bash -c "LD_LIBRARY_PATH=$SERVER_PATH ${SERVER_PATH}bedrock_server"
/usr/bin/screen -rD mcbedrock -X multiuser on
/usr/bin/screen -rD mcbedrock -X acladd root
Se facciamo partire il server con uno script non possiamo interagirvi quindi dobbiamo ricorrere a screen che crea un terminale "virtuale" richiamabile alla bisogna.
Diamo allo script i permessi di esecuzione:
sudo chmod +x /opt/start_server.sh
Script di stop
Necessitiamo anche di uno script che stoppi i servizio (nel caso volessimo fermarlo/riavviarlo)
sudo nano /opt/stop_server.sh
Lo scipt è il seguente:
#!/usr/bin/env bash
/usr/bin/screen -Rd mcbedrock -X stuff "stop \r"
Anche qui diamo i permessi di esecuzione:
sudo chmod +x /opt/stop_server.sh
Creiamo il servizio
Facciamo si che l'utente mcserver possa usare gli script
sudo chown mcserver: /opt/*.sh
I servizi saranno oggetto di un tutorial specifico quindi per adesso commenterò i comandi al minimo
sudo nano /etc/systemd/system/mcbedrock.service
Nel file scriviamo:
[Unit]
Description=Minecraft Bedrock Server
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
User=mcserver
Group=mcserver
ExecStart=/usr/bin/bash /opt/start_server.sh
ExecStop=/usr/bin/bash /opt/stop_server.sh
WorkingDirectory=/opt/minecraft_bedrock
Restart=always
TimeoutStartSec=600
[Install]
WantedBy=multi-user.target
Attiviamo il servizio:
sudo systemctl enable mcbedrock
Adesso possiamo farlo partire con:
sudo systemctl start mcbedrock
e stopparlo con
sudo systemctl stop mcbedrock
Possiamo disabilitare il servizio con
sudo systemctl enable mcbedrock
Accedere alla console del server
Avendo fatto partire il servizio con una shell screen possiamo richiamarla quando vogliamo:
sudo screen -r mcserver/mcbedrock
Aggiornamento del server
Come detto in precedenza il client ed il server devono avere lo stesso numero di versione quindi periodicamente (visto che spesso l'app mobile si aggiorna in automatico) dovremo aggiornare il server.
Backup del file di configurazione
L'aggiornamento riscrive tutti file quindi ci conviene copiare il file server.properties su una cartella diversa
sudo cp /opt/minecraft_bedrock/server.properties /home/$USER
Stoppiamo il servizio
Per evitare esplosioni del tutto dobbiamo prima fare qualsiaisi cosa stoppare il servizio:
sudo systemctl stop mcbedrock
Aggiornamento
Ripetiamo l'operazione di download:
DOWNLOAD_URL=$(curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)" https://minecraft.net/en-us/download/server/bedrock/ | grep -o 'https://minecraft.azureedge.net/bin-linux/[^"]*')
sudo wget $DOWNLOAD_URL -O /opt/minecraft_bedrock/bedrock-server.zip
Scompattiamo l'archivio
sudo unzip -o /opt/minecraft_bedrock/bedrock-server.zip -d /opt/minecraft_bedrock/
Aggiornamento dopo il 21/10/2024
Come per il download dobbiamo aggiornare i comandi per l'aggiornamento:
DOWNLOAD_URL=$(curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)" https://www.minecraft.net/en-us/download/server/bedrock/ | grep -o 'https://www.minecraft.net/bedrockdedicatedserver/bin-linux/[^"]*')
curl -o /opt/bedrock-server.zip $DOWNLOAD_URL -H "Accept-Encoding: identity" -H "Accept-Language: en" -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)"
Ripristino file di configurazione e ripristino permessi
sudo cp /home/$USER/server.properties /opt/minecraft_bedrock/server.properties
sudo chown -R mcserver:mcserver /opt/minecraft_bedrock/
Riavvio del servizio
sudo systemctl start mcbedrock
Fonte: https://pimylifeup.com/ubuntu-minecraft-bedrock-server/