un fichier wapt.psproj dans le dossier WAPT, ce fichier est utilisé pour stocket la configuration de PyScripter créé pour développer des paquets WAPT;
depuis WAPT 1.8, un dossier caché .vscode contenant un fichier launch.json et un fichier settings.json est utilisé pour stocker la configuration de VScode pour développer des paquets WAPT;
Le fichier control est la carte d’identité du paquet.
package:tis-firefox-esrversion:62.0-0architecture:allsection:basepriority:optionalmaintainer:Administrateurdescription:Firefox Web Browser Frenchdescription_fr:Navigateur Web Firefox Françaisdescription_es:Firefox Web Browserdepends:conflicts:maturity:PRODlocale:frtarget_os:windowsmin_os_version:max_os_version:min_wapt_version:1.6.2sources:installed_size:impacted_process:firefox.exeaudit_schedule:editor:Mozillakeywords:Navigateurlicence:MPLhomepage:https://www.mozilla.org/en-US/firefox/organizations/signer:Tranquil ITsigner_fingerprint:459934db53fd804bbb1dee79412a46b7d94b638737b03a0d73fc4907b994da5dsignature:MLOzLiz0qCHN5fChdylnvXUZ8xNJj4rEu5FAAsDTdEtQ(...)hsduxGRJpN1wLEjGRaMLBlod/p8w==signature_date:20170704-164552signed_attributes:package,version,architecture,section,priority,maintainer,description,depends,conflicts,maturity,locale,min_os_version,max_os_version,min_wapt_version,sources,installed_size,signer,signer_fingerprint,signature_date,signed_attributes
Il est préférable de toujours commencer avec la version du logiciel (numéro uniquement) séparé par des points (.) et terminant par la version du paquet WAPT séparé par un tiret (-).
Cette option n’est actuellement pas supporté pour l’instant. Ce champ sera utilisé pour définir la priorité d’installation d’un paquet. Cette fonctionnalité sera utile pour définir des mises à jour de sécurité obligatoires.
Décrit la fonctionnalité du paquet qui apparaîtra dans la console et sur l’interface web en local sur le http://127.0.0.1:8088.
Indication
Ajouter un champ description_fr ou description_es vous permet de faire un paquet dont la descritpion est internationale. Si la langue n’existe pas, l’agent WAPT va utiliser la langue qui est par défaut.
Définit si des paquets doivent être installés avant, par exemple, tis-java est une dépendance pour que le paquet LibreOffice, il doit être installé avant.
Plusieurs dépendances peuvent être définies en les séprant par des virgules (,).
Les conflits définissent un/des paquet(s) qui doivent être désinstallés avant d’installer un paquet, par exemple tis-firefox doit être désinstallé avant que le paquet tis-firefox-esr le soit, ou OpenOffice doit être supprimé avant que LibreOffice soit installé.
Plusieurs conflits peuvent être définis en les séprant par des virgules (,).
Par défaut, les agents WAPT verront des paquet marqués comme PROD et des paquets avec un maturité vide.
Pour qu’un poste puisse voir des paquets avec des niveaux de maturités différents, vous devrez configurer l’attribut maturities dans le wapt-get-ini de l’agent WAPT.
Pour un target_oswindows, ce champ définit la Version du Système d’Exploitation de Windows minimale. Par exemple, cet attribut peut être utilsé pour éviter d’installer sur un WindowsXP des paquets qui ne fonctionnent que sur Windows7 et Plus.
Depuis la version 1.8, il peut aussi définir la version minimum de Mac OS.Nous vous recommandons de ne pas l’utiliser avec Linux car il y a plusieurs distributions différentes.
Pour un target_oswindows, ce champ définit la Version du Système d’Exploitation de Windows maximale. Par exemple, cet attribut peut être utilsé pour installer sur un Windows7 et Plus des paquets qui ne sont plus supportés sur des WindowsXP.
Depuis la version 1.8, il peut aussi définir la version minimum de Mac OS.Nous vous recommandons de ne pas l’utiliser avec Linux car il y a plusieurs distributions différentes.
La version minimum de WAPT pour installer un paquet
Note
Les fonctionnalités de WAPT évoluant, certaines fonctions que vous êtes susceptible d’avoir utilsé dans de vieux paquets deviennent obsolete avec de nouvelles version d’agents WAPT.
Cette méthode permet de versionner un paquet de travailler collaborativement dessus.
Indication
Le versionnage de paquet est particulièrement utile lorsque plusieurs personnes créent des paquets de manière collaboratif. Cette fonction est aussi utile pour tracer l’historique d’un paquet si vous êtes sujet à des Régulations dans votre entreprise.
Ce champ est utilisé par la fonction install_msi_if_needed et install_exe_if_needed si killbefore n’a pas été rempli.
impacted_process est aussi utilisé lors de la désinstallation du paquet. Cela permet de fermer l’application si l’application tourne avant d’être désinstallé.
Ici, nous associons une list de uninstall keys (clé de désinstallation) au paquet. Lorsqu’un paquet est supprimé, l’agent WAPT va regarder l”uninstallkey contenu dans la base de registre assoiciée au paquet. Cette uninstallkey va indiquer à WAPT les actions à lancer avant de supprimer le logiciel.
Même s’il n’y a pas d”uninstallkey pour un logiciel, il est nécessaire de déclarer une liste uninstallkey vide:
Le fichier signature est situé dans le dossier WAPT.
Il contient la signature du fichier manifest.sha256.
Lorsqu’un paquet s’installe, wapt-get vérifie:
que la signature du manifest.sha256 corresponde à l’actuel fichier manifest.sha256 (l’agent va vérifier les certificats publics dans C:\ProgramFiles(x86)\wapt\ssl sur Windows et /opt/wapt/ssl sur Linux et MacOS);
que l’empreinte sha256 de chaque fichier est identique à l’empreinte dans le fichier manifest.sha256;
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.
Microsoft Windows host without any Windows update installed:
the objective is to detect Windows updates that are required for the software
to work properly and to adapt the WAPT package accordingly;
Microsoft Windows host with all the latest Windows updates:
the objective is to detect Windows updates that break the package
and to adapt the WAPT package accordingly;
Hosts with many installed packages: the objective is to detect
a possible dependency with an existing application;
Hosts with many installed packages: the objective is to detect
a possible conflict with an existing application;
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 ;
Principles of creating package template from the WAPT 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.
Create a WAPT package Template from the installer.
Dans la console WAPT, cliquer sur Outils ‣ Créer un modèle de paquet depuis un installeur:
PyScripter - WAPT console window for creating a package template¶
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.
PyScripter - Renseignements nécesssaires pour la création du paquet¶
Two solutions are available:
Click on Make and edit …. (recommended)
to verify the WAPT package and customize it to your Organization’s
specific needs.
Click on Build and upload to directly build and upload
the package into your private repository.
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.
However, the first method that consists of first testing locally
the package before uploading is the recommended method.
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 :
Check the control file content. Mozilla Firefox-ESR does not comply
to industry standards and returns an erroneous version number
(it appears to be the installer packaging software version number).
A sub-version -1 has been appended
to the software version number; it is the packaging version
of the WAPT package.
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 :
The function requires to pass the silent flag as an argument.
The function requires to pass the uninstall key as an argument.
Liste des arguments disponibles avec install_exe_if_need¶
Paramètres
Valeur par défaut
Description
exe
Name of the .exe file to execute.
silentflags
Silent parameters to pass as arguments to the installer.
key
None
Software uninstall key.
min_version
None
Minimal version above which the software will update.
killbefore
[ ]
List of programs to kill before installing the package.
accept_returncodes
[0,3010]
Accepted codes other than 0 and 3010 returned by the function.
timeout
300
Maximum installation wait time (in seconds).
get_version
None
Value passed as parameter to control the version number
instead of the value returned by the installed_softwares
function.
remove_old_version
False
Automatically removes an older version of a software whose uninstallkey
is identical
force
False
Forces the installation of the software even though the same uninstallkey
has been found
Le paquet aura alors ce comportement :
Firefox will install only if Firefox is not yet installed or
if the installed version of Firefox is less than 45.5.0,
unless the --force option is passed as argument
when installing the package.
On installing, the running firefox.exe processes will be killed
(with the value indicated in impacted_process of the control file).
The function will add by itself the uninstall key,
so leave the uninstall key argument empty.
When finishing the installation of the package, the function will check
that the uninstall key is present on the machine and that the version
of Firefox is greater than 45.5.0; if this not the case, the package
will be flagged as 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 …
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.
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 :
… vérifie que C:\ProgramFiles(x86)\software est un répertoire.
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 C:\ProgramFiles(x86)\software\file est un fichier.
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 :
dir_is_empty(makepath(programfiles32,'software')):print('dir is empty')
… vérifie que le répertoire C:\ProgramFiles(x86)\software est vide.
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 :
… copie le fichier file.txt dans le répertoire C:\ProgramFiles(x86)\software.
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 :
… copie le dossier sources dans le répertoire 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 :
… vérifie que la clé {8A69D345-D564-463c-AFF1-A69D9E530F96} existe dans le répertoire SOFTWARE\Google\Update\Clients de la ruche HKEY_LOCAL_MACHINE.
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 :
… lit la valeur de la clé {8A69D345-D564-463c-AFF1-A69D9E530F96} inscrite dans le répertoire SOFTWARE\Google\Update\Clients de la ruche HKEY_LOCAL_MACHINE.
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 :
… modifie la valeur de la clé TOUVersion dans le répertoire SOFTWARE\Microsoft\WindowsLive de la ruche HKEY_CURRENT_USER.
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 :
… crée le raccourci WAPT Console Management dans le répertoire C:\Users\Public pointant vers l’exécutable C:\Program Files (x86)\wapt\waptconsole.exe ; le raccourci est ajouté pour tous les utilisateurs.
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 :
… supprime le raccourci WAPT Console Management du répertoire C:\Users\Public ; le raccourci est supprimé pour tous les utilisateurs.
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 :
… crée le raccourci WAPT Console Management sur le bureau de l’utilisateur pointant vers l’exécutable C:\Program Files (x86)\wapt\waptconsole.exe.
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 :
… supprime le raccourci WAPT Console Management du bureau de l’utilisateur.
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 la version de Windows est strictement inférieure à 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 :
ifiswin64():print('Pc x64')else:print('Pc not x64')
… vérifie que le processeur de la machine est 64bits.
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 :
Ces fonctions sont utilisées avec le session_setup
La commande user_appdata …
print(user_appdata())
… renvoie le profil appdata itinérant de l’utilisateur courant (C:\Users\%username%\AppData\Roaming).
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).
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¶
La commande uninstall_cmd …
uninstall_cmd('winscp3_is1')
… renvoie la commande de désinstallation silencieuse.
"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 :
For each item of the list return by installed_softwares
containing keyword winscp.
If the version is lower than 5.0.2.
Then uninstall using the uninstall_cmd and specifying
the corresponding 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 :
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.
To search unwanted version of Firefox we will use
the installed_softwares function. This function returns
a dictionary list containing the software properties:
# -*- 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 :
Creating user desktop shortcut with specific arguments.
Making changes to user Windows registry keys.
Making changes to files, to browser settings of the user.
Configuring shortcuts to the Organization’s set of templates
for Documents, Spreadsheets or Presentations in Office Suites
to encourage or insure that editorial and graphical guidelines are followed.
Setting up the user’s email or instant messaging from the Organization’s
main user data repository (LDAP directory, database, etc).
Customizing an office suite or business software based on the Organization’s
main user data repository (LDAP directory, database, 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.
Finally, check that the icon is present on the desktop.
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 :
Regularly check the list of local administrators on the desktops.
Ascertain over time the correct configuration of a critical software.
Regularly check the presence of the correct version of a piece of software.
Ascertain the security settings of a workstation.
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 :
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.
Create a WAPT package template from the downloaded .msu file.
In the WAPT console, click on Tools ‣
Package Wizard.
PyScripter - WAPT console window for creating a package template¶
Select the downloaded .msu package and fill in the required fields.
Informations requises pour la création du paquet MSU¶
Click on Make and edit (recommended)
to launch package customization.
WAPT package IDE is launched using the source code
from the pre-defined .msu template.
As usual with WAPT packages, test, then build, then sign, then upload
and finally affect the desired WAPT packages to your selected hosts
and it is done!!
If the KB becomes bundled with the following Patch Tuesday, you can select
the hosts onto which the package has been applied and forget the KB package
on the hosts.
All packages are stored in linuxuser’s home
(home of the currently logged in user).
VSCode se charge et ouvre le projet de paquet.
Ouverture du VSCode avec le focus sur le fichier setup¶
Check the control file content.
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.
Make changes to the code in the setup.py file accordingly.
Make changes to the setup.py file with an uninstall.
defuninstall():apt_remove('vlc')
Launch a remove from VSCode Run Configurations.
À l’issue de la désinstallation, le programme est désinstallé¶
Check that the software has been correctly removed.
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.With this mode of operation, the WAPT server and secondary repositories have no knowledge of the sensitive data.
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.You will find here an example of a WAPT package where we encrypt a string of text in an update_package function and then decrypt this text in the install function.
Le texte chiffré pour chaque machine est ensuite stocké dans un fichier encrypt-txt.json à la racine du paquet.In this example, the update_package function allows us to browse the WAPT server database to retrieve the certificate from each machine and then encrypt the sensitive text with it.
Lors de l’installation du paquet, l’agent WAPT prendra le texte chiffré et le déchiffrera avec sa clé privé.The encrypted text for each machine is then stored in a encrypt-txt.json file at the root of the package.
# -*- coding: utf-8 -*-fromsetuphelpersimport*importjsonfromwaptcryptoimportSSLCertificateimportwaptguihelperimportbase64definstall():encryptlist=json.loads(open('encrypt-txt.json','r').read())ifWAPT.host_uuidinencryptlist:host_key=WAPT.get_host_key()v=base64.b64decode(encryptlist[WAPT.host_uuid])encrypttxt=host_key.decrypt(v).decode('utf-8')print(r"Here is the deciphered text: %s"%encrypttxt)else:error("%s not found in encrypt-txt.json"%WAPT.host_uuid)defupdate_package():urlserver=inifile_readstring(makepath(install_location('WAPT_is1'),'wapt-get.ini'),'global','wapt_server').replace('https://','')encrypttxt=input("Enter the text to be encrypted: ")encryptlist={}credentials_url=waptguihelper.login_password_dialog('Credentials for wapt server',urlserver,'admin','')data=json.loads(wgets('https://%s:%s@%s/api/v1/hosts?columns=host_certificate&limit=10000'%(credentials_url['user'],credentials_url['password'],urlserver)))forvalueindata['result']:ifvalue['host_certificate']:host_cert=SSLCertificate(crt_string=value['host_certificate'])encryptlist[value['uuid']]=base64.b64encode(host_cert.encrypt(encrypttxt.encode('utf-8'))).decode('utf-8')print(value['computer_fqdn']+':'+value['uuid']+':'+encryptlist[value['uuid']])open('encrypt-txt.json','w').write(json.dumps(encryptlist))
Attention
La sortie python (log install du paquet) est accessible en lecture aux utilisateurs de la machine, vous ne devez donc pas afficher le text déchiffré avec un :command:`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.
Certains éditeurs de code sont pris en charge en natif :
PyScripter;
VSCode ;
VSCodium ;
D’autres éditeurs peuvent être sélectionnés et seront lancés lorsque vous créerez un nouveau modèle pour un paquet WAPT à partir de la console WAPT.
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%waptconsolewaptconsole.ini de votre console WAPT.
Méthodes alternatives pour l’édition de paquets WAPT sur Windows¶
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.
Méthodes alternatives pour l’édition de paquets WAPT sous Linux¶
Nom de l’éditeur de code
editor_for_packages value
Microsoft Visual Studio Code
vscode ou code
Microsoft Visual Studio Codium
vscodium ou codium
Nano
nano
Vim
vim
Vi
vi
[global]...editor_for_packages=vim
Configurer WAPT pour utiliser un éditeur de code personnalisé¶