LaboCraft

Ici vous trouverez un ensemble de recherches sur les outils et fonctionnalités que nous développons dans Rennecraft

  • 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
  • Poser les bases et les emprises des bâtiments

    Tout commence par l'emprise des bâtiments de Rennes

    Tout commence par l’emprise des bâtiments de Rennes

    À partir des données fournies par le SIG de rennes, puis de l’utilisation de WorldPainter pour faire sortir de terre les grandes lignes de la carte