samedi 23 octobre 2021

Créer un serveur E-Amusement sur un Raspberry Pi

Voici comment installer un serveur e-amusement, via bemaniutils, sur un Raspberry pi (testé sur un 2B et un 3B). Bemaniutils est un ensemble d'outils open source, principalement programmés en Python, permettant de manipuler certains types de fichiers utilisés par les jeux bemani, de décoder/consulter les paquets réseaux envoyés aux serveurs e-amusement, ... et inclus un serveur simulant le comportement des serveurs officiels.

On part du principe que l'on a une installation Raspbian 2021-05-07 toute fraîche. Après la configuration initiale, mettez à jour votre distribution :

sudo apt-get update
sudo apt-get upgrade

Installez ensuite les dépendances et outils nécessaires.

sudo apt install libssl-dev zlib1g-dev mariadb-server mariadb-client libmariadbclient-dev dnsmasq uwsgi nginx uwsgi-plugin-python3 python3-pip git python3-venv libopenjp2-7

Configurez ensuite votre serveur MariaDB

sudo mysql_secure_installation #mettez un mot de passe root et répondez oui au reste
sudo service mariadb restart
sudo mysql -u root -p #saisissez ensuite votre mot de passe root

Exécutez ensuite ces commandes SQL afin de créer la base et l'utilisateur associé (vous pouvez modifier le mot de passe ou le nom utilisateur)

CREATE DATABASE bemani;
CREATE USER 'bemani'@'localhost' IDENTIFIED BY 'motdepasse';
GRANT ALL PRIVILEGES ON bemani.* TO 'bemani'@'localhost';
FLUSH PRIVILEGES;
exit

Installez ensuite le compilateur Rust (installez-le avec la config par défaut)

curl https://sh.rustup.rs -sSf | sh

Quittez votre session bash et ouvrez-en une nouvelle afin de pouvoir appeler le compilateur Rust directement.

Clonez ensuite le repo git de bemaniutils

git clone https://github.com/DragonMinded/bemaniutils.git
cd bemaniutils

Modifiez ensuite le fichier requirements.txt (via nano par ex) afin de rajouter les 2 lignes suivantes ;

importlib-metadata==4.2.0
greenlet

Créez ensuite un environnement virtuel Python et installez les dépendances (cela peut prendre beaucoup de temps selon la puissance de votre Raspberry)

python3 -m venv /home/pi/bemaniutils/
source /home/pi/bemaniutils/bin/activate
pip3 install -r requirements.txt

Modifiez le fichier config/server.yaml :

  • Mettez le bon utilisateur/mot de base de base de donnée
  • Mettez l'adresse 192.168.100.1 comme adresse server et keepalive
  • Modifiez le secret_key
  • Adaptez les autres paramètres selon votre config et sauvegardez

Quittez ensuite l'éditeur et lancez un "ifconfig -a" afin de noter l'adresse mac de votre port réseau eth0.

Modifiez ensuite le fichier /etc/dnsmasq.conf en sudo et insérez la config suivante (pensez à remplacer <mac> par votre adresse mac).

no-resolv
address=/eamuse.konami.fun/192.168.100.1
dhcp-range=192.168.100.50,192.168.100.150,24h
dhcp-host=<mac>,192.168.100.1

Modifiez ensuite le fichier /etc/dhcpcd.conf en sudo afin de configurer l'IP fixe du Raspberry

interface eth0
static ip_address=192.168.100.1

Créez le fichier /etc/nginx/sites-available/server.nginx en sudo et insérez le contenu suivant (modifiez le port si vous le souhaitez)

server {
    listen 5730;
    server_tokens off;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/pi/bemaniutils/sock/services.sock;
    }
}

Créez le fichier /etc/nginx/sites-available/frontend.nginx en sudo et insérez le contenu suivant (modifiez le port si vous le souhaitez)

server {
    server_name _;
    listen 8573;
    server_tokens off;

    gzip on;
    gzip_types text/html text/css text/plain application/javascript application/xml application/json;
    gzip_min_length 1000;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/pi/bemaniutils/sock/frontend.sock;
    }

    location ^~ /static/ {
        include  /etc/nginx/mime.types;
        root /home/pi/bemaniutils/bemani/frontend/;
    }
}

Créez les liens symboliques de ces 2 fichiers dans /etc/nginx/sites-enabled

sudo ln -s /etc/nginx/sites-available/server.nginx /etc/nginx/sites-enabled/server.nginx
sudo ln -s /etc/nginx/sites-available/frontend.nginx /etc/nginx/sites-enabled/frontend.nginx

Créez le fichier /etc/uwsgi/apps-available/server.ini en sudo et insérez le contenu suivant

