Installer un serveur Minecraft sous GNU/Linux Debian 64bits avec spigot

Il y a plusieurs mois, j’ai rédigé un article sur comment installer un serveur Mincraft (disponible ici). Aujourd’hui, je vais vous expliquer comment installer ce même serveur, mais avec le moteur spigot (plus d’information ici). Depuis maintenant 4 ans, j’administre un serveur Minecraft et suite à la disparition du projet craftbukkit, j’ai dû trouver une alternative. Pour moi, Spigot est le meilleur compromis.

Dans cet article, je vais donc vous expliquer comment installer un serveur Minecraft sous GNU/Linux Debian 64bits avec spigot !

Voici l’environnement que j’ai utilisé pour écrire ce tutoriel

Architecture serveur : 6 GB RAM, 8 GB d’espace disque pour le système et 50 GB pour les Datas
Système d’exploitation : GNU/Linux Debian 7 wheezy 64bits
Date de rédaction : 20/02/2015

 

Préparation

Se connecter a son serveur GNU/Linux en SSH et effectuer les mises à jour système :

apt-get update ; apt-get upgrade

Vous devez également installer ces paquets :

apt-get install build-essential libxtst6 screen

 

Installer Oracle Java 7 via les repository debian

su -
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt-get update
apt-get install oracle-java7-installer
exit

Source

 

Installer les variables d’environnements de Java

su -
apt-get install oracle-java7-set-default
exit

Source

 

Création de votre serveur Minecraft

Création user

useradd -d /home/minecraft -b /home/minecraft -m -s /bin/bash minecraft
passwd minecraft
su - minecraft
mkdir mc-server
exit

Compiler Spigot via BuildTools

apt-get install git openjdk-7-jdk tar
su - minecraft
mkdir temp ; cd temp
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
git config --global --unset core.autocrlf
java -jar BuildTools.jar

Source

 

Vous pouvez forcer la compilation d’une version spécifique de Minecraft en utilisant cette commande :

java -jar BuildTools.jar --rev 1.8.3

Source

 

Installer Spigot

cp spigot-1.8.jar ../mc-server/spigot.jar
cd ../mc-server

 

Premier lancement

java -Xms512M -Xmx1024M -XX:MaxPermSize=128M -jar spigot.jar nogui

 

Accepter les EULA

echo "eula=true" > eula.txt

 

Relance du serveur

java -Xms512M -Xmx1024M -XX:MaxPermSize=128M -jar spigot.jar nogui

 

Arrêter votre serveur

stop

 

Configuration de votre serveur

server.properties

vi server.properties
max-world-size=4000 (monde 8000 x 8000)
pvp=false
difficulty=2 # difficulty normal
motd=Serveur des D\u00E9mineurs
snooper-enabled=false
enable-command-block=true

Details des paramètres du fichier server.properties

 

ops.json

Ici, vous devez rajouter les admins de votre serveur. Pour connaitre l’uuid, aller sur ce site.

vi ops.json
[
{
"uuid": "uid-admin-1",
"name": "admin-1",
"level": 4
},
{
"uuid": "uid-admin-2",
"name": "admin-2",
"level": 4
}
]

Source
Votre configuration de base est terminé !

 

Démarrage automatique du serveur MineCraft au démarrage du serveur

mkdir -p /home/minecraft/backups/mc-server
cd ; vi /etc/inid.d/mc-server_startscript.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides:          sminecraft-server
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
# /home/minecraft
# version 0.3.2 2011-01-27 (YYYY-MM-DD)
# version editer by pazpop - v2


#Settings
SERVICE='spigot.jar'
USERNAME="minecraft"
MCPATH='/home/minecraft/mc-server'
## INVOCATION='java -Xms2G -Xmx6G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=7 -XX:+AggressiveOpts -jar craftbukkit.jar nogui'
INVOCATION='java -Xms2048M -Xmx6144M -XX:MaxPermSize=128M -jar spigot.jar nogui'
BACKUPPATH='/home/minecraft/backups/mc-server'

ME=`whoami`
as_user() {
  if [ "$ME" == "$USERNAME" ] ; then
	bash -c "$1"
  else
	su - $USERNAME -c "$1"
  fi
}

mc_start() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
	echo "Tried to start but $SERVICE was already running!"
  else
	echo "$SERVICE was not running... starting."
	cd $MCPATH
	as_user "cd $MCPATH && screen -dmSL minecraft $INVOCATION"
	sleep 7
	if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
	then
	  echo "$SERVICE is now running."
	else
	  echo "Could not start $SERVICE."
	fi
  fi
}

mc_saveoff() {
		if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
		then
				echo "$SERVICE is running... suspending saves"
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Sauvegarde en cours...\"\015'"
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
				sync
				sleep 10
		else
				echo "$SERVICE was not running. Not suspending saves."
		fi
}

mc_saveon() {
		if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
		then
				echo "$SERVICE is running... re-enabling saves"
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Sauvegarde terminée!\"\015'"
		else
				echo "$SERVICE was not running. Not resuming saves."
		fi
}

