Munki utilise les informations du fichier pkginfo et recherche les éléments logiciels pour décider si un élément particulier doit être installé ou non. Pour créer des éléments pkginfo fonctionnels, découvrez les méthodes utilisées par Munki pour vérifier la liste des éléments logiciels.

Important : Le contenu de cette section provient en grande partie du site Web de Munki.

Méthodes

Par ordre de priorité, Munki utilise les méthodes suivantes pour déterminer si l'élément indiqué doit être installé (ou supprimé) :

  1. Installer des applications macOS à l'aide du script de vérification
  2. Installer des applications macOS à l'aide des éléments d'installation
  3. Installer des applications macOS à l'aide de réceptions

Lors de la combinaison de ces méthodes, seule la méthode possédant la priorité la plus élevée est utilisée. Par exemple, si un élément pkginfo spécifique dispose d'une liste « installs » et d'une liste « receipts », les réceptions sont ignorées afin de déterminer l'état de l'installation. Même dans ce cas, cependant, des réceptions peuvent être utilisées lors de la suppression d'un élément, car elles aident Munki à déterminer exactement quels fichiers ont été installés.

Installer des applications macOS à l'aide du script de vérification

Un élément pkginfo peut éventuellement contenir un installcheck_script. Le script de vérification de l'installation fournit une méthode pour déterminer si un élément logiciel doit être installé, où le fait d'indiquer des installations/réceptions est inapproprié ou peu pratique.

Les outils de ligne de commande généralement installés via le port (MacPorts) ou les modules Python installés à l'aide de easy_install ou pip sont des exemples types, car ils ne fournissent aucune méthode simple pour déterminer leur version installée.

Un installcheck_script doit être écrit de sorte qu'un code de sortie de 0 indique que l'élément n'est pas actuellement installé et qu'il doit donc être installé. Tous les codes de sortie différents de zéro indiquent que l'élément est installé.

Exemple de installcheck_script illustrant une vérification pour déterminer si la version actuelle du module Python argparse est installée.

#!/bin/sh# Grab current version of installed python moduleversion="$(python -c 'import argparse;print argparse.__version__' 2>/dev/null)"# Compare with the version we want to installif [ ${version:-0} < 1.2.1 ]; thenexit 0elseexit 1fi

Vous pouvez éventuellement fournir un uninstallcheck_script explicite pour déterminer si un élément logiciel doit être supprimé ou non. Dans ce cas, le script avec un code de sortie de 0 indique que l'élément est actuellement installé et qu'il doit être supprimé. Tous les codes de sortie différents de zéro indiquent que l'élément n'est pas installé.

Installer des applications macOS à l'aide des éléments d'installation

La liste des éléments d'installation est générée par VMware AirWatch Admin Assistant pour certains types d'éléments d'installation (.dmg), mais pas pour les modules Apple (.pkg ou .mpkg). Vous pouvez générer (ou modifier) cette liste. Cela constitue le mécanisme le plus flexible pour déterminer l'état de l'installation.

La liste des installations peut contenir un nombre illimité d'éléments, tels que des applications, des volets de préférence, des infrastructures ou d'autres éléments de type bundle, des fichiers info.plist, des répertoires simples ou des fichiers. Vous pouvez utiliser n'importe quelle combinaison d'éléments pour aider Munki à déterminer si un élément est installé ou non.

Exemple de liste « installs » générée automatiquement pour Firefox 6.0

<key>installs</key><array><dict><key>CFBundleIdentifier</key><string>org.mozilla.firefox</string><key>CFBundleName</key><string>Firefox</string><key>CFBundleShortVersionString</key><string>6.0</string><key>minosversion</key><string>10.5</string><key>path</key><string>Applications/Firefox.app</string><key>type</key><string>application</string></dict></array>

Pour déterminer si Firefox 6 est installé ou non, Munki recherche une application avec un identifiant CFBundleIdentifier de org.mozilla.firefox et, le cas échéant, vérifie que sa version (CFBundleShortVersionString) est supérieure ou égale à 6.0. Si Munki ne parvient pas à trouver l'application ou si sa version est inférieure à 6.0, il considère que Firefox 6.0 n'est pas installé. Les listes d'installations peuvent contenir plusieurs éléments. Si un élément est manquant ou est d'une version antérieure, l'élément est considéré comme non installé. Vous pouvez générer manuellement des éléments à ajouter à une liste installs à l'aide de la commande makepkginfo suivante :

        /Library/Application\ Support/AirWatch/Data/Munki/bin/makepkginfo -f /Library/Interne
        t\ Plug-Ins/Flash\ Player.plugin
      
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Prope
        rtyList-1.0.dtd">
        <plist version="1.0">
        <dict>
        
          <key>installs</key>
          <array>
           <dict>  <key>CFBundleShortVersionString</key> <string>10.3.183.5</string> <key>path</key> <string>/Library/Internet Plug-Ins/Flash Player.plugin</string> <key>type</key> <string>bundle</string>  </dict> 
          </array>
        
        </dict>
        </plist>
      

