5. FAQ - Problèmes liés aux paquets

5.1. Déploiement et configuration des logiciels

5.1.1. Comment désinstaller un logiciel qui n’a pas été installé avec WAPT ?

Après avoir déployé WAPT, vous pouvez avoir besoin de supprimer des logiciels hérités déjà installés sur vos postes. WAPT peut automatiser ce processus sur plusieurs machines à l’aide d’un paquet personnalisé contenant du code Python.

Avertissement

Cette méthode ne fonctionne que pour les logiciels installés au niveau du système.

Afficher la solution

1. Identifier et tester le logiciel cible

Identifiez le logiciel à désinstaller et installez-le sur une machine de test afin de valider le comportement du paquet.

2. Créer un paquet WAPT vide

Dans la Console WAPT, naviguez vers :

Inventaire des paquets ‣ Créer un modèle de paquet à partir d’un fichier d’installation ‣ Modèle de paquet ‣ Paquet vide

3. Ajouter le code de désinstallation

Copiez dans le paquet le code de l’exemple de désinstallation de logiciel.

Si vous le souhaitez, commentez la condition suivante pour désinstaller toutes les versions du logiciel, quel que soit leur numéro de version :

if Version(to_uninstall["version"]) < Version(control.get_software_version()):

4. Personnaliser le paquet

Remplacez le nom du logiciel dans le code par le nom de l’application que vous souhaitez désinstaller.

Si vous le souhaitez, ajoutez le nom du processus du logiciel au champ impacted-process du fichier control du paquet. Par exemple, pour WinSCP, utilisez winscp.exe.

5. Tester le paquet

Exécutez le paquet sur votre machine locale et vérifiez que le logiciel est bien désinstallé comme prévu.

6. Construire et téléverser le paquet

Dans la Console WAPT, naviguez vers :

Inventaire des paquets ‣ Importer un paquet ‣ Construire et téléverser le paquet

Sélectionnez le paquet que vous avez modifié.

7. Déployer le paquet

Déployez le paquet sur les machines cibles pour désinstaller le logiciel.

5.1.2. Pourquoi les politiques de configuration WAPT entrent-elles en conflit avec les paramètres de stratégie de groupe ?

Certaines GPO appliquées par le contrôleur de domaine peuvent entrer en conflit avec les politiques de configuration appliquées par WAPT.

Lorsque deux politiques gèrent le même paramètre, l’une peut écraser l’autre de façon répétée. Si des scripts d’audit WAPT surveillent ce paramètre, le résultat de l’audit peut alterner entre |OK| et |ERROR|.

Pour les utilisateurs de WAPT Enterprise, l’utilisation de paquets de configuration WAPT pour appliquer les politiques présente plusieurs avantages.

Afficher l'explication et les recommandations

1. Exploiter la connaissance de l’appartenance aux OU par l’agent WAPT

Les OU affichées dans la console RSAT standard ne correspondent pas toujours à l’emplacement qu’un poste déclare dans Active Directory.

Il peut alors être difficile de déterminer pourquoi une GPO n’a pas été appliquée à un ordinateur ou à un groupe d’ordinateurs donné. L’agent WAPT remonte les OU auxquelles appartient la machine.

2. Auditer l’application des politiques avec WAPT

Windows ne fournit pas de moyen natif simple pour vérifier que chaque GPO a été correctement appliquée.

Les scripts d’audit de WAPT Enterprise peuvent vérifier si une configuration a été appliquée et remonter le résultat dans la Console WAPT sous la forme |OK| ou |ERROR|.

Ajouter des instructions print() dans un script d’audit peut également aider à identifier la cause de l’échec d’une configuration.

3. Protéger les données de configuration sensibles

Les fichiers de configuration des GPO peuvent exposer des informations confidentielles, telles que des noms d’utilisateur et des mots de passe, à une interception.

WAPT fournit un mécanisme de chiffrement des données sensibles afin qu’elles ne puissent être déchiffrées que par le poste destinataire. Voir Chiffrer des données sensibles dans un paquet.

Recommandation

Dans la mesure du possible, utilisez des paquets de configuration WAPT plutôt que des GPO pour déployer et auditer les politiques de configuration sur l’ensemble de votre parc.

5.1.3. Comment exclure certains postes d’un paquet déployé sur une OU ?

Lorsqu’un paquet est déployé au niveau d’une OU, l’héritage peut entraîner son application à toutes les machines concernées de cette OU. Si le paquet est une dépendance ou un conflit, il n’est pas possible d’exclure nativement certaines machines de ce déploiement hérité.

