libreverse/README.md

8.7 KiB
Raw Blame History

Service LIBREVERSE

Service de mondes virtuels en 3D du candidat chaton de Libre en communs.

Responsable: Christian Momon (@cpm)

La première version de ce document est librement adaptée d'une fiche de Devinsy.

/!/!/!/!/!/!/!/!/!\

Rédaction en cours

/!/!/!/!/!/!/!/!/!\

Site web

Pour l'instant n'utilise pas de flux web. Cela n'empêchera pas les gens d'essayer d'aller sur la page web https://libreverse.chalec.org/.

Donc une page d'information permet d'apporter une réponse à ce cas, par exemple en donnant des informations sur comment se connecter, comment configurer son client, où trouver un client…

Il s'agit d'une simle page XHTML faite à la main et placée dans /var/www/libreverse.chalec.org/.

Installation basique

Installation d'un service nginx pour :

  • l'installation d'une page d'information sur comment se connecter à Libreverse ;
  • une redirection vers la page du service sur le site https://www.chalec.org/ ;
  • l'éventuel déploiement de StatoolInfos ;

Installer les paquets :

apt-get install nginx python3-certbot-nginx

Ouvrir les ports http (80) et https (443) :

ufw allow 'Nginx HTTP'
ufw allow 'Nginx HTTPS'

Configurer a minima le site web dans /etc/nginx/sites-available/libreverse.chalec.org :

server
{
    listen 80;
    listen [::]:80;

    server_name libreverse.chalec.org; 

    access_log /var/log/nginx/libreverse.chalec.org-access.log;
    error_log /var/log/nginx/libreverse.chalec.org-error.log;
}

Activer la configuration :

cd /etc/nginx/sites-enabled/
ln -s ../sites-available/libreverse.chalec.org

Vérifier que c'est bon et recharger :

nginx -t && systemctl reload nginx

Configurer le certificat SSl :

certbot --nginx 

Mettre beau le fichier /etc/nginx/sites-enabled/libreverse.chalec.org :

server
{
    listen 80;
    listen [::]:80;

    server_name libreverse.chalec.org;

    access_log /var/log/nginx/libreverse.chalec.org-access.log;
    error_log /var/log/nginx/libreverse.chalec.org-error.log;

    #return 302 https://$host$request_uri;
    return 302 https://libreverse.chalec.org$request_uri;
}

server
{
    set_real_ip_from  192.169.1.1;
    real_ip_header proxy_protocol;
    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl;

    server_name libreverse.chalec.org;

    access_log /var/log/nginx/libreverse.chalec.org-access.log;
    error_log /var/log/nginx/libreverse.chalec.org-error.log;

    ssl_certificate /etc/letsencrypt/live/libreverse.chalec.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/libreverse.chalec.org/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    root /var/www/libreverse.chalec.org;
    location = /
    {
            index index.xhtml;
    }
}

Vérifier que c'est bon et recharger :

nginx -t && systemctl reload nginx

Installation de Minetest

Ouvrir le port par défaut :

ufw allow 30000/udp

Installer le serveur Minetest :

apt-get install minetest-server minetestmapper

Pour privilégier le nommage des mondes, désactiver le monde par défaut :

systemctl stop minetest-server
systemctl disabled minetest-server
systemctl disabled minetest-server@minetest

Installer Postgresql :

apt-get install postgresql postgresql-contrib

Optimiser la configuration de Postgresql :

  • avoir au moins 512MB de mémoire disponible pour Minetest hors Postgresql ;
  • modifier /etc/postgresql/13/main/postgresql.conf :
-shared_buffers = 128MB                  # min 128kB
+shared_buffers = 512MB                  # min 128kB

Mineclone2

Install

Récupérer le zip :

Décompresser :

unzip mineclone2_6745.zip

Ranger dans l'arborescence de Minetest :

mv mineclone2 /usr/share/games/minetest/games/

Création d'un monde

Choisir un port et l'ouvrir (remplacer X par un chiffre dédié) :

ufw allow 3000X/udp

Créer un fichier de configuration élémentaire :

cp /etc/minetest/minetest.conf /etc/minetest/fooland.conf

Éditer le fichier de configuration /etc/minetest/fooland.conf :

- server_name = My Minetest server
+ server_name = Chalec  Mineclone2  Fooland

- server_description = Minetest server powered by Debian
+ server_description = Le libreverse pour tout le monde sur Chalec

