Mettre en place un serveur Minecraft

Je ne suis pas du tout joueur ou accro des jeux en ligne mais voilà j’ai des enfants dont un qui joue (avec parcimonie) a Minecraft, ils sont une bandes de copains et copines et envisageaient de mettre en place un serveur; ils ont fait des tests mais sans grand succès.

Alors voilà comment ça a fini: « Papa, tu pourrais nous aider ? ».

Donc c’est parti:

Le serveur tourne sur une plateforme Java, donc on peut le faire fonctionner sur Windows, Mac ou Linux. Comme j’ai une VM sous debian qui ne me sert à rien, et que pour une question de fiabilité du process dans le temps, je vais me lancer sous linux.

J’ai dans un premier temps télécharger le serveur Minecraft sur le site de Minecraft. Mais très honnêtement je n’ai pas trouvé cela terrible. en faisant quelques recherches j’ai trouvé une alternative c’est spigot. Spigot est une version optimisée avec quelques options supplémentaires.
La version avec laquelle je vais travailler est la 1.8.

Je vais avoir besoin du JDK Java de screen.
On parle d’une installation d’un serveur Debian en version minimale, j’ai juste besoin de SSH
Mon serveur fonctionne sur une VM vmware, voici mon affectation de ressource
ressource-serveur

 

 

Passons à la suite, on va travailler en tant que root
Commençons par mettre à jour les dépôts:

root@serveur-minecraft:$
apt-get update
apt-get upgrade

Installons nos paquets nécessaires

root@serveur-minecraft:$
apt-get install openjdk-7-jre screen

personnellement je télécharge mes paquets et je compile sur /usr/src , je mettrais et j’exécuterais ensuite le serveur à partir de /usr/local/spigotexe

root@serveur-minecraft:$
## je crée mon répertoire qui va me servir pour le téléchargement et la compilation ##
mkdir /usr/src/spigot
## je crée le répertoire qui me servira a l’exécution du serveur ##
mkdir /usr/local/spigotexe
## je vais travailler dans le répertoire de téléchargement ##
cd /usr/src/spigot
## je télécharge la bersion spigot ##
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
# je lance ma compilation ##
git config --global --unset core.autocrlf
java -jar BuildTools.jar

Après quelques minutes j’obtiens
le fichier spigot-1.8.3.jar

root@serveur-minecraft:$
## Je copie le fichier dans mon répertoire d’exécution
cp /usr/src/spibot/spigot-1.8.3.jar /usr/local/spigotexe/

On va exécuter le serveur une première fois

root@serveur-minecraft:$
cd /usr/local/spigotexe/
java -Xmx1024M -Xms1024M -XX:MaxPermSize=128M -jar spigot-1.8.3.jar

Le serveur va se lancer et s’arrêter. Lorsqu’il se lance pour la première fois le serveur génère les fichiers de configuration, le monde de base et le fichier de licence, on va l’éditer et valider la licence.

root@serveur-minecraft:$
nano /usr/local/spigotexe/eula.txt

et la passez false à true
eula=true

Enregistrez, fermez le fichier et relancez le serveur et tout fonctionne…
Tout sauf que vos joueurs ne pourront pas se connecter au serveur (sauf si il sont enregistrez chez minecraft) mais c’est loin d’être le cas de beaucoup.
Il faut donc faire quelques paramétrages dans le fichier de config et en premier lieu le fichier
/usr/local/spigotexe/server.properties

modifier la ligne online-mode de true à false
vous devez avoir cette ligne:
online-mode=false

Les joueurs (utilisateurs) vont pouvoir se connecter
pour modifier le fichier soit vous l’éditez, soit vous saisissez les commandes dans la console du serveur. Ce n’est qu’une histoire de goût.

Comme on autorise tout le monde à jouer sur notre machine, elle devient un peu beaucoup « insecure ». La solution dans mon cas, comme c’est un serveur dédié à un petit groupe c’est d’utiliser la whitelist, pour faire simple j’ai un utilisateur joueur1 alors sur la console je fais!
whitelist on -> j’active le mode whitelist
whitelist add joueur1 -> j’ajoute le joueur1

