Description détaillée d'un paquet xml ou "package"

  • Un paquet XML est un fichier texte qui définit comment installer et désinstaller des paquets logiciels. En d'autres mots, c'est une liste de tous les paquets et scripts pouvant être déployés ou exécuter sur les stations de travail.

  • Ce fichier doit être placé dans le même répertoire que wpkg.js, dans le dossier packages.

Objectifs de la présente page :

  • Comprendre la structure d'un paquet XML pour WPKG (attributs obligatoires et optionnels)

  • Connaître les différentes conditions de vérifications

  • Connaître les différentes commandes pour une application, un script, une clé de base de registre, des manipulations sur des fichiers...

  • Permettre de déployer des applications plus complexes

  • Établir des XML seuls

Exemple de package

Les attributs

Certains attributs sont obligatoires :

  • id - Un identificateur unique représentant le paquet. Doit être court, pertinent et ne pas faire référence à une version du logiciel.

  • name - La version longue. Le nom complet du produit.

  • revision - Un entier défini par l'utilisateur représentant la “version” du paquet. Doit être incrémenté à chaque nouvelle release. On pourra utiliser une variable pour cela.

  • reboot - Si égal à “true”, le système redémarre à la fin de l'installation, de la désinstallation, de la mise à jour du paquet.

Remarque

Peu d'intérêt pour les stations sous XP puisque l'installation se fait à l'extinction du poste.

  • priority - Valeur numérique spécifiant l'ordre d'installation. Plus le nombre est grand, plus la priorité est grande, plus tôt le paquet sera installé par rapport à d'autre dont la priorité est moins importante.

Remarque

Cette priorité est importante dans le cas de dépendances entre paquets.

Certains sont facultatifs :

  • “execute” : Quelquefois, on souhaite lancer un script ou un paquet chaque fois que WPKG se lance. On utilisera donc l'attribut execute.

1
execute="always"

De la même manière, on peut ne vouloir lancer qu'une fois un script ou un paquet, on peut le faire avec la commande suivante :

1
execute="once"

Ce paramètre se met à la suite des attributs principaux.

Remarque

Si vous utilisez execute=“always”, lors des incréments des révisions, seules les commandes <install> sont utilisées (pas upgrade).

Si vous utilisez execute=“once”, lors des incréments des révisions, seules les commandes <upgrade> sont utilisées.

Tous les checks sont ignorés lors de l'utilisation de always ou once !

Les variables

  • Les variables d'environnement Windows, fonction de l'architecture :

    Cf cette très bonne page de Wikipédia. Lorsque l'installation d'un logiciel fonctionne aussi bien sur un XP que sur un Seven, on utilise ces variables pour rendre le paquet compatible aux 2 OS.

    Les variables les plus utilisées avec WPKG sont :

    • %PROGRAMFILES% → C:\Program Files\ (sous windows XP) ou C:\Programmes\ (sous Windows 7 64 bits)

    • %PROGRAMFILES(x86)% → C:\Program Files (x86)\ pour les systèmes 64 bits

    • %SYSTEMROOT% = %WINDIR% → C:\Windows\ (sous windows XP)

    • %COMPUTERNAME% → le nom du PC

    • %COMSPEC% → lance l'interpréteur de ligne de commande (cmd.exe)

    • ...

Remarque

%SOFTWARE% est une variable spécifique WPKG :

C'est un raccourci de → /home/wpkg/softwares/ (paramétré dans wpkg_gen_config)

  • Variables dans le paquet XML :

    Il est fortement recommandé d'utiliser des variables dans les paquets XML qui vont simplifier la mise à jour des paquets.

    Pour utiliser une variable, il faut la déclarer sous la définition du paquet :

1
<variable name="version" value="9.2" />

Ensuite, pour utiliser cette variable, on va pouvoir l'appeler via %version%.

On peut mettre autant de variables que l'on souhaite.

Un paquet bien fait avec des variables permet de faire un upgrade logiciel en changeant uniquement la valeur de la variable.

Les conditions de vérification <check>

Évidemment, il serait inapproprié de lancer l'installation d'un logiciel déjà installé... C'est pourquoi existent les conditions de vérification.

