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)