Présentation d'un outil python pour manipuler/gérer les process du serveur de jeu Ryzom Core pour Khanat.
Il faut installer :
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 ..
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
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
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) :
La configuration se compose de deux parties.
[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
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</dev/zero &
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 (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 (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 (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"
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"
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 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 (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 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
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.
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).