Manage software updates in your organization
System & Services 进阶 26m

在组织内管理软件更新

Manage software updates in your organization

2021年6月10日

在 Apple 官方观看视频

一句话判断

如果你还在用脚本手动推送 macOS 更新通知,该认真看看 MDM(Mobile Device Management)的软件更新管理能力了——今年 Apple 终于把软件更新的管控粒度做到了足够实用的程度。

这场 Session 讲了什么

过去 IT 管理员管理设备软件更新是一场拉锯战:要么完全放手让用户自行更新,要么用各种 hack 方式强制推送。这个 Session 介绍了 macOS Monterey 和 iOS 15 中软件更新管理的新机制,涵盖 MDM payload 如何控制更新行为、如何通过 declarative management 声明目标版本,以及如何在 Managed Software Updates 框架下精细控制更新节奏。

Apple 引入了一个关键概念——“targeted software updates”。管理员可以指定设备应该安装的具体版本,甚至设置一个 deadline,到期后系统会自动强制安装。这比之前只能发一个”请更新”的通知靠谱得多。对于大规模部署的场景,这些能力意味着你终于可以把”确保全员更新”从一个愿望变成一个可执行的计划。

值得深挖的点

本地化软件更新策略(Localized Software Update Plan)

这个机制允许 MDM 为不同分组的设备设置不同的更新计划。你可以先让 IT 部门的设备更新验证兼容性,再逐步推给全公司。关键在于它不是一个简单的”延迟 N 天”的粗暴策略,而是可以精确到”这个群组安装 12.4,那个群组安装 12.3.1”的细粒度控制。配合 AvailableOSUpdates 这个 MDM command,管理员还能实时查询每台设备上可用的更新列表,做到心中有数。

软件更新的声明式管理整合

Declarative Device Management 是今年 Apple 在设备管理方面的大方向,软件更新也纳入了这个体系。通过 SoftwareUpdate declaration,你可以声明期望状态而不是发出一个个指令。这意味着设备在网络恢复、重新上线等场景下都能自动对齐目标版本,不需要 MDM 服务器反复轮询和重试。

代码片段

# 通过 MDM 发送软件更新命令的 Plist 示例
# 指定安装具体版本的更新
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>RequestType</key>
    <string>InstallAction</string>
    <key>InstallAction</key>
    <dict>
        <key>Identifier</key>
        <string>macOS Monterey 12.0.1</string>
        <key>Action</key>
        <string>Install</string>
    </dict>
</dict>
</plist>
# 查询设备可用更新的 MDM 命令
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>RequestType</key>
    <string>AvailableOSUpdates</string>
</dict>
</plist>
# 使用 declarative management 声明目标软件版本
# 这段 JSON 会被推送到设备的声明式管理通道
{
    "Identifier": "com.example.softwareupdate",
    "Type": "com.apple.configuration.softwareupdate",
    "Payload": {
        "TargetOSVersion": "12.4",
        "TargetBuildVersion": "21F79",
        "DetailsKey": "Monterey 12.4 - 安全更新"
    }
}

最佳实践

  • 采用分阶段更新策略:先给 IT 团队推送,观察 48 小时无重大问题后再扩大范围。利用 LocalizedName 在更新通知中加入组织内部的信息,比如”IT 部门要求在周五前完成更新”。
  • AvailableOSUpdates 查询纳入设备的日常 check-in 流程,建立设备更新状态的仪表盘,而不是等问题爆发了才去排查。
  • 对于关键安全更新,设置 deadline 配置,但给用户留出至少 3 天的自主选择窗口——强制更新的用户体验很糟,只在安全事件紧急时使用。

还有什么值得关注

  • macOS Monterey 新增了 softwareupdate --fetch-full-installer 的改进,可以下载完整安装器用于大规模部署。
  • iOS 15 的软件更新现在支持通过 MDM 安装 rapid security response,安全补丁的推送速度比以往快得多。
  • InstallAction 命令现在支持 scheduling,可以指定安装窗口避免打扰用户工作时间。
WWDC 2021