Il existe 3 catégories de conditions de vérification :

  1. Registre → Teste les conditions par rapport à la base de registre

  2. Fichier → Teste les conditions par rapport aux fichiers

  3. Uninstall → Teste les conditions par rapport aux logiciels apparaissant dans Ajout/Suppression de programmes

Registry

Les tests sur le registre permettent de vérifier l'existence ou la valeur d'une clé spécifique. Il y a deux type de conditions applicables au registre système : exists et equals.

  • exists → Vérifie l'existence d'une clé de registre. Si la clé de registre est trouvée, la condition retourne vrai, sinon elle retourne faux.

  • equals → Vérifie la valeur d'une clé de registre. Si la clé de registre est trouvée et que la valeur correspond, la condition retourne vrai, sinon elle retourne faux.

Exemples :

Cet exemple teste la présence d'Acrobat Reader dans le registre système :

1
<check type="registry" condition="exists" path="HKLM\Software\Adobe\Acrobat Reader\10.0" />

Cet exemple vérifie que Firefox en français FR et en version 9.0.1 est installé :

1
<check type="registry" condition="equals" path="HKLM\Software\Mozilla\Mozilla Firefox\CurrentVersion" value="39.0.1 (fr)" />

File

Les vérifications sur les fichiers permettent de tester l'existence, la taille ou la version d'un fichier. Voici les différentes possibilités :

  • exists → Vérifie l'existence d'un fichier. Si le fichier est trouvé, la condition retourne vrai.

  • sizeequals → Vérifie la taille d'un fichier. Si le fichier est trouvé et que la taille est conforme à celle attendue, la condition retourne vrai.

  • versionsmallerthan → Vérifie la version d'un fichier. Si le fichier est trouvé et que la version est plus petite que celle attendue, la condition retourne vrai.

  • versionlessorequal → Vérifie la version d'un fichier. Si le fichier est trouvé et que la version est plus petite ou égale que celle attendue, la condition retourne vrai.

  • versionequalto → Vérifie la version d'un fichier. Si le fichier est trouvé et que la version est égale à celle attendue, la condition retourne vrai.

  • versiongreaterorequal → Vérifie la version d'un fichier. Si le fichier est trouvé et que la version est plus grande ou égale que celle attendue, la condition retourne vrai.

  • versiongreaterthan → Vérifie la version d'un fichier. Si le fichier est trouvé et que la version est plus grande que celle attendue, la condition retourne vrai.

Exemples :

Cet exemple vérifie l'existence d'Adobe Reader dans le système de fichiers:

1
<check type="file" condition="exists" path="%PROGRAMFILES%\Adobe\Reader 10.0\Reader\AcroRd32.exe" />

Cet exemple vérifie que Firefox en version 39.0.1 est installé (test basé sur la taille du fichier firefox.exe).

1
<check type="file" condition="sizeequals" path="%PROGRAMFILES%\Mozilla Firefox\firefox.exe" value="924632" />

Rappel

La taille est la taille du fichier et pas celle sur le disque. Elle est exprimée en octets.

Cet exemple vérifie que la version du fichier firefox.exe actuellement installée est inférieure à 39.0.1 :

1
<check type="file" condition="versionsmallerthan" path="%PROGRAMFILES%\Mozilla Firefox\firefox.exe" value="39.0.1" />

Uninstall

