17 giugno 2021

Creare un server Minecraft Java Edition 1.17 su linux

Un nuovo server.

Tempo fa avevo creato un server Minecraft (Java) per far giocare i miei figli con gli amici senza dover effettuare sottoscrizioni a servizi di hosting (chi ha detto realms?) e senza costringere tutti a disconnettersi se qualcuno hostava il mondo e doveva spegnere il PC (...è prontooooo...), avevo utilizzato un Raspberry Pi4 con 4Gb di Ram.

Ha funzionato egregiamente finché non hanno aggiornato alla 1.17 che richiede la versione 16 di Java, allora, visti i limiti della macchina ho deciso di fare un saltino spostando tutto su un computer  inutilizzato, un Quad Core con un po' di ram ed un SSD da battaglia.

Ho deciso di rivolgermi sempre a linux per mettere su il server, sarà una macchina headless ovviamente.

Scriverò tutta la procedura seguita, mettendo insieme tutte le informazioni reperite sulla rete, non ho inventato nulla, la cosa è più semplice di quanto si immagini.
Non allegherò screenshot o altro materiale visivo, in quanto dovendo lavorare solo sa shell non c'è motivo, dovessero esserci dubbi o problemi, basta chiedere.
Spero possa tornare utile a qualcuno.

Cominciamo.


