Server Minecraft Bedrock con Linux

Screenshot_2023-07-04-13-44-38-50_5c8300b655012b1930f2e0a7b81bf6a9

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.

Screenshot_2023-07-01-10-51-53-17_5c8300b655012b1930f2e0a7b81bf6a9

Screenshot_2023-07-01-10-52-34-33_5c8300b655012b1930f2e0a7b81bf6a9

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

Screenshot_2023-07-01-10-53-15-10_5c8300b655012b1930f2e0a7b81bf6a9

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).

Screenshot_2023-07-01-11-01-20-97_5c8300b655012b1930f2e0a7b81bf6a9

Attendiamo qualche secondo così che il server ed il client creino il mondo.

Screenshot_2023-07-01-11-01-37-90_5c8300b655012b1930f2e0a7b81bf6a9

Si gioca.

Screenshot_2023-07-04-13-44-38-50_5c8300b655012b1930f2e0a7b81bf6a9

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/