diff --git a/README.md b/README.md index f152ed4..c380a51 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,313 @@ 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 +``` + +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 : +* https://content.minetest.net/packages/Wuzzy/mineclone2/ +* cliquer sur le bouton `Download` + +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-minetester.games /srv/libreverse.chalec.org/worlds/fooland/world.mt +systemctl start minetest-server@fooland.service +``` + +## Jouer +Liens utiles : +- Mineclone2 : https://wiki.minetest.net/Games/MineClone_2/Differences_from_Minetest_Game +- Database backends : https://wiki.minetest.net/Database_backends +- Server commands : https://wiki.minetest.net/Server_commands +- Item strings : https://wiki.minetest.net/Itemstrings +- Privileges : https://wiki.minetest.net/Privilegesc + +## 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 +```