Les tests de type uninstall permettent vérifier la présence de clé de registre spécifiques aux logiciels installés (ceux que l'on voit dans Ajout/suppression de programmes). Microsoft Windows maintient cette liste de logiciels désinstallables dans : HKLM\Software\Microsoft\Windows\Current Version\Uninstall. Le test effectue une comparaison avec la valeur DisplayName de chaque clé présente dans ce chemin.

L'unique condition disponible est exists.

exists → Vérifie l'existence d'un logiciel dans la liste des logiciels installés du registre système. Si le logiciel est trouvé, la condition retourne vrai.

Exemples :

Cet exemple vérifie l'existence d'Adobe Reader dans la liste des logiciels installés du registre système :

1
<check type="uninstall" condition="exists" path="Adobe Reader X (10.1.0) - Français" />

Cet exemple vérifie que Firefox 39.0.1 est installé dans la liste des logiciels installés du registre système :

1
<check type="uninstall" condition="exists" path="Mozilla Firefox 39.0.1 (x86 fr)" />

Attention

Si aucune condition n'est donnée, WPKG essaiera toujours d'installer le logiciel, qu'il soit déjà installé ou non.

Conditions Logiques sur <check>

Il est possible de vérifier entre 0 et x conditions.

Pour faciliter l'utilisation de plusieurs conditions, il y a un quatrième type de condition qui peut être rajouté, appelé condition logique.

Les conditions logiques permettent de créer des conditions multiples de vérification de l'installation d'un logiciel.

Les conditions logiques sont des conditions de haut-niveau, tandis que les conditions de vérifications réelles sont des sous-branches dans le fichier XML.

Les conditions logiques suivantes sont disponibles: not, and, or, atleast et atmost.

Exemples :

Disons que, pour l'exemple, vous voulez installer un paquet Adobe Reader 10.1.0 seulement sur les machines tournant sous Windows XP SP2 pour cause d'incompatibilité étrange...

Pour ce genre de scénario, vous pourriez utiliser des profils multiples :

un profil pour les machines SP1

et un autre pour les machines SP2.

Cependant, pour l'exemple, disons que toutes les machines sont dans le même profil. On peut alors créer une condition logique qui nous permet de valider notre scénario.

1
<check type="logical" condition="or">
2
   <check type="uninstall" condition="exists" path="Adobe Reader X (10.1.0) - Français" />
3
   <check type="registry" condition="equals" path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CSDVersion" value="Service Pack 1" />
4
</check>

La deuxième condition peut paraître peu intuitive, mais rappelez-vous que quand vous écrivez des conditions, vous recherchez l'absence de choses plutôt que leur présence.

Ce que dit la condition est que “Est-ce qu'Adobe Reader 10.1.0 est installé OU le SP2 est installé ?” Si au moins une des conditions est validé l'installation de reader 10.1.0 n'est pas réalisée.

Quand toutes les conditions ont été testés et que le résultat final est faux, WPKG essaiera d'exécuter les commandes <install>

Après l'exécution, WPKG vérifiera le code retour de sortie (normalement 0 dans l'exemple) *ET* revérifiera les conditions.

Si *une seule* condition n'est pas vérifiée, le logiciel est considéré comme *non* installé, prenez garde lors de la rédaction de ces dernières !

Remarque

Il n'est pas nécessaire d'utiliser systématiquement les trois types de conditions. Souvent, une suffit : Si le logiciel que vous souhaitez installer apparaît dans Ajout/Suppression de programmes (tous ne le font pas), il est suffisant d'utiliser le test “uninstall”.

Paramètres facultatifs

Les dépendances

Un certain nombre de logiciels nécessitent d'autres logiciels pour fonctionner.

Quelques exemples :

Scribus dépend de GPLGhostScript

LibreOffice ou GeoGebra dépendent de Java

Une extension de LibreOffice dépend de la bonne installation de LibreOffice

...

Pour déclarer une dépendance, il faut ajouter la ligne suivante :

1
<depends package-id="Java" />

Remarque

Le nom est l'id du package, la casse est prise en compte !

Attention

On ne peut pas désinstaller Java, tant que GeoGebra est installé par exemple !

Liens de téléchargement

WPKG-Manage permet de télécharger de manière semi-automatique les exécutables sur le serveur Scribe. Pour cela, il faut lui fournir le lien via la balise :

1
<eoledl dl='url'... />

On peut aussi mettre une variable dans l'URL.

Exemple :

1
<eoledl dl="http://www2.ac-lyon.fr/serv_ress/mission_tice/wiki/_media/i18n.zip" destname="\physique\avogadro\i18n\" unzip="1" />
  • dl = lien vers le fichier à télécharger

  • destname = nom d'un dossier ou d'un fichier. Dans le cas d'un dossier aucun changement de nom n'est effectué, le fichier est seulement placé dans le dossier. Dans le cas d'un nom de fichier, le fichier téléchargé est renommé. Dans tous les cas, si le dossier n'existe pas, il est créé. Pour qu'un nom soit considéré comme un dossier il doit se finir par un ”/” ou un “\”.

  • unzip = indique s'il faut dézipper le fichier téléchargé