[uwsgi]
plugins = python3
chdir = /home/pi/bemaniutils
wsgi-file = /home/pi/bemaniutils/services.wsgi
callable = app
socket = /home/pi/bemaniutils/sock/services.sock
processes = 4
threads = 2
virtualenv = /home/pi/bemaniutils

Créez le fichier /etc/uwsgi/apps-available/frontend.ini en sudo et insérez le contenu suivant

[uwsgi]
plugins = python3
chdir = /home/pi/bemaniutils
wsgi-file = /home/pi/bemaniutils/frontend.wsgi
callable = app
socket = /home/pi/bemaniutils/sock/frontend.sock
processes = 4
threads = 2
virtualenv = /home/pi/bemaniutils

Créez les liens symboliques de ces 2 fichiers dans /etc/uwsgi/apps-enabled

sudo ln -s /etc/uwsgi/apps-available/server.ini /etc/uwsgi/apps-enabled/server.ini
sudo ln -s /etc/uwsgi/apps-available/frontend.ini /etc/uwsgi/apps-enabled/frontend.ini

Exécutez ces commandes dans le dossier bemaniutils

mkdir sock
./dbutils --config config/server.yaml create
cp bemani/wsgi/services.wsgi .
cp bemani/wsgi/frontend.wsgi .

Modifiez les 2 fichiers services.wsgi/frontend.wsgi afin d'indiquer d'utiliser le fichier config/server.yaml

Redémarrez votre Raspberry Pi.

Et voila ! Vous voici avec un serveur e-amusement fonctionnel (en dehors des étapes supplémentaires en fonction des jeux. Consultez README.md pour cela).

Il suffira de faire pointer votre jeu sur l'adresse http://192.168.100.1:5730 (sauf si vous modifiez le port dans la configuration nginx). Le Raspberry attribuera automatiquement une IP entre 192.168.100.50 et 192.168.100.150 aux machines connectées à celui-ci.

L'interface est accessible via l'adresse http://192.168.100.1:8573 (sauf si vous modifiez le port dans la configuration nginx)

samedi 20 mars 2021

Voyage au Japon (Mai 2019) - Le résumé

Ce billet correspond au résumé, jour par jour, de mon voyage au Japon en Mai 2019. C'est une sauvegarde de ce que j'avais sur le précédent blog.

J'ai mis à disposition la plupart des photos que j'ai prises ici : https://photos.cracrayol.org/#16071848661776

Lire la suite

lundi 15 mars 2021

13 Sentinels: Aegis Rim [PS4]

Si je devais résumer les jeux Vanillaware en quelques mots ce serait : graphismes de toute beauté, histoire travaillée et gameplay solide mais répétitif. Et 13 Sentinels: Aegis Rim ne déroge pas trop à la règle.

Lire la suite

mercredi 17 février 2021

Petite rando à Roquefixade (Ariège)

Ce week-end nous sommes allés faire une petite balade/rando du côté de Roquefixade (~1h30 de Toulouse), un petit village entre Foix et Lavelanet. Il est situé au pied d'une falaise, dans une cluse. On a eu de la chance, il faisait beau (alors que le jour d'avant, c'était pluie et grisaille). La  […]

Lire la suite

samedi 6 février 2021

Trover Saves The Universe [PS4/PSVR]

Trover Saves the Universe est un jeu de plateforme action 3D compatible VR. Le joueur incarne le Séant qui doit aider Trover, en le dirigeant, à retrouver Glorkon, l'inacteur. Celui-ci a capturé nos chiens en les plaçant dans les orbites de ces yeux, et a gagné, par la même occasion, une grande  […]

Lire la suite

dimanche 31 janvier 2021

Little Nightmares [PC] - C'est vraiment un petit cauchemar

Little Nightmares est un jeu de plateforme horrifique développé par Tarsier Studios et sorti en 2017 sur PC, PS4, Xbox One et Switch. Le joueur incarne Six, une petite fille âgée de 9 ans, vêtue d'un ciré jaune. On doit l'aider à s'enfuir d'un bateau où elle est prisonnière et de ses monstres qui  […]

Lire la suite

lundi 11 janvier 2021

Ori and the Will of the Wisps [Switch] - Joli conte et dextérité

Ori and the Will of the Wisps, de Moon Studio, est la suite directe de Ori and the Blind Forest (le jeu commence la ou c'est arrêté le premier). Il s'agit d'un jeu de plateforme 2D de type metroidvania, a l'esthétique très travaillé mais pas que. Pour ceux qui ont fait le premier jeu, vous ne serez  […]

Lire la suite

jeudi 24 décembre 2020

James Game Center (Juillet 2020)

J'ai remis les photos de la session de juillet 2020 au James Game Center, dans ma galerie photo. Les photos sont visibles ici : https://photos.cracrayol.org/#16088245443884

- page 1 de 3