-# server_address = game.minetest.net
+ server_address = libreverse.chalec.org

-# server_url = http://minetest.net
+ server_url = https://libreverse.chalec.org/

-port = 30000
+port = 3000X

- default_game = minetest
+ default_game = mineclone2

- motd = Welcome to Minetest. Enjoy your stay!
+ motd = Bienvenue sur le Libreverse de Chalec \o/

-# map-dir =
+map-dir = /srv/libreverse.chalec.org/worlds/fooland

- max_users = 15
+ max_users = 64

- enable_damage = false
+ enable_damage = true

- # disallow_empty_password = false
+ disallow_empty_password = true

Créer le dossier des mondes dans l'espace du service :

mkdir -p /srv/libreverse.chalec.org/worlds
chown Debian-minetest /srv/libreverse.chalec.org/worlds

Créer le nouveau monde :

systemctl start minetest-server@fooland.service

Le démarrer au prochain boot :

systemctl enable minetest-server@fooland.service

Tester le nouveau monde en se connectant avec un client Minetest.

Migration dans Posgreql

Créer un compte dédié (si pas déjà fait) :

    su - postgres -c "psql -c \"create user minetestdba with password 'XXXXXXXX'; \" "

Créer une base de données :

su - postgres -c "psql -c \"CREATE DATABASE minetestdb_fooland OWNER minetestdba; \""

Associer le compte dédié avec la base fraîchement créée :

su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE minetestdb_fooland TO minetestdba; \""

Définir la base de données dans /srv/libreverse.chalec.org/worlds/fooland/world.mt :

pgsql_connection = host=127.0.0.1 port=5432 user=minetestdba password=XXXXX dbname=minetestdb_fooland
pgsql_auth_connection = host=127.0.0.1 port=5432 user=minetestdba password=XXXXXX dbname=minetestdb_fooland
pgsql_player_connection = host=127.0.0.1 port=5432 user=minetestdba password=XXXXXX dbname=minetestdb_fooland

Migrer le nouveau monde vers le backend Postgres :

systemctl stop minetest-server@fooland.service
/usr/games/minetestserver --migrate postgresql --world /srv/libreverse.chalec.org/worlds/fooland
/usr/games/minetestserver --migrate-auth postgresql --world /srv/libreverse.chalec.org/worlds/fooland
/usr/games/minetestserver --migrate-players postgresql --world /srv/libreverse.chalec.org/worlds/fooland
chown Debian-minetest.games /srv/libreverse.chalec.org/worlds/fooland/world.mt
systemctl start minetest-server@fooland.service

Jouer

Liens utiles :

Génération une carte du monde

Migration du backend

La procédure utilise minetestmapper qui ne gère pas Postgresql, donc une étape va consister à convertir la base de donnée.

Copier temporairement la base :

su - postgres -c "psql -c \"CREATE DATABASE test with template minetestdb_libremine; \""

Copier temporairement l'arborescence du monde :

cp /srv/libreverse.chalec.org/worlds/libremine /srv/libreverse.chalec.org/worlds/test

Modifier le paramétrage de la base de données dans le fichier de paramétrage du monde :

sed -i 's/minetestdb_libremine/test/g' /srv/libreverse.chalec.org/worlds/test/world.mt

Migrer le backend du monde (minetestmapper ne sais pas gérer postgresql):

/usr/games/minetestserver --migrate sqlite3 --world /srv/libreverse.chalec.org/worlds/test
/usr/games/minetestserver --migrate-players sqlite3 --world /srv/libreverse.chalec.org/worlds/test

Correspondance des couleurs

Minetestmapper sait traduire les blocs Minetest en pixel de couleur mais Mineclone2 apporte de nouveaux blocs. La liste des correspondances de couleurs est donc à générer :

./mtsedit -m Mineclone2 -C > mineclone-colors.txt

Génération

/usr/games/minetestmapper -i /srv/libreverse.chalec.org/worlds/test/ -o /srv/libreverse.chalec.org/foo.png --colors /srv/libreverse.chalec.org/mineclone-colors.txt --draworigin --drawscale

Nettoyage

Supprimer la base temporaire :

su - postgres -c "psql -c \"DROP DATABASE test; \""

Supprimer l'arborescence temporaire :

rm -fr /srv/libreverse.chalec.org/worlds/test