Construire un XML pour WPKG

/!\ Documentation en cours de rédaction ! -> Gros chantier...

Voici un fichier xml type commenté :

Le xml suivant n'est pas fonctionnel : les lignes n'ont pas forcément de cohérence entre elles. Il est là à titre d'exemple afin de montrer les nombreuses fonctionnalités des xml de l'installation d'applications.

Il s'agit d'un prototype qui permet de déployer correctement une application 32 bits ou 64 bits sur Windows 10 & 11 (OS 64 bits) :

<?xml version="1.0" encoding="UTF8" ?> 
<packages>
  <package
      id="AlgoBox"
      name="Algobox : élaboration d'algorithmes"
      revision="3.1"
      reboot="false"
      priority="1"
      category="Mathématiques"
      category2="Mathematiques"
      lnk="AlgoBox.lnk">

      <variable name="AllUsersPrograms" value="%ALLUSERSPROFILE%\Menu Démarrer\Programmes" os="5\.\d\.\d{4}"/>
      <variable name="AllUsersPrograms" value="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs" os="6\.\d\.\d{4}"/>
      <variable name="AllUsersDesktop" value="%SystemDrive%\Documents and Settings\All Users\Bureau" os="5\.\d\.\d{4}"/>
      <variable name="AllUsersDesktop" value="%SystemDrive%\Users\Public\Desktop" os="6\.\d\.\d{4}"/>

      <depends package-id="jre"/>

      <download url="http://site.org/executable.exe" saveto="packages/prog/executable.exe" md5sum="d59f24b86431eeb25281bce"/>

      <delete file="packages/prog/vieilexecutable.exe"/>

      <check type="uninstall" condition="exists" path="Algobox" />

      <install include="remove" />
      <install cmd='%Z%\packages\prog\executable.exe /S' timeout="1800" />
      <install cmd='%ComSpec% /C copy /Y %Z%\packages\prog\fichier %programfiles%\prog\' />

      <upgrade include="install" />
      <downgrade include="upgrade" />

      <remove cmd='MsiExec.exe /X{90100000-0010-0000-0000-0000000FF1CE} /qn' >
           <exit code="1605" reboot="false"/>    
      </remove>
      <remove cmd='MsiExec.exe /X{90120000-0011-0000-0000-0000000FF1CE} /qn' >
           <exit code="1605" reboot="false"/>    
      </remove>
  </package>
</packages>