Afficher la solution

Deux approches sont possibles.

Option 1 : Installer le paquet manuellement

Si le paquet ne doit être installé que sur certains postes de l’OU, retirez-le du déploiement au niveau de l’OU et installez-le manuellement sur les machines cibles.

Option 2 : Utiliser un méta-paquet

Créez un méta-paquet contenant une logique personnalisée pour déterminer quelles machines doivent recevoir le paquet et lesquelles doivent en être exclues.

Voir méta-paquets pour plus d’informations.

5.1.4. Comment installer un logiciel qui nécessite un redémarrage du système ?

Certaines applications nécessitent un redémarrage du système avant que le processus d’installation puisse se poursuivre. L’exemple suivant montre comment un paquet peut détecter si l’ordinateur a redémarré et reprendre l’installation en conséquence.

Afficher un exemple de code Python
from setuphelpers import *

def install():
    last_boot = str(host_metrics()['last_bootup_time']).rsplit('.', 1)[0]
    file_last_bootup_time = r'C:\last_bootup_time'

    if not isfile(file_last_bootup_time):
        print('First installation execution')

        # Insert here the code to be executed before the reboot.

        with open(file_last_bootup_time, 'w') as f:
            f.write(last_boot)

        return "NEEDREBOOT"

    else:
        with open(file_last_bootup_time, 'r') as f:
            data = f.read()

        if data == last_boot:
            print("Installation already executed, but the system has not rebooted")
            return "NEEDREBOOT"

        else:
            print("Installation already executed and system rebooted; continuing")

            # Insert here the code to be executed after the reboot.

5.2. Compatibilité Python

5.2.1. Pourquoi les paquets WAPT doivent-ils être migrés de Python 2 vers Python 3 ?

Depuis WAPT 2.0, le fonctionnement interne de WAPT repose sur Python 3. Les paquets WAPT DOIVENT donc utiliser une syntaxe compatible avec Python 3.

Afficher les principales différences de syntaxe
Les principales différences de syntaxe

Syntaxe

Python 2

Python 3

print

print 'Hello'

print('Hello')

Chaîne Unicode

ur

r

Opérateurs

<> <=> !=

!=

Accès au registre Windows

_winreg

winreg

Pour plus de détails, consultez :

5.2.2. Pourquoi le service WAPT plante-t-il lors de l’installation ou de la suppression d’un paquet ?

Certains utilisateurs ont signalé que le service WAPT plante lors de l’installation ou de la suppression d’un logiciel. Dans les cas analysés, Bitdefender bloquait l’exécution de PowerShell, ce qui provoquait l’arrêt du processus WAPT.

Afficher l'explication et la recommandation

1. Vérifier les journaux et les politiques de l’antivirus

Vérifiez si l’antivirus bloque PowerShell ou arrête des processus liés à WAPT.

2. Examiner la configuration de l’antivirus

Si l’antivirus est en cause, examinez ses politiques et déterminez si une exception appropriée peut être configurée, conformément aux exigences de sécurité de votre organisation.

3. Rechercher un comportement similaire avec d’autres produits de sécurité

Ce problème peut également se produire avec d’autres antivirus ou produits de protection des postes. Restez vigilant lors de l’analyse des plantages du service WAPT.

5.3. Création et téléversement de paquets WAPT

5.3.1. Les paquets pour lesquels une mise à jour est disponible n’apparaissent-ils plus en rouge dans l’onglet « Dépôts privés » ?

Depuis la version 2.7 de WAPT, la mise en évidence en rouge a été supprimée car elle pouvait prêter à confusion. La vérification des mises à jour prend en compte toutes les caractéristiques des paquets (système d’exploitation, version, langue, architecture, etc.), qui n’étaient pas pleinement prises en compte par l’ancienne mise en évidence en rouge.

Cette fonctionnalité a été correctement réimplémentée dans la fenêtre « Importer depuis un dépôt ». Il suffit de sélectionner « Plus récent que dans mon dépôt » et « Compatible avec les machines connues » pour identifier avec précision les mises à jour disponibles. Pour plus d’informations sur le processus ici.

5.3.2. Pourquoi ai-je une erreur de base de données en lecture seule lors de la création d’un paquet avec PyScripter ?

Lorsque vous essayez d’installer un paquet depuis PyScripter, l’erreur suivante peut apparaître :

OperationalError: attempt to write a read-only database
Afficher la solution

Lancez PyScripter avec un compte Administrateur local, puis relancez l’opération.

5.3.3. Comment re-signer les paquets après le remplacement d’une clé privée ?