Per prima cosa ho scaricato la ISO di Ubuntu server 21.04.2 LTS da quì , scegliendo l'opzione 2,
installare poi da DVD o USB seguendo le normali procedure. (ricordare di abilitare ssh durante l'installazione)

Terminata l'installazione, ho iniziato a lavorare direttamente tramite ssh:
sudo apt update
e
sudo apt upgrade
finito l'aggiornamento, iniziamo ad installare qualcosa che ci servirà
sudo apt install wget screen nmap

adesso pensiamo a Java aggiungendo prima il repo

sudo add-apt-repository ppa:linuxuprising/java

diamo conferma ed attendiamo che finisca la procedura, poi

sudo apt update

sudo apt install oracle-java16-installer

alla fine, potremo verificare di aver installato la versione 16 di Java digitando

java --version

poi riavviamo

sudo reboot

A questo punto creiamo un nuovo utente (lo chiameremo minecraft), nelle cui cartelle verranno ospitati i file relativi al server, così non correremo il rischio di incasinare il sistema (cosa che avevo fatto nel Rasp)

sudo useradd -m -r -d /opt/minecraft minecraft

 creiamo anche la password per il nuovo utente con

sudo passwd minecraft

ora creiamo la directory dove ospiteremo i file, come scritto prima (il nome della cartella è a piacere, ricordate nel caso di variare il nome anche nei comandi che daremo dopo)

sudo mkdir /opt/minecraft/survival

procuriamoci il file del server da quì copiando semplicemente il link che troviamo in corrispondenza dell' 1.17, in questo caso il comando sarà

sudo wget -O /opt/minecraft/survival/minecraft_server.jar https://launcher.mojang.com/v1/objects/0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e/server.jar

è tutto su una linea mi raccomando, ovviamente nel caso cambiasse versione l'indirizzo cambierà e dovrete semplicemente copiarlo e sostituirlo a quanto scritto

una volta scaricato, dobbiamo accettare i termini della licenza

sudo bash -c "echo eula=true > /opt/minecraft/survival/eula.txt"

ora assegnamo la proprietà del server all'utente prescelto

sudo chown -R minecraft /opt/minecraft/survival/

adesso creiamo uno script che avvii in automatico il tutto come servizio

sudo nano /etc/systemd/system/minecraft@.service

incolliamo quanto scritto di seguito nell'editor

[Unit]

Description=Minecraft Server: %i

After=network.target


[Service]

WorkingDirectory=/opt/minecraft/%i


User=minecraft

Group=minecraft


Restart=always


ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx2G -jar minecraft_server.jar nogui


ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS. SAVING ALL MAPS..."5'

ExecStop=/bin/sleep 5

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"5'

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"5'


[Install]

WantedBy=multi-user.target

ATTENZIONE!  nella linea 13 viene indicato quanta memoria può utilizzare minecraft, potete cambiare il quantitativo modificando

-Xmx2G (2 Gb assegnati) con -Xmx4G (assegnando 4Gb ad esempio) come per tutto, più ram c'è meglio è, all'aumentare dei giocatori aumenta la richiesta, regolatevi

ricordate di salvare ed uscite

Ora avviamo il server

sudo systemctl start minecraft@survival

possiamo controllare il suo stato

sudo systemctl status minecraft@survival

e quando abbiamo conferma che tutto è andato per il meglio impostarlo in maniera che si avvii automaticamente ad ogni accensione (o anche riavvio) della macchina

sudo systemctl enable minecraft@survival

Nel caso avessimo necessità di intervenire sul server e volessimo interrompere il servizio, ci basterà digitare

sudo systemctl stop minecraft@survival

adesso verifichiamo che il server sia in ascolto sulla sua porta di default

nmap -p 25565 localhost

se è tutto ok (deve esserlo, sennò avete sbagliato qualche passaggio) siamo pronti per andare avanti.

 

Si ma come ti trovo?

Per essere sempre raggiungibili anche dall'esterno, ci serve un indirizzo fisso da poter comunicare a chi vogliamo, per questo ci rivolgeremo a no-ip ad esempio e registreremo un indirizzo da impostare come quello del server, che chi si vorrà connettere dovrà quindi digitare come indirizzo del server in minecreaft.

Una volta completata la registrazione ed attivato l'indirizzo, dovremo procedere così, sempre da ssh:

cd /usr/local/src/

poi 

sudo wget http://www.noip.com/client/linux/noip-duc-linux.tar.gz

una volta completato il download

sudo tar xf noip-duc-linux.tar.gz

non dimentichiamo di installare build-essential e make prima

sudo apt install build-essential make

finita l'installazione, spostiamoci

cd noip-2.1.9-1

ed ora possiamo dare il comando

sudo make install

Prestare molta attenzione a questo passaggio, infatti al termine dell'installazione verrà effettuata la configurazione dell'account che avete registrato prima, vi verranno chiesti email e password per loggarvi al servizio no-ip, una volta immessi vi verranno elencati gli indirizzi registrati e quali volete aggiornare ad ogni avvio del servizio, anche l'intervallo dopo il quale volete effettuare gli aggiornamenti.

Nel caso ci siano variazioni da fare, il file di configurazione nel quale abbiamo appena salvato i dati, si trova in

/usr/local/etc/no-ip2.conf

editando questo possiamo fare tutte le modifiche del caso.

Una volta completato, passiamo alla creazione ed avvio del servizio noip2 per l’indirizzo dinamico in automatico, quindi come prima, creiamo il file

sudo nano /lib/systemd/system/noip2.service

nel file appena creato scrivere quanto segue

[Unit]
Description=noip2 service

[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always

[Install]
WantedBy=default.target

quindi digitare

sudo systemctl daemon-reload

per rendere systemd consapevole della nuova unità (systemd memorizza nella cache i file delle unità e questo comando fa sì che systemd riconsideri la sua cache).

Adesso possiamo controllare il servizio come descritto prima col servizio di avvio del server
sudo systemctl status noip2
sudo systemctl start  noip2
sudo systemctl status noip2
sudo systemctl stop   noip2
sudo systemctl status noip2
per far partire il servizio all’avvio della macchina dobbiamo abilitarlo digitando:

sudo systemctl enable noip2

per disabilitarlo (in caso di manutenzione) dovrai invece digitare:

sudo systemctl disable noip2

Mi pare di aver scritto tutto, non ci resta che mettere la macchina in un angolo (vicino ad una presa di rete)avviarla e goderci il nostro server con avvio automatico, direttamente puntando l'indirizzo da noi registrato, garantisco che i vostri figli ne saranno orgogliosi, personalmente cerco di far fare installazione/manutenzione direttamente a loro, almeno capiscono cosa significa gestire un piccolo server e come si fa, che non fa mai male.

Dovesse interessare, a breve, aggiungerò anche una piccola descrizione di come ho effettuato la migrazione del mondo costruito sull'altro server, direttamente in quello nuovo, così non si perde nulla!

Buon divertimento!

b4nd1t0