Dans ce mini tutoriel nous allons voir comment installer un serveur Minecraft sur un serveur dédié et faire en sorte que nous n'ayons pas de maintenance ou du moins le minimum, je veux dire par là que le serveur Minecraft devra démarrer automatiquement à chaque démarrage ou redémarrage du serveur Linux. De plus nous mettrons en place un système de reboot automatique 3 fois par jours du serveur Minecraft avec un message dans le chat pour avertir les joueurs en ligne.
Vous venez d'installer un serveur Debian 8 Jessie depuis l'interface d'administration de votre hébergeur, connectons nous à celui-ci en console et procédons à quelques vérifications
$ ssh root@***.***.***.***
root@***.***.***.***'s password:
root@monserveur:~#
Si on ne le sait pas encore identifions le type de processeur
# uname -m
x86_64
Ceci nous permettra d'installer la version de java la mieux appropriée (version 64 bit dans mon cas)
Tiens à ce propos y-a-t il une version de java déjà installée?
# java -version
-bash: java : commande introuvable
Le message est limpide, aucune version de java n'est installé mais avant d'y remédier installons un outil qui nous sera utile par la suite:
# apt-get update
...
# apt-get upgrade
...
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
Normal la machine vient d'être installée. Installons le programme screen qui nous permettra de fermer la console sans interférer avec le serveur Minecraft.
# apt-get install screen
screen est déjà la plus récente version disponible.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
Bon hé bien on en apprends tous les jours.
Il est souvent proposé d'installer java en ajoutant à la liste des dépôts le serveur webupd8team comme expliqué ici mais je n'aime pas beaucoup cette méthode alors faisons autrement.
Commençons par créer un répertoire là ou l'on souhaite installer java
root@monserveur:~# cd /usr
root@monserveur:/usr# mkdir java
root@monserveur:/usr# cd java
Télécharger l'archive java qui correspond à notre système, dans mon cas la version Linux-x64
root@monserveur:/usr/java# wget --output-document=jre-8u77-linux-x64.tar.gz http://javadl.oracle.com/webapps/download/AutoDL?BundleId=207221
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 71796315 (68M) [application/x-gzip]
Sauvegarde en : « jre-8u77-linux-x64.tar.gz »
jre-8u77-linux-x64.tar.gz 100%[===================================================>] 68,47M 11,2MB/s ds 6,6s
2016-04-03 18:44:02 (10,3 MB/s) — « jre-8u77-linux-x64.tar.gz » sauvegardé [71796315/71796315]
Et on extrait le contenu de cette archive ici même
root@monserveur:/usr/java# tar zxvf jre-8u77-linux-x64.tar.gz
...
root@monserveur:/usr/java# ls -l
drwxr-xr-x 6 uucp 143 4096 mars 21 06:09 jre1.8.0_77
-rw-r--r-- 1 root root 71796315 mars 21 16:11 jre-8u77-linux-x64.tar.gz
Il ne nous reste plus qu'à demander à Linux d'utiliser cette version quand on appèle la commande java
# update-alternatives --install /usr/bin/java java /usr/java/jre1.8.0_77/bin/java 100
update-alternatives: utilisation de « /usr/java/jre1.8.0_77/bin/java » pour fournir « /usr/bin/java » (java) en mode automatique
Et par mesure de sécurité on s'assure que le lien soit bien fait
# java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
EDIT: Si le retour de la commande ne vous dit rien et que vous êtes toujours en java 1.7 utilisez la commande
# update-alternatives --config java
qui vous permettra de basculer entre les versions disponibles.
Cool on continue ...
Avant d'installer le serveur Minecraft il serait prudent de créer un nouvel utilisateur dont le rôle sera de l'administrer.
# adduser craftadmin
...
Entrez le nouveau mot de passe UNIX :
...
Cette information est-elle correcte ? [O/n]o
Puis on se connecte en tant qu'utilisateur craftadmin et on entre dans son répertoire personnel
# su craftadmin
$ cd /home/craftadmin
Créons un répertoire serveur d'où nous allons télécharger et installer le serveur Minecraft
$ mkdir serveur
$ cd serveur/
$ wget --no-check-certificate https://s3.amazonaws.com/Minecraft.Download/versions/1.9.2/minecraft_server.1.9.2.jar
Ici je récupère un serveur Minecraft vanilla 1.9.2, remplacez bien sûr par la version du serveur Minecraft que vous allez télécharger.
Procédons à un premier lancement du serveur
$ java -Xms1024M -Xmx1024M -jar minecraft_server.1.9.2.jar nogui
[20:10:25] [Server thread/INFO]: Starting minecraft server version 1.9.2
[20:10:25] [Server thread/INFO]: Loading properties
[20:10:25] [Server thread/WARN]: server.properties does not exist
[20:10:25] [Server thread/INFO]: Generating new properties file
[20:10:25] [Server thread/WARN]: Failed to load eula.txt
[20:10:25] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
[20:10:25] [Server thread/INFO]: Stopping server
[20:10:25] [Server Shutdown Thread/INFO]: Stopping server
On constate que le serveur est presque immédiatement stoppé, la encore le message est claire, il faut accepter le contrat de licence pour pouvoir continuer.
Si vous faites un ls
dans le répertoire serveur/ vous verrez un fichier eula.txt, il à été créé durant ce premier lancement.
Ouvrez le et remplacer la ligne eula=false
par eula=true
Ceci fait on relance le serveur à nouveau
$ java -Xms1024M -Xmx1024M -jar minecraft_server.1.9.2.jar nogui
...
[20:40:06] [Server thread/INFO]: Preparing level "world"
[20:40:07] [Server thread/INFO]: Preparing start region for level 0
[20:40:08] [Server thread/INFO]: Preparing spawn area: 6%
[20:40:09] [Server thread/INFO]: Preparing spawn area: 13%
[20:40:10] [Server thread/INFO]: Preparing spawn area: 21%
[20:40:11] [Server thread/INFO]: Preparing spawn area: 28%
[20:40:12] [Server thread/INFO]: Preparing spawn area: 37%
[20:40:13] [Server thread/INFO]: Preparing spawn area: 46%
[20:40:14] [Server thread/INFO]: Preparing spawn area: 54%
[20:40:15] [Server thread/INFO]: Preparing spawn area: 60%
[20:40:16] [Server thread/INFO]: Preparing spawn area: 67%
[20:40:17] [Server thread/INFO]: Preparing spawn area: 73%
[20:40:18] [Server thread/INFO]: Preparing spawn area: 78%
[20:40:19] [Server thread/INFO]: Preparing spawn area: 84%
[20:40:20] [Server thread/INFO]: Preparing spawn area: 89%
[20:40:21] [Server thread/INFO]: Preparing spawn area: 95%
[20:40:22] [Server thread/INFO]: Done (16,100s)! For help, type "help" or "?"
|
Cette fois ci tout c'est bien passé, le serveur est démarré et n'attend plus que des joueurs s'y connectent.
On est désormais devant un prompt du serveur Minecraft d'où l'on peut lancer des commandes ou écrire des messages comme depuis un chat Minecraft.
Pour arrêter le serveur on tapera simplement stop
.
Les valeurs
-Xms1024M
et-Xmx1024M
de la commande de démarrage peuvent être modifiées en fonction de la mémoire RAM de votre serveur, par exemple si votre machine dispose de 16GO de ram alors vous pouvez aisément utiliser-Xms12G
et-Xmx12G
.Pour information j'ai longtemps utilisé un petit serveur vps avec 2GO de ram qui suffisait amplement pour 3 ou 4 joueurs sur Minecraft vanilla 1.8.
Notre serveur Minecraft est donc fonctionnel mais il est nécessaire de se connecter et de le démarrer avec la longue commande ci-dessus chaque fois que l'on souhaite jouer, de plus la console doit rester ouverte tant qu'on l'utilise, pas très pratique.
Voyons donc comment utiliser le serveur avec screen (le serveur Minecraft doit être stoppé)
craftadmin@monserveur:~/serveur$ screen
Screen version 4.02.01 (GNU) 28-Apr-14
... bla bla ...
[Press Space for next page; Return to end.]
craftadmin@monserveur:~/serveur$
Jusque là il semble n'y avoir aucune différence et pourtant; relancez la commande de démarrage
$ java -Xms1024M -Xmx1024M -jar minecraft_server.1.9.2.jar nogui
... bla bla ...
[20:42:33] [Server thread/INFO]: Done (2,433s)! For help, type "help" or "?"
|
Maintenant pressez les touches [CTRL+a] puis [d] (d comme détacher)
Ne confondez pas [CTRL+a] puis [d] avec [CTRL+d] qui ferme screen et/ou la console
[detached from 25882.pts-0.monserveur]
craftadmin@monserveur:~/serveur$
Même si ça ne se voit pas screen fonctionne toujours et le serveur Minecraft aussi. On pourrait fermer la console, éteindre son pc local et aller se coucher.
Pour reprendre la main sur le serveur on procède ainsi:
$ screen -r
-r comme récupération
Une fois encore on pourrait en rester là mais il sera toujours nécessaire de se connecter pour redémarrer de temps à autre le serveur Minecraft.
Nous allons donc écrire un petit script bash qui permettra de démarrer, stopper ou redémarrer proprement et automatiser trois redémarrages par jour grâce à une tache cron.
Copiez collez la totalité du script ci-dessous dans un fichier que nous allons nommer boot.sh
Au besoin modifiez les variables SCREEN_NAME URL_SERVER et JAR_SERVER selon votre convenance et votre configuration.
Vous pouvez placer ce fichier où vous voulez, dans mon cas il est à la racine du répertoire personnel de l'utilisateur craftadmin /home/craftadmin/boot.sh
Enfin n'oubliez pas de le rendre exécutable
$ chmod +x boot.sh
Le script boot.sh
#!/bin/bash
SCREEN_NAME="minecraft"
URL_SERVER="/home/craftadmin/serveur/"
JAR_SERVER="minecraft_server.1.9.2.jar"
cd $URL_SERVER
case $1 in
"start")
screen -dmS $SCREEN_NAME java -Xmx12G -Xms12G -jar $JAR_SERVER nogui
;;
"stop")
screen -S $SCREEN_NAME -p 0 -X stuff "title @a times 20 100 20 \r";
screen -S $SCREEN_NAME -p 0 -X stuff 'title @a subtitle {"text":"perte du signal dans 1mn","color":"gold"} \r';
screen -S $SCREEN_NAME -p 0 -X stuff 'title @a title {"text":"WARNING","bold":"true","color":"red"} \r';
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 60 secondes","color":"green","bold":"true"} \r'; sleep 30
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 30 secondes","color":"green","bold":"true"} \r'; sleep 10
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 20 secondes","color":"green","bold":"true"} \r'; sleep 10
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 10 secondes","color":"green","bold":"true"} \r'; sleep 5
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 5 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 4 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 3 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 2 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 1 seconde","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Signal perdu !!!","color":"yellow","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`"; sleep 10
;;
"reboot")
screen -S $SCREEN_NAME -p 0 -X stuff "title @a times 20 100 20 \r";
screen -S $SCREEN_NAME -p 0 -X stuff 'title @a subtitle {"text":"perte du signal dans 1mn","color":"gold"} \r';
screen -S $SCREEN_NAME -p 0 -X stuff 'title @a title {"text":"WARNING","bold":"true","color":"red"} \r';
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 60 secondes","color":"green","bold":"true"} \r'; sleep 30
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 30 secondes","color":"green","bold":"true"} \r'; sleep 10
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 20 secondes","color":"green","bold":"true"} \r'; sleep 10
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 10 secondes","color":"green","bold":"true"} \r'; sleep 5
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 5 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 4 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 3 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 2 secondes","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Perte du signal dans 1 seconde","color":"red","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff 'tellraw @a {"text":"Signal perdu !!!","color":"yellow","bold":"true"} \r'; sleep 1
screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`"; sleep 10
screen -dmS $SCREEN_NAME java -Xmx12G -Xms12G -jar $JAR_SERVER nogui
;;
*)
echo -e "Le script demande au moins un des parametres:\033[32m | start | stop | reboot |\033[0m"
;;
esac
Je ne vais pas détailler chaque ligne, sachez simplement que:
la variable SCREEN_NAME va nous permettre d'attribuer un nom à une fenêtre de screen ce qui permettra d'envoyer des commandes au bon endroit (la console du serveur Minecraft) grâce à la commande screen -S $SCREEN_NAME ...
. Vous pouvez lui donner le nom que vous voulez du moment que vous évitiez les espaces et les caractères accentués.
la variable URL_SERVER correspond au chemin où à été installé le serveur Minecraft, à modifier en fonction de votre configuration.
la variable JAR_SERVER correspond au nom du fichier.jar du serveur, ici minecraft_server.1.9.2.jar
On appèlera le script avec un des trois arguments start | stop | reboot. Si aucun argument n'est indiqué il vous les rappèlera
$ ./boot.sh
Le script demande au moins un des parametres: | start | stop | reboot |
Donc pour démarrer
$ ./boot.sh start
pour redémarrer
$ ./boot.sh reboot
et pour arrêter
$ ./boot.sh stop
Enfin il ne reste plus qu'à éditer la contab ...
$ crontab -e
... et lui ajouter cette ligne
0 4,12,20 * * * bash /home/craftadmin/boot.sh reboot >> /home/craftadmin/cron.log 2>&1
Ce qui signifie que le script sera exécuté tous les jours à 4h00, 12h00 et 20h00, si une erreur survient elle sera notifiée dans le fichier cron.log.
l'édition de la crontab se fait en tant qu'utilisateur craftadmin
Il ne nous reste plus qu'un cas de figure que nous n'avons pas traité, l'arrêt/redémarrage volontaire ou non du serveur Linux.
En effet si on désire redémarrer le serveur Linux nous aurons trois étapes à réaliser à la main:
Heureusement avec Linux il est tout à fait possible d'exécuter un script bash au démarrage, redémarrage ou arrêt de la machine, c'est ce que nous allons faire par l'intermédiaire d'un script chapeau.
Copiez / collez le code ci-dessous dans un fichier que l'on va appeler chapeau.sh est placez le dans le répertoire /etc/init.d
en ayant pris soins de lui donner les droits d'exécution chmod +x
.
Cette opération ne peut être faite que par root.
#!/bin/bash
LOG_FILE="/home/craftadmin/chapeau.log"
ERR_FILE="/home/craftadmin/chapeau.err"
USER=craftadmin
exec 1>$LOG_FILE
exec 2>$ERR_FILE
case "$1" in
'start')
su - $USER -c "/home/craftadmin/boot.sh start"
;;
'stop')
su - $USER -c "/home/craftadmin/boot.sh stop"
;;
esac
Il faut ensuite créer les liens dans les répertoires /etc/rcX.d
, rassurez vous dans notre cas une configuration par défaut est suffisante et cette commande vas tout faire à notre place.
# update-rc.d chapeau.sh defaults
Malgré le message
insserv: warning: script 'chapeau.sh' missing LSB tags and overrides
les liens sont bien créés dans les répertoires rc0.d à rc6.dPour en savoir plus à propos des runlevels voir ici
Voila, redémarrez votre serveur Linux pour vérifier que tout fonctionne et consultez les fichiers de logs en cas d'erreur.
Adresse serveur Minecraft 1.10 Vanilla sans white liste : SERVEUR DOWN ... reviendra plus tard
ATTENTION le serveur peut être reset à tout moment sans préavis.