Munki verwendet Informationen aus der pkginfo-Datei und sucht nach Softwareelementen, um zu entscheiden, ob ein bestimmtes Element installiert werden muss oder nicht. Um ein funktionales pkginfo-Element zu erstellen, müssen Sie die von Munki verwendeten Methoden zur Überprüfung der Liste der Softwareelemente verstehen.
Methoden
Entsprechend der Rangfolge verwendet Munki die folgenden Methoden, um zu ermitteln, ob das angegebene Element installiert (oder entfernt) werden muss:
- Installieren von macOS-Anwendungen mit dem Prüfskript
- Installieren von macOS-Anwendungen mithilfe der Installationselemente
- Installieren von macOS-Anwendungen unter Verwendung der Belege
Bei der Kombination dieser Methoden wird nur die Methode mit der höchsten Priorität verwendet. Wenn z. B. ein angegebenes pkginfo-Element sowohl eine Liste „installs“ als auch eine Liste „receipts“ enthält, werden die Belege zur Bestimmung des Installationsstatus ignoriert. Selbst in diesem Fall können jedoch Belege verwendet werden, wenn ein Element entfernt wird, da sie Munki dabei helfen, genau zu ermitteln, welche Dateien installiert wurden.
Installieren von macOS-Anwendungen mit dem Prüfskript
Ein pkginfo-Element kann optional ein installcheck_script enthalten. Das Installations-Check-Skript bietet eine Methode zur Ermittlung, ob ein Softwareelement installiert werden muss, wobei die Bereitstellung von Installationen/Belegen unzureichend oder nicht praktikabel ist.
Befehlszeilentools, die in der Regel über Port (MacPorts) oder Python-Module mithilfe von easy_install oder PIP installiert werden, sind Hauptbeispiele, da Sie keine einfache Methode zur Bestimmung der installierten Version bieten.
Es sollte ein Installations-Check-Skript geschrieben werden, sodass ein Exit-Code von 0 angibt, dass das Element derzeit nicht installiert ist und daher installiert werden sollte. Alle Nicht-Null-Exit-Codes geben an, dass das Element installiert ist.
Ein Beispiel für ein installcheck_script, das eine Überprüfung zur Ermittlung veranschaulicht, ob die aktuelle Version des argparse Python-Moduls installiert ist.
#!/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
Optional kann ein explizites uninstallcheck_script bereitgestellt werden, um zu ermitteln, ob ein Softwareelement entfernt werden soll oder nicht. In diesem Fall gibt das Skript mit einem Exit-Code von 0 an, dass das Element aktuell installiert ist und dass das Entfernen erfolgen soll. Alle Nicht-Null-Exit-Codes geben an, dass das Element nicht installiert ist.
Installieren von macOS-Anwendungen mithilfe der Installationselemente
Die Liste „Installationselemente“ wird vom VMware AirWatch Admin Assistant für einige Installationselement-Typen (.dmg), aber nicht für Apple-Pakete (.pkg oder .mpkg) generiert. Sie können diese Liste generieren (oder ändern); dies ist der flexibelste Mechanismus zur Bestimmung des Installationsstatus.
Die Liste der Installationen kann eine beliebige Anzahl von Elementen wie Anwendungen, Einstellungsfenster, Frameworks oder andere paketartige Elemente, info.plists, einfache Verzeichnisse oder Dateien enthalten. Sie können eine beliebige Kombination von Elementen verwenden, um Munki bei der Ermittlung zu unterstützen, ob ein Element installiert ist oder nicht.
Ein Beispiel für eine automatisch generierte „installs“-Liste für 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>
Um zu ermitteln, ob Firefox 6 installiert ist oder nicht, sucht Munki nach einer Anwendung mit einem CFBundleIdentifier von org.mozilla.firefox und überprüft, ob die Version (CFBundleShortVersionString) mindestens 6.0 ist. Wenn Munki die Anwendung nicht finden kann oder deren Version niedriger als 6.0 ist, wird Firefox 6.0 als nicht installiert betrachtet. Installationslisten können mehrere Elemente enthalten. Wenn ein Element fehlt oder über eine ältere Version verfügt, wird das Element als nicht installiert betrachtet. Sie können Elemente, die zu einer installs-Liste hinzugefügt werden, manuell mit folgender pkginfo-Datei generieren:
/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>
Kopieren Sie den gesamten installs-Schlüssel und -Wert und fügen Sie ihn ein oder kopieren Sie nur den dict-Wert und fügen Sie ihn einer vorhandenen Installationsliste in Ihrer pkginfo-Datei hinzu. Munki überprüft, ob das /Library/Internet Plug-ins/Flash Player.plugin vorhanden ist, und überprüft die Version, sofern vorhanden. Wenn die Version niedriger als 10.3.183.5 ist, wird das Element als nicht installiert betrachtet. Sie können Installationselemente für ein beliebiges filesystem-Element generieren, aber Munki weiß nur, wie die Versionen für paketartige Elemente bestimmt werden, die Info.plist oder version.plist mit Versionsinformationen enthalten.
Für andere filesystem-Elemente kann Munki nur die Existenz (im Falle eines Nicht-Paketverzeichnisses ermitteln oder eine Prüfsumme (bei Dateien) berechnen. Bei Dateien mit Prüfsummen schlägt der Test fehl (deshalb wird das Element als nicht installiert betrachtet), wenn die Prüfsumme für die Datei auf der Festplatte nicht mit der Prüfsumme in der pkginfo-Datei übereinstimmt.
<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>
Wenn Sie möchten, dass Munki nur das Vorhandensein einer Datei überprüft und sich nicht um deren Inhalt kümmert, entfernen Sie die generierten md5checksum-Informationen in den Installationselementinformationen. Stellen Sie sicher, dass der angegebene Pfad intakt ist.
<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>
Installieren von macOS-Anwendungen unter Verwendung der Belege
Wenn ein Apple-Paket installiert ist, wird auf der Maschine ein Beleg generiert. Metapakete generieren mehrere Belege. VMware AirWatch Admin Assistant fügt die Namen und Versionen dieser Belege einem Receipts-Array in der pkginfo-Datei für ein Paket hinzu.
Im Folgenden finden Sie ein Receipts-Array für die Avid LE QuickTime-Codecs, 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>
Wenn Munki das Receipts-Array verwendet, um den Installationsstatus zu ermitteln, werden Vorhandensein und Version der einzelnen Belege im Array überprüft. Wenn ein Beleg fehlt oder eine niedrigere Versionsnummer als die für diesen Zugang im Receipts-Array angegebene Version aufweist, wird das Element als nicht installiert betrachtet. Nur wenn jeder Beleg vorhanden ist und alle Versionen mit denen in der pkginfo (oder höher) identisch sind, wird das Element als installiert betrachtet. Um Probleme zu beheben, verwenden Sie das pkgutil-Tool zur Untersuchung der installierten Belege.
# pkgutil --pkg-info com.avid.avidcodecsle
No receipt for 'com.avid.avidcodecsle' found at '/'.
In diesem Fall wurde der Beleg für die Avid LE QuickTime-Codecs auf diesem Computer nicht gefunden. Eine häufige Komplikation bei Belegen ist, dass bei vielen Metapaketen die Installationslogik nur eine Teilmenge der Unterpakete enthält, die installiert werden. In der Regel enthält die Belegliste einen Beleg für jedes Unterpaket in einem Metapaket (und benötigt diese Informationen, wenn Munki aufgefordert wird, das Softwareelement basierend auf Paketbelegen zu entfernen). Wenn es jedoch normal ist und erwartet wird, dass nicht jedes Unterpaket tatsächlich installiert wird, markiert Munki das Objekt fortlaufend als nicht installiert und bietet an, es immer wieder zu installieren. Eine Lösung für dieses Problem besteht darin, einen optionalen Schlüssel mit dem Wert „true“ zu den Belegen hinzuzufügen, die optional installiert sind. Munki wird diese Belege dann nicht berücksichtigen, wenn der Installationsstatus ermittelt wird.
<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>
Eine weitere Lösung für diese Situation besteht darin, das installs-Array mit den Listenelementen bereitzustellen, die vom Paket installiert werden. Munki kann die Informationen zum Installieren des installs-Arrays anstelle der Belege verwenden, um den Installationsstatus zu ermitteln.