Les paquets des dépôts ont été signés avec l’ancienne clé privée. Après le remplacement de cette clé, vous DEVEZ re-signer chaque paquet du dépôt avec la nouvelle clé.

Afficher la solution

Vous pouvez re-signer les paquets avec l’une ou l’autre méthode :

5.3.4. Que faire si un paquet WAPT est trop volumineux pour être téléversé ?

Une erreur Stream write error peut se produire si l’ordinateur qui importe le paquet ne dispose pas d’assez d’espace disque libre.

Pendant l’importation, le paquet peut être extrait, signé, construit puis téléversé. Ce processus peut nécessiter environ trois fois la taille du paquet en espace disque disponible.

Afficher la solution

1. Construire le paquet en local

Construisez le paquet WAPT avec PyScripter ou suivez la procédure de construction d’un paquet.

Le paquet peut se trouver dans C:waptdev.

2. Téléverser le paquet manuellement

Téléchargez et installez WinSCP, ou utilisez un utilitaire de transfert de fichiers équivalent.

Téléversez le paquet à l”emplacement du dépôt approprié pour la version de votre dépôt WAPT.

3. Recréer l’index du dépôt

Une fois le téléversement terminé, recréez l’index Packages sur le dépôt.

Remplacez repository par l”emplacement du dépôt approprié :

wapt-scanpackages repository

5.3.5. Pourquoi WAPT signale-t-il qu’il est impossible de créer un fichier ?

Impossible de créer un fichier

WAPT - impossible de créer un fichier

Afficher la solution

Essayez de vider le cache de la Console WAPT dans :

AppData\Local\waptconsole\cache

5.3.6. Pourquoi ai-je une violation d’accès lors de la re-signature d’un paquet WAPT ?

Le traitement de la signature ne s'est pas terminé correctement

Une erreur de violation d’accès peut se produire lors de la re-signature d’un paquet WAPT volumineux.

Afficher la solution

5.4. Dépannage de l’installation des paquets

5.4.1. Pourquoi l’installation d’un paquet WAPT échoue-t-elle alors que le logiciel n’est pas installé ?

Une erreur s’est produite lors de l’exécution du fichier setup.py du paquet. La Console WAPT affiche le détail de l’erreur, ce qui peut aider à en identifier la cause.

WAPT relance l’installation à chaque cycle de upgrade jusqu’à ce que le paquet ne retourne plus d’erreur.

Afficher la solution

1. Analyser le code d’erreur

Si WAPT retourne un code d’erreur, recherchez ce code pour en identifier la signification.

Par exemple, l’erreur MSI 1618 indique qu’une autre installation est déjà en cours. Redémarrer l’ordinateur peut résoudre le problème.

Consultez la documentation Windows Installer error messages pour les codes d’erreur MSI.

2. Reproduire l’installation sur l’ordinateur cible

Rendez-vous sur l’ordinateur concerné et exécutez le paquet avec l’utilitaire en ligne de commande de WAPT. Vérifiez si le logiciel s’installe correctement.

Une fois l’installation silencieuse terminée, ne faites rien d’autre pendant le test. Le but est de reproduire le comportement de l’agent WAPT.

3. Vérifier le contexte d’exécution

Si le paquet s’installe silencieusement dans le contexte utilisateur mais échoue via WAPT, l’installeur ne prend peut-être pas en charge l’installation dans le contexte SYSTEM.

4. Lancer l’installeur manuellement si nécessaire

Si le problème persiste, lancez l’installation manuellement pour révéler d’éventuelles erreurs explicites, telles que des dépendances manquantes.

5. Vérifier la présence de versions plus anciennes du logiciel

Certains installeurs ne peuvent pas s’installer par-dessus une version plus ancienne. Si nécessaire, supprimez explicitement les anciennes versions avant d’installer la nouvelle.

5.4.2. Pourquoi un paquet échoue-t-il avec un délai d’expiration après 600 secondes ?

Certains paquets retournent l’erreur suivante dans la Console WAPT :

Error timed out after seconds with output '600.0'

Par défaut, WAPT attend 600 secondes que des commandes telles que run et install_msi_if_needed se terminent. Si l’installeur ne se termine pas dans ce délai, WAPT interrompt l’installation.

Afficher la solution

Augmentez le délai d’expiration de la commande d’installation si l’installation du logiciel est susceptible de durer plus longtemps.

Par exemple, la commande suivante fixe le délai d’expiration à 1200 secondes :

run('"setup.exe" /adminfile office2010noreboot.MSP', timeout=1200)

