La méthode préconisée pour tester correctement vos paquets est d’utiliser un échantillon de machines représentatif de votre parc. Donc plus votre parc est hétérogène, plus votre échantillon devra être large.
Cette démarche vise à confronter le paquet WAPT à une multitude de plateformes et d’environments afin qu’il devienne le plus abouti possible en régime de test, avant d’être basculé en production.
Un poste Microsoft Windows sans aucune mise à jour Windows Update : l’objectif est de détecter les mises à jour indispensables au bon fonctionnement du logiciel et adapter le paquet en conséquence ;
Un poste Microsoft Windows à jour avec les toutes dernières MàJ Windows Update : l’objectif est de détecter les mise à jour en conflit avec le logiciel et d’adapter le paquet en conséquence ;
Un poste avec peu de logiciels déjà installés : l’objectif est de détecter une dépendance possible à Java ou autre framework applicatif ;
Les postes avec beaucoup de logiciels déjà installés : l’objectif est de détecter un conflit avec une application existante;
Installer les anciennes versions du logiciel : il est possible que l’installeur ne supporte pas l’écrasement d’une installation précédente, dans ce cas il faudra prévoir la désinstallation des anciennes versions avant d’installer la nouvelle version ;
Les principes de création d’un paquet WAPT à partir d’un modèle depuis la console¶
Indication
Pour créer des paquets à partir de la console, il faut d’abord avoir installé l’environnement de développement WAPT tis-pyscripter.
Dans la console WAPT, cliquer sur Outils ‣ Créer un modèle de paquet depuis un installeur:
Les principes de création d’un paquet WAPT à partir d’un modèle depuis la console¶
Sélectionner l’installeur MSI téléchargé et renseigner les différentes informations demandées. Veillez bien à ce que le nom du paquet ne contienne pas de numéro de version.
Boîte de dialogue demandant des informations lors de la création du packaging WAPT dans la console WAPT¶
Deux solutions sont proposées:
Cliquer sur Créer et éditer (recommandée) pour lancer la personnalisation du paquet et l’adapter aux besoin spécifique de votre Organisation.
Cliquer sur Créer et Téléverser pour lancer la création et le chargement direct du paquet sur le serveur WAPT (non recommandé).
Attention
Le bouton Build and upload envoi directement le paquet dans le dépôt privé sans tester l’installation.
Cette méthode fonctionne assez bien avec les MSI car leur installation est standard.
Cependant la deuxième méthode qui consiste à tester localement le paquet d’abord puis à l’uploader est la méthode recommandée.
Editer le fichier control (architecture, impacted_process, target_os, description, maintainer …), veuillez vous référer à la structure du fichier documentation du fichier control.
Votre pyscripter s’ouvre, allez dans votre setup.py
Ajouter des propriétés supplémentaires en argument¶
Pour ajouter des propriétés supplémentaires on va les stocker dans un élément dict.
# -*- coding: utf-8 -*-fromsetuphelpersimport*uninstallkey=[]properties={'SERVER_REGISTER_AS_SERVICE':0,'SERVER_ADD_FIREWALL_EXCEPTION':0,}definstall():print(u'Installation en cours de TightVNC')install_msi_if_needed('tightvnc-2.8.5-setup-64bit.msi',properties=properties)
Note
Le setup.py aurait pu ressembler à cela, mais la méthode est moins élégante car elle fait moins de vérifications :
PyScripter - Ouverture du packaging WAPT de FirefoxESR¶
Editer le fichier control (architecture, impacted_process, target_os, description, maintainer …), veuillez vous référer à la structure du fichier documentation du fichier control.
Vérifier le contenu du fichier control. Mozilla Firefox-ESR ne répond pas aux standards et retourne un numéro de version erroné (il s’agit du numéro de version du logiciel qui créé l’installeur).
Il est à noter qu’une sous-version -1 a été ajoutée au numéro de version du logiciel ; il s’agit de la version de packaging du paquet WAPT.
Il permet au développeur de paquets de publier plusieurs versions de paquets WAPT d’un même logiciel, ce qui est très utile pour un développement très rapide et itératif.
Utiliser install_exe_if_needed
La fonction est sensiblement la même que celle utilisée pour les installeurs .msi, avec quelques différences :
La fonction nécessite l’ajout des flags silencieux en paramètre.
La fonction nécessite l’ajout de la clé de désinstallation en paramètre.
Liste des arguments disponibles avec install_exe_if_need¶
Options (Option par défaut)
Description
silentflags (par défaut None)
Paramètres silencieux à passer en argument à l’installeur.
key (par défaut None)
Clé de désinstallation du programme.
min_os_version
version minimale au dessus de laquelle il mettra à jour.
killbefore (par défaut None)
liste des programmes à tuer avant de lancer l’installation.
accept_returncodes (par défaut [0,3010])
codes de retour autres que 0 ou 3010 acceptés en retour par la fonction.
timeout (par défaut 300)
durée d’attente maximale d’installation (en secondes).
get_version (par défaut None)
valeur passée en paramètre pour le contrôle de version au lieu de celle retournée par la fonction installed_softwares
remove_old_version
supprimme automatiquement une ancienne version d’un logiciel dont la uninstallkey est identique
force (par défaut False)
force l’installation du logiciel même si une uninstall key avec une version identique est trouvée
Le paquet aura alors ce comportement :
Le logiciel Firefox s’installera uniquement si le logiciel n’est pas installé et si la version est strictement inférieure à 45.5.0, sauf si l’option --force est indiquée lors de l’installation du paquet.
A l’installation, les processus firefox.exe en cours d’exécution seront tués (avec la valeur indiquée dans impacted_process du fichier control).
La fonction ajoutera elle-même la clé de désinstallation, donc laisser l’argument uninstallkey vide.
A la fin de l’installation, la fonction ira vérifier si l”uninstallkey est bien présente sur le poste et si la version est bien égale ou supérieure à 45.5.0, si ce n’est pas le cas, elle basculera le paquet en ERROR.
Si vous laissez la clé de désinstallation vide, la désinstallation de votre paquet ne fonctionnera pas.
Cas particulier d’un dé-installeur non-silencieux¶
Dans certains cas particuliers, un paquet utilisant install_exe_if_needed remplit la clé de désinstallation, mais la clé de désinstallation pointe vers un désinstalleur non silencieux.
Il nous faut contourner le problème en utilisant une fonction qui va supprimer la clé de désinstallation à la fin de l’installation.
La fonction de désinstallation peut également être utilisée pour exécuter du code en plus de la désinstallation de logiciels, ex : supprimer un dossier, supprimer un raccourci …
Une fois que votre paquet est téléversé, rafraîchissez la liste des paquets en utilisant le bouton Actualiser les paquets disponibles ou en appuyant sur la touche F5 de votre clavier.
Les codes de retour sont utilisés pour indiquer si un logiciel a été correctement installé.
Avec Windows, le code standard de retour pour une installation réussie est [0].
Si vous savez que vos paquets WAPT s’installent correctement, mais que vous obtenez quand même un code de retour différent de [0], alors vous pouvez explicitement dire à WAPT d’ignorer le code d’erreur en utilisant le paramètre accept_returncodes.
Vous pouvez découvrir comment utiliser le paramètre accept_returncodes en explorant le code de ce paquet.
# -*- coding: utf-8 -*-fromsetuphelpersimport*importreuninstallkey=[]defis_kb_installed(hotfixid):installed_update=installed_windows_updates()if[kbforkbininstalled_updateifkb['HotFixID'].upper()==hotfixid.upper()]:returnTruereturnFalsedefwaiting_for_reboot():# Query WUAU from the registryifreg_key_exists(HKEY_LOCAL_MACHINE,r"SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired")or \
reg_key_exists(HKEY_LOCAL_MACHINE,r"SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending")or \
reg_key_exists(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Updates\UpdateExeVolatile'):returnTruereturnFalsedefinstall():kb_files=['windows10.0-kb4522355-x64_af588d16a8fbb572b70c3b3bb34edee42d6a460b.msu',]withEnsureWUAUServRunning():forkb_fileinkb_files:kb_guess=re.findall(r'^.*-(KB.*)-',kb_file)ifnotkb_guessornotis_kb_installed(kb_guess[0]):print('Installing {}'.format(kb_file))run('wusa.exe "{}" /quiet /norestart'.format(kb_file),accept_returncodes=[0,3010,2359302,-2145124329],timeout=3600)else:print('{} already installed'.format(kb_file))ifwaiting_for_reboot():print('A reboot is needed!')
… fabrique la variable pour le chemin C:\ProgramFiles(x86)\Mozilla\Firefox.
makepath(programfiles,'Mozilla','Firefox')
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
… vérifie que le répertoire C:\ProgramFiles(x86)\software est vide.
dir_is_empty(makepath(programfiles32,'software')):print('dir is empty')
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
… copie le dossier sources dans le répertoire C:\projet.
copytree2('sources','C:\\projet')
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
La commande registry_readstring vérifie si la clé de registre {8A69D345-D564-463c-AFF1-A69D9E530F96} existe dans le chemin de registre SOFTWARE\Google\Update\Clients de HKEY_LOCAL_MACHINE.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
La commande registry_readstring lit la valeur {8A69D345-D564-463c-AFF1-A69D9E530F96} stockée dans le chemin de registre SOFTWARE\Google\Update\Clients de HKEY_LOCAL_MACHINE.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
La commande registry_setstring modifie la valeur de la clé de registre TOUVersion stockée dans le chemin de registre SOFTWARE\Microsoft\WindowsLive de HKEY_CURRENT_USER.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
créer un raccourci personnalisé sur le bureau de l’utilisateur en cours¶
La commande create_desktop_shortcut crée le raccourci Gestion de la console WAPT dans le répertoire C:\Users\Public pointant sur C:\ProgramFiles(x86)\wapt\waptconsole.exe ; le raccourci est disponible pour tous les utilisateurs.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
La commande remove_desktop_shortcut supprime le raccourci WAPT Console Management du dossier C:\Users\Public ; le raccourci est supprimé pour tous les utilisateurs.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Si vous redémarrez l’installation à partir de pyscripter, vous remarquerez que le raccourci de bureau « all users » a disparu.
créer un raccourci personnalisé sur le bureau de l’utilisateur en cours¶
Un raccourci dans le menu démarrer
La commande create_programs_menu_shortcut crée le raccourci WAPT Console Management dans le menu démarrer pointant sur C:\ProgramFiles(x86)\wapt\waptconsole.exe ; le raccourci est disponible pour tous les utilisateurs.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Créer un raccourci personnalisé sur le bureau de l’utilisateur en cours¶
créer un raccourci personnalisé sur le bureau de l’utilisateur en cours¶
Indication
Ces fonctions sont utilisées avec le session_setup.
La commande create_user_desktop_shortcut crée le raccourci WAPT Console Management sur le bureau de l’utilisateur en pointant sur C:\ProgramFiles(x86)\wapt\waptconsole.exe.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
créer un raccourci personnalisé sur le bureau de l’utilisateur en cours¶
Indication
Ces fonctions sont utilisées avec le session_setup.
La commande create_user_programs_menu_shortcut crée le raccourci WAPT Console Management dans le menu de démarrage de l’utilisateur en pointant sur C:\ProgramFiles(x86)\wapt\waptconsole.exe.
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
La commande windows_version vérifie que la version de Windows est strictement inférieure à 6.2.0.
windows_version()<Version('6.2.0'):
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
… vérifie que le processeur de la machine est 64bits.
ifiswin64():print('Pc x64')else:print('Pc not x64')
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Renvoie les différentes localisations de Program Files
Par exemple, la commande programfiles64 renvoie le répertoire natif de Program Files, par exemple C:\ProgramFiles(x86) sur l’architecture win64 ou win32 et programfiles() renverra le chemin du répertoire Program Files 32bit, par exemple. ProgramsFiles(x86) sur une architecture win64, et ProgramsFiles sur une architecture win32.
Ces fonctions sont utilisées avec le session_setup
… renvoie le profil appdata itinérant de l’utilisateur courant (C:\Users\%username%\AppData\Roaming).
print(user_appdata())
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
… renvoie le profil appdata local de l’utilisateur courant (C:\Users\%username%\AppData\Local).
print(user_local_appdata())
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Récupérer la commande de désinstallation avec le registre¶
… renvoie la commande de désinstallation silencieuse.
uninstall_cmd('winscp3_is1')
"C:\Program Files\WinSCP\unins000.exe"/SILENT
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
Pour chaque élément de la liste renvoyée par installed_softwares contenant le mot-clé winscp.
Si la version dans la liste est plus petite que 5.0.2.
Alors lancer la désinstallation avec uninstall_cmd et en indiquant la uninstallkey.
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
La commande killalltasks tue toutes les tâches portant le nom spécifié.
killalltasks('firefox')
Indication
Pour plus d’informations ou pour connaître les paramètres complémentaires de la commande, consultez la documentation de référence (en anglais) en visitant :
… informe WAPT de ne plus suivre le paquet tis-scratch ; WAPT ne connaîtra plus l’existence de ce paquet.
Indication
Si vous voulez supprimer tis-scratch, il faudra soit réinstaller le paquet (wapt-get install "tis-scratch"), puis le supprimer (wapt-get remove "tis-scratch"), ou bien le supprimer manuellement à partir du panneau de configuration Windows Ajout / Suppression de Programmes.
Lorsque vous avez généré votre fichier policies.json, placez-le dans c:\waptdev\prefix-firefox-esr-wapt\policies.json.
Le dossier distribution à la racine de Firefox peut ne pas exister, nous allons donc tester son existence et le créer avec la commande mkdirs si il n’existe pas :
Il n’est pas nécessaire de mettre le chemin complet du fichier source puisque le fichier policies.json est à la racine du paquet WAPT, donc nous utilisons le chemin relatif.
Votre paquet est maintenant prêt à appliquer une configuration. Vous pouvez lancer une installation avec pyscripter et valider que le paquet fonctionne selon votre objectif.
Enfin, lancer votre Firefox pour vérifier qu’il fonctionnera pour vos utilisateurs.
Pour rechercher une version non désirée de Firefox, nous utiliserons la fonction installed_softwares. Cette fonction renvoie un dictionnaire contenant les propriétés du logiciel:
# -*- coding: utf-8 -*-fromsetuphelpersimport*uninstallkey=[]definstall():#Install firefox if necessaryinstall_exe_if_needed("Firefox Setup 45.5.0esr.exe",silentflags="-ms",key='Mozilla Firefox 45.5.0 ESR (x64 fr)',min_version="45.5.0")#Removal of the firefox shortcut on the all user desktopremove_desktop_shortcut('Firefox')#Creation of the distribution folder if it does not existifnotisdir(r'C:\Program Files\Mozilla Firefox\distribution'):mkdirs(r'C:\Program Files\Mozilla Firefox\distribution')#Copy of the policies.json file found at the root of the package in the destination of the distribution folderfilecopyto('policies.json',r'C:\Program Files\Mozilla Firefox\distribution')#For each Mozilla Firefox installedforuninstallininstalled_softwares('Mozilla Firefox'):#If the software does not have the word ESR in the nameifnot'ESR'inuninstall['name']:print(uninstall['name'])print('Uninstall '+uninstall['key'])#Looking for how we can uninstall it silentlysilent_uninstall=uninstall_cmd(uninstall['key'])print('Run '+silent_uninstall)#We launch the previous command.run(silent_uninstall)#Uninstalling mozilla maintenance serviceforuninstallininstalled_softwares('MozillaMaintenanceService'):run(uninstall_cmd(uninstall['key']))
Votre code gère maintenant la désinstallation des versions non désirées de Firefox.
Le dernier exemple est le meilleur mais cette opération ne fonctionne qu’avec Python3.
Nous pouvons maintenant utiliser des variables dans notre fichier setup.py :
# -*- coding: utf-8 -*-fromsetuphelpersimport*uninstallkey=[]definstall():version_firefox="45.5.0"#Install firefox if necessaryinstall_exe_if_needed("Firefox Setup %sesr.exe"%version_firefox,silentflags="-ms",key='Mozilla Firefox %s ESR (x64 fr)'%version_firefox,min_version=version_firefox)#Removal of the firefox shortcut on the all user desktopremove_desktop_shortcut('Firefox')distribution_folder=r'C:\Program Files\Mozilla Firefox\distribution'#Creation of the distribution folder if it does not existifnotisdir(distribution_folder):mkdirs(distribution_folder)...Therestofthecodedoesnotchange...
Indication
Vous pouvez récupérer le numéro de version indiqué dans le fichier control comme ceci :
Il est parfois nécessaire de personnaliser un programme ou un logiciel en contexte utilisateur pour rendre le logiciel immédiatement exploitable par l’utilisateur dans le contexte spécifique de son entreprise ou du service au sein de son entreprise :
Créer des raccourcis sur le bureau utilisateur avec des arguments spécifiques.
Modifier de clés registres utilisateurs.
Modifier des fichiers, une configuration de navigateur.
Configurer des raccourcis réseaux aux modèles de documents de l’entreprise pour assurer la conformité des documents aux chartes éditoriales en vigueur.
Paramétrer la messagerie instantannée ou le mail de l’utilisateur à partir d’un référentiel externe (annuaire, base de données, etc) .
Paramétrer un logiciel bureautique ou métier à partir d’un référentiel externe (annuaire, base de données, etc).
La fonction session_setup bénéficie de toute la puissance et de l’étendue des librairies python pour atteindre un niveau d’automatisation élevé.
Avec session_setup, il n’est pas possible de faire appel à des fichiers contenus dans le paquet.
Pour appeler des fichiers externes lors de la désinstallation, copier et coller les fichiers nécessaires dans un dossier externe pendant le processus d’installation du paquet (exemple : c:cachefile).
Exemple : Créer un raccourci personnalisé sur le bureau¶
Une des possibilités offertes par Setuphelpers est la création de raccourcis individuels sur le bureau utilisateur, à la différence du bureau « Public » commun à tous les utilisateurs.
Nous utiliserons pour ça la fonction create_user_desktop_shortcut() pour créer un raccourci contenant le nom de l’utilisateur et qui passera en argument à Firefox le site https://tranquil.it par exemple.
Enfin, vérifier que l’icône est bien présente sur le bureau.
Utiliser les fonctions d’audit pour la conformité¶
Note
Cette fonctionnalité est disponible dans la version Entreprise.
L’audit permet d’effectuer des vérifications régulières sur les configurations des postes et de centraliser le résultat des vérifications dans la console WAPT. Ceci permet de vérifier que votre parc est conforme à votre référentiel sur la durée.
Vous pouvez par exemple :
Vérifier régulièrement la liste des administrateurs locaux des postes.
Vérifier régulièrement la bonne configuration d’un logiciel critique.
Vérifier régulièrement la présence de la bonne version d’un logiciel.
Vérifier régulièrement les configurations de sécurité d’un poste.
La fonction audit bénéficie de toute la puissance et de l’étendue des librairies python pour atteindre une précision d’audit élevée.
Cette partie de la documentation est déconseillée aux utilisateurs qui débutent avec WAPT.
Les fonctions update_package sont très pratiques, elles permettent de gagner du temps lorsque qu’il faut mettre à jour un paquet avec la version la plus récente d’un logiciel.
Voici l”update_package de firefox-esr comme exemple :
defupdate_package():importre,requests,glob#Retrieving the last file nameurl=requests.head('https://download.mozilla.org/?product=firefox-esr-latest&os=win64',proxies={}).headers['Location']filename=url.rsplit('/',1)[1].replace('%20',' ')#download of it if is not in the packageifnotisfile(filename):print('Downloading %s from %s'%(filename,url))wget(url,filename)#removing old exe with wrong nameforfninglob.glob('*.exe'):iffn!=filename:remove_file(fn)# updates control version from filename, increment package version.control.version='%s-0'%(re.findall('Firefox Setup (.*)esr\.exe',filename)[0])control.save_control_to_wapt()
Vous pouvez lancer le update_package dans PyScripter :
Pyscripter - Exécution d’un update-package-source¶
Vous trouverez de nombreux exemples d”update_package qui vous inspireront dans les paquets du store de Tranquil IT.
Le fichier C:\waptdev\tis-adwcleaner-wapt est créé.
Vous trouverez ici un exemple de paquet portable qui prend presque toutes les fonctions WAPT d’un setup.py :
fromsetuphelpersimport*uninstallkey=[]exe_name='AdwCleaner.exe'path_adw=makepath(programfiles,'AdwCleaner')path_exe=makepath(path_adw,exe_name)nameshortcut='AdwCleaner'definstall():mkdirs(path_adw)filecopyto(exe_name,path_exe)create_desktop_shortcut(nameshortcut,path_exe)defuninstall():remove_tree(path_adw)remove_desktop_shortcut(nameshortcut,path_exe)defaudit():ifnotisfile(path_exe):print('File not found')return"OK"else:print('File Found')return"ERROR"defupdate_package():wget('https://downloads.malwarebytes.com/file/AdwCleaner',exe_name)control.version=get_file_properties(exe_name)['FileVersion']+'-0'control.save_control_to_wapt()
Créer des paquets WAPT de mises à jour Windows avec des .msu¶
Entre les sorties de Patch Tuesday, Microsoft peut publier des KB supplémentaires ou des mises à jour critiques qui devront être rapidement poussées sur les machines.
À cette fin, WAPT fournit un modèle de paquet pour les fichiers .msu.
Dans cet exemple, nous utilisons la KB4522355 téléchargée du site officiel Microsoft.
Créer un modèle de paquet WAPT à partir du fichier .msu téléchargé. Dans la console WAPT, cliquez sur Outils ‣ Générer un modèle de paquet.
PyScripter - Menu pour la création de modèle de paquets depuis la console¶
Sélectionner le paquet téléchargé .msu et remplir les champs obligatoires.
Informations requises pour la création du paquet MSU¶
cliquer sur Créer et éditer (recommandé) pour lancer la personnalisation du paquet ;
L’IDE du paquet WAPT est lancé en utilisant le code source du modèle prédéfini .msu.
Comme d’habitude avec les paquets WAPT, tester, puis construire, puis signer, puis télécharger et enfin affecter les paquets WAPT souhaités à vos hôtes sélectionnés et c’est fait !
Si le KB est groupé avec le Patch Tuesday suivant, vous pourrez sélectionner les hôtes sur lesquels le paquet a été appliqué et oublier le paquet KB sur les hôtes.
Tous les paquets sont stockés dans le répertoire personnel de linuxuser (le home de l’utilisateur acutellement connecté).
VSCode se charge et ouvre le projet de paquet.
Ouverture du VSCode avec le focus sur le fichier setup¶
Vérifier le contenu du fichier control.
Vous devez donner une description à votre paquet, et renseigner le target_os et la version de votre paquet.
Indication
os_target pour unix est linux
Avertissement
Le numéro de version dans votre fichier control doit commencer à 0, et non le numéro de version du logiciel car nous ne savons pas précisément à partir de apt/yum repo quelle sera la version du logiciel.
Il est à noter qu’une sous-version -1 a été ajoutée. Il s’agit de la version de packaging du paquet WAPT.
Il permet au développeur de paquets de publier plusieurs versions de paquets WAPT d’un même logiciel, ce qui est très utile pour un développement très rapide et itératif.
Changer le code du fichier setup.py en conséquence.
Modifier le fichier setup.py avec une procédure de désinstallation.
defuninstall():apt_remove('vlc')
Lancer un remove de VSCode Run Configurations.
À l’issue de la désinstallation, le programme est désinstallé¶
Vérifier que le logiciel a été correctement supprimé.
dpkg-l|grepvlc
Indication
Dans la fonction uninstall(), on ne peut pas appeler des fichiers contenus dans le paquet WAPT. Pour les appeler, il faudra avoir copié les fichiers dans un répertoire local de la machine lors de l’installation du paquet.
Dans le fonctionnement de WAPT, l’intégrité du paquet est assurée. Un paquet dont le contenu a été modifié sans avoir été re-signé sera systématiquement refusé par le client WAPT.
En revanche le contenu d’un paquet WAPT n’est pas chiffré et sera lisible de tous. Ce modèle technique de transparence apporte cependant de nombreux bénéfices.
Cela peut être génant dans le cas d’un paquet qui contiendrait un mot de passe, une clé de licence, ou une donnée sensible.
Vous trouverez ici un exemple de paquet WAPT ou nous chiffrons un texte dans dans une fonction update_package puis nous déchiffrons ce texte dans la partie install.
Dans cet exemple, la fonction update_package nous permet de parcourir la base de donnée du serveur WAPT pour récupérer le certificat de chaque machine pour ensuite chiffrer le texte sensible avec celui-ci.
Le texte chiffré pour chaque machine est ensuite stocké dans un fichier encrypt-txt.json à la racine du paquet.
Lors de l’installation du paquet, l’agent WAPT prendra le texte chiffré et le déchiffrera avec sa clé privé.
La sortie python (log install du paquet) est accessible en lecture aux utilisateurs de la machine, vous ne devez donc pas afficher le texte déchiffré avec un print lors de l’installation.
Utiliser des IDE différents pour développer les paquet WAPT¶
Si vous êtes habitué(e) à travailler avec un autre IDE, vous pouvez être soulagé maintenant car WAPT supporte d’autres éditeurs de développement intégrés.
Note
Utiliser un IDE supporté lancera le projet de paquet WAPT avec une configuration de débogage valide.
Pour configurer un autre éditeur pour WAPT, vous devez modifier l’attribut editor_for_packages dans la section [global] du fichier de configuration %LOCALAPPDATA%\waptconsole\waptconsole.ini de votre console WAPT.
Éditeurs de texte supportés en natif dans WAPT sous Windows¶
Récupérer le nom du logiciel
Logo de l’éditeur de texte
vscode;
vscodium ;
nano ;
vim ;
Pour configurer un autre éditeur pour WAPT, vous devez modifier l’attribut editor_for_packages dans la section [global] du fichier de configuration /opt/wapt/wapt-get.ini de votre agent WAPT.
Par défaut, si l’attribut editor_for_packages est vide, le WAPT essaiera de lancer (dans cet ordre) :
vscodium ;
vscode;
nano ;
vim ;
vi.
[global]...editor_for_packages=vim
Configurer WAPT pour utiliser un éditeur de code personnalisé¶