Commentaires:

  • id correspond au nom du package qui ne changera jamais. Aussi, par exemple, il ne faut pas mettre googleearth5 car, lors du passage à la version 6, googleearth6 serait considéré comme un autre programme. Préférer un identifiant (unique) simple: "Google Earth". Une exception : les xml 'msoffice2007pro' et apparentés car ces packages ne sont pas destinés à changer de version. Même si vous achetez des licences msoffice2079, peut-être n'en aurez vous pas pour tous vos postes: vous souhaiterez alors conserver ce package 'msoffice2007pro' et le nouveau 'msoffice2079'.

  • name est un commentaire qui peut évoluer au fur et à mesure des versions il contient le nom long du programme et éventuellement le numéro de version.

  • revision est un numéro de version comme 3.1.0. Le numéro 3.1.0 étant supérieur à 2.9.99. Préférez ce format à un simple entier que l'on incrémente au fur et à mesure des mises à jour. Cela permet aux testeurs de rattraper plus facilement le rythme des xml officiels.

  • priority est un entier qui indique dans quel ordre les packages doivent être installés. L'installation débute par les numéros de priorité les plus élevés (choisir des numéros entre 1 et 10 pour de simples applications. Les numéros supérieurs sont à réserver aux actions systèmes urgentes).

  • category et category2 sont des attributs qui permettent de classer les raccourcis dans le menu Démarrer. Il permettront de classer les applications par catégorie dans une future interface. La liste des "category" est référencée ci-dessous (Voir "contraintes que doit respecter un xml officiel").

  • lnk est un attribut qui doit contenir le nom du fichier lnk ou du dossier créé dans le dossier "All Users\Menu Démarrer\Programmes" par le programme d'installation des lignes install et upgrade. Cela permet de ranger automatiquement le menu démarrer par "category". Si le programme ne crée aucun raccourci dans "All Users\Menu Démarrer\Programmes", "lnk" peut être omis.

  • variable permet de définir des variables d'environnement uniquement valables lors de l'installation du xml en question. Les variables peuvent aussi être pratiques pour gérer les menus démarrer ou le bureau de All Users différents sous Windows 2000-XP par rapport à Vista-Windows 7 (indépendamment de l'architecture). Dans les commandes, il suffit alors d'utiliser les variables %AllUsersPrograms% et %AllUsersDesktop%, le xml sera alors valable sur tous les OS. Exemple (voir aussi la "gestion des raccourcis" ci-dessous) :

Remarque :

le code os="5\.\d\.\d{4}" correspond à windows 2000 et Windows XP. Le code os="6\.\d\.\d{4}" correspond à Vista, Windows 7 et Windows 8. Voir [https://wpkg.org/Extended_host_attribute_matching] pour plus de renseignements.
pour les installations avec msiexec, aucune précaution particulière n'est nécessaire (32 ou 64 bits), msiexec se débrouille tout seul. Il suffit de mettre un check de type "uninstall" pour que cela fonctionne tout seul. 
  • depends permet d'établir une dépendance avec l'id d'un autre xml (typiquement, si votre programme nécessite java d'installé, la ligne ci-dessus permet d'installer automatiquement java sur les postes pour lesquels vous aurez coché votre xml.

  • downloads permet de télécharger automatiquement l'exécutable, de le placer où il faut dans Y:\unattended\install\ et de vérifier sa somme md5 ou sha256. Si le programme du xml en cours de rédaction n'est pas librement téléchargeable, vous pouvez obliger l'administrateur à placer au préalable les fichiers au bon emplacement (afin d'éviter des erreurs) en spécifiant:

Ainsi, l'interface wpkg, à l'ajout du xml, vérifiera la présence de ce fichier.

  • delete correspond à des fichiers téléchargés lors de numéros de revision précédents et qui ne seraient plus utiles. Cela permet de libérer un peu de place sur tous les serveurs.

  • check correspond au test que doit effectuer wpkg après avoir lancé les lignes d'install-upgrade pour savoir si celle-ci a réussi. Le type="uninstall" permet de faire un test sur ce qui est contenu dans "Ajout-Suppression de programmes". Pour connaître la chaîne exacte, quand le programme est installé sur un poste de tests, lancer la commande "regedit" et explorer "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", effectuer une recherche du mot "Algobox" (par exemple): vous y trouverez la valeur "DisplayName" qui constituera la valeur de "path" à inscrire dans la ligne check.

On peut aussi tester la présence d'un fichier :

Mieux, pour gérer les upgrade, il faut préférer tester la version d'un exécutable (se lit par un clic droit puis propriétés :

On peut aussi tester une clé de registre par son existence ou sa valeur :

On peut même créer plusieurs conditions qui doivent toutes être remplies :

  • création de lignes d'install : si vous disposez d'un fichier d'installation msi, la commande ci-dessus fonctionnera idéalement:

Sinon, si vous disposez d'un exécutable, tentez des lignes similaires à :

ou

Vous pouvez trouver nombre de renseignements sur le site officiel de wpkg http://wpkg.org/Packages.xml:French ou sur le site http://www.winattended.com/switch_inst2.php .

Lorsque l'on enchaine plusieurs commandes d'install (ou d'upgrade), si on a besoin d'attendre la fin d'exécution d'une commande pour lancer une autre, on utilise start /WAIT: il faut alors mettre en première option un titre entre guillemets pour la commande start comme ceci:

Remarque : Le timeout (en secondes) est facultatif mais permet d'éviter de bloquer les installations du poste si une ligne échoue plus de x secondes (Par défaut, il est à 3600 secondes pour toute ligne de commande exécutée).

Certains installeurs ne peuvent pas être totalement automatisés car ils affichent des fenêtres à cliquer, des menus, nécessitent la saisie d'une clé de licence, etc... Dans ce cas, il est possible d'utiliser un script autoit générique alimenté par un fichier ini décrivant l'ensemble des actions à effectuer. Voir la section ci-dessous.

  • création de lignes d'upgrade : pour mettre à jour un package d'une revision antérieure, il faut prévoir (et tester) des lignes d'upgrade. Elles peuvent être écrite à la façon des lignes d'install :

Mais, le plus simple est, de désinstaller la (les) version(s) précédente(s) (si les lignes de remove gèrent toutes les revisions précédentes : voir ci-dessous) puis de répéter les commandes d'install. C'est ce qui est proposé dans le xml type ci-dessus avec les lignes :

  <install include="remove" />
  <upgrade include="install" />
  • création de lignes de downgrade : elles permettent de retrograder un numéro de 'revision'. C'est notamment utile quand on passe d'un numéro de revision entier (301 pour la version 3.0.1) à un numéro de version classique du type 3.0.1. Le numéro 301 est égal à 301.0.0, donc, lors du passage à la révision 3.0.1, wpkg procèdera à un downgrade. Puisqu'en général, le downgrade ne sert qu'à ça, on peut ajouter au xml la ligne :

  • création de lignes remove : souvent, pour connaître la ligne de commande de désinstallation, quand le programme est installé sur un poste de tests, lancer la commande "regedit" et explorer "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", effectuer une recherche du mot "Algobox" (si tel est le nom du programme): vous trouverez la commande de désinstallation silencieuse dans la valeur "QuietUninstallString", il suffit de la recopier dans "" ; sinon, utiliser "UninstallString" qui contient parfois une chaine du genre "MsiExec.exe /X{90120000-0011-0000-0000-0000000FF1CE}" (rajouter l'option /qn pour rendre la désinstallation silencieuse). Dans le cas d'autres commandes, tenter les options /S, /VERYSILENT,...

Exemple :

  <remove cmd='MsiExec.exe /X{90100000-0010-0000-0000-0000000FF1CE} /qn' >
       <exit code="1605" reboot="false"/>    <! -- DESINSTALLATION VERSION 1 -- >
  </remove>
  <remove cmd='MsiExec.exe /X{90120000-0011-0000-0000-0000000FF1CE} /qn' >
       <exit code="1605" reboot="false"/>    <! -- DESINSTALLATION VERSION 2, actuelle -- >
  </remove>

Dans les lignes de code ci-dessus, le commentaire "DESINSTALLATION VERSION N" peut être supprimé, ainsi que les balises qui l'entourent. Pour conserver des commentaires dans le xml, il faut supprimer les espaces entre "<!" et "--" ainsi qu'entre "--" et ">" (impossible de faire autrement sur le wiki).

Remarque : Le "exit code" 1605 correspond à un code d'erreur de msiexec signalant que le programme correspondant n'est pas installé. Rajouter la gestion de celui-ci dans le xml permet à wpkg de gérer cela comme n'étant pas une erreur. Il est normal qu'une seule version parmi les deux (ou plus) que l'on essaye de désinstaller soit présente. L'avantage d'une telle gestion des désinstallations et de simplifier les lignes d'upgrade (comme présenté ci-dessus).

  • gestion des raccourcis :

Pour ne pas surcharger le bureau de nombreux raccourcis, on fait du ménage pour les programmes qui créent un raccourci sur le bureau (à condition d'avoir déclaré la variable %AllUsersDesktop% comme dans l'exemple ci-dessus):

Pour des applications (codec,...) qui n'ont pas besoin de raccourcis dans le menu démarrer, vous pouvez utiliser la ligne suivante pour faire du ménage (à condition d'avoir déclaré la variable %AllUsersPrograms% comme dans l'exemple ci-dessus):

Pour les installeurs qui ne créeraient pas de raccourci dans le Menu Démarrer de All Users, il faut alors le créer via une ligne de commande du xml. Exemple :

  • classement automatique des raccourcis dans le menu démarrer :

Lors des installations-upgrades, de nombreux raccourcis venaient rendre illisibles le Menu Démarrer de "All Users". Pour effectuer le rangement des raccourcis automatiquement, il est impératif que les attributs "category" et "lnk" des xml soient bien renseignés. Cela provoquera le classement automatique des raccourcis créés par l'installation officielle dans un dossier portant le nom de la "category". Ci-dessous sont décrites les "category" officielles (dans les contraintes que doit respecter un xml officiel).

Exemple : Le xml d'algobox donné en exemple ci-dessus créera le raccourci "c:\Documents and Settins\All Users\Menu Démarrer\Programmes\Mathématiques\Algobox.lnk" car category="Mathématiques" et lnk="AlgoBox.lnk"

Si le classement par défaut ne vous plait pas. Avant de déployer le logiciel, créer un fichier Y:\unattended\install\packages\windows\PackagesCategory.txt de la forme suivante :

id;dossier AlgoBox;Educatif\Math‚matiques Google Earth;Internet

Le fichier précédent place les raccourcis du programme AlgoBox dans le sous-dossier Programmes\Educatif\Mathématiques et ceux du programme "Google Earth" dans le sous-dossier Programmes\Internet.

ATTENTION :

L'id est celui du package : il doit respecter la casse de l' "id" du xml. Le "dossier" indiqué est le répertoire de destination dans lequel seront classés les raccourcis (éviter les accents dans le nom du dossier où remplacer le "é" par "," , le "è" par "Š"...).
Si le fichier PackagesCategory.txt est complété pour un package donné après l'installation de celui-ci sur les postes, le classement personnalisé des raccourcis sera automatiquement répercuté lors de la prochaine 'revision' du xml.
Lors de la suppression d'un package du serveur, ne pas supprimer la référence à un package de Y:\unattended\install\packages\windows\PackagesCategory.txt tant que le xml n'a pas été désinstallé de tous les postes du domaine. Sinon, le raccourci ne sera pas supprimé du poste lors de la désinstallation. 

Pour tester le xml créé

Pour ajouter cette application à la liste des applications disponibles dans l'interface web du se3,

Applications Windows -> Ajouter une application Cocher Ignorer le contrôle MD5 et indiquer le chemin vers le fichier algobox.xml.

Il ne reste plus qu'à associer l'application algobox aux postes concernés. Contraintes que doit respecter un xml officiel

La démarche complète est documentée ci-dessus avec le xml et les attributs commentés.

Ne pas oublier les nouveaux attributs category et lnk (décrits ci-dessus), utilisés à partir de la version 2.0, qui doivent être présents dans tout xml nouveau ou mis à jour. Ainsi, l'attribut "category" doit correspondre à un des item suivants :

  • Bureautique (ms Office, openoffice, infrarecorder, 7zip, pdfcreator, adobe reader...)

  • Multimédia (logiciels vlc, zoomit, audacity, ...)

  • Graphismes (logiciels gimp, xnview, irfanview, photofiltre, anmanie....)

  • Système (deploiementimprimantes, popup,pstools, 7za, ...)

  • Internet (Firefox, Safari, Flashplayer, java, pidgin, google earth,....)

  • Mathématiques (mathgraph, lilimath, geoplangeospace, geogebra, xcas, algobox, sinequanon, scilab)

  • Sciences physiques (optikos, tous les progs serge lagier, oscillo, dia, avimeca)

  • SVT (phylocollege, stellarium, chroma, phyloboite...)

  • Informatique (winscp, putty, tortoise, freemind, gobby, notepad++)

  • Technologie-SI (solidworks, orcad demo, google sketchup, etoys, robotprogs,sweethome3D)

  • STG (ciel,...)

  • Français (conjugaison, ...)

  • autres matières qui s'y ajouteraient...

Les raccourcis ne doivent pas rester sur le bureau sauf pour les suites bureautiques (libreoffice, openoffice, msoffice), les navigateurs (firefox, safari), les clients de messagerie (thunderbird) et le raccourci italc sur le poste professeur. Tests élémentaires avant dépôt en "à tester" :

Avant de proposer un xml, il est impératif de tester (au minimum) :

  • la mise à jour, la désinstallation, puis l'installation.