Ceci est une ancienne révision du document !
Table des matières
/!\ Le service est en court de refonte et n'est plus accessible pour le moment; la documentation est aussi en cours de remaniements
Service minetest.chapril.org
Minetest, initialement basé sur le jeu non libre Minecraft, a évolué et permet non seuleument des modification mais de créer des jeux à part entière. Maintenant le moteur de jeu se nomme Luanti et le jeu Minetest a évolué dans plusieurs projets qui ont pris des directions différentes: Minetest/MTG qui est le jeu original mais ne recoit qu'une maintenance minimale, Mineclonia qui prend le relay et Voxelibre qui veut rester proche mais tout en s'autorisant des innovations.
Les instances existantes au sein du Chapril sont :
Installation façon Chapril
VM
Création de la VM ludo avec la procédure Création d'une machine virtuelle « bling ».
Service de base Luanti
Luanti a été empaqueté dans Debian unstable mais n'est pas encore disponible en version stable; un backport est prévu mais il n'est pas encore prêt. L'un des mainteneur du paquet a créé une branche de travail sur Salsa et le paquet fonctionne déjà bien donc nous allons l'utiliser: https://salsa.debian.org/twrightsman/minetest/-/tree/debian/bookworm-backports?ref_type=heads Si on clique sur le CI et dans l'étape “build” on peut télécharger un zip et les packages donc on a besoin. Malheureusement le jeu minetest originel est une dépendance forte pour le moment et doit être installé même si nous n'allons pas l'utiliser. Ce paquet est en cours d'acceptation dans Debian et doit aussi être installé via Salsa comme le précédant en utilisant l'URL suivante: https://salsa.debian.org/games-team/luanti-game-minetest On peut ensuite installer les paquets nécessaires, ce qui va causer une erreur, attendue, car des dépendances manquent mais nous pouvons demander au gestionnaire de paquet de les installer pour nous:
cd debian/output dpkg -i luanti-server_*.deb luanti-data_*.deb luanti-game-minetest_*.deb apt -f install
Créons l'espace pour les données des différents jeux (on utilise /srv au Chapril, ce qui simplifie les sauvegardes):
mkdir -p /srv/minetest.chapril.org/{instances,mods}
Le paquet luanti permet déjà de lancer de multiple jeux grâce a systemd. Le jeu configuré par defaut n'étant pas utilisé nous allons le désactiver:
systemctl stop minetest-server.service systemctl disable minetest-server.service
Nous avons besoin de créer un utilisateur pour lancer le service:
adduser --disabled-password --system --home /srv/minetest.chapril.org/home --gecos "Minetest dedicated server" --ingroup games --force-badname Debian-minetest
Dans le paquet de Luanti chaque instance est lancée avec un utilisateur dynamique; c'est bien pour la sécurité mais celui nous empêche de stoker les données dans /srv comme c'est l'usage au Chapril. C'est pour cela que l'utilisateur crée précédemment sera utilisé mais nous allons malgré tout activer des mesures de sécurité pour compenser. Pour cela nous allons modifier la configuration systemd du service. Créons un répertoire pour mettre cette configuration:
mkdir /etc/systemd/system/luanti-server@.service.d
Et créons le fichier /etc/systemd/system/luanti-server@.service.d/chapril.conf:
[Service] DynamicUser=no User=Debian-minetest Group=games SupplementaryGroups=minetest RemoveIPC=yes PrivateTmp=yes NoNewPrivileges=yes RestrictSUIDSGID=yes ProtectSystem=strict PrivateDevices=yes ReadWritePaths=/srv/minetest.chapril.org/instances/%i Environment= Environment=MINETEST_USER_PATH=/srv/minetest.chapril.org/instances/%i Environment=MINETEST_MOD_PATH=/srv/minetest.chapril.org/mods Environment=LUANTI_GAMEID=instancegame
Puis activons ces changements:
systemctl daemon-reload
Créons un base de donnée pour authentifier les utilisateurs (elle sera mise en commun pour tous les jeux):
su -l postgres -c "createdb -O minetest luanti-shared-auth"
Organisation des sous-services
Chaque jeu est en fait un sous-service indépendant mais ils partagent quelques éléments en commun:
- la base de donnée des utilisateurs crée précédemment, qui sert a leur authentification
- des extensions au jeu, des `mods`, mais chaque jeu utilise uniquement une sélection parmi les mods disponibles
Pour chaque jeu nous avons décidé de l'organisation suivante (avec <port> le numéro de port réseau et <jeu> le nom du jeu en minuscule, à remplacer par les bonnes valeurs) :
- un port UDP dédié (chaque jeu écoute sur un port séparé)
- un port TCP dédié (chaque jeu fourni des métriques d'activités sur un port séparé), pour simplifier on utilise le même numéro que le port UDP
- un fichier de configuration
/etc/luanti/<port>-<jeu>.conf
- 3 bases de données Postgresql nommées
luanti-world-<jeu>
,luanti-users-<jeu>
etluanti-mods-<jeu>
- un sous-dossier dédié pour les données du jeu qui ne sont pas dans les bases de données dans
/srv/minetest.chapril.org/instances/<port>-<jeu>/
, qui contient a son tour:games/instancegame
qui contient le code du jeumod_data
qui est inutilisé car tout est dans la base de donnéeluanti-mods-<jeu>
mais le jeu recrée le répertoire malgré toutworlds/world/
qui contient les données du monde qui ne sont pas dans les bases de données ainsi que le fichier de configuration du mondeworld.mt
On crée le fichier de configuration /etc/luanti/<port>-<jeu>.conf
(en remplacant les valeurs, et avec <jeu-desc> le nom du jeu avec sa capitalisation usuelle):
server_name = Chapril - <jeu-desc> server_description = Instance Luanti / <jeu-desc> du Chapril motd = Bienvenu à tous ! server_url = https://www.chapril.org/cgu.html server_announce = false ipv6_server = false port = <port> prometheus_listener_address = 127.0.0.1:<port> # superadmin name = Duck
On crée les bases de données:
su - postgres createdb -O minetest luanti-world-<jeu> createdb -O minetest luanti-users-<jeu> createdb -O minetest luanti-mods-<jeu>
On crée les répertoires pour l'instance et on donne les droits d'écriture au service dans certains répertoires:
mkdir -p /srv/minetest.chapril.org/instances/<port>-<jeu>/data/games mkdir -p /srv/minetest.chapril.org/instances/<port>-<jeu>/data/worlds/world chown Debian-minetest: /srv/minetest.chapril.org/instances/<port>-<jeu> chown Debian-minetest: /srv/minetest.chapril.org/instances/<port>-<jeu>/data/worlds/world
On va sur le site ContentDB de Luanti qui contient la liste des jeux disponibles, on va sur la page de description du jeu, puis on clique sur le lien intitulé Source
pour aller chercher le code du jeu. Sur le nouveau site il nous faut trouver le lien avec le dépôt git que l'on nommera <git-url>, puis on installera le jeu ainsi:
cd /srv/minetest.chapril.org/instances/<port>-<jeu>/data/games git clone <git-url> instancegame cd instancegame git checkout <git-version> git submodule init git submodule update
<git-version> est la version du jeu a installer. Vous pouvez lister les versions disponibles avec git tag -ln
.
On va ensuite créer la configuration du monde /srv/minetest.chapril.org/instances/<port>-<jeu>/worlds/world/world.mt
(en remplacant les valeurs, avec <db-password> le mot de passe pour la base de donnée que l'on trouvera dans le fichier /etc/luanti/secrets
et <map-generator> qui est le nom du générateur de carte qui dépend des possibilités du jeu et du choix des animateurs):
world_name = world gameid = instancegame backend = postgresql pgsql_connection = host=127.0.0.1 port=5432 user=minetest password=<db-password> dbname=luanti-world-<jeu> player_backend = postgresql pgsql_player_connection = host=127.0.0.1 port=5432 user=minetest password=<db-password> dbname=luanti-users-<jeu> mod_storage_backend = postgresql pgsql_mod_storage_connection = host=127.0.0.1 port=5432 user=minetest password=<db-password> dbname=luanti-mods-<jeu> auth_backend = postgresql pgsql_auth_connection = host=127.0.0.1 port=5432 user=minetest password=<db-password> dbname=luanti-shared-auth mg_name = <map-generator> creative_mode = false enable_damage = true enable_pvp = false disable_fire = false enable_tnt = true load_mod_lib_chatcmdbuilder = true load_mod_whitelist = true load_mod_xban2 = true load_mod_filterpp_lib = true load_mod_warn = true load_mod_filterpp = true
Certains mods sont activé par défaut car utiles à la bonne gestion du serveur et leur utilité et installation est expliqué plus loin sur cette page.
La configuration générale du jeu, celle du monde, ainsi que la liste des mods pourront donner lieu à des ajustements selon les jeux, les désirs des joueurs et les décisions des animateurs.
On lance finalement le service:
systemctl start luanti-server@<port>-<jeu>.service
Installation des mods
On va sur le site ContentDB de Luanti qui contient la liste des mods disponibles, on va sur la page de description du mod, on vérifie qu'il est compatible avec les jeux avec lesquels on aimerait l'utiliser, puis on clique sur le lien intitulé Source
pour aller chercher le code du mod. Sur le nouveau site il nous faut trouver le lien avec le dépôt git que l'on nommera <git-url>, puis on installera le jeu ainsi:
cd /srv/minetest.chapril.org/instances/<port>-<jeu>/mods git clone <git-url>
Souvent les mods n'ont pas de version définie mais si c'est le cas on peut vérifier la liste des version (git tag -ln
) puis la sélectionner (git checkout <git-version>
).
Supervision
Plusieurs sondes ont été mises en place pour surveiller le service Minetest. Les scripts personnalisés sont situés dans le répertoire /srv/minetest.chapril.org/tools/monitoring/
, un lien dans /usr/local/lib/nagios/plugins/
permet de les rendre accessibles à nagios.
- le script
check_minetestchaprilorg_updateGames
vérifie que les jeux installés soient à jour - le script
check_minetestchaprilorg_updateMods
vérifie que les mods installés soient à jour - le script
check_minetestchaprilorg_services
vérifie que les services des instances soient UP et que les ports UDP correspondant soient en écoute - on vérifie que le service
postgresql@13-main.service
soit actif
Sauvegarde
La sauvegarde globale des VMs permet de sauvegarder les données clés à savoir :
- le contenu du répertoire
/etc/
- le contenu du répertoire
/srv/minetest.chapril.org/
- les bases de données postgresql
Procédures diverses
Effacer un monde
L'idée est de supprimer toutes les données pour recommencer une partie de zéro. Ou nettoyer un serveur de test :)
- supprimer la base de données
minetest-world-xxx
(données du monde) - supprimer la base de données
minetest-users-xxx
'(données des joueurs) - (quand minetest-server 5.7 sera dans les dépôts) supprimer la base de données
minetest-mods-xxx
' (données des mods) - supprimer le fichier instance_xxx/env_meta.txt (reset temps, localisation des joueureuses…)
- supprimer le fichier instance_xxx/map_meta.txt (pour génération d'une nouvelle seed et création d'une nouvelle map et en cas de changement de mode de génération de map)
- supprimer le fichier instance_xxx/awards.txt (les hauts-faits des joueuses et joueurs)
- supprimer le fichier instance_xxx/doc.mt (??)
- supprimer le fichier instance_xxx/settlements.txt (??)
Plus d'informations : https://wiki.minetest.net/Worlds
Installer un mod
- Récupérer le lien de téléchargement de l'archive du mod
- Télécharger l'archive avec wget et l'extraire dans
/srv/minetest.chapril.org/home/.minetest/mods
- Renommer le répertoire avec le nom technique du mod (voir la page contentdb pour trouver le nom technique)
- Activer le mod dans le fichier
world.mt
avec la directiveload_mod_<nom technique> = true
- Changer la propriété des fichiers ajoutés pour Debian-minetest:minetest
Plus d'informations : https://wiki.minetest.net/Installing_Mods/fr
Procédures de modération
Gestion des privilèges
Pour comprendre les privilèges : https://wiki.minetest.net/Privileges/fr
Pour comprendre les commandes serveur : https://wiki.minetest.net/Server_commands/fr
Donner un privilège
/grant <player> <privilege>
Révoquer un privilège
/revoke <player> <privilege>
Exclure un compte (ie le déconnecter du serveur, la personne peut revenir)
/kick <player> [reason]
Bannissement
La documentation est disponible ici : https://content.minetest.net/packages/kaeza/xban2/
Bannir un compte définitivement
/xban <player_or_ip> <reason>
Bannir un compte temporairement :
/xtempban <player_or_ip> <time> <reason>
Le temps peut être exprimé en secondes, minutes, heures, jours, semaines, mois, années et les valeurs sont combinables, par exemple “1Y3M3D7h” pour bannir 1 an, 3 mois, 3 jours et 7 heures.
Lister l'historique de bannissement pour un compte
/xban_record <player_or_ip>
Dé-bannir un compte
/xunban <player_or_ip>
Filtre automatique du chat
La documentation est disponible ici : https://github.com/minetest-mods/filter
Active le filtre automatique
/filtre enable
Ajouter un mot interdit
/filtre add <insult>
Lister les mots interdits
/filtre list
Les mots interdits sont stockés dans le “mod_storage”, actuellement un simple fichier.
Le mod est implémenté avec sa propre politique à savoir :
- 1ère occurrence : avertissement
- 2e et 3e occurrences : mis en muet pendant 1 minute
- au-delà, expulsion du compte du serveur
Modifier le code pour correspondre à la politique envisagée et pour changer les messages en français.
Antigrief
La documentation est disponible ici : https://notabug.org/tenplus1/protector
Le mod permet aux joueuses et joueurs de créer des blocs servant à protéger des zones. Les comptes ayant les droits admins sur le serveur peuvent passer outre ces protections.
Le mod est configurable.
Tester le mod et :
- voir s'il faut ajuster la configuration
- voir s'il faut activer ou désactiver des options spécifiques à ce mod
- décrire la configuration en vigueur.