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

Azure Device Update for IoT Hub apt 清单

本文介绍了 apt 清单,它是一个 JSON 文件,描述 apt 更新处理程序所需的更新详细信息。 可以像任何其他更新一样将此文件导入到 Device Update 中。 有关详细信息,请参阅将更新导入到 Device Update

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

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

可以使用 apt 清单来更新 Device Update 代理本身及其依赖项。 像任何其他包一样,在 apt 清单中列出设备更新代理名称和所需版本。 然后,可以导入此 apt 清单,并通过 Device Update 管道部署它。

架构

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

版本控制

apt 清单仅支持精确的版本号。 版本号是所需的 Debian 包版本,格式为 <epoch>:<upstream_version>-<debian_revision>,其中 epoch 是无符号整数,upstream_version 以数字开头,可以包含字母数字和字符,例如 .,+-~。 版本值不应包含等于号。

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

如果省略版本,Device Update 将安装指定包的最新可用版本。 若要详细了解如何对 Debian 包进行版本控制,请参阅 Debian 策略手册

注意

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

因此,安装特定版本的包时,最好还包含要安装的依赖包的显式版本。 有关详细信息,请参阅 apt-get 无法正确解析 Debian/Ubuntu 包中固定版本的依赖项

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

安装的条件

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

包移除

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

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

例如,以下 apt 清单将从部署到的任何设备中移除包 contoso1

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

apt 清单创建指南

创建 apt 清单时,请记住以下准则:

  • 确保 apt 清单是格式标准的 JSON 文件。

  • 为每个 apt 清单提供唯一的版本。 尝试使用一种标准化方法来递增 apt 清单的版本,以便对于你的应用场景有意义,并且易于遵循。

  • 对于每个包的所需状态,请指定要在设备上安装的包的确切名称和版本。 始终根据源包存储库的内容验证值。

  • 按安装或移除包的顺序列出 apt 清单中的包。

  • 始终验证在测试设备上安装包以确保获得所需的结果。

  • 安装特定版本的包(例如 iotedge 1.0.9-1)时,还包括要安装的依赖包的显式版本,例如 libiothsm 1.0.9-1

  • 虽然不是必需的,但始终使 apt 清单累积可避免设备进入未知状态。 累积更新可确保设备具有每个相关包的所需版本,即使设备因安装失败或脱机而跳过更新也是如此。

    例如,请考虑以下基本 apt 清单:

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

    以下版本 2.0 更新包括 contoso2 包,但不包括 contoso1 包。 接收 2.0 更新的所有设备可能没有 contoso1 包。

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

    以下版本 2.0 累积更新包括 contoso1contoso2 包:

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