Installer un serveur Minecraft sous GNU/Linux Debian 64bits

Minecraft est un jeu vidéo indépendant de type Bac à sable (construction complètement libre) développé par Markus Persson (Notch).
Ce jeu permet à ses joueurs de manipuler un monde en trois dimensions, construit entièrement de blocs à détruire, transformer et reconstruire. Jouable en solo ou en multijoueur, Minecraft permet d’explorer des cavernes sans fin, combattre divers ennemis, collecter des ressources et surtout bâtir des constructions immenses, parfois artistiques.

Voici un tutoriel qui permet d’installer un serveur Minecraft officiel sur une architecture Debian 5 en 64 bits sur un serveur dédier de type Dédibox d’Online ou kimsufi d’OVH.

Pour information : Les liens qui sont utilisés pour télécharger sont périmé, utiliser les dernières versions en allant sur les sites officiels des éditeurs.

1 – Installation de Java Runtime

apt-get install openjdk-6-jre

2 – Création user + installation serveur + installation mod + lancement du serveur (sans plugin)

useradd -d /home/minecraft -b /home/minecraft -m -s /bin/bash minecraft
passwd minecraft
su - minecraft
mkdir install && cd install

Dans les deux prochaines étapes, vous avez un choix à faire ; Soit vous souhaitez avoir un serveur sans mode donc choisir l’option 1 ou sinon, installer le mode craftbukkit en suivant l’option 2.

Option 1 : Télécharger la dernière version du serveur minecraft pour GNU/LINUX :

wget http://www.minecraft.net/download/minecraft_server.jar?v=1297459061673
mv minecraft_server.jar?v=1289500485639 minecraft_server.jar
mkdir /home/minecraft/srv_bukkit && cp minecraft_server.jar ../srv_bukkit

Option 2 : Télécharger la dernière version du mode bukkit :

wget http://bamboo.lukegb.com/browse/BUKKIT-CRAFTBUKKIT-JOB1-308/artifact/CraftBukkit-JAR/craftbukkit-0.0.1-SNAPSHOT.jar
mv craftbukkit-0.0.1-SNAPSHOT.jar craftbukkit.jar
cp craftbukkit.jar ../srv_bukkit
cd ../srv_bukkit

Lancer le serveur afin de vérifier que tout est fonctionnelle.
Pour info, la valeur « -Xmx2048M » est la quantité de RAM maximum que le serveur va alloué minecraft. La valeur « -Xms2048 » est la quantité de RAM minimum alloué à Minecraft. Si c’est deux valeurs sont différente, le garbage collector va de temps en temps nettoyer la RAM non utiliser et va essayé de revenir sur la valeur minimum de RAM alloué.

java -Xmx2048M -Xms2048M -jar craftbukkit.jar nogui
stop

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

su -
apt-get install screen
mkdir /home/minecraft/backups && mkdir /home/minecraft/backups/srv_bukkit
vim /etc/init.d/minecraft

Le script init :

#!/bin/bash
# /etc/init.d/minecraft
# version 0.3.2 2011-01-27 (YYYY-MM-DD)

### BEGIN INIT INFO
# Provides: minecraft
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Minecraft server
# Description: Starts the minecraft server
### END INIT INFO

#Settings
SERVICE='craftbukkit.jar'
USERNAME="minecraft"
MCPATH='/home/minecraft/srv_bukkit'
INVOCATION='java -Xmx2048M -Xms2048M -jar craftbukkit.jar nogui'
BACKUPPATH='/home/minecraft/backups/srv_bukkit/'

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 -dmS 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_update() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
    echo "$SERVICE is running! Will not start update."
  else
    MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\ | cut -d \" -f 2`
    as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
    if [ -f $MCPATH/minecraft_server.jar.update ]
    then
      if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
        then
          echo "You are already running the latest version of $SERVICE."
        else
          as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
          echo "Minecraft successfully updated."
      fi
    else
      echo "Minecraft update could not be downloaded."
    fi
  fi
}

mc_backup() {
   echo "Backing up minecraft world"
   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 "Backed up world"
   fi
   echo "Backing up the minecraft server executable"
   if [ -f "$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`.jar" ]
   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 [ -f "$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`-$i.jar" ]
       then
         continue
       else
         as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`-$i.jar\""
         break
       fi
     done
   else
     as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`.jar\""
   fi
   echo "Backup complete"
}

#Start-Stop here
case "$1" in
  start)
    mc_start
    ;;
  stop)
    mc_stop
    ;;
  restart)
    mc_stop
    mc_start
    ;;
  update)
    mc_stop
    mc_backup
    mc_update
    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|update|backup|status|restart}"
  exit 1
  ;;
esac

exit 0

On met en place le démarrage automatique du serveur minecraft au lancement du serveur dédier

chmod 755 /etc/init.d/minecraft
update-rc.d minecraft defaults
chmod +x /etc/init.d/minecraft
chown minecraft:minecraft /etc/init.d/minecraft

On lance le serveur :

su - minecraft
/etc/init.d/minecraft start

On vérifie et on stop :

screen -liste
screen -r
ctrl+a+x
/etc/init.d/minecraft stop

3 – Administration de base

Pour se mettre admin, il faut rajouter son pseudo dans le fichier ops.txt :

vim /home/minecraft/srv_bukkit/ops.txt

Liste des commendes de bases : http://www.minecraftwiki.net/wiki/Op

Pour modifier la config du serveur :

vim /home/minecraft/srv_bukkit/server.properties

Un reboot du serveur est nécessaire pour appliquer ces options.

4 – Sources

  • fouc

    La méthode est adaptable à d’autres distributions avec un peu de recherches. Merci pour la trame qui est très utile !

  • En effet, ce tuto est une méthodologie, elle peut être appliqué pour différents systèmes d’exploitations.
    Pour info, j’ai rajouté une petite explication supplémentaire sur les options de lancement d’une serveur Minecraft avec le système de garbage collector.

  • fouc

    Oui en adaptant le script à mon OS (Centos), j’ai vu cette subtilité. Je peux fournir le script pour les distrib associées sur demande ou te les fournir pour une alternative à ton post. Merci en tout cas et bon boulot 😉

  • Salut,

    Tout d’abord merci pour ton tuto, c’est clairement le plus simple et le mieux expliqué que j’ai trouvé sur la toile.
    Toutefois il me semble que la ligne « mkdir /home/minecraft/srv_bukkit && cp minecraft_server.jar ../srv_bukkit » comporte une erreur : « && » n’est pas reconnu comme commande alors j’ai du faire les deux commandes séparément.

    Merci pour tout !

    • Sinon, tu peux aussi utiliser le ;
      exemple : mkdir /home/minecraft/srv_bukkit ; cp minecraft_server.jar ../srv_bukki

      Merci 🙂

  • Bernard Bass

    Comment tester si le serveur fonctionne ?
    Quel launcher utiliser ?
    Pouvez vous ajouter la méthode ?

    Une relecture de ce que j’ai fais de mon côté ?
    Comment corriger ce qui ne fonctionne pas, je ne sais pas me connecter au serveur :
    https://www.visionduweb.eu/wiki/index.php?title=Minecraft#Installer_un_serveur_Minecraft