DSC_0464.jpg DSC_0001.jpg ESC_0133.jpg

 i need more coffee

Atteint depuis mon plus jeune âge d'hippopotomonstrosesquippedaliophobie (cultivez vous ça ne fera pas de mal) j'ai décidé de faire un blog sur ma maladie (be feeeaar..).
Blague à part c'est un blog totalement axé génie logiciel que vous trouverez ici. Du PHP, du J2EE, et évidement toutes les technologies qui leur sont liées.

Have fun !

Faire tourner Minecraft sur un serveur Debian 6

2 avril 2012Posté par : Kevin Danezis dans Java EE

On ne présente plus ce jeu hyper addictif qu'est Minecraft, son principal intérêt n'étant pas le graphisme mais bien l'aspect "sand game" qui nous confère des années de vagabondages sans fin :D

Petit récapitulatif de tuto trouvés à droite et à gauche pour faire une installation complète en mode service

Nous n'allons pas installer minecraft server à proprement parler mais un fork de minecraft qui embarque bien plus d'options pour le multijoueur : Bukkit.

Démarrage

Pour démarrer : connectez vous en root sur votre serveur

Installez la jre de java6 ainsi que screen qui servira au fonctionnement en tâche de fond de minecraft. Nous allons également préférer installer OpenJDK plutôt que le classique Java dans notre exemple.

sudo apt-get install openjdk-6-jre
sudo apt-get install screen

Dans mon cas je ne travail qu'avec l'éditeur emacs (d'autres préfèreront vim ou vi...), étape donc facultatif

sudo apt-get install emacs

Une fois l'installation terminée on va installer minecraft/bukkit.

cd /var
mkdir minecraft
cd minecraft
wget "XXXXX" -O "minecraft_server.jar"

Notez que pour obtenir la dernière version de bukkit, il faut consulter le site et chopper le lien wget pour leur dernière release dans la catégorie téléchargement recommandé. De plus j'ai renommé le jar en minecraft_server par pure fainéantise pour la suite du tuto.

Premiers Tests

A ce stade de l'installation vous devez être capable de lancer deux commandes :

java -version

Doit vous retourner la version 1.6.x de OpenJDK installé

java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui

Doit vous lancer votre serveur minecraft qui est à ce propos très long à démarrer la première fois vu qu'il génère 3 maps. Patience donc.

Mise en service

Placer son script en service nous épargnera de devoir conserver la console ouverte pour faire fonctionner le serveur.

Je remercie l'auteur de ce script : Xavier, je n'ai rien eu à faire d'autre que copier/coller ce script. Merci à lui.

emacs /etc/init.d/minecraft

Coller le code dedans :

#!/bin/bash
# /etc/init.d/minecraft

#Settings
SERVICE='minecraft_server.jar'
USERNAME="root"
MCPATH='/var/minecraft/'
BACKUPPATH='/var/minecraft/minecraft.backup/'

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 java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui"
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 SERVER BACKUP STARTING. Server going readonly...\"\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 SERVER BACKUP ENDED. Server going read-write...\"\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 SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\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
      as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
      echo "Minecraft successfully updated."
    else
      echo "Minecraft update could not be downloaded."
    fi
  fi
}

mc_backup() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
#    echo "$SERVICE is running! Will not start backup."
#  else
    echo "Backing up minecraft data"
    if [ -d $BACKUPPATH/world_`date "+%m.%d.%Y"` ]
    then
      for i in 1 2 3 4 5 6
      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"`"
    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
      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
  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

Sauvegardez le fichier, et préparez le à l’exécution.

chmod 755 /etc/init.d/minecraft

Exécution

Le lancement du serveur se fait par cette commande :

/etc/init.d/minecraft start

D'autres commandes sont dispos :

  • start
  • stop
  • restart
  • status (donne l'état du serveur)
  • backup 

Voilà c'est finit. A vous la chasse au diamant.

via :

comments powered by Disqus