Munki utiliza información del archivo pkginfo y busca los elementos de software para decidir si se debe instalar o no un determinado elemento. Para crear elementos de pkginfo funcionales, es necesario entender los métodos que utiliza Munki para comprobar la lista de elementos de software.

Importante: La mayor parte del contenido de esta sección se encuentra en el sitio web de Munki.

Métodos

En orden de prioridad, Munki usa los siguientes métodos para determinar si se debe instalar (o eliminar) el elemento determinado:

  1. Instalar aplicaciones de macOS mediante el script de comprobación
  2. Instalar aplicaciones de macOS mediante los elementos de instalación
  3. Instalar aplicaciones de macOS mediante recibos

Al combinar estos métodos, solo se utiliza el método de prioridad más alta. Por ejemplo, si un determinado elemento pkginfo tiene una lista de "instalaciones" y una lista de "recibos", los recibos se ignorarán a la hora de determinar el estado de la instalación. Incluso en este caso, no obstante, se pueden usar recibos al eliminar un elemento, ya que ayudan a Munki a determinar exactamente qué archivos se instalaron.

Instalar aplicaciones de macOS mediante el script de comprobación

Un elemento pkginfo puede contener opcionalmente un installcheck_script. El script de comprobación de instalación es un método para determinar si es necesario instalar un elemento de software, cuando proporcionar instalaciones/recibos no es adecuado ni resulta práctico.

Las herramientas de línea de comandos que se suelen instalar a través del puerto (MacPorts) o los módulos Python instalados mediante easy_install o pip son buenos ejemplos, ya que no proporcionan un método fácil para determinar su versión instalada.

Un installcheck_script debería crearse de tal forma que un código de salida 0 indique que el elemento no está instalado actualmente y, por lo tanto, debe instalarse. Todos los códigos de salida distintos de 0 indican que el elemento está instalado.

Un ejemplo de installcheck_script que ilustra una comprobación para determinar si la versión actual del módulo argparse de Python está instalada.

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

De manera opcional, se puede proporcionar un uninstallcheck_script explícito para determinar si se debe eliminar o no un elemento de software. En este caso, el script con un código de salida 0 indica que el elemento está instalado actualmente y que se debe eliminar. Todos los códigos de salida distintos de 0 indican que el elemento no está instalado.

Instalar aplicaciones de macOS mediante los elementos de instalación

La lista de elementos de instalación la genera la herramienta VMware AirWatch Admin Assistant para algunos tipos de elementos de instalación (.dmg), pero no para paquetes de Apple (.pkg o .mpkg). Puede generar (o modificar) esta lista, que es el mecanismo más flexible para determinar el estado de la instalación.

La lista de instalaciones puede contener cualquier número de elementos, como aplicaciones, paneles de preferencias, marcos u otros elementos tipo paquete, info.plist, directorios simples o archivos. Puede utilizar cualquier combinación de elementos para ayudar a Munki a determinar si un elemento está instalado o no.

Ejemplo de una lista de "instalaciones" generada automáticamente para 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>

Para determinar si Firefox 6 está instalado o no, Munki busca una aplicación con un CFBundleIdentifier de org.mozilla.firefox y, si la encuentra, comprueba que su versión (CFBundleShortVersionString) sea como mínimo 6.0. Si Munki no puede encontrar la aplicación o su versión es anterior a la 6.0, considera que Firefox-6.0 no está instalado. Las listas de instalaciones pueden contener varios elementos. Si falta algún elemento o tiene una versión anterior, se considera no instalado. Puede generar manualmente los elementos que se añadirán a una lista de instalaciones mediante el siguiente 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>
      

Copie y pegue la clave y el valor completos de instalaciones o copie solo el valor dict y agréguelo a una lista de instalaciones existente dentro del archivo pkginfo. Munki comprueba la existencia de /Library/Internet Plug-Ins/Flash Player.plugin y, si lo encuentra, comprueba su versión. Si la versión es anterior a la 10.3.183.5, se considerará que el elemento no está instalado. Puede generar elementos de instalación para cualquier elemento de sistema de archivos, pero Munki solo sabe cómo determinar las versiones de los elementos tipo paquete que contienen un archivo Info.plist o version.plist con información de la versión.

En el caso de otros elementos de sistema de archivos, Munki solo puede determinar la existencia en el caso de un directorio que no sea un paquete o puede calcular una suma de comprobación (para archivos). Para los archivos con sumas de comprobación, se produce un error en la prueba (y, por lo tanto, se considerará que el elemento no está instalado) si la suma de comprobación del archivo en el disco no coincide con la suma de comprobación del archivo 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 desea que Munki solo compruebe la existencia de un archivo y no se ocupe de su contenido, elimine la información de md5checksum generada en la información del elemento de instalaciones. Asegúrese de que la ruta de acceso proporcionada esté intacta.

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

Instalar aplicaciones de macOS mediante recibos

Cuando se instala un paquete tipo Apple, es posible generar un recibo en la máquina. Los metapaquetes generan varios recibos. La herramienta VMware AirWatch Admin Assistant agrega los nombres y las versiones de los recibos a una matriz de recibos en el pkginfo para un paquete.

A continuación se incluye una matriz de recibos para los códecs Avid LE QuickTime, versión 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 utiliza la matriz de recibos para determinar el estado de la instalación, comprueba la existencia y la versión de cada recibo de la matriz. Si falta algún recibo o tiene un número de versión anterior a la versión especificada para ese recibo en la matriz de recibos, el elemento se considera no instalado. Solo si cada recibo está presente y todas las versiones son iguales a las del pkginfo (o posteriores), se considerará que el elemento está instalado. Para solucionar problemas, utilice la herramienta pkgutil para examinar los recibos instalados.

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

En este caso, no se ha encontrado el recibo para los códecs Avid LE QuickTime en esta máquina. Una complicación común con los recibos es que, con muchos metapaquetes, la lógica de instalación solo produce un subconjunto de los subpaquetes que se instalan. Por lo general, la lista de recibos contiene un recibo por cada subpaquete de un metapaquete (y necesita esta información si se solicita a Munki que elimine el elemento de software en función de los recibos de paquetes). Sin embargo, si es normal y se espera que no se instalen todos los subpaquetes, Munki marcará el elemento como no instalado actualmente y le ofrecerá volver a instalarlo. Una solución para este problema es agregar una clave opcional con el valor "verdadero" a los recibos que se instalan de forma opcional. En ese caso, Munki no tendrá en cuenta estos recibos al determinar el estado de la instalación.

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

Otra solución para esta situación es proporcionar una matriz de instalaciones que enumere los elementos instalados por el paquete. Munki puede utilizar la información de la matriz de instalaciones en lugar de los recibos para determinar el estado de la instalación.