Tutoriel en cours de rédaction Il faut corriger dasn ce tuto le contenu des scripts qui font désormais appel à Git et plus Mercurial
Pour simplifier le déploiement de nouvelles données auprès du client (fichiers image, son), du serveur (certaines primitives) voire des deux (fichiers de traduction, datasheets), il peut être intéressant de créer des scripts qui font l'opération rapidement.
C'est ce que nous avons fait pour nos serveurs, à l'aide de trois scripts qui gèrent plusieurs cas de figures. Attention, ceux-ci ne vous sont présentés que comme référence, car il sera peut-être nécessaire de les adapter à vos besoins/votre environnement.
L'architecture sur laquelle se basent ces scripts est celle détaillée dans Installation d'un serveur de patchs. Tous les noms commencent par script_
pour qu'ils soient listés les uns à côté des autres.
Grâce à ces scripts, nous pouvons :
patch_lirria.bnp
qui sera fourni lors d'un futur patch ;Ce script prend les data du client organisées dans un dépôt git dédié pour le client Lirria (khanat-data-client), où elles sont classées par répertoire futur de destination (lorsque nous travaillerons pour un serveur stable).
Pour l'heure, nous nous contentons de mettre à jour les .bnp des data mais bientôt tous ce mettera à jour (client compris).
#!/bin/bash # Script pour récupérer les data du dépôt # Puis en faire des .bnp # Dans le serveur de patch, prêt pour la # génération du patch suivant # On récupère les dernières datas du dépôt dans le répertoire, sur la branche lirria cd ~/patch_service/khanat-data-client git pull git checkout lirria # On va dans le répertoire de patch cd ~/patch_service # On copie les données récupérées for folder in ~/patch_service/khanat-data-client/data/ do cp -R $folder/fonts patch_lirria/ done for folder in ~/patch_service/khanat-data-client/data/ do cp -R $folder/kh/* patch_lirria/ done for folder in ~/patch_service/khanat-data-client/data/ do cp -R $folder/ryz/* patch_lirria/ done # On génère patch_lirria.bnp et on le met à sa place for i in patch_lirria/* ; do bnp_make -p $i ; done #rm ~/patch_service/patch_game/bnp/ for folder in ~/patch_service do cp $folder/patch_lirria/*.bnp ~/patch_service/patch_game/bnp/ done # On nettoie le répertoire de transit temporaire rm -Rf patch_lirria/* # On retourne à la racine du home cd ~
On doit avoir préparé un lot préalables de données clients (via le script ci-dessus Préparation de données clients Lirria pour un patch futur) qu'on souhaite désormais rendre disponibles via un patch avec ce script.
Si jamais on souhaite également mettre à jour des primitives, datasheets ou des données serveur, il faut préférer exécuter le script suivant : Création des données serveur d'un patch et activation de celui-ci.
Il suffira de remplir la release note si on le souhaite, puis, surtout, d'incrémenter de 1 le numéro de version de patch de Lirria.
#!/bin/bash set -o verbose # =================== IMPORTANT =================== # # Il faut juste incrémenter de 1 l'indice comme habituellement # Cela est proposé automatiquement à la fin, après # le patch-release # ### VERIFIER QU'ON A BIEN LISTE TOUS LES NOUVEAUX BNP DANS $PATCH_CLIENT_SYSTEM/patchgame/ryzom.xml ### DANS LE CAS OÙ ON A DÉCIDÉ DE PATCHER D'AUTRES BNP QUE CEUX GÉNÉRÉS AUTOMATIQUEMENT PAR ### LES DEUX SCRIPTS : # * script_mise_a_jour_data_serveur.sh # * script_regenerer_bnps_client.sh # Il faut alors modifier comme ci-dessous : # nano $PATCH_CLIENT_SYSTEM/patchgame/ryzom.xml # Ligne ajoutée pour les données issues du serveur : # <_Files type="STRING" value="dataserver.bnp"/> # On va dans le bon répertoire cd ~/patch_service # On génère un nouveau patch patch_gen updateProduct patch_game/ryzom.xml # On peut éditer la release note à cette occasion : nano patch_game/patch/index.php # On peut activer la mise à disposition du patch # Il suffit d'incrémenter de 1 les deux chiffres du fichier Lirria.version ci-dessous nano patch_game/patch/Lirria.version # On revient au départ cd ~
Ce script réalise la même opération que le script Création et activation d'un patch mais il effectue au préalable la mis à jour des données au niveau du serveur et d'éventuelles données communes au client et au serveur.
Il se sert d'un fichier kh_server.bnp
et les kh_translate_*.bnp généré automatiquement à partir des données des dépôts correspondant et des fichiers calculés pour le serveur de jeu.
Attention ce script stoppe le serveur de jeu le temps de recalculer les fichiers .packed_sheets, sheet_id.bin et visual_slot.tab. Il le relance à la fin de la procédure.
Il suffira de remplir la release note si on le souhaite, puis, surtout, d'incrémenter de 1 le numéro de version de patch de Lirria.
#!/bin/bash set -o verbose # =================== IMPORTANT =================== # Ce script stoppe et relance le shard tout seul # # Il sert à recalculer les packed_sheets, sheet_id.bin et # visual_slot.tab après que des changements de datasheets dans # khaganat-data aient été pullés. # Il est donc nécessaire de faire un patch client # qui est automatiquement mis en place à la fin du script # # Il faut juste incrémenter de 1 l'indice comme habituellement # # Cela est proposé automatiquement à la fin, après # l'éventuelle modification de la patch-release # # ------------- Editer ces variables --------------- # indiquer ici le dossier d'installation des sources RC export RYZOM_HOME=~/khanat-code export RYZOM_DATA_HOME=~/khanat-ressources export PATCH_CLIENT_SYSTEM=~/patch_service # ------------- Fin des variables --------------- # On va dans le répertoire des data cd $RYZOM_DATA_HOME # On met à jour les données avec la branche Lirria du dépot de data git pull https://git.khaganat.net/khaganat/khanat-ressources.git git checkout lirria # On stoppe le shard shard stop # supprimer les anciennes packed_sheets du dossier serveur et dossier client rm -f $RYZOM_HOME/code/ryzom/client/data/*.packed_sheets rm -f $RYZOM_HOME/code/ryzom/server/data_shard/*.packed_sheets rm -f $RYZOM_HOME/code/ryzom/common/data_common/visual_slot.tab # regénérer le fichier sheet_id.bin cd $RYZOM_HOME/code/build/bin ./make_sheet_id -o$RYZOM_DATA_HOME/leveldesign/game_elem/sheet_id.bin $RYZOM_DATA_HOME/leveldesign/game_elem $RYZOM_DATA_HOME/leveldesign/game_element $RYZOM_DATA_HOME/leveldesign/world $RYZOM_DATA_HOME/leveldesign/ecosystems $RYZOM_DATA_HOME/sound # regénérer les packed_sheets cd $RYZOM_HOME/code/ryzom/tools/sheets_packer ./sheets_packer # copier le nouveau visual_slot.tab aux bons endroit cp visual_slot.tab $RYZOM_HOME/code/ryzom/client/data/visual_slot.tab cp visual_slot.tab $RYZOM_HOME/code/ryzom/common/data_common/visual_slot.tab # On obtient dans $RYZOM_HOME/code/ryzom/client/data/ : # - les packed_sheets du client # - le fichier lmconts.packed # Dans $RYZOM_HOME/code/ryzom/common/data_common/ # - le visual_slot.tab # Dans $RYZOM_DATA_HOME/leveldesign/game_elem/ # - le sheet_id.bin # On copie les données nécessaires au client dans le répertoire de création du patch. # Cela inclue les fichiers de traduction rm -Rf $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_fr/* rm -Rf $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_en/* rm -Rf $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_wk/* rm -Rf $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_es/* rm -Rf $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_de/* rm -Rf $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_ru/* rm -Rf $PATCH_CLIENT_SYSTEM/kh_server/* cp $RYZOM_HOME/code/ryzom/common/data_common/database.xml $PATCH_CLIENT_SYSTEM/kh_server/ cp $RYZOM_HOME/code/ryzom/common/data_common/msg.xml $PATCH_CLIENT_SYSTEM/kh_server/ cp $RYZOM_HOME/code/ryzom/client/data/*.packed_sheets $PATCH_CLIENT_SYSTEM/kh_server/ cp $RYZOM_HOME/code/ryzom/client/data/*.packed $PATCH_CLIENT_SYSTEM/kh_server/ cp $RYZOM_HOME/code/ryzom/common/data_common/visual_slot.tab $PATCH_CLIENT_SYSTEM/kh_server/ cp $RYZOM_DATA_HOME/leveldesign/game_elem/sheet_id.bin $PATCH_CLIENT_SYSTEM/kh_server/ cp $RYZOM_DATA_HOME/translation/translated/*fr.* $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_fr/ cp $RYZOM_DATA_HOME/translation/translated/*en.* $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_en/ cp $RYZOM_DATA_HOME/translation/translated/*wk.* $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_wk/ cp $RYZOM_DATA_HOME/translation/translated/*es.* $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_es/ cp $RYZOM_DATA_HOME/translation/translated/*de.* $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_de/ cp $RYZOM_DATA_HOME/translation/translated/*ru.* $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_ru/ # On va dans le répertoire où on va générer le nouveau dataserver.bnp cd $PATCH_CLIENT_SYSTEM/dataserver/ bnp_make -p kh_translate_fr bnp_make -p kh_translate_en bnp_make -p kh_translate_wk bnp_make -p kh_translate_es bnp_make -p kh_translate_de bnp_make -p kh_translate_ru cd $PATCH_CLIENT_SYSTEM/ bnp_make -p kh_server rm $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_fr.bnp rm $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_en.bnp rm $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_wk.bnp rm $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_es.bnp rm $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_de.bnp rm $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_ru.bnp rm $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_server.bnp mv dataserver/kh_translate_fr.bnp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ mv dataserver/kh_translate_en.bnp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ mv dataserver/kh_translate_wk.bnp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ mv dataserver/kh_translate_es.bnp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ mv dataserver/kh_translate_de.bnp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ mv dataserver/kh_translate_ru.bnp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ mv kh_server.bnp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ read -p "Appuyer sur une touche pour continuer ." # On peut éventuellement ajouter dans $PATCH_CLIENT_SYSTEM/patchgame/bnp/ les autres .bnp qui doivent être patchés ### VERIFIER QU'ON A BIEN LISTE TOUS LES NOUVEAUX BNP DANS $PATCH_CLIENT_SYSTEM/patchgame/ryzom.xml # nano $PATCH_CLIENT_SYSTEM/patchgame/ryzom.xml # Ligne ajoutée pour les données issues du serveur : # <_Files type="STRING" value="dataserver.bnp"/> # On génère un nouveau patch patch_gen updateProduct patch_game/ryzom.xml read -p "Appuyer sur une touche pour continuer ." # On peut éditer la release note à cette occasion : nano patch_game/patch/index.php # On peut activer la mise à disposition du patch # Il suffit d'incrémenter de 1 les deux chiffres du fichier Lirria.version ci-dessous nano patch_game/patch/Lirria.version # On relance le shard shard start
Pour avoir plus de détail sur le programme pacth_gen Patch gen