设备更新 apt 清单

apt 清单是一个 JSON 文件,描述 apt 更新处理程序所需的更新详细信息。 可以将此文件导入到 IoT 中心的设备更新中,就像任何其他更新一样。

有关详细信息,请参阅 导入 IoT 中心的设备更新

概述

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

设备更新支持 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 清单可用于更新设备更新代理及其依赖项。 请在 apt 清单中列出设备更新代理的名称和所需版本,如同处理任何其他包一样。 然后,可以通过适用于 IoT 中心的设备更新管道导入和部署此 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 清单是格式正确的 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