mc_stop() {
		if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
		then
				echo "$SERVICE is running... stopping."
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Arrêt du serveur dans 10 secondes!\"\015'"
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
				sleep 10
				as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
				sleep 7
		else
				echo "$SERVICE was not running."
		fi
		if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
		then
				echo "$SERVICE could not be shut down... still running."
		else
				echo "$SERVICE is shut down."
		fi
}


mc_backup() {
   echo "Sauvegarde du world en cours..."
   if [ -d $BACKUPPATH/world_`date "+%m.%d.%Y"` ]
   then
	 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
	 do
	   if [ -d $BACKUPPATH/world_`date "+%m.%d.%Y"`-$i ]
	   then
		 continue
	   else
		 as_user "cd $MCPATH && cp -r world $BACKUPPATH/world_`date "+%m.%d.%Y"`-$i"
		 break
	   fi
	 done
   else
	 as_user "cd $MCPATH && cp -r world $BACKUPPATH/world_`date "+%m.%d.%Y"`"
	 echo "... sauvegarde du world OK"
   fi
   echo "Sauvegarde du repertoire des plugins serveur..."
   if [ -d $BACKUPPATH/plugins_`date "+%m.%d.%Y"` ]
   then
	 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
	 do
	   if [ -d $BACKUPPATH/plugins_`date "+%m.%d.%Y".tar`-$i ]
	   then
		 continue
	   else
		 as_user "cd $MCPATH && cp -r plugins $BACKUPPATH/plugins_`date "+%m.%d.%Y"`-$i"
#        as_user "tar -cf $BACKUPPATH/plugins_`date "+%m.%d.%Y"`.tar-$i  --exclude 'dynmap/*' $MCPATH/plugins/"
		 break
	   fi
	 done
   else
	 as_user "cd $MCPATH && cp -r plugins $BACKUPPATH/plugins_`date "+%m.%d.%Y"`"
	 echo "... sauvegarde des plugins OK"
   fi
   echo "Backup complete"
   echo "`date`"
}


#Start-Stop here
case "$1" in
  start)
	mc_start
	;;
  stop)
	mc_stop
	;;
  restart)
	mc_stop
	mc_start
	;;
  backup)
	mc_saveoff
	mc_backup
	mc_saveon
	;;
  status)
	if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
	then
	  echo "$SERVICE is running."
	else
	  echo "$SERVICE is not running."
	fi
	;;

  *)
  echo "Usage: /etc/init.d/minecraft {start|stop|backup|status|restart}"
  exit 1
  ;;
esac

exit 0
chmod +x /etc/init.d/mc-server_startscript.sh
update-rc.d mc-server_startscript.sh defaults
ln -s /etc/init.d/mc-server_startscript.sh mc-server_startscript.sh 

 

Activer les sauvegardes automatique quotidienne

crontab -e
0 10 * * * /home/minecraft/mc-server_startscript.sh backup
30 9 * * * find /home/minecraft/backups/mc-server -mtime +15 -exec rm -rf {} \; >/dev/null
 

 

Création d’alias pour se facilité la vie

vi ~.bashrc
alias start-minecraft='/home/minecraft/mc-server_startscript.sh start'
alias status-minecraft='/home/minecraft/mc-server_startscript.sh status'
alias stop-minecraft='/home/minecraft/mc-server_startscript.sh stop'
alias restart-minecraft='/home/minecraft/mc-server_startscript.sh restart'
alias backup-minecraft='/home/minecraft/mc-server_startscript.sh backup'

Lancer le serveur

start-minecraft

Afficher son status

status-minecraft

Arreter le serveur

stop-minecraft

Redémarrer le serveur

restart-minecraft

Lancer une sauvegarde

backup-minecraft

J’espère que mon article vous à plû. N’hésiter pas à me laisser un commentaire.

