Workshop 29/09/15 – Raspberry Pi et BungeeCord

Les objectifs du jour

  • Installer, configurer Minecraft sur deux Raspberry Pi (version 2)
  • Installer, configurer BungeeCord sur l’un deux
  • Créer des portails permettant de passer d’un Raspberry Pi à un autre

Installer Minecraft sur un Raspberry Pi

L’installation de Raspbian se fait en suivant la documentation officielle: https://www.raspberrypi.org/documentation/installation/installing-images/README.md

On se connecte en ssh au Raspberry Pi et on met à jour les paquets installés

sudo apt-get update && apt-get upgrade

On installe screen parce que ça servira plus tard

sudo apt-get install screen

On crée un groupe et un utilisateur minecraft

sudo groupadd minecraft
sudo adduser --ingroup minecraft minecraft

On se déconnecte et on se reconnecte en tant que minecraft (important pour pouvoir lancer screen par la suite)

On crée un répertoire spigot, on se positionne dedans

mkdir spigot
cd spigot

On récupère un spigot.jar, soit en utilisant une version qu’on a déjà quelque part, soit en suivant les instructions à cette page: https://www.spigotmc.org/wiki/spigot-installation/. Attention, ne pas lancer la compilation sur le raspberry pi, il faut la faire sur une machine un peu performante.

On copie spigot.jar dans le répertoire spigot qu’on a créé avant.

On lance spigot une première fois (les paramètres de gestion de la mémoire peuvent changer en fonction de la version de java, si les bons ne sont pas utilisés, des indications sont données par spigot au lancement).

java -Xmx512M -jar spigot.jar

Lorsqu’il a fini de démarrer (avec un message disant qu’il faut accepter l’EULA), on l’arrete si nécessaire (« stop » au prompt) puis on modifie le fichier eula.txt en mettant « true » à la place de « false » puis on relance le serveur avec la même commande java.

Le serveur doit démarrer sans erreur. Lorsqu’il a fini de démarrer, il nous donne un prompt (invite de commande) en mettant un « > » au début d’une ligne.

La commande « help » permet de lister toutes les commandes disponibles, la commande « stop » permet d’arreter le serveur. Attention : il ne faut pas mettre de « / » avant les commandes.

On arrête donc le serveur pour pouvoir le configurer.

Configurer Minecraft sur un Raspberry Pi

On récupère les plugins qui nous intéressent et on les copie dans le répertoire spigot/plugins.

Pour l’instant, nous utilisons :

Pour que le serveur minecraft puisse communiquer correctement avec BungeeCord, il faut modifier les paramètres suivants :

  • Dans server.properties, online_mode=false
  • Dans bukkit.yml, connection_throttle: -1

On démarre le serveur minecraft en utilisant screen

screen -dmS spigot java -Xmx512M -jar spigot.jar

L’utilisation de screen fait que le terminal nous rend la main immédiatement. On peut retrouver la sortie de la commande java avec

screen -r spigot

Lorsqu’on est « dans spigot », on peut retourner à un terminal avec la combinaison de touches :

Ctrl+A, Ctrl+D

Installer BungeeCord sur un Raspberry Pi

On se connecte en SSH avec l’utilisateur principal (par défaut : pi//raspberry)

On crée un utilisateur bungee qui sera dans le groupe minecraft

sudo adduser --ingroup minecraft bungee

On se déconnecte et on se reconnecte en tant que bungee (important pour pouvoir lancer screen par la suite).

On crée un répertoire bungee, on se positionne dedans

mkdir bungee
cd bungee

On récupère un jar de BungeeCord en suivant les instructions à cette adresse : https://www.spigotmc.org/wiki/bungeecord-installation/.

On copie le jar dans le répertoire créé avant.

On lance BungeeCord une première fois pour qu’il crée tous ses fichiers de configuration.

java -Xmx256M -jar BungeeCord.jar

Lorsqu’il affiche une invite de commande, on peut l’arrêter avec la commande « end ».

Configurer BungeeCord sur un Raspberry Pi

La configuration de BungeeCord se fait dans le fichier « config.yml ». On commence par dupliquer le serveur « lobby » et on modifie les paramètres pour qu’ils correspondent à nos deux serveurs sur Raspberry Pi.

servers:
  raspi_un:
    motd: 'Le premier raspi'
    address: localhost:25566
    restricted: false
  raspi_deux:
    motd: 'Le second raspi'
    address: 192.168.0.12:25565
    restricted: false

Attention aux copié-collés, les espaces en début de ligne ont leur signification et marquent l’arborescence des données. En gras sont les paramètres que l’on peut modifier.

On configure le serveur sur lequel les utilisateurs vont tomber par défaut (dans la partie « listeners »)

default_server: raspi_un

Notre installation étant hors ligne, on modifie « online_mode » au début du fichier;

online_mode: false

On peut maintenant relancer BungeeCord en passant par screen

screen -dmS bungee java -Xmx256M -jar BungeeCord.jar

Créer des portails pour passer d’un Raspberry Pi à un autre

Avec un client minecraft, on se connecte à l’adresse de BungeeCord. Le client minecraft doit se comporter comme s’il se connectait au serveur « raspi_un » (configuration « default_server » de BungeeCord).

Pour créer un portail, on suit les instructions à cette page : https://www.spigotmc.org/resources/bungeeportals.19/. Le nom à passer à la commande « create » étant « raspi_deux » (ou le nom du serveur vers lequel on veut aller, tel que configuré dans BungeeCord).

Lorsqu’on passe dans le portail, après un petit délai, on spawn sur le serveur raspi_deux.

On constate que nous n’avons pas le choix du point de spawn (c’est celui configuré pour la map).

Permettre à des portails de spécifier les coordonnées d’arrivée

Un test est effectué avec le plugin AdvancedPortals (http://www.curse.com/bukkit-plugins/minecraft/advanced-portals). Lorsque le plugin est installé et qu’aucun portail n’est encore créé, les logs se remplissent de stack trace (EventException: could not pass event xxx, caused by NullPointerException).

Après analyse du code, il semble que ces erreurs ne surviennent que lorsqu’il n’y a pas encore de portail créé. A cet endroit : https://github.com/sekwah41/Advanced-Portals/blob/master/src/com/sekwah/advancedportals/Listeners.java#L171, il n’y a aucune vérification qui est faite sur la nullité des objets Portal et Portal.Portals.

Après quelque recherches, il semblerait que ce plugin ne soit plus maintenu et que d’autres problèmes surviennent même si on ne s’arrête pas aux erreurs précédentes. Il semblerait qu’une solution plus récente pour répondre à notre problématique serait le fork de BungeeSuite fait par AddStarMC, nommé geSuite (https://github.com/AddstarMC/geSuit). L’installation et le test de ces plugins sera l’objet du prochain workshop.

Conclusion

  • On sait installer et configurer Minecraft et BungeeCord sur Raspberry Pi. On sait qu’il est possible de passer d’un serveur à un autre in-game.
  • Il faut qu’on trouve un moyen de passer d’un serveur à un autre en choisissant les coordonnées d’arrivée.
  • L’information sur la configuration et les différent plugins Minecraft n’est pas très à jour et dure à trouver.

Objectifs des prochains Workshop

  • Tests de charge sur des Raspberry Pi
  • Portails inter-raspi