libreverse/README.md

11 KiB
Raw Permalink Blame History

Service LIBREVERSE

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

Responsable: Guillaume Poujoulat (@Spartheon)

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

[TOC]

Site web

Pour l'instant pas d'utilisation 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 proxy_protocol;

    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

Installation

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/

- server_announce = false
+ server_announce = true

-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

IPV4 vs IPV6

Pour l'instant, pas trouvé comment activer et ipv4 et ipv6. Donc activation de ipv6 dans /etc/minetest/minetest.conf :

serverlist_url = v6.servers.minetest.net
ipv6_server = true

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

Module de protection de zone

Afin d'éviter le vandalisme, il est classique d'activer des fonctionnalités de protection de zone. Cela consiste à permettre au joueur de réserver une zone de blocs où il sera le seul à pouvoir casser/rajouter un bloc ou prendre/déposer dans un coffre.

Rappel : documentation d'installation d'un mod.

Le module node_ownership est très connu mais obsolète.

Le module areas semble à jour, maintenu et très utilisé (voir graphique). Notamment, ce module est utilisé sur Framinetest.

Télécharger l'archive, puis dézipper et renommer :

wget https://github.com/ShadowNinja/areas/archive/master.zip
unzip master.zip
mv areas-master areas

Déplacer dans le dossier du monde :

mkdir -p /srv/libreverse.chalec.org/worlds/libreverse/worldmods
systemctl stop minetest-server.service
mv areas /srv/libreverse.chalec.org/worlds/libreverse/worldmods/
systemctl start minetest-server.service

Une aide est disponible en tapant /help dans le jeu.

Les réglages se font dans /srv/libreverse.chalec.org/worlds/libreverse/worldmods/areas/settingtypes.txt.

Les zones sont stockées dans /srv/libreverse.chalec.org/worlds/libreverse/areas.dat (c'est au format JSON).

Gestion du SpawnPoint

Par défaut, tous les joueurs apparaissent et ré-apparaissent exactement au même point.

Une légère dispersion s'opère si le spawnpoint est au milieu d'un lac. En fait, cette dispersion est modeste.

Deux stratégies possibles : a) soit on sacralise un carré de 1400 cubes d'arêtes pour conserver un aspect pionner aux nouveaux arrivant ; b) soit on se fait plaisir là où on est et quand la zone ne sera plus très pionnière bah on déplace le spawnpoint plus loin (voire beaucoup plus loin).

En fait, la dispersion est plus modeste qu'espérée et de toute façon, au bout d'un moment, la zone d'arrivée ne sera plus pionnière.

En conséquence, le choix b) s'impose. Prévoir de déplacer le spawnpoint quand la zone n'est plus suffisamment pionnière.

Voir le fichier /etc/minetest/minetest.conf :

#    If this is set, players will always (re)spawn at the given position.
#    type: string
static_spawnpoint = 123, 4, 567