Outils pour utilisateurs

Outils du site


admin:services:minetest.chapril.org

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
admin:services:minetest.chapril.org [2024/12/27 10:37] – supprimée - modification externe (Date inconnue) 127.0.0.1admin:services:minetest.chapril.org [2025/03/13 10:03] (Version actuelle) fhenry2
Ligne 1: Ligne 1:
 +<note important>Le service est en court de refonte et n'est plus accessible pour le moment.
 +La documentation est aussi en cours de remaniements.</note>
 +
 +====== 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 :
 +  * [[admin:services:minetest:voxelibre|VoxeLibre]] - Minetest avec de plus en plus d'innovations
 +  * [[admin:services:minetest:asuna|Asuna]] - Monde beau et coloré
 +
 +===== Installation façon Chapril =====
 +
 +==== VM ====
 +
 +Création de la VM [[admin:machines_virtuelles:ludo]] avec la procédure [[admin:procedures:creation_machine_virtuelle|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:
 +<code bash>
 +cd debian/output
 +dpkg -i luanti-server_*.deb luanti-data_*.deb luanti-game-minetest_*.deb
 +apt -f install
 +</code>
 +
 +Créons l'espace pour les données des différents jeux (on utilise /srv au Chapril, ce qui simplifie les sauvegardes):
 +<code bash>
 +mkdir -p /srv/minetest.chapril.org/{instances,mods}
 +</code>
 +
 +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:
 +
 +<code bash>
 +systemctl stop minetest-server.service
 +systemctl disable minetest-server.service
 +</code>
 +
 +Nous avons besoin de créer un utilisateur pour lancer le service:
 +<code bash>
 +adduser --disabled-password --system --home /srv/minetest.chapril.org/home --gecos "Minetest dedicated server" --ingroup games --force-badname Debian-minetest
 +</code>
 +
 +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:
 +<code bash>
 +mkdir /etc/systemd/system/luanti-server@.service.d
 +</code>
 +Et créons le fichier ///etc/systemd/system/luanti-server@.service.d/chapril.conf//:
 +<code ini>
 +[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
 +</code>
 +Puis activons ces changements:
 +<code bash>
 +systemctl daemon-reload
 +</code>
 +
 +Créons un base de donnée pour authentifier les utilisateurs (elle sera mise en commun pour tous les jeux):
 +<code bash>
 +su -l postgres -c "createdb -O minetest luanti-shared-auth"
 +</code>
 +==== 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>'' et ''luanti-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 jeu
 +    * ''mod_data'' qui est inutilisé car tout est dans la base de donnée ''luanti-mods-<jeu>'' mais le jeu recrée le répertoire malgré tout
 +    * ''worlds/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 monde ''world.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):
 +<code ini>
 +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
 +</code>
 +
 +On crée les bases de données:
 +<code bash>
 +su - postgres
 +createdb -O minetest luanti-world-<jeu>
 +createdb -O minetest luanti-users-<jeu>
 +createdb -O minetest luanti-mods-<jeu>
 +</code>
 +
 +On crée les répertoires pour l'instance et on donne les droits d'écriture au service dans certains répertoires:
 +<code bash>
 +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
 +</code>
 +
 +On va sur le site [[https://content.luanti.org/packages/?type=game|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:
 +<code bash>
 +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
 +</code>
 +//<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):
 +<code ini>
 +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
 +</code>
 +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:
 +<code bash>
 +systemctl start luanti-server@<port>-<jeu>.service
 +</code>
 +
 +==== Installation des mods ====
 +
 +On va sur le site [[https://content.luanti.org/packages/?type=mod|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:
 +<code bash>
 +cd /srv/minetest.chapril.org/instances/<port>-<jeu>/mods
 +git clone <git-url>
 +</code>
 +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>'').
 +
 +Attention, un mod peux avoir des dépendances listée sur sa page de description et dans ce cas il est nécessaire d'installer ces dépendances de la même facon.
 +
 +Ensuite il est nécessaire d'activer le mod et ses dépendances. Le nom d'un mod ne correspond pas forcément au nom du répertoire de l'installation. Le plus simple est tout simplement de relancer le service, ce qui va ajouter les bonnes entrée dans la configuration qu'il nous suffira d'activer.
 +
 +On relance le services:
 +<code bash>
 +systemctl restart luanti-server@<port>-<jeu>.service
 +</code>
 +Puis on modifie le fichier ''/srv/minetest.chapril.org/instances/<port>-<jeu>/worlds/world/world.mt'' ou l'on trouvera des entrées du type ''load_mod_<mod-name> = false''; on changera ''false'' en ''true'' pour le mod et ses dépendances, puis on relance a nouveau le service pour prendre en compte l'activation:
 +<code bash>
 +systemctl restart luanti-server@<port>-<jeu>.service
 +</code>
 +
 +==== Mods installés par défaut ====
 +
 +Certains mods seront installés et activés pour tous les jeux car ils sont importants pour la bonne gestion du services:
 +  * [[https://content.luanti.org/packages/Zughy/whitelist/|Whitelist]]: pour limiter les utilisateurs autorisés à se connecter
 +  * [[https://content.luanti.org/packages/rstcxk/filterpp/|filter]]: pour que les utilisateurs restent polis
 +  * [[https://content.luanti.org/packages/kaeza/xban2/|eXtended Ban 2]]: pour gérer les bannissement quand des utilisateurs ne respectent pas les CGU
 +  * [[https://content.luanti.org/packages/ShadowNinja/areas/|Areas]] (avec le mod optionnel [[https://content.luanti.org/packages/Sokomine/markers/|Markers]]): pour permettre de protéger des zones d'utilisateurs malintentionnés
 +
 +<WRAP center round todo 60%>
 +La liste des mots interdits pour le mod filter est vides. L'ancienne doc sur ce wiki faisait mention d'une lite de mots dans le fichier ''mod_storage/words.txt'' mais elle n'a pas été trouvée. Il faudra donc chercher une liste de mot et l'installer au bon format pour que le mod puisse l'utiliser.
 +</WRAP>
 +<WRAP center round todo 60%>
 +Le mod ''Areas'' n'a pas encore été testé mais semble prometteur. La configuration de la zone est un peu complexe en ligne de commande et c'est pour cela que le mod ''Markers'' a été ajouter pour simplifier la configuration de façon plus visuelle
 +</WRAP>
 +
 +===== Procédures diverses =====
 +
 +==== Gestion administrateur générale ====
 +
 +Pour comprendre les privilèges : https://docs.luanti.org/for-players/privileges/
 +
 +Pour comprendre les commandes serveur : https://docs.luanti.org/for-players/server-commands/
 +
 +Donner un privilège
 +<code bash>
 +/grant <player> <privilege>
 +</code>
 +
 +Révoquer un privilège
 +<code bash>
 +/revoke <player> <privilege>
 +</code>
 +
 +Exclure un compte (ie le déconnecter du serveur, la personne peut revenir)
 +<code bash>
 +/kick <player> [reason]
 +</code>
 +
 +==== Bannissement ====
 +La documentation est disponible ici : https://content.minetest.net/packages/kaeza/xban2/
 +
 +Bannir un compte définitivement
 +<code bash>
 +/xban <player_or_ip> <reason>
 +</code>
 +
 +Bannir un compte temporairement :
 +<code bash>
 +/xtempban <player_or_ip> <time> <reason>
 +</code>
 +
 +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
 +<code bash>
 +/xban_record <player_or_ip>
 +</code>
 +
 +Dé-bannir un compte
 +<code bash>
 +/xunban <player_or_ip>
 +</code>
 +
 +==== 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 :)
 +
 +  * stopper le servive: ''systemctl stop luanti-server@<port>-<jeu>.service''
 +  * supprimer les bases de données ''luanti-world-<jeu>'', ''luanti-users-<jeu>'' et ''luanti-mods-<jeu>''
 +  * supprimer tous les fichiers dans ''/srv/minetest.chapril.org/instances/<port>-<jeu>/data/worlds/world'' **sauf** ''world.mt''
 +
 +===== 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