voilà c’est fait, le joueur1 peut se connecter

Passons maintenant à la sécurisation et la simplification

on va faire une petit script pour lancer le serveur et pouvoir se connecter à la console quand on en a besoin, donc on va lancer notre process avec screen
Je vais faire simple, mais vous trouverez des scripts un peu plus complexe et complet

On va créer un fichier spigotexe (vous pouvez mettre ce que vous voulez)

user@computer:$
nano /etc/init.d/spigotexe

#!/bin/sh
case "$1" in
start)
echo "Starting Spigot server"
cd /usr/local/spigotexe/
screen -dmS "spigotexe" java -Xmx1024M -Xms1024M -XX:MaxPermSize=128M -jar spigot-1.8.3.jar
;;
stop)
echo "Stopping Spigot server"
screen -S minecraft_server -p 0 -X stuff "`printf \"stop\r\"`"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

ensuite on va rendre le fichier exécutable

root@serveur-minecraft:$
chmod a+x /etc/init.d/spigotexe

Du coup maintenant pour lancer le serveur je fais

root@serveur-minecraft:$
/etc/init.d/spigotexe start

Devinez pour arrêter ça donne

root@serveur-minecraft:$
/etc/init.d/spigotexe stop

maintenant comme j’ai lancé spigot avec screen

root@serveur-minecraft:$
screen -ls

J’ai comme réponse:

There is a screen on:
18591.spigotexe (02/04/2015 20:56:38) (Detached) -> si vous êtes déjà connecté à screen Detached sera à Attached
1 Socket in /var/run/screen/S-root.

Donc pour récupérer ma console

root@serveur-minecraft:$
screen -r spigotexe

Ensuite je rajoute le script au démarrage du serveur

root@serveur-minecraft:$
update-rc.d. spigotexe defaults

Mais comme j’ai un club de champions du monde qui joue, il sont capables de m’arrêter le serveur par erreur ou pas d’ailleurs. Comme je ne veux pas passer mon temps à ça, je vais me mettre un petit script capable de vérifier que mon process existe et si il n’existe pas je le redémarre, ensuite on va le mettre en tache CRON pour que ça tourne tout seul

on va mettre le script au même endroit que le serveur

root@serveur-minecraft:$
nano /usr/local/spigotexe/spigotcheck.sh

et la voilà le script qui vérifie si le service ou le process est en cours et le redémarre si il est éteint:

#!/bin/bash
service=spigotexe

if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 2 ))
then
echo « $service is running!!! »
else
/etc/init.d/$service start
fi

ensuite on va passer le script exécutable

root@serveur-minecraft:$
chmod a+x /usr/local/spigotexe/spigotcheck.sh

Maintenant faites un test une fois avec le serveur spigot éteint puis une fois allumé pour voir si le script fonctionne bien
Pour lancer le script:

root@serveur-minecraft:$
/usr/local/spigotexe/spigotcheck.sh

Si ça tourne on n’a plus qu’à mettre la tache en cron

root@serveur-minecraft:$
crontab -e

et je rajoute
* * * * * /usr/spibotexe/spibotcheck.sh
après éventuellement

root@serveur-minecraft:$
/etc/init.d/cron reload

voilà je me suis protégé des appels des ados du genre « ça marche plus y a machin il est trop lourd il a arrêté le serveur ».

Il faudra encore ajouter une règle sur le firewall IPTABLES. Vous pouvez aussi jouer avec les fichiers de config.
Je n’ai pas le temps mais un fail2ban doit pouvoir être mis en place en analysant les logs

3 comments

  1. chasse au trésor dofus - Répondre

    Bonsoir maddog
    Désolé de répondre tardivement
    J’ai pu soumettre mon site dans differents moteurs de recherche (google, yahoo, bing, orange, etc…
    merci pour ton aide
    mes amities!

Leave Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *