services:ludo.chapril.org
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| services:ludo.chapril.org [2026/04/11 17:40] – supprimée - modification externe (Date inconnue) 127.0.0.1 | services:ludo.chapril.org [2026/04/11 17:40] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. pitchum | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Service ludo.chapril.org ====== | ||
| + | |||
| + | Minetest, initialement inspiré par le jeu non libre Minecraft, a évolué et permet non seulement des modifications mais de créer des jeux à part entière. Le moteur de jeu est maintenant un projet séparé qui se nomme Luanti et les jeux font appel à Luanti pour fonctionner. Minetest à son tour a évolué dans plusieurs projets qui ont pris des directions différentes: | ||
| + | * Minetest/ | ||
| + | * VoxeLibre qui veut rester proche de Minecraft mais tout en s' | ||
| + | * Mineclonia qui est un fork de VoxeLibre lorsqu' | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Les instances existantes au sein du Chapril sont : | ||
| + | * [[services: | ||
| + | * [[services: | ||
| + | |||
| + | |||
| + | ===== Installation façon Chapril ===== | ||
| + | |||
| + | ==== VM ==== | ||
| + | |||
| + | Création de la VM [[admin: | ||
| + | |||
| + | |||
| + | ==== 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' | ||
| + | Si on clique sur le CI et dans l' | ||
| + | Malheureusement le jeu minetest originel est une dépendance forte pour le moment et doit être installé même si nous n' | ||
| + | https:// | ||
| + | On peut ensuite installer les paquets nécessaires, | ||
| + | <code bash> | ||
| + | cd debian/ | ||
| + | dpkg -i luanti-server_*.deb luanti-data_*.deb luanti-game-minetest_*.deb | ||
| + | apt -f install | ||
| + | </ | ||
| + | |||
| + | Créons l' | ||
| + | <code bash> | ||
| + | mkdir -p / | ||
| + | </ | ||
| + | |||
| + | Le paquet luanti permet déjà de lancer de multiple jeux grâce a systemd. Le jeu configuré par défaut n' | ||
| + | |||
| + | <code bash> | ||
| + | systemctl stop luanti-server.service | ||
| + | systemctl disable luanti-server.service | ||
| + | </ | ||
| + | |||
| + | Nous avons besoin de créer un utilisateur pour lancer le service: | ||
| + | <code bash> | ||
| + | adduser --disabled-password --system --home / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | 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 ''/ | ||
| + | <code bash> | ||
| + | mkdir / | ||
| + | </ | ||
| + | Et créons le fichier /// | ||
| + | <code ini> | ||
| + | [Service] | ||
| + | DynamicUser=no | ||
| + | User=luanti | ||
| + | Group=games | ||
| + | SupplementaryGroups=games | ||
| + | RemoveIPC=yes | ||
| + | PrivateTmp=yes | ||
| + | NoNewPrivileges=yes | ||
| + | RestrictSUIDSGID=yes | ||
| + | ProtectSystem=strict | ||
| + | PrivateDevices=yes | ||
| + | ReadWritePaths=/ | ||
| + | Environment= | ||
| + | Environment=MINETEST_USER_PATH=/ | ||
| + | Environment=MINETEST_MOD_PATH=/ | ||
| + | Environment=LUANTI_GAMEID=instancegame | ||
| + | </ | ||
| + | Puis activons ces changements: | ||
| + | <code bash> | ||
| + | systemctl daemon-reload | ||
| + | </ | ||
| + | |||
| + | Créons un utilisateur pour la base de donnée: | ||
| + | <code bash> | ||
| + | su -l postgres -c " | ||
| + | </ | ||
| + | On pourra générer un mot de passe avec un outil de génération comme '' | ||
| + | Le mot de passe devra est stocké dans le fichier de secrets ''/ | ||
| + | <code bash> | ||
| + | touch / | ||
| + | chown root: / | ||
| + | chmod 0500 / | ||
| + | </ | ||
| + | On entrera l' | ||
| + | <code bash> | ||
| + | db-password: | ||
| + | </ | ||
| + | (avec < | ||
| + | |||
| + | 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 " | ||
| + | </ | ||
| + | ==== 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, | ||
| + | * 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' | ||
| + | * 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' | ||
| + | * un fichier de configuration ''/ | ||
| + | * 3 bases de données Postgresql nommées '' | ||
| + | * un sous-dossier dédié pour les données du jeu qui ne sont pas dans les bases de données dans ''/ | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | On crée le fichier de configuration ''/ | ||
| + | <code ini> | ||
| + | server_name = Chapril - < | ||
| + | server_description = Instance Luanti / < | ||
| + | motd = Bienvenu à tous ! | ||
| + | |||
| + | server_url = https:// | ||
| + | server_announce = false | ||
| + | ipv6_server = false | ||
| + | port = < | ||
| + | prometheus_listener_address = 127.0.0.1:< | ||
| + | |||
| + | # superadmin | ||
| + | name = Duck | ||
| + | </ | ||
| + | |||
| + | On crée les bases de données: | ||
| + | <code bash> | ||
| + | su - postgres | ||
| + | createdb -O luanti luanti-world-< | ||
| + | createdb -O luanti luanti-users-< | ||
| + | createdb -O luanti luanti-mods-< | ||
| + | </ | ||
| + | |||
| + | On crée les répertoires pour l' | ||
| + | <code bash> | ||
| + | mkdir -p / | ||
| + | mkdir -p / | ||
| + | chown luanti: / | ||
| + | chown luanti: / | ||
| + | </ | ||
| + | |||
| + | On va sur le site [[https:// | ||
| + | <code bash> | ||
| + | cd / | ||
| + | git clone < | ||
| + | cd instancegame | ||
| + | git checkout < | ||
| + | git submodule init | ||
| + | git submodule update | ||
| + | </ | ||
| + | //< | ||
| + | |||
| + | On va ensuite créer la configuration du monde ''/ | ||
| + | <code ini> | ||
| + | world_name = world | ||
| + | gameid = instancegame | ||
| + | |||
| + | backend = postgresql | ||
| + | pgsql_connection = host=127.0.0.1 port=5432 user=luanti password=< | ||
| + | |||
| + | player_backend = postgresql | ||
| + | pgsql_player_connection = host=127.0.0.1 port=5432 user=luanti password=< | ||
| + | |||
| + | mod_storage_backend = postgresql | ||
| + | pgsql_mod_storage_connection = host=127.0.0.1 port=5432 user=luanti password=< | ||
| + | |||
| + | auth_backend = postgresql | ||
| + | pgsql_auth_connection = host=127.0.0.1 port=5432 user=luanti password=< | ||
| + | |||
| + | mg_name = < | ||
| + | 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_filter = true | ||
| + | load_mod_xban2 = true | ||
| + | load_mod_areas = true | ||
| + | load_mod_markers = true | ||
| + | load_mod_markers_easy_recipes = true | ||
| + | load_mod_dumpnodes = true | ||
| + | |||
| + | ### instance specific mods | ||
| + | </ | ||
| + | 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. La liste ci-dessus est la liste des mods activés pour tous les jeux. | ||
| + | |||
| + | On active puis lance finalement le service: | ||
| + | <code bash> | ||
| + | systemctl enable luanti-server@< | ||
| + | systemctl start luanti-server@< | ||
| + | </ | ||
| + | |||
| + | ==== Installation des mods ==== | ||
| + | |||
| + | On va sur le site [[https:// | ||
| + | <code bash> | ||
| + | cd / | ||
| + | git clone < | ||
| + | </ | ||
| + | Souvent les mods n'ont pas de version définie mais si c'est le cas on peut vérifier la liste des 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' | ||
| + | |||
| + | Ensuite il est nécessaire d' | ||
| + | |||
| + | On relance le services: | ||
| + | <code bash> | ||
| + | systemctl restart luanti-server@< | ||
| + | </ | ||
| + | Puis on modifie le fichier ''/ | ||
| + | <code bash> | ||
| + | systemctl restart luanti-server@< | ||
| + | </ | ||
| + | |||
| + | ==== 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:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * dumpnodes (inclus dans minetestmapper): | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | La liste des mots interdits pour le mod filter est vides. L' | ||
| + | </ | ||
| + | |||
| + | ==== Installation des tools ==== | ||
| + | |||
| + | Les outils (tools) servent a mettre des scripts et fichiers associés que l'on va versionner au fur et à mesure de leur évolution. Ils servent notamment pour le monitoring, générer des rapports etc… | ||
| + | |||
| + | On va donc installer ces outils et créer un répertoire pour leurs logs: | ||
| + | <code bash> | ||
| + | cd / | ||
| + | git clone ssh:// | ||
| + | mkdir logs genfiles | ||
| + | </ | ||
| + | |||
| + | ==== Création du rapport d' | ||
| + | |||
| + | Les scripts dans ''/ | ||
| + | |||
| + | Tout d' | ||
| + | |||
| + | Ensuite '' | ||
| + | |||
| + | Le dernier script, '' | ||
| + | |||
| + | On va créer le lien vers la crontab pour que ce script soit lancé chaque jour: | ||
| + | <code bash> | ||
| + | ln -s / | ||
| + | </ | ||
| + | |||
| + | Pour chaque instance on crée un ticket et pour que le script d' | ||
| + | <code bash> | ||
| + | REDMINE_TICKET_ID=< | ||
| + | </ | ||
| + | avec < | ||
| + | ==== Génération des cartes ==== | ||
| + | |||
| + | Pour générer les cartes on va utiliser l' | ||
| + | |||
| + | On va avoir besoin de fichiers qui ne sont pas inclus dans le paquet pour le moment, mais le paquet est utile car le script principal doit être compilé. On va donc installer la version git: | ||
| + | <code bash> | ||
| + | mkdir / | ||
| + | git clone https:// | ||
| + | </ | ||
| + | Là encore un [[https:// | ||
| + | |||
| + | Pour faire un carte le script a besoin de données sur le jeu spécifique, | ||
| + | |||
| + | Ensuite pour créer des couleurs sur la carte il faut avoir des informations de couleur sur les blocs que l'on vient d' | ||
| + | |||
| + | Ensuite l' | ||
| + | |||
| + | Hormis la partie qui nécessite de taper une commande dans le jeu le reste a été automatisé dans le script // | ||
| + | <code bash> | ||
| + | ln -s / | ||
| + | </ | ||
| + | |||
| + | Pour publier ces cartes on met en place un serveur web et on crée le répertoire ou le script va aller générer les cartes: | ||
| + | <code bash> | ||
| + | apt install apache2 | ||
| + | mkdir / | ||
| + | </ | ||
| + | Puis on demande aux admins de créer un reverse proxy pour pouvoir y accéder depuis l’extérieur | ||
| + | ===== Procédures diverses ===== | ||
| + | |||
| + | ==== Gestion administrateur générale ==== | ||
| + | |||
| + | Pour comprendre les privilèges : https:// | ||
| + | |||
| + | Pour comprendre les commandes serveur : https:// | ||
| + | |||
| + | Donner un privilège | ||
| + | <code bash> | ||
| + | /grant < | ||
| + | </ | ||
| + | |||
| + | Révoquer un privilège | ||
| + | <code bash> | ||
| + | /revoke < | ||
| + | </ | ||
| + | |||
| + | Exclure un compte (ie le déconnecter du serveur, la personne peut revenir) | ||
| + | <code bash> | ||
| + | /kick < | ||
| + | </ | ||
| + | |||
| + | ==== Bannissement ==== | ||
| + | La documentation est disponible ici : https:// | ||
| + | |||
| + | Bannir un compte définitivement | ||
| + | <code bash> | ||
| + | /xban < | ||
| + | </ | ||
| + | |||
| + | Bannir un compte temporairement : | ||
| + | <code bash> | ||
| + | /xtempban < | ||
| + | </ | ||
| + | |||
| + | Le temps peut être exprimé en secondes, minutes, heures, jours, semaines, mois, années et les valeurs sont combinables, | ||
| + | |||
| + | Lister l' | ||
| + | <code bash> | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Dé-bannir un compte | ||
| + | <code bash> | ||
| + | /xunban < | ||
| + | </ | ||
| + | |||
| + | ==== Effacer un monde ==== | ||
| + | |||
| + | L' | ||
| + | |||
| + | * stopper le servive: '' | ||
| + | * supprimer les bases de données '' | ||
| + | * supprimer tous les fichiers dans ''/ | ||
| + | |||
| + | ===== Supervision ===== | ||
| + | Plusieurs sondes ont été mises en place pour surveiller le service Luanti. Les scripts personnalisés sont situés dans le répertoire ''/ | ||
| + | |||
| + | * le script '' | ||
| + | * le script '' | ||
| + | * le script '' | ||
| + | * on vérifie que le service '' | ||
| + | |||
| + | ===== Sauvegarde ===== | ||
| + | La sauvegarde globale des VMs permet de sauvegarder les données clés à savoir : | ||
| + | * le contenu du répertoire ''/ | ||
| + | * le contenu du répertoire ''/ | ||
| + | * les bases de données postgresql | ||
