你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Device Update APT 清单

APT 清单是 JSON 文件,用于描述 APT 更新处理程序所需的更新详细信息。 此文件可以导入到 Device Update for IoT Hub 中,就像其他任何更新一样。

有关详细信息,请参阅将更新导入 Device Update for IoT Hub

概述

当 APT 清单作为更新传递到 Device Update 代理时,代理会处理清单,并执行必要操作。 这些操作包括从指定的存储库下载并安装 APT 清单文件中指定的包及其依赖项。

Device Update 支持 APT updateType 和 APT 更新处理程序。 借助这种支持,Device Update 代理可以评估已安装的 Debian 包,并更新必要的包。

架构

APT 清单文件是包含版本控制架构的 JSON 文件。

{
    "name": "<name>",
    "version": "<version>",
    "packages": [
        {
            "name": "<package name>",
            "version": "<version specifier>"
        }
    ]
}

例如:

{
    "name": "contoso-iot-edge",
    "version": "1.0.0.0",
    "packages": [
        {
            "name" : "thermocontrol",
            "version" : "1.0.1"
        },
        {
            "name" : "tempreport",
            "version" : "2.0.0"
        }
    ]
}

每个 APT 清单包含以下属性:

  • 名称:此 APT 清单的名称。 这可以是任何对你的方案有意义的名称或 ID。 例如,contoso-iot-edge
  • 版本:此 APT 清单的版本号。 例如,1.0.0.0
  • :包含特定于包的属性的对象列表。
    • 名称:包的名称或 ID。 例如,iotedge
    • 版本:包所需的版本条件。 例如,1.0.8-2。 版本值不应包含等于号。 如果省略版本,则安装指定包的最新可用版本。

目前只支持准确的版本号。 版本号是所需的 Debian 包版本,格式为 [epoch:]upstream_version[-debian_revision],其中 epoch 是未签名的 int,upstream_version 可以包含字母数字和字符(例如“.”、“+”、“-”和“~”)。 它应以数字开头。

注意

“1.0.8”等于“1.0.8-0”

例如,"name":"iotedge""version":"1.0.8-2" 相当于使用命令 apt-get install iotedge=1.0.8-2 安装包

若要详细了解如何对 Debian 包进行版本控制,请参阅 Debian 策略手册

注意

当要安装的从属包被自动解析时,APT 包管理器会忽略由包给出的版本控制要求。 除非给出从属包的显式版本,否则它们将使用最新版本,即使包本身可能对给定版本指定了严格的要求 (=),也不例外。 这种自动解析可能会导致有关未满足的依赖项的错误。 了解详细信息

若要更新 Azure IoT Edge 安全守护程序的特定版本,应在 APT 清单中包含所需版本的 aziot-edge 包及其从属 aziot-identity-service 包。 有关详细信息,请参阅如何更新 IoT Edge

APT 清单可用于更新 Device Update 代理及其依赖项。 在 APT 清单中列出 Device Update 代理名称和所需的版本,就像对其他任何包所做的那样。 然后,可以通过 Device Update for IoT Hub 管道导入并部署此 APT 清单。

删除包

还可以使用 APT 清单从设备中删除已安装的包。 一个 APT 清单可用于移除、添加和更新多个包。

若要删除包,请在包名称后面添加一个减号“-”。 不得包含要移除的包的版本号。 通过 APT 清单移除包并不会移除其依赖项和配置。

例如:

{
    "name": "contoso-video",
    "version": "2.0.0.1",
    "packages": [
        {
            "name" : "foo-"
        }
    ]
}

此 APT 清单将从包“foo”部署到的设备中移除它。

APT 清单的已安装条件是 <name>-<version>,其中 <name> 是 APT 清单的名称,<version> 是 APT 清单的版本。 例如,contoso-iot-edge-1.0.0.0

创建 APT 清单的准则

创建 APT 清单时,需要牢记一些准则:

  • 请始终确保 APT 清单是格式标准的 json 文件。
  • 每个 APT 清单都应有唯一版本。 尝试提出标准化方法来递增 APT 清单版本,使其对你的方案有意义,并且很容易遵循。
  • 当涉及到每个单独包的所需状态时,指定要在设备上安装的包的确切名称和版本。 始终根据要用作包源的包存储库来验证值。
  • 确保 APT 清单中的包按照预期的安装/移除顺序列出。
  • 始终在测试设备上验证包的安装,以确保实现预期结果。
  • 当安装特定版本的包时(例如 iotedge 1.0.9-1),根据最佳做法,最好也在 APT 清单中包含要安装的从属包的显式版本(例如 libiothsm 1.0.9-1
  • 虽然这不是强制要求,但一定要确保 APT 清单是累积的,从而避免设备进入未知状态。 累积更新将确保设备有你关注的每个包的所需版本,即使设备由于安装失败或脱机而跳过了 APT 更新部署,也不例外

例如:

基础 APT 清单

{
    "name": "contoso-iot-edge",
    "version": "1.0",
    "packages": [
        {
            "name": "foo",
            "version": "1.0.1"
        }
    ]
}

不良更新

此更新包括 bar 包,但不包括 foo 包。

{
    "name": "contoso-iot-edge",
    "version": "2.0",
    "packages": [
        {
            "name": "bar",
            "version": "3.0.2"
        }
    ]
}

良好更新

此更新既包括 foo 包,也包括 bar 包。

{
    "name": "contoso-iot-edge",
    "version": "2.0",
    "packages": [
        {
            "name": "foo",
            "version": "1.0.1"
        },
        {
            "name": "bar",
            "version": "3.0.2"
        }
    ]
}

后续步骤

将更新导入 Device Update