Bon jeu !

  • Elpico

    Bonjour ,j’ai installer debian sur clef usb et a la deuxieme comment on me demande le disque sa me pose donc probleme .
    Merci d’avance !

    • pazpop

      Bonjour Elpico,

      J’ai bien peur de ne pas bien comprendre ta question. Peux-tu, s’il te plait, être plus précis ?

      Ici, il s’agit d’une ‘tuto’ pour installer Minecraft et non pas d’une installation de Debian. De plus, il faut comprendre qu’il faut avoir un minimum de connaissance sur un système GNU/Linux afin de suivre ce tutoriel 🙂

      En attente de ta réponse,
      pazpop.

  • PlugIT

    Bonjour, le crontab ne fonctionne pas pour moi debian 8

    • pazpop

      Salut,

      Peux tu m’en dire plus sur ton problème ? De quelle crontab parles tu ? Peux tu coller le résultat de la commande crontab -l ?

      Personnellement, mon serveur Minecraft tourne sur Debian 8 et je n’ai pas de problème avec mes crontab… Tu dois surement avoir un problème de syntaxe.

      Bonne journée,
      ++

  • Snyd3rs

    Bonjour, je possède un multiserveur mais le problème c’est que je ne peut pas démarrer plusieurs serveurs. Je peut en faire tourner qu’un seul, sinon il me mette « Tried to start but spigot.jar was already running! ».
    Voilà ma config pour un serveur banal, mon pvpfac: http://pastebin.com/zkdxp61d

    Je pense qu’il faut modifier le Service pour chaque serveur, mais je ne sais pas du tout comment faire…
    Pourriez-vous m’aider ?

    Merci d’avance !

    • pazpop

      Salut, je comprends ton problème car moi-même, j’ai été confronté à celui-ci. En effet, sur mon serveur dédié, j’ai également deux serveurs Minecraft ; un de production et un pour faire des tests.

      La solution que j’ai utilisée n’est pas franchement propre mais elle fonctionne parfaitement bien. De plus, elle est très facile à mettre en place.

      Sur ton serveur A :
      Tu as le script mc-server_startscript.sh

      Sur ton serveur B :
      Tu dois copier le script mc-server_startscript.sh et lui donner le nom mc-server-2_startscript.sh (tu peux utiliser un autre nom mais il doit être diffèrent que le script du serveur A).
      Ensuite, tu dois éditer le script du serveur B et changer le paramètre SERVICE=’spigot.jar’ en SERVICE=’spigot-serverb.jar’
      Pour fini, dans le répertoire du serveur B, renomme le fichier ‘spigot.jar’ en ‘spigot-serverb.jar’.

      Cette solution marche pour moi. N’hésite pas a me recontacter si tu rencontres un autre problèmes 🙂

      Bonne journée,
      ++

      • Snyd3rs

        Merci pour ce tutoriel supplémentaire !
        J’ai fais tout ce que vous avez dit, je vous tiens au courant, normalement ça marche 🙂

        • Snyd3rs

          Voilà donc mes scripts marchent séparemment, mais par contre quand j’essaye de « stop » mon script:
          Ils me mettent spigot-[nom-serveur].jar could not be shutdown.. still running..

          Alors que ce $SERVICE est tout seul à s’appeler comme ça.
          C’est vraiment embêtant car du coup mais mes restart automatique ne fonctionne pas.

          Cordialement,
          merci d’avance !

  • Snyd3rs

    Re-salut !

    Je re-poste une discussion car c’est pour autre un problème.
    Voilà, j’ai mis tout les scripts parfaitement, le seul problème c’est que quand j’essaye de faire la commande pour « Stop » mon serveur, ils me disent:
    spigot-« monserveur ».jar could not be shut down… still running

    Pourtant j’ai un spigot.jar propre à chaque serveur, mais là il refuse de fermer le serveur, donc mes scripts quotidien (de restart) ne marche donc pas.

    Comment faire ?
    Peut être que d’autres personne auront le même problème que moi

    • pazpop

      Salut,

      J’ai peut être une explication à ton erreur mais j’aimerai tester un trucs avant. Je vais certainement patcher le script que j’ai écrit mais je ne pourrais le faire que ce soir 🙂

      Je te tiens au courant.
      ++

      • Snyd3rs

        D’accord merci beaucoup

        • pazpop

          Bonjour,

          Je suis vraiment désolé mais en ce moment j’ai beaucoup de travail et je n’ai pas pris le temps de te répondre plutôt.
          J’espère que tu as pu trouver une solution à ton problème.

          A bientôt.
          ++

  • FrozenSquid

    Salut, comment voir la console avec les logs?
    Quand je vais sur le screen crée, y juste le terminal, sans l’affichage des logs du serveur..
    Merci

    • pazpop

      Salut,

      Tu trouveras plus d’informations dans cet article :
      http://pazpop.fr/gnu-screen-ou-le-demultiplicateur-de-terminal/

      Sinon, pour rattacher le screen : screen -r

      Sinon, lors de la création du screen, tu peux générer un fichier de log avec le paramètre « L ». Exemple : screen -dmSL minecraft $INVOCATION

      De souvenir, le log sera créé dans le répertoire courant lors du lancement de la commande screen. Dans notre cas, ça sera dans MCPATH.

      J’espère avoir répondu à ta question.

      Bonne journée,
      ++

      PS : J’oubliais, tu peux également lire les logs du serveur Minecraft dans le répertoire MCPATH/logs

  • imolga

    bonjour,
    a la ligne de commande:

    cp spigot-1.8.jar ../mc-server/spigot.jar
    il m’annonce : « cp: impossible d’évaluer « spigot-1.8.jar »: Aucun fichier ou dossier de ce type »
    je suis en 1.11.2 a l’heure ou je poste ce message, donc j’essaye de remplacer le 1.8 par 1.11, par 1.11.2 …
    rien y fait, je n’ arrive pas.
    pourriez vous m’aider ?
    sinon très bon tuto.
    merci d’avance.

  • imolga

    bonjour !
    problème résolu. j’ai changé le spigot.1.8.jar en BuildTools.jar .
    en revanche, quand je lance le serveur, il m’affiche :
    Loading BuildTools version: git-BuildTools-8aa3a22-59 (#59)
    BuildTools
    unconfigured@null.spigotmc.org
    Starting clone of https://hub.spigotmc.org/stash/scm/spigot/craftbukkit.git to CraftBukkit
    et ne bouge plus et je peux taper mais dans le vide (rien ne précède ce que je tape)
    merci d’avance.