Munki utilizza le informazioni del file pkginfo e cerca elementi software specifici per decidere se è necessario installare o meno un determinato elemento. Per creare un elemento pkginfo funzionale, è importante comprendere i metodi utilizzati da Munki per controllare l'elenco degli elementi software.

Importante: La maggior parte del contenuto riportato in questa sezione proviene dal sito Web di Munki.

Metodi

In ordine di precedenza Munki utilizza i metodi seguenti per determinare se l'elemento specificato deve essere installato (o rimosso):

  1. Installare applicazioni macOS mediante script di controllo
  2. Installare applicazioni macOS mediante elementi di installazione
  3. Installare applicazioni macOS utilizzando le ricevute

Quando si combinano questi metodi, viene utilizzato solo il metodo con priorità più alta. Ad esempio, se un elemento pkginfo specifico dispone sia di un elenco di "installazioni" che di un elenco di "ricevute", le ricevute vengono ignorate al fine di determinare lo stato dell'installazione. Anche in questo caso, tuttavia, è possibile utilizzare le ricevute durante la rimozione di un elemento, poiché consentono a Munki di determinare esattamente quali file sono stati installati.

Installare applicazioni macOS mediante script di controllo

Un elemento pkginfo può contenere facoltativamente un installcheck_script. Lo script di controllo dell'installazione fornisce un metodo per determinare se è necessario installare un elemento software, laddove la fornitura di installazioni/ricevute non è adatta o non è praticabile.

Gli strumenti della riga di comando in genere installati tramite la porta (MacPorts) o i moduli Python installati utilizzando easy_install o PIP sono esempi principali poiché forniscono un metodo non particolarmente semplice per determinare la versione installata.

Lo script di controllo dell'installazione deve essere scritto in modo che il codice di uscita pari a 0 indichi che l'elemento non è attualmente installato e che pertanto deve essere installato. Tutti i codici di uscita diversi da zero indicano che l'elemento è installato.

Un esempio di installcheck_script che illustra un controllo per determinare se è installata la versione corrente del modulo argparse Python.

#!/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

Facoltativamente, è possibile utilizzare un uninstallcheck_script esplicito per determinare se un elemento software deve essere rimosso o meno. In questo caso, lo script con un codice di uscita pari a 0 indica che l'elemento è attualmente installato e che deve esserne eseguita la rimozione. Tutti i codici di uscita diversi da zero indicano che l'elemento non è installato.

Installare applicazioni macOS mediante elementi di installazione

L'elenco degli elementi installati viene generato da VMware AirWatch Admin Assistant per alcuni tipi di elementi di installazione (.dmg), ma non per i pacchetti Apple (.pkg o .mpkg). È possibile generare (o modificare) questo elenco che rappresenta il meccanismo più flessibile per determinare lo stato di installazione.

L'elenco di installazioni può contenere un numero qualsiasi di elementi quali applicazioni, riquadri delle preferenze, framework o altri elementi di tipo bundle, info.plists, directory semplici o file. È possibile utilizzare qualsiasi combinazione di elementi per consentire a Munki di determinare se un elemento è installato o meno.

Un esempio di elenco di "installazioni" generato automaticamente per 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>

Per determinare se Firefox 6 è installato o meno, Munki verifica l'esistenza di un'applicazione con CFBundleIdentifier di org.mozilla.firefox e se lo trova, verifica che la sua versione (CFBundleShortVersionString) sia almeno 6.0. Se non trova l'applicazione o se la versione è inferiore a 6.0, Munki considera Firefox 6.0 non installato. Gli elenchi di installazioni possono contenere più elementi. Se un elemento è mancante o ha una versione meno recente, l'elemento viene considerato non installato. È possibile generare manualmente elementi da aggiungere a un elenco di installazioni utilizzando i seguenti pkginfo:

        /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>
      

Copiare e incollare l'intero elenco di chiavi e valori di installazioni oppure copiare il valore dict e aggiungerlo a un elenco di installazioni esistente all'interno del file pkginfo. Munki verifica l'esistenza di /Library/Internet Plug-Ins/Flash Player.plugin e, se lo trova, ne verifica la versione. Se la versione è inferiore a 10.3.183.5, l'elemento deve essere considerato come non installato. È possibile generare elementi di installazione per qualsiasi elemento del file system, ma Munki è in grado solo di determinare le versioni per gli elementi di tipo bundle che contengono un file Info.plist o version.plist con le informazioni sulla versione.

Per gli altri elementi del file system, Munki può solo determinare l'esistenza di una directory non bundle oppure calcolare un checksum (per i file). Per i file con checksum, il test non riesce (e quindi l'elemento non verrà considerato installato) se il checksum per il file sul disco non corrisponde al checksum nel file 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>
      

Se si desidera che Munki controlli solo l'esistenza di un file indipendentemente dal contenuto, rimuovere le informazioni md5checksum generate nelle informazioni sugli elementi installati. Assicurarsi che il percorso specificato sia valido.

        <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>
      

Installare applicazioni macOS utilizzando le ricevute

Quando viene installato un pacchetto stile Apple, è possibile generare una ricevuta sulla macchina. I metapacchetti generano più ricevute. VMware AirWatch Admin Assistant aggiunge i nomi e le versioni di tali ricevute a un array di ricevute nel pkginfo per un pacchetto.

Di seguito è riportato un array di ricevute per i codec Avid LE QuickTime, versione 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>
      

Se Munki utilizza l'array di ricevute per determinare lo stato di installazione, verifica l'esistenza e la versione di ogni ricevuta nell'array. Se una ricevuta è mancante o ha un numero di versione inferiore rispetto alla versione specificata per tale ricevuta nell'array di ricevute, l'elemento viene considerato non installato. Solo se è presente ogni ricevuta e tutte le versioni sono uguali a quelle del pkginfo (o sono più recenti) l'elemento è considerato installato. Per risolvere eventuali problemi, utilizzare lo strumento pkgutil per esaminare le ricevute installate.

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

In questo caso, la ricevuta per i codec Avid LE QuickTime non è stata trovata sul computer. Una complicazione comune con le ricevute, con molti metapacchetti, è il fatto che la logica di installazione comporta l'installazione solo di un sottoinsieme dei sottopacchetti. In genere, l'elenco di ricevute contiene una ricevuta per ogni sottopacchetto in un metapacchetto (e necessita di queste informazioni se a Munki viene richiesto di rimuovere l'elemento software in base alle ricevute del pacchetto). Ma se è normale e previsto che non tutti i sottopacchetti siano installati, Munki contrassegna l'elemento come non installato e offre di installarlo più e più volte. Una soluzione per questo problema consiste nell'aggiungere una chiave facoltativa con il valore True alle ricevute installate facoltativamente. Munki non prende in considerazione queste ricevute durante la determinazione dello stato dell'installazione.

        <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>
      

Un'altra soluzione per questa situazione è fornire un array di installazioni con gli elenchi degli elementi installati dal pacchetto. Munki può utilizzare informazioni sull'array di installazioni anziché le ricevute per determinare lo stato dell'installazione.