Cela peut être nécessaire pour les applications volumineuses telles que Microsoft Office, SolidWorks, LibreOffice, CATIA ou Adobe Creative Suite.

5.4.3. Pourquoi WAPT signale-t-il que le logiciel a été installé mais que la clé de désinstallation est introuvable ?

Certains paquets retournent l’erreur suivante dans la Console WAPT :

XXX has been installed but the uninstall key can not be found.

WAPT utilise des fonctions d’installation Windows pour installer les binaires MSI et EXE, telles que install_msi_if_needed et install_exe_if_needed.

Par défaut, WAPT accepte les codes de retour 0 (succès) et 3010 (redémarrage requis), puis effectue des vérifications supplémentaires pour s’assurer que l’installation a réussi.

Ces vérifications comprennent le contrôle de l’existence de la clé de désinstallation et le contrôle que la version du logiciel installé est égale ou supérieure à la version indiquée dans le fichier control du paquet.

Si ces vérifications échouent, WAPT marque le paquet en erreur et relance l’installation lors des cycles upgrade suivants.

Afficher la solution

1. Vérifier que le logiciel est correctement installé

Avant de modifier le paquet, contrôlez directement l’ordinateur concerné et vérifiez si le logiciel a réellement été installé.

Si l’installation a échoué, suivez la procédure de dépannage de l’installation des paquets.

2. Vérifier la clé de désinstallation et la version du logiciel

Si le logiciel est correctement installé, la clé de désinstallation ou la version configurée dans le paquet est peut-être incorrecte.

Récupérez la bonne clé de désinstallation et mettez à jour le paquet WAPT en conséquence.

3. Vérifier le comportement de l’installeur MSI

Si le problème survient avec install_msi_if_needed, l’installeur MSI retourne peut-être une clé de désinstallation incorrecte.

5.4.4. Pourquoi WAPT signale-t-il que la clé de désinstallation a été trouvée mais que la version du logiciel est incorrecte ?

Certains paquets retournent l’erreur suivante dans la Console WAPT :

XXX has been installed and the uninstall key found but version is not good.

Des fonctions telles que install_msi_if_needed et install_exe_if_needed effectuent des vérifications supplémentaires pour s’assurer que l’installation a réussi.

Afficher la solution

Commencez par vérifier l’installation

Contrôlez l’ordinateur concerné et vérifiez que le logiciel est correctement installé. Si ce n’est pas le cas, suivez la procédure de dépannage de l’installation des paquets.

Cas 1 : Le paquet utilise ``install_msi_if_needed``

L’installeur MSI peut fournir une information de version incorrecte, ou la clé de désinstallation peut être incorrecte.

Exécutez la commande suivante pour inspecter les informations du logiciel installé :

wapt-get list-registry

Si la clé retournée diffère de celle configurée dans la section d’installation de setup.py, vous ne pourrez peut-être pas utiliser install_msi_if_needed.

Revoyez le code d’installation, utilisez run() et gérez manuellement les vérifications et les exceptions de l’installeur.

Cas 2 : Le paquet utilise ``install_exe_if_needed``

Le numéro de version fourni à install_exe_if_needed est peut-être incorrect.

Examinez la configuration du paquet et vérifiez la clé de désinstallation et la version du logiciel avec :

wapt-get list-registry

Si la commande ne retourne pas de version, l’installeur ne fournit peut-être ni clé de désinstallation ni information de version.

Deux solutions de contournement sont possibles :

Option A : Fournir une fonction de version personnalisée

Utilisez l’argument get_version pour récupérer la version depuis une autre clé de désinstallation.

def install():

    def versnaps2(key):
        return key['name'].replace('NAPS2 ', '')

    install_exe_if_needed(
        'naps2-5.3.3-setup.exe',
        silentflags='/VERYSILENT',
        key='NAPS2 (Not Another PDF Scanner 2)_is1',
        get_version=versnaps2
    )

Option B : Désactiver la vérification de version

Définir une valeur vide pour min_version indique à WAPT de ne pas vérifier la version du logiciel.

min_version = ' '

Attention

Avec cette méthode, les versions des logiciels ne sont plus vérifiées lors des mises à jour.

5.4.5. Pourquoi l’enregistrement échoue-t-il avec une erreur DNSName A-label ?

L’erreur suivante peut apparaître lors d’opérations sur les paquets ou sur les hôtes :

FATAL ERROR : ValueError: DNSName values should be passed as an A-label string. This means unicode characters should be encoded via a library like idna.
Afficher la solution

Vérifiez le nom du poste et assurez-vous qu’il ne contient pas de caractères spéciaux ou non ASCII.