WPKG dans Solaere

 

1   Introduction

La solution de gestion des stations du Gip Recia est essentiellement basée sur les vservers wksapps et netboot.

Elle contient un ensemble d’outils permettant le clonage, la sauvegarde et la restauration d’un poste ( Unattended ) et un outil de déploiement de paquets logiciels ( WPKG )

WPKG est un outil de déploiement automatisé de logiciels. Le site de ce projet est WPKG

L'icone Wpkg

2   Qu’y a-t-il sur le vserver wksapps ?

Le serveur wksapps contient un certain nombre de partages SMB.

  • \\wksapps\wpkg$ : c’est le partage qui contient l’installation proprement dite de wpkg. On ne devrait pas avoir à intervenir ici, sauf pour éventuellement changer la configuration ( config.xml ) et la version de wpkg.js
  • \\wksapps\antivirus :c’est le partage contenant le programme d’installation de Kaspersky. Là, encore, on ne devrait pas intervenir dessus. On peut simplement vouloir éventuellement forcer l’installation de l’agent kaspersky pour un nouveau poste entrant dans le domaine en tapant en console : \\wksapps\antivirus\kasperskyNA\lsexec.exe /S
  • \\wksapps\install : ce partage contient tous les répertoires, scripts, drivers nécessaire pour une installation automatisée d’un poste par Unattended.
  • \\wksapps\clonage$ A compléter
  • \\wksapps\sauvegarde$ A compléter

La partie qui nous intéresse dans cette documentation est l’utilisation de wpkg, pour installer des logiciels de façon automatique sur les clients.

3   Quelques informations sur WPKG.

La plupart des informations utiles se trouve sur le site de wpkg , http://wpkg.org

En résumé, l’essentiel de wpkg se trouve dans le script wpkg.js.

