在安装 Apple 样式的软件包时,您可以在计算机上生成一个回执。元包将生成多个回执。VMware AirWatch Admin Assistant 会将这些回执的名称和版本添加到软件包的 pkginfo 中的一个回执数组中。

以下是 Avid LE QuickTime 编解码器版本 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>
      

如果 Munki 使用回执数组来确定安装状态,它将验证数组中的每个回执是否存在并验证其版本。如果任何回执缺失或版本号低于在回执数组中为该回执指定的版本,则该项目将被视为未安装。只有当每个回执存在,并且所有版本与 pkginfo 中的版本相同(或更高)时,项目才会被视为已安装。要解决问题,请使用 pkgutil 工具检查安装的回执。

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

在本例中,在此计算机上找不到 Avid LE QuickTime 编解码器的回执。回执的一个常见情况是,使用多个元包时,安装逻辑导致仅安装子包的一部分。通常,回执列表对元包中的每个子包包含一个回执(如果要求 Munki 基于包回执移除软件项,则需要此信息)。但是,如果情况正常并且预期不会安装每个子包,则 Munki 会将项目标记为当前未安装,并且一次又一次地提供它以便安装。此问题的一个解决方案是将可选键及其值 true 添加到选择性地安装的回执中。在确定安装状态时,Munki 不会考虑这些回执。

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

此情况的另一个解决方案是提供一个安装数组,列出包安装的项目。Munki 可以使用安装数组信息(而非回执)来确定安装状态。