====== Manager ====== {{ :fr:realization-of-video-771412_640.jpg?direct&450 |}} Présentation d'un outil python pour manipuler/gérer les process du serveur de jeu Ryzom Core pour Khanat. ===== Pre-requis ===== Il faut installer : * python3 On récupère les scripts Attention, dans la version de test on pointe sur mon repo khanat-code, a terme on sera sur la branche officielle git clone https://git.khaganat.net/aleajactaest/khanat-code.git cd khanat-code; git checkout feature/19-package-server-in-a-Docker-container; cd .. ===== programme ===== ==== Serveur ==== Le serveur de management est géré par un script. Il est lancé en tâche de fond et attend les commandes khanat-code/code/khaganat/tools/manage.py ==== Client ==== Il existe actuellement un client pour manipuler le serveur. A terme, il existera un autre client pour manipuler le serveur. [objectif l'intégrer à l'outil Web de management de khaganat - django] khanat-code/code/khaganat/tools/client.py ===== Installation ===== ==== Controler la présence des scripts ==== * khaganat/tools/manage.py * khaganat/tools/client.py ==== Création d'un certificat ==== Pour la création du certificat, nous utilisons la version TLS1.2. Vous retrouver dans le code un script python pour générer (pour le test) les certificats khanat-code/code/khaganat/tools/create_certificate.py Il génère (en autre) : * ca/private/cakey.pem : la clef de notre certificat racine * ca/certs/cacert.pem : le certificat racine * ca/appli/certs/applicert.pem : le certificat utilisé par tous les composant du Manager * ca/appli/certs/cachaincert.pem : concaténation du certificat racine & application * ca/appli/private/serverkey.pem : la clef du certificat du serveur (manager) * ca/appli/certs/servercert.pem : le certificat du serveur (manager) * ca/appli/private/clientkey.pem : la clef du certificat du client * ca/appli/certs/clientcert.pem : le certificat du client ==== Configuration ==== La configuration se compose de deux parties. - configuration général (port d'écoute, certificat, adresse réseau d'écoute - configuration de chacun des programmes (commande, répertoire de base, taille de la log et taille du buffer [config] # Define port listen (default 8000) port = 8000 # key keyfile = /home/gameserver/ca/appli/private/serverkey.pem # certificate certfile = /home/gameserver/ca/appli/certs/servercert.pem # certification to check signature ca_cert = /home/gameserver/ca/appli/certs/cachaincert.pem # address listen (default all port) address = ############################## ############################## # List all program we manage # ############################## ############################## ############################## # Admin Executor Service ############################## [aes] # command to launch the program command = ryzom_admin_service -A/home/gameserver/khanat/server -C/home/gameserver/khanat/server -L/home/gameserver/log/khanat --nobreak --fulladminname=admin_executor_service --shortadminname=AES # Path : where this program is launched path = /home/gameserver/khanat/server/ # size buffer log for each program launched (number line stdout) logsize = 1000 # buffer size (define value bufsize on subprocess.Popen, this buffer is use before read by manager) bufsize = 100 # Define other program ===== Utilisation ===== ==== Serveur ==== Démarrer le serveur nohup /home/gameserver/ext/khaganat/tools/manage.py --log info --show-log-console --filelog /home/gameserver/log/khanat/manager.log -c /home/gameserver/khanat/khaganat.cfg --launch-program 2>/dev/null 1>/dev/null 0 ==== Client ==== === Status de tous les programmes === contrôle l'état de tous les programmes (retourne "started" ou "stopped") /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STATUSALL" === Démarre tous les programmes === Démarre tous les programmes (retourne "started", "already-started" ou "crashed") /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STARTALL" === Arrête tous les programmes === Arrête tous les programmes (retourne "stopped") /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STOPALL" === Arrête le manager (et tous les programmes) === Arrête le manager (ainsi que tous les programmes) /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="SHUTDOWN" === Liste des programmes === Retourne la liste de tous les programmes disponible (démarré ou arrêté) /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="LIST" === Status d'un programme === contrôle l'état de d'un programme (retourne "started" ou "stopped") /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STATUS" --program="aes" === Démarre d'un programme === Démarre un programme (retourne "started" ou "stopped") /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="START" --program="aes" === Arrête un programme === Arrête un programme (retourne "stopped") /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="STOP" --program="aes" === Retourne la log d'un programme === Retourne les X derniers messages de la sortie standard (stdout) d'un programme. firstline: première ligne que vous souhaitez récupérer /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="LOG" --program="aes" --firstline=0 === Envoyer une entrée dans un programme === Envoie dans l'entrée du programme une action (Ex. help) /home/gameserver/ext/khaganat/tools/client.py --key /home/gameserver/ca/appli/private/clientkey.pem --cert /home/gameserver/ca/appli/certs/clientcert.pem --ca_cert /home/gameserver/ca/appli/certs/cachaincert.pem --log="info" --show-log-console --command="ACTION" --program="aes" --action="help all" Souvent utilisé avec la commande "LOG" qui permet de voir le résultat. ===== Fonctionnement ===== Le serveur "manager" se met en écoute "style" https. Il attend les commandes et les envoient à ces fils (chaque fils gère un programme) Nous utilisons le format REST pour communiquer avec le serveur (les données envoyées au format json). ===== A Faire ===== * Faisabilité d'une authentification pour séparer les droits en fonction des commandes