Attention

WPKG, écrit en Python, ne permet pas de télécharger via le protocole FTP. Donc, tous les liens en FTP ne fonctionneront pas (Exemple d'Epson Tools)

Les actions

Wpkg comprend quatre actions : install, upgrade, downgrade et remove. De multiples commandes pour chacune de ces actions peuvent être listées dans le fichier de config et wpkg les éxecutera dans l'ordre dans lequel elles sont listées.

  • Les commandes install sont exécutées quand un nouveau paquet est détecté dans un profil et que l'application n'existe pas sur le poste.

  • Les commandes upgrade sont exécutées quand une nouvelle révision du paquet est détectée.

  • Les commandes downgrade sont exécutées quand une ancienne révision du paquet est détectée.

  • Les commandes remove sont exécutées quand un paquet est enlevé d'un profil.

Conseil

Seule <install> est obligatoire pour mettre en place le paquet. Les autres ne sont pas nécessaires mais fortement recommandées. <downgrade> est rarement spécifiée mais peut tout de même servir...

La méthode correcte pour exécuter une commande de l'interpréteur est d'utiliser la variable d'environnement %comspec%, et non de spécifier explicitement cmd.exe.

Quand la sortie d'une commande est trop importante (cas de copy ou cacls), la commande échouera car elle va saturer le journal des évènements windows. Vous devez rediriger la sortie vers NUL ou un fichier :

1
%command% > nul

Exemples d'actions :

1
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" />
2
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" timeout="1800" />
3
<install cmd="%comspec% /c copy %SOFTWARE%\file.dll %WINDIR%" />
4
<remove cmd="msiexec /qn /x %SOFTWARE%\package.msi" />

L'option timeout indique à wpkg combien de temps attendre que la commande termine. C'est en secondes et la valeur par défaut est de 3600 secondes.

Vous pouvez positionner l'option reboot à “true” avec ceci :

1
<install cmd="msiexec /qn /i %SOFTWARE%\package.msi" />
2
    <exit code="3010" reboot="true" />
3
    <exit code="0" />
4
</install>

Récapitulatif des commandes d'installation, upgrade ou remove

Fichiers MSI

install

<install cmd=“msiexec /qn /i %SOFTWARE%\package.msi” />

upgrade

<upgrade cmd=“msiexec /qn /i %SOFTWARE%\package.msi” />

remove

<remove cmd=“msiexec /qn /x %SOFTWARE%\package.msi” />

<remove cmd=“msiexec /qn /x {ProductCode}” />

Fichier .exe avec Installateur InnoSetup

install

<install cmd='”%SOFTWARE%\setupInno.exe” /VERYSILENT' />

upgrade

<upgrade cmd='”%SOFTWARE%\setupInno.exe” /VERYSILENT' />

remove

<remove cmd='”%PROGRAMFILES%\DossierInstall\unins000.exe” /VERYSILENT' />

Fichier .exe avec Installateur NSIS

install

<install cmd='”%SOFTWARE%\setupNSIS.exe” /S' />

upgrade

<upgrade cmd='”%SOFTWARE%\setupNSIS.exe” /S' />

remove

<remove cmd='”%PROGRAMFILES%\DossierInstall\uninstall.exe” /S' />

Prise en compte des différents systèmes d'exploitation

On peut ne vouloir installer que sur des postes XP, ou que sur des postes 7, ou alors que sur les postes ayant une architecture 32 ou 64 bits. Pour cela, il faudra faire passer des arguments dans les lignes de commande.

Fonction du système d'exploitation

Pour installer uniquement sur XP :

1
<install os=".+5\.[1-2]\.\d{4}" cmd=... />

Pour installer uniquement sur 7 :

1
<install os=".+6\.[0-1]\.\d{4}" cmd=... />

Fonction de l'architecture

Pour désinstaller uniquement sur une architecture 32 bits :

1
<remove cmd='msiexec /x "%SOFTWARE%\7zip\7z%version%.msi" /qn' architecture='x86' />

Pour désinstaller uniquement sur une architecture 64 bits :

1
<remove cmd='msiexec /x "%SOFTWARE%\7zip\7z%version%-x64.msi" /qn' architecture='x64' />