Copiez et collez intégralement la clé installs et la valeur, ou copiez uniquement la valeur dict et ajoutez-la à une liste d'installations existante dans votre fichier pkginfo. Munki vérifie l'existence de /Library/Internet Plug-Ins/Flash Player.plugin et, le cas échéant, vérifie sa version. Si la version est inférieure à 10.3.183.5, l'élément est considéré comme n'étant pas installé. Vous pouvez générer des éléments installs pour n'importe quel élément de système de fichiers, mais Munki peut uniquement déterminer les versions des éléments de type bundle contenant un fichier Info.plist ou version.plist avec des informations de version.

Pour les autres éléments de système de fichiers, Munki peut uniquement déterminer l'existence d'un répertoire qui n'est pas un répertoire de bundle ou calculer un total de contrôle (pour les fichiers). Pour les fichiers avec des totaux de contrôle, le test échoue (et l'élément est par conséquent considéré comme n'étant pas installé) si le total de contrôle du fichier sur le disque ne correspond pas au total de contrôle du fichier pkginfo.

        <key>installs</key>
        <array>
        
          <dict>
           <key>md5checksum</key> <string>087fe4805b63412ec3ed559b0cd9be71</string> <key>path</key> <string>/private/var/db/dslocal/nodes/MCX/computergroups/loginwindow.plist</s tring> <key>type</key> <string>file</string> 
          </dict>
        
        </array>
      

Si vous souhaitez que Munki vérifie uniquement l'existence d'un fichier et qu'il ignore son contenu, supprimez les informations md5checksum générées dans les informations sur les éléments d'installation. Assurez-vous que le chemin fourni est intact.

        <key>installs</key>
        <array>
        
          <dict>
          <key>path</key>
          <string>/private/var/db/dslocal/nodes/MCX/computergroups/loginwindow.plist
          </string>
          <key>type</key>
           <string>file</string> 
          </dict>
        
        </array>
      

Installer des applications macOS à l'aide de réceptions

Lorsqu'un module de type Apple est installé, vous pouvez générer une réception sur la machine. Les métamodules génèrent plusieurs réceptions. L'outil VMware AirWatch Admin Assistant ajoute les noms et les versions de ces réceptions à un tableau de réceptions dans le fichier pkginfo pour un module.

Voici un tableau de réceptions pour les codecs Avid LE QuickTime, version 2.3.4.

        <key>receipts</key>
        <array>
        
          <dict>
           <key>filename</key> <string>AvidCodecsLE.pkg</string> <key>installed_size</key> <integer>1188</integer> <key>name</key> <string>AvidCodecsLE</string> <key>packageid</key> <string>com.avid.avidcodecsle</string> <key>version</key> <string>2.3.4</string> 
          </dict>
        
        </array>
      

Si Munki utilise le tableau de réceptions pour déterminer l'état de l'installation, il vérifie l'existence et la version de chaque réception dans le tableau. Si une réception est manquante ou a un numéro de version inférieur à la version spécifiée pour cette réception dans le tableau de réceptions, l'élément est considéré comme non installé. L'élément est considéré comme installé uniquement si chaque réception est présente et que toutes les versions sont identiques à celles du fichier pkginfo (ou ultérieures). Pour résoudre les problèmes, utilisez l'outil pkgutil afin d'examiner les réceptions installées.

        # pkgutil --pkg-info com.avid.avidcodecsle
        No receipt for 'com.avid.avidcodecsle' found at '/'.
      

Dans ce cas, la réception des codecs Avid LE QuickTime est introuvable sur cette machine. Dans le cas des réceptions avec de nombreux modules, la complication suivante survient couramment : la logique d'installation entraîne l'installation d'un sous-ensemble de sous-modules uniquement. En général, la liste des réceptions contient une réception pour chaque sous-module d'un métamodule (et a besoin de ces informations si Munki est invité à supprimer l'élément logiciel en fonction des réceptions de modules). Toutefois, si le fait que tous les sous-modules ne sont pas installés est un résultat normal et attendu, Munki continue de marquer l'élément comme n'étant pas installé et vous propose de l'installer encore et encore. Pour résoudre ce problème, une solution consiste à ajouter une clé facultative avec la valeur true aux réceptions qui sont installées de façon facultative. Munki ne tient pas compte de ces réceptions lors de la détermination de l'état d'installation.

        <key>receipts</key>
        <array>
        
          <dict>
           <key>filename</key> <string>mandatory.pkg</string> <key>installed_size</key> <integer>1188</integer> <key>name</key> <string>Mandatory</string> <key>packageid</key> <string>com.foo.mandatory</string> <key>version</key> <string>1.0</string> 
          </dict>
          <dict>
           <key>filename</key> <string>optional.pkg</string> <key>installed_size</key> <integer>1188</integer> <key>name</key> <string>Optional</string> <key>optional</key> <true/> <key>packageid</key> <string>com.foo.optional</string> <key>version</key> <string>1.0</string> 
          </dict>
        
        </array>
      

Une autre solution consiste à fournir un tableau installs qui répertorie les éléments qui sont installés par le module. Munki peut utiliser les informations du tableau installs au lieu des réceptions pour déterminer l'état d'installation.