Attention : le support de WAPT 1.8.2 a pris fin le 30 juin 2022.

Il y a plusieurs vulnérabilité présente dans la branche WAPT 1.8.2.7393. Merci de mettre à jour sur la version supportée la plus récente. Liste des CVEs (non exhaustive) :
  • * python engine : python 2.7 (CVE-2020-10735, CVE-2015-20107, CVE-2022-0391, CVE-2021-23336, CVE-2021-3177, CVE-2020-27619, CVE-2020-26116, CVE-2019-20907, CVE-2020-8492, etc.)
  • * cryptography : openssl : CVE-2022-2068, CVE-2022-1292, CVE-2022-0778, CVE-2021-4160, CVE-2021-3712, CVE-2021-23841, CVE-2021-23840, CVE-2021-23839, CVE-2020-1971, CVE-2020-1968, CVE-2019-1551
  • * python dependencies : cryptography (CVE-2020-36242, CVE-2020-25659), eventlet (CVE-2021-21419), jinja2 (CVE-2020-28493), psutil (CVE-2019-18874), waitress (CVE-2022-31015), lxml (CVE-2021-4381, CVE-2021-28957, CVE-2020-27783, CVE-2018-19787), ujson (CVE-2022-31117, CVE-2022-31116, CVE-2021-45958), python-ldap (CVE-2021-46823)

Packager des paquets .msi évolués

Améliorer le paquet MSI

L’installation / la mise à jour du paquet TightVNC pris pour exemple précédemment nécessitera de le fermer le temps de la mise à jour.

Méthode manuelle : killalltasks

Une première méthode est de tuer tous les processus VNC avant de lancer l’installation du paquet tis-tightvnc.

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = ["{8B9896FC-B4F2-44CD-8B6E-78A0B1851B59}"]

def install():
    print('installing tis-tightvnc')
    killalltasks("vncviewer.exe")
    run(r'"tightvnc-2.8.5-gpl-setup-64bit.msi" /q /norestart')

Méthode élégante : install_msi_if_needed

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def install():
    print('installing tis-tightvnc')
    install_msi_if_needed('tightvnc-2.8.5-setup-64bit.msi')
  • la librairie de fonctions setuphelpers fournit la fonction install_msi_if_needed qui permet de gérer ce cas directement en une seule fonction ;

  • la fonction testera également si une version du logiciel est déjà installée sur la machine avec la clé de désinstallation ;

  • si présence il y a, l’installation sera enclenchée uniquement si la version actuellement installée est inférieure ;

  • après installation, la fonction testera finalement la présence de la clé de déinstallation et sa version pour vérifier que tout s’est bien passé ;

Liste des arguments disponibles avec install_exe_if_need.

Paramètres

Valeur par défaut

Description

msi

nom du fichier MSI à exécuter.

min_version

None

version minimale au dessus de laquelle il mettra à jour.

killbefore

[]

liste des programmes à tuer avant de lancer l’installation.

accept_returncodes

[0,3010]

codes de retour autres que 0 ou 3010 acceptés en retour par la fonction.

timeout

300

durée d’attente maximale d’installation (en secondes).

properties

{}

propriétés supplémentaires à passer en argument au MSI pour l’installation.

get_version

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

False

supprimme automatiquement une ancienne version d’un logiciel dont la uninstallkey est identique

force

False

force l’installation du logiciel même si une uninstall key avec une version identique est trouvée.

Note

La fonction install_msi_if_needed récupère la clé de désinstallation depuis le MSI, il n’est pas nécessaire de l’écrire dans le fichier setup.py.

En lançant le paquet, on observe ce qu’il se passe dans la console quand le logiciel est déjà installé.

wapt-get -ldebug install C:\waptdev\tis-tightvnc-wapt
Installing WAPT file C:\waptdev\tis-tightvnc-wapt
installing tis-tightvnc
installing x64 version
MSI tightvnc-2.8.5-gpl-setup-64bit.msi already installed. Skipping msiexec

Results:

=== install packages ===
C:\waptdev\tis-tightvnc-wapt   | tis-tightvnc (2.8.5.0-1)

Gérer les plateformes x32/x64

Pour la gestion de l’architecture de processeur x32 / x64, on utilise la fonction iswin64().

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def install():
    print(u'Installation en cours de TightVNC')
    if iswin64():
        print('installation version 64 bits')
        install_msi_if_needed('tightvnc-2.8.5-setup-64bit.msi')
    else:
        print('installation version 32 bits')
        install_msi_if_needed('tightvnc-2.8.5-setup-32bit.msi')
    print(u'Installation terminée.')

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 -*-
from setuphelpers import *

uninstallkey = []

properties = {
    'SERVER_REGISTER_AS_SERVICE':0,
    'SERVER_ADD_FIREWALL_EXCEPTION':0,
    }

def install():
  print(u'Installation en cours de TightVNC')
  if iswin64():
    print('installation version 64 bits')
    install_msi_if_needed('tightvnc-2.8.5-setup-64bit.msi', properties =
                                                            properties)
  else:
    print('installation version 32 bits')
    install_msi_if_needed('tightvnc-2.8.5-setup-32bit.msi', properties =
                                                            properties)
  print(u'Installation terminée.')