C’est un script que n’importe quel client windows possédant cscript (http://jc.bellamy.free.fr/fr/vbsgeneralites.html ) peut supporter. (A voir pour 98 ?)

Et l’essentiel des informations sur les paquets, les hôtes et les profils se trouve dans des fichiers xml éditables avec n’importe quel éditeur ( mais scite est vraiment très bien ! )

Attention : Ceci n’est pas vrai si l’on utilise le front-end web de wpkg qui a pour rôle de générer « à la volée » les fichiers xml nécessaires à wpkg.js

Lorsqu’un client fait appel au script wpkg.js,
  • wpkg.js analyse le(s) fichier(s) packages.xml ( ou les xml se trouvant dans le dossier packages ) et vérifie la cohérence des instructions d’installation qu’il y trouve.

  • wpkg.js analyse le fichier profiles.xml ( ou les xml se trouvant dans le dossier profils ) qui associe les paquets logiciels au profil.

  • wpkg.js analyse le nom du client, vérifie qu’il fait partie des clients qu’il gère par la lecture du fichier hosts.xml, et si c’est le cas lui attribue un profil de logiciels.
    • Dès lors wpkg.js vérifie sur le client le fichier c:\windows\system32\wpkg.xml et le compare aux paquets qu’il doit installer.
    • Si un nouveau paquet est apparu, il exécute les instructions contenues dans ce paquet et si l’installation est un succès, il ajoute dans le fichier c:\windows\system32\wpkg.xml le nouveau package.xml qu’il vient d’installer. Il y a donc une trace sur le client des paquets installés.
    • Si un paquet a changé de version, wpkg effectue la désinstallation de l’ancienne version, puis l’installation de la nouvelle.
    • Si un paquet a disparu du profil, wpkg effectue un upgrade ( pour être sûr que l’installation est conforme) à l’aide des instructions qui ont été stockées précédemment dans c:\windows\system32\wpkg.xml puis applique l’instruction de désinstallation de c:\windows\system32\wpkg.xml. Si la désinstallation s’est bien passée, le fichier c:windowssystem32wpkg.xml est mis à jour.

4   Utiliser WPKG_Web

WPKG web permet de s’affranchir de l’écriture des fichiers xml. Les informations entrées dans WPKG_web sont stockées dans une base de données MySQL et les fichiers xml sont générés à la volée lorsque wpkg les demande.

Pour y accéder, http://wksapps/wpkg_web/

4.1   L’interface de WPKG_Web

Sur le menu de gauche, vous trouvez 3 entrées :
  • Packages
  • Hosts
  • Profiles

4.1.1   Le menu Packages

La liste des paquets telle qu’elle apparaît lorsqu’on clique sur View/Edit

L’interface lorsqu’on clique sur Add New

L’interface lorsqu’on clique sur Import Xml

4.1.1.1   L’onglet Général d’un paquet

L’onglet général du paquet Java

4.1.1.2   L’onglet Check

L’onglet Check du paquet Java

L’onglet Check d’un autre paquet, le SP3

4.1.1.3   L’onglet Commands

L’onglet Commands du paquet Java

4.1.1.4   L’onglet Extras

L’onglet Extras du paquet Java

4.1.2   Le menu Profiles

La liste des profils telle qu’elle apparaît lorsqu’on clique sur View/Edit

Lorsqu’on clique sur le nom d’un profil, on obtient la liste des paquets qui lui sont attachés

la liste des paquets dans le profil socle de base

Pour ajouter des paquets dans le profil, on clique sur Add !

On ajoute des paquets dans le profil test.

4.1.3   Le menu Hosts

La liste des hotes et leurs profils attachés

On ajoute un hôte et on définit son profil

Un nouvel hôte

On ajoute un groupe d’hôte ( les regex sont supportées )

Un groupe d’hôtes

4.2   Les limitations de WPKG_Web

Les limitations de WPKG_web sont à l’heure actuelle les suivantes :
  • Cette interface n’est plus développée et ne suit pas les évolutions de wpkg qui change pourtant beaucoup ( D’ailleurs, ils cherchent un développeur ) http://wpkg.org/TODO_list#WPKG_web_interface

  • La fonctionnalité téléchargement ne marche pas pour le moment.
    • car la version 1.0.2 de wpkg ne le supporte pas (celle installée par défaut )
    • que si on passe en 1.1.0_M6 ( la dernière ), il n’y a pas compatibilité … ( Réponse de Rainer Meier, un des développeurs de wpkg )
    • reste à tester en 0.9.xx … Mais est-ce utile ?
  • Pas de retour sur l’interface de l’installation sur les clients ( pas de logs quoi ! )

  • Une convivialité toute relative quand on est à l’aise avec les xml… ( beaucoup de clics…)

  • Et un gros souci : on ne peut pas importer les xml directement, ce qui ne nous permettra pas d’échanger des xml entre établissements.

En fait, j’ai modifié wpkg_web… Voir en fin de document.

5   L’installation côté client

Pour lancer wpkg sur le client, il y a plusieurs solutions : un service installable nommé WPKG-Client, le passage d’une ligne de commande dans le script de logon ou éventuellement un autoit.

5.1   Utilisation du service WPKG-Client

5.1.1   Dans le cas de l’utilisation de Netboot

Dans la version qui nous arrive, l’utilisation de netboot installe automatiquement le client wpkg dans une version un peu datée. ( 0.9.x )

Ceci est à revoir

5.1.2   Sur des postes déjà installés

5.1.2.1   Installation manuelle

Sur un poste, en admin, télécharger et installer WPKG-Client ( version 1.3.6 à l’heure où j’écris ces lignes )

Le configurer à l’aide de « http://wpkg.org/WPKG_Client_-_GUI_help »

Pour la configuration, quelques instructions :

  • Entrer \\wksapps\wpkg$\wpkg.js dans la boite WPKG Path
  • Comme Parametres, j’ai choisi /synchronize /debug ( synchronize est obligatoire, debug permet d’obtenir un retour dans un fichier, on peut préférer quiet et nonotify ) Pour les options possibles, le plus simple est de regarder le fichier config.xml dans \\wksapps\wpkg$\ qui est très documenté. Une autre option très utile est /sendStatus qui permet au client wpkg d’afficher ce qu’il est en train de faire.
  • Pour accéder au partage, il faut un compte … Chez nous, on utilise le compte d’un prof. Entrer L0XXXXXXX\compte-prof où L0XXXXXXX est le nom de votre domaine. Entrer le mot de passe de ce compte.
  • WPKG supporte les variables, il faut donc les définir. Dans l’onglet variables, ajouter software pour \\wksapps\install\packages ( Attention, pas d’antislash à la fin du chemin !) et wpkg pour \\wksapps\wpkg$
  • Dans cet onglet, on peut envisager de lancer des actions avant et/ou après. C’est une fonctionnalité que nous n’utilisons pas pour le moment.
  • Ne sachant pas trop à quoi ca sert pour le moment, j’ai coché la case Show …
  • Dans l’onglet Logon Settings, on choisit quand le service s’exécute. Pour notre part, nous avons choisi à l’extinction, et laisser un délai de 120 minutes. Cela peut sembler long, mais c’est pour garantir que les logiciels ait du temps. En outre, si l’installation se termine avant, l’ordinateur s’éteint.
  • On peut configurer les messages diffusés par le service. Nous avons choisi : « WPKG installe des applications… » et « Merci d’attendre, ne pas éteindre ni redémarrer cet ordinateur… »
  • Nous n’avons pas touché aux autres onglets.
  • Vérifier que tout se passe bien en cliquant sur Test Settings.
  • Si c’est le cas, faire un export de cette configuration qui servira pour l’installation silencieuse.

5.1.2.2   Installation automatique et silencieuse

Pour installer silencieusement le client sur les postes :

  • Le msi du client ( version 1.3.6 ) est dans \\ctrlr\netlogon\bin, ainsi que le fichier de configuration du client setting.xml précédemment exporté.

  • Dans le local.exe en AutoIt lancé par le local.bat, nous avons ajouté les lignes suivantes ( Ce fichier est lancé avec une élévation de pouvoir ( voir http://forums.giprecia.fr/viewtopic.php?id=391 et de nombreux autres posts de Jacques Thomas sur le forum ).

    $PartageReseau="\\ctrlr\netlogon\bin"
    If Not DriveMapAdd( "", $PartageReseau ,0 ) Then
        sleep(200)
       If Not DriveMapAdd("", $PartageReseau ,0)  Then
             Exit
       EndIf
    EndIf
    #cs
    Installation de wpkg-client
    #ce
    ; Si le service est lancé, on le tue
    If ProcessExists("WPKGSrv.exe") then
            ProcessClose("WPKGSrv.exe")
    EndIf
    ; Si le client n'est pas déjà installé, on le fait, sinon, on met à jour les settings
    If Not FileExists( @ProgramFilesDir & "\wpkg\WPKGSrv.exe" ) Then
            $cmd=@ComSpec & " /c " & ' start /wait msiexec /qb /i ' & $Partage
            RunWait( $cmd , @SystemDir ,@SW_HIDE )
    Else
       $cmd=@ComSpec & ' /c "'&@ProgramFilesDir&'\wpkg\wpkginst.exe" --SETTINGSFILE='& $PartageReseau &'\settings.xml'
            RunWait( $cmd, @SystemDir ,@SW_HIDE )
    EndIf
    ;On démarre le service
    Run( @ComSpec & ' /c net start "WPKG Service"', @SystemDir , @SW_HIDE )
    

5.2   Lancement par le script de logon

On peut dans un logon.bat (pour les localadmin et les domainadmins par exemple ) envisager de lancer wpkg par cette suite de commandes

@echo off
net use \\wksapps\wpkg$
set SOFTWARE=\\wksapps\install\packages
set WPKG=\\wksapps\wpkg$
cscript \\wksapps\wpkg$\wpkg.js /synchronize /nonotify
net use \\wksapps\wpkg$  /delete

Mais c’est à mon avis à éviter, car fastidieux pour les utilisateurs, en cas d’installation lourde et/ou longue.

5.3   Lancement par le script de logon

On peut aussi envisager de lancer les mêmes commandes dans un autoit avec élévation de pouvoir à la façon de Jacques et Eric du lycée Jacques Coeur.

5.4   Notre choix : poweroff

Notre choix s’est porté sur l’utilisation du client WPKG-Client conjointement à l’utilisation de PowerOff

Depuis quelques mois, nous avons installé sur nos postes un logiciel d’extinction automatique des postes : PowerOff

PowerOff est lui-même un service qui nous donne toute satisfaction.

Notre démarche est donc la suivante :
  • Initialement ( sur une durée de 8 jours environ), nous avons installé le service PowerOff par un script AutoIt, nommée local.exe qui contient les commandes suivantes:

    #cs
    Installation de poweroff
    #ce
    $PartageReseau="\\ctrlr\netlogon\bin"
    $minutes= Random ( 0 , 59 , 1 )
    $cmd1=@ComSpec &" /c " & $PartageReseau & '\poweroff\poweroff.exe shutdown -warn -warntime 60 \
    -msg "Ce PC sera éteint dans 60 secondes\n Sauver votre travail !" -scheduled \
    -time 19:'& $minutes &'-days m,t,w,th,f,s,su -create_service -notray'
    $cmd2=@ComSpec & " /c " & @SystemDir &'\poweroff.exe shutdown -warn -warntime 60 \
    -msg "Ce PC sera éteint dans 60 secondes\n Sauver votre travail !" -scheduled \
    -time 19:'& $minutes &' -days m,t,w,th,f,s,su -create_service -notray'
    if fileexists( @systemdir & "\poweroff.exe") then
    $cmd=$cmd2
    Else
    $cmd=$cmd1
    EndIf
    If ProcessExists("poweroff.exe") Then
    RunWait( @ComSpec & " /c " & ' net stop Poweroff' , @SystemDir,@SW_HIDE )
    EndIf
    RunWait( $cmd , @SystemDir,@SW_HIDE )
    RunWait( @ComSpec & " /c " & ' net start Poweroff' , @SystemDir,@SW_HIDE )
    
  • Ainsi PowerOff éteint automatiquement les machines le soir à une heure comprise aléatoire comprise entre 19h00 et 19h59. L’objectif étant que les machines ne s’éteignent pas toutes en même temps et ne demande pas toutes l’installation de logiciels au même moment. ( Préservation de la bande passante en cas d’installation de « gros » logiciels.

  • Toujours par le script local.exe en AutoIt, nous avons installé le client WPKG afin qu’il installe les logiciels à l’extinction.

  • Voici notre settings.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration>
    <file>\\10.145.15.178\wpkg$\wpkg.js</file>
    <path-user>L0451462V\omer</path-user>
    <path-password>dsbhBoQ=</path-password>
    <exec-user>SYSTEM</exec-user>
    <exec-password />
    <parameters>/synchronize /debug /sendStatus</parameters>
    <silent>YES</silent>
    <pre-action />
    <post-action />
    <show-GUI>YES</show-GUI>
    <logon-delay>2</logon-delay>
    <logon-message-title>WPKG Software Deployment</logon-message-title>
    <logon-message-1>WPKG installe des applications...</logon-message-1>
    <logon-message-2>Merci d'attendre, ne pas éteindre ni redémarrer cet ordinateur...</logon-message-2>
    <script-variable name="software">\\10.145.15.178\install\packages</script-variable>
    <script-variable name="wpkg">\\10.145.15.178\wpkg$</script-variable>
    <priority>normal</priority>
    <stop-service-after-done>NO</stop-service-after-done>
    <laptop-mode>NO</laptop-mode>
    <server-connecting-method>standard</server-connecting-method>
    <server-connecting-ip />
    <server-connecting-timeout>3</server-connecting-timeout>
    <server-connecting-script-timeout>3</server-connecting-script-timeout>
    <server-connecting-script-file />
    <log-file />
    <run-on-shutdown>YES</run-on-shutdown>
    <shutdown-delay>30</shutdown-delay>
    </configuration>
    

6   L’écriture de paquets logiciels

6.1   Avec WPKG_Web

L’écriture d’un paquet est assez intuitive avec WPKG_Web
Il suffit de cliquer sur le lien Add New

Ensuite, il faut remplir tous les onglets.

Une remarque, il faut avoir nommé le paquet ( et validé ) dans le premier onglet avant de pouvoir accéder aux autres.

6.2   Par import dans WPKG_Web

Si les modifications de wpkg_web ont été faites comme décrit à la fin de ce document.

Vous pouvez insérer un fichier xml en cliquant sur import xml

Attention : Après l’import, vérifier que tout est OK ! Notamment la balise <conflicts> n’est pas traitée et la logique de check reste toujours à AND !

6.3   Un exemple : Installation du codec Xvid

Le plus simple étant de prendre un exemple, allons y !

  • Chercher le logiciel http://www.koepi.info/Xvid-1.2.1-04122008.exe et le télécharger dans l’emplacement choisi \\wksapps\install\packages\xvid.

  • Vérifier dans les sources de paquets chez wpkg.org si le paquet a déjà été proposé : ici, c’est le cas : http://wpkg.org/Xvidcodecs , mais c’est une vieille version.

  • Importer le paquet fourni par le site.

  • Retourner sur la liste des paquets, puis sur le nouveau paquet xvidcodec

  • Repasser par tous les onglets pour adapter. Ici :
    • J’ai changé le nom pour xvid, et la priorité pour 5

    • Un peu au hasard, j’ai changé l’entrée de check en Xvid 1.2.1 ( mais si le check est faux c’est plutôt mieux pour le moment )

    • Dans l’onglet Commande, j’adapte. Je remplace « %packages% » par « %software%xvid » et j’adapte le nom du fichier à lancer. Les lignes d’install et d’upgrade deviennent donc

      %software%\xvid\Xvid-1.2.1-04122008.exe /VERYSILENT
      
  • Le paquet est adapté.

  • Aller dans les profils et ajouter le paquet xvid dans le profil test.

  • Se jeter sur la machine de test sur laquelle on ajoute le petit script launch-wpkg.cmd suivant qui permet de tester

    @echo off
    net use \\wksapps\wpkg$
    set SOFTWARE=\\wksapps\install\packages
    set wpkg=\\wksapps\wpkg$
    cscript \\wksapps\wpkg$\wpkg.js /synchronize /debug
    notepad c:\windows\system32\wpkg.xml
    net use \\wksapps\wpkg$ /delete
    
  • Lancer ce script en scrutant ses résultats.

  • Si vous avez suivi à la lettre jusqu’ici, l’installation fonctionne, mais la vérification est fausse. Vérifier donc dans Ajout/Suppression de programmes.

  • Constater que l’entrée dans Ajout/Suppression de programmes s’appelle « Xvid 1.2.1 final uninstall », donc le paquet n’a pas été considéré comme installé. Corriger donc l’entrée Check dans le paquet.

  • En regardant ce qui s’est installé, on constate qu’un groupe de programme Xvid est apparu, or je préfère que ce groupe de programme se place dans Accessoires, ajouter donc les commandes suivantes :
    • Pour l’install et l’upgrade,

      %COMSPEC% /C move "%ALLUSERSPROFILE%\Menu Démarrer\Programmes\Xvid" "%ALLUSERSPROFILE%\Menu Démarrer\Programmes\Accessoires"
      
    • Pour le remove,

      %COMSPEC% /C rmdir /S /Q "%ALLUSERSPROFILE%\Menu Démarrer\Programmes\Accessoires\Xvid"
      
  • J’en profite pour vérifier la commande de désinstallation en la copiant dans une fenêtre de commande. Elle fonctionne et on retrouve donc notre ordinateur sans Xvid

  • Je relance le script launch-wpkg.cmd. L’installation s’est bien passée et le paquet est inscrit dans le fichier C:\Windows\System32\wpkg.xml .

  • Pour vérifier le remove, j’enlève le paquet Xvid du profil de Test. Et je relance le script launch-wpkg.cmd. La désinstallation se passe bien.

  • Reste à vérifier que l’upgrade se passe bien … Pour cela, j’installe une version précédente http://download.divxmovies.com/XviD-1.1.3-27042008.exe, je remet Xvid dans le profil Test. Et je relance le script launch-wpkg.cmd.

6.4   Le déboggage

6.4.1   Tester le paquet

Quand on a écrit un paquet logiciel, il faut le tester !

Pour cela, si vous utilisez le client, la solution est de se déconnecter et de se reconnecter… La difficulté est que cela est bien long, qu’il faut configurer le client pour qu’il passe en mode debug … Donc très fastidieux.

Donc le plus simple est de procéder ainsi :
  • Répérer le nom de la machine de test

  • Créer ou modifier un profil test (par exemple) qui contient tous les paquets déjà installés et le paquet que vous êtes en train d’écrire.

  • Si vous êtes admin, créer un petit fichier batch, launch-wpkg.bat par exemple contenant ceci

    net use \\wksapps\wpkg$
    set SOFTWARE=\\wksapps\install\packages
    set WPKG=\\wksapps\wpkg$
    cscript \\wksapps\wpkg$\wpkg.js /synchronize /debug
    notepad c:\windows\system32\wpkg.xml
    net use \\wksapps\wpkg$ /delete
    
  • La deuxième ligne permet de définir une variable %SOFTWARE% ( si vos paquets l’utilise, mais c’est très très conseillé ! )

  • La quatrième ligne lance wpkg en mode debug… Dans la fenêtre, vous verrez donc défiler toutes les instructions que wpkg lance

  • La cinquième permet de voir la sortie locale ( et aussi de bloquer la fenêtre de script pour repérer ce qui n’aurait pas marché.

  • La sixième déconnecte le lecteur réseau. C’est indispensable si vous utilisez le client wpkg qui n’aime pas que la connexion soit déjà ouverte !

6.4.2   Sources d’erreurs

Les commandes suivantes sont des ‘built-in’ commandes du shell de windows:

ASSOC BREAK CALL CD CHCP CHDIR CLS COLOR COPY DEL DISKCOMP DISKCOPY
ENDLOCAL ERASE EXIT FOR FORMAT FTYPE GOTO GRAFTABL IF MD MODE MOVE PATH
PAUSE POPD PROMPT PUSHD RD REM REN SET SETLOCAL SHIFT START TIME TITLE
TREE TYPE VER VERIFY VOL

On doit donc les précéder de ‘%COMSPEC% /c’ pour qu’elles soient interprétées

Exemple

%COMSPEC% /c copy x:\path\go.lnk "%ALLUSERSPROFILE%\Desktop"

Pour la copie, on peut préférer ‘xcopy’ qui peut être appelé directement

xcopy x:\path\go.lnk "%ALLUSERSPROFILE%\Desktop"

7   Améliorations de WPKG_web tel qu’il nous arrive dans wksapps

7.1   Modification de versions

J’ai changé le wpkg.js pour la version 1.1.0_M6 ( réputée bêta, mais en fait plutôt stable )

Le wpkg client qui nous arrive est très vieux aussi, j’ai changé pour la version 1.3.6. Là encore, c’est une bêta (qui marche plutôt bien )

7.2   Ajout de la fonction import de paquets xml ( Doit être fait en root sur wksapps, donc par la télémaintenance )

  • Il manque une dépendance perl dans wksapps : XML::DOM. Il faut faire faire par la télémaintenance un apt-get install libxml-dom-perl sur wksapps.

  • Il faut renseigner le Connect.pm dans /var/www/wpkg_web/scripts/ pour se connecter à la base unattended ( normalement fait par modulr )

  • Dans /var/www/wpkg_web, ajouter un dossier import avec des droits en control total pour www_data

  • Il faut ajouter cette ligne en début du script perl package_xml_in

    BEGIN {push @INC,"/var/www/wpkg_web/scripts/"; }
    

Déjà fait, mais sans le begin et j’ai l’impression que c’est mieux avec … (?)

  • Dans sidebar.php, ajouter (<a href=’package_in.php’>Import Xml</a>) le lien d’import

  • Ajouter le fichier package_in.php suivant

    <?php
    include "connect.php";
    include "header.php";
    if (isset($_POST['submit']))
    {
    if (file_exists('import/erreur.txt')){unlink('import/erreur.txt');}
    $Saved_File = fopen('import/packxml.txt', 'wb');
    fwrite($Saved_File, stripslashes(utf8_encode($_POST['notes' ])));
    fclose($Saved_File);
    exec('perl /var/www/wpkg_web-1.1.0/scripts/packages_xml_in /var/www/wpkg_web-1.1.0/import/packxml.txt 1>import/ok.txt 2>import/erreur.txt');
    unlink('import/packxml.txt');
    //echo 'Passage par le submit';
    }
    ?>
    <script type="text/javascript">
    // Tool Tip Data below
    var preFormat="<div class='tip'>";
    var postFormat="</div>";
    var permDel="<span style=\"background: red; font-weight: bold;color: white;\"><?php print $vocab['tip-permdel']; ?>";
    </script>
    <title><?php print $vocab['title-packimport']; ?></title>
     <div id="popupDiv" style="visibility:hidden; position:absolute; z-index:1000;">
    </div>
    <form action=<?php echo basename(__FILE__); ?> method="post">
    <table class='tbl_main' >
    <?php
    include "sidebar.php";
    ?>
    <td valign='top' >
        <table class='tbl_mainsub'>
            <tr class='headline'>
                <td>
                <?php print $vocab['title-packimport']; ?>
                <br>
                <?php print $vocab['gen-pastehere']; ?>
                </td>
            </tr>
        </table>
        <table class='tbl_sub2' cellspacing='0' cellpadding='2'>
            <tr align='center'>
                <td>
                <textarea id='notes' name='notes' rows='20' cols='80'><?php
                //print_r($_POST);  //Affiche tout le contenu de la variable $_GET
                if (file_exists('import/erreur.txt'))
                    {if (file_get_contents('import/erreur.txt')!=NULL)
                        {echo 'Erreur a l\'import
    La sortie du script est :'.file_get_contents('import/erreur.txt');
                        }
                    else
                        {
                        if (isset($_POST['submit']))
                        {echo 'Import OK
    Vérifiez dans la liste des paquets';}
                        }
                    unlink('import/erreur.txt');
                    }
                if (isset($_POST['submit'])==FALSE){print $vocab['gen-pastehere'];}
                //print $vocab['gen-pastehere'];
                ?></textarea>
                </td>
            </tr>
            <tr>
                <td align='center'>
                <input type='submit' name='submit' value='<?php print $vocab['button-submit']; ?>'  >
                 </td>
            </tr>
        </table>
    </td>
    </table>
    </form>
    <?php include "footer.php"; ?>
    </body>
    </html>
    
  • Dans header.php, ajouter une balise meta pour forcer l’utf8 (mais je ne comprends pas le codage dans la base … )

L’import est fonctionnel, mais il y a 2 petits bugs sur le script perl package_xml_in

Bugs constatés :

  • La balise <conflicts> n’est pas traitée et la logique de check reste toujours à AND, même si dans le paquet, elle est à OR ou autre.

  • Sur les check, il y a eu des évolutions de wpkg.js avec des valeurs différentes.

    Changes 2007-04-05, v1.1.0-M3 by Rainer Meier <skybeam (at) users.sourceforge.net>
    NEW: Package uninstall checks have been extended. The following values are now valid:
    type="uninstall" path="prg" condition="versionsmallerthan" value="1.1"
    Check if version is smaller than the specified value
    type="uninstall" path="prg" condition="versionlessorequal" value="1.1"
    Check if version is less or equal than the specified value
    type="uninstall" path="prg" condition="versionequalto" value="1.1"
    Check if version is exactly equal to the specified value
    type="uninstall" path="prg" condition="versiongreaterorequal" value="1.1"
    Check if version is greater or equal to the specified value
    type="uninstall" path="prg" condition="versiongreaterthan" value="1.1"
    Check if version is greater than the specified value
    The version is compared to the DisplayVersion value within the uninstall
    entry within the Windows registry.
    Changes are based on a patch by Richard de Vos. Thanks!
    NEW: Added new check type: "execute". This allows you to execute any script which checks if an application is installed - based on the exit code of
    the script.
    Usage:
    type="execute" path="\\path\to\script.cmd"
    condition="exitcodesmallerthan" value="0"
    Evaluates true if the exit code is negative
    type="execute" path="\\path\to\script.cmd"
    condition="exitcodelessorequal" value="0"
    Evalueates true if exit code is 0 or negative
    type="execute" path="\\path\to\script.cmd"
    condition="exitcodeequalto" value="0"
    Evaluates true only if exit code is exactly 0
    type="execute" path="\\path\to\script.cmd"
    condition="exitcodegreaterorequal" value="0"
    Evaluates true if exit code is 0 or any poitive number
    type="execute" path="\\path\to\script.cmd"
    condition="exitcodegreaterthan" value="0"
    Evaluates true if exit code is any positive number
    This type of check also allows very complex checks. For example there is a
    limitation of the RegRead method used by WPKG to query registry values
    which contain backslashes '\'. Now you can execute a batch script which
    checks for such registry values using 'reg query ...'.
    

7.3   Ajout de la fonction téléchargement

Il suffit de modifier le fichier packages_xml_out.php de la manière suivante :

Remplacer ligne 81

print sprintf("  <download lang='%s' url='%s' saveto='%s' />\n", $dl_data[0], $dl_data[1], $dl_data[2]);

par

print sprintf("  <download url='%s' target='%s' />\n", $dl_data[1], $dl_data[2]);

C’est un peu « faible » comme modification, mais ça marche.
Par contre, un paquet qui contient un téléchargement ne sera pas correctement réimporté. Il faudrait changer complètement la gestion des téléchargements dans wpkg_web, les scripts et la base de données ( notamment virer la langue et modifier « saveto » en « target »

Attention, ce n’est pas un téléchargement permanent ! Le principe est download, execute, delete.
C’est curieux, mais c’est ainsi qu’il est implanté dans wpkg.js 1.1.0_M6

Docutils System Messages

System Message: ERROR/3 (opsi.txt, line 246); backlink

Unknown target name: « wpkg_client ».

 

Laisser un commentaire