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

教程:使用 Ubuntu Server 18.04 x64 包代理的 Azure IoT 中心的设备更新

Device Update for Azure IoT Hub 支持基于映像、包和脚本的更新。

基于包的更新是有针对性的更新,只改变设备上的特定组件或应用程序。 它们将降低带宽的消耗,并有助于减少下载和安装更新的时间。 基于包的更新通常还可以在应用更新时减少设备的停机时间,并避免创建映像的开销。 它们使用 APT 清单,该清单为设备更新代理提供从指定存储库中下载和安装 APT 清单文件中指定的包(及其依赖项)所需的信息。

本教程指导你使用设备更新包代理来更新 Ubuntu Server 18.04 x64 上的 Azure IoT Edge。 虽然本教程演示如何更新 IoT Edge,但你可以使用类似步骤更新其他包,例如 IoT Edge 使用的容器引擎。

即使你计划使用其他 OS 平台配置,本教程中的工具和概念仍然适用。 完成对端到端更新过程的介绍。 然后选择你喜欢的更新操作系统平台的形式,深入了解详细信息。

本教程介绍以下操作:

  • 下载并安装设备更新代理及其依赖项。
  • 将标记添加到设备。
  • 导入更新。
  • 部署包更新。
  • 监视更新部署。

先决条件

  • 创建 Device Update 帐户和实例(如果尚未这样做)。 配置 IoT 中心。

  • 你需要 IoT Edge 设备的连接字符串

  • 如果使用模拟器代理教程进行了先前的测试,请运行以下命令以调用 APT 处理程序并部署本教程中的无线包更新:

    sudo /usr/bin/AducIotAgent --register-content-handler /var/lib/adu/extensions/sources/libmicrosoft_apt_1.so --update-type 'microsoft/apt:1'
    

准备设备

自动或手动准备设备。

使用“自动部署到 Azure”按钮

为方便起见,本教程使用基于 cloud-initAzure 资源管理器模板来帮助你快速设置 Ubuntu 18.04 LTS 虚拟机。 这将同时安装 Azure IoT Edge 运行时和设备更新包代理。 然后,它使用你提供的 IoT Edge 设备(先决条件)的设备连接字符串,使用预配信息自动配置设备。 资源管理器模板还避免了启动 SSH 会话来完成设置的需要。

  1. 要开始,请选择以下按钮:

    用于 iotedge-vm-deploy 的“部署到 Azure”按钮的屏幕截图.

  2. 填写可用的文本框:

    显示 iotedge-vm-deploy 模板的屏幕截图。

    • 订阅:要将虚拟机部署到的活动 Azure 订阅。
    • 资源组:用于包含该虚拟机及其相关资源的现有或新建的资源组。
    • 区域 :要将虚拟机部署到的地理区域。 此值默认为所选资源组的位置。
    • DNS 标签前缀:必需的值,用作虚拟机主机名的前缀。
    • 管理员用户名:一个用户名,将为其提供对部署的 root 特权。
    • 设备连接字符串:在所需 IoT 中心内创建的设备的设备连接字符串
    • VM 大小:要部署的虚拟机的大小
    • Ubuntu OS 版本:要在基础虚拟机上安装的 Ubuntu OS 版本。 保持默认值不变,因为它将设置为 Ubuntu 18.04-LTS。
    • 身份验证类型 :根据你的喜好选择 sshPublicKey 或 password。
    • 管理员密码或密钥:SSH 公钥的值或密码的值,具体取决于所选的身份验证类型。

    填写完所有复选框后,选中页面底部的复选框以接受条款。 选择“购买”以开始部署。

  3. 验证部署是否已成功完成。 在部署完成后,留出几分钟用于安装后和配置,以完成安装 IoT Edge 和设备包更新代理。

    虚拟机资源应已部署到所选的资源组中。 记下计算机名称,其格式为 vm-0000000000000。 另请注意关联的 DNS 名称 ,其格式为 <dnsLabelPrefix>.<location>.cloudapp.azure.com。

    可以从 Azure 门户中新部署的虚拟机的“概述”部分获取 DNS 名称。

    显示 IoT Edge VM 的 DNS 名称的屏幕截图。

    提示

    设置后若要通过 SSH 连接到此 VM,请在以下命令中使用关联的“DNS 名称”:ssh <adminUsername>@<DNS_Name>

  4. 打开配置详细信息(请参阅如何使用以下命令在此处设置配置文件。 将 connectionType 设置为“AIS”,将 connectionData 设置为空字符串。 请注意,必须设置所有带有“将值置于此处”标记的值。 请参阅配置 DU 代理

    sudo nano /etc/adu/du-config.json
    
  5. 重启 Device Update 代理。

    sudo systemctl restart deviceupdate-agent
    

Device Update for Azure IoT Hub 软件包受以下许可条款的约束:

在使用程序包之前,请阅读许可条款。 安装和使用包即表示你接受这些条款。 如果你不同意许可条款,请不要使用该包。

手动准备设备

下面是安装和配置设备的手动步骤,这些步骤与 cloud-init 脚本自动执行的步骤类似。 使用以下步骤准备物理设备。

  1. 遵循有关安装 Azure IoT Edge 运行时的说明。

    注意

    设备更新代理不依赖于 IoT Edge。 但是,它确实依赖于随 IoT Edge(1.2.0 及更高版本)一起安装的 IoT 标识服务守护程序来获取标识并连接到 IoT 中心。

    虽然本教程中未介绍,但基于 Linux 的 IoT 设备上可以独立安装 IoT 标识服务守护程序。 安装的顺序很重要。 设备更新包代理必须在 IoT 标识服务后安装。 使用这些步骤准备物理设备。否则,包代理将不会注册为获得授权的组件来建立与 IoT 中心的连接。

  2. 安装设备更新代理 .deb 包:

    sudo apt-get install deviceupdate-agent 
    
  3. 输入 IoT 设备配置文件中的模块(或设备,具体取决于你如何通过 Device Update 预配设备)主连接字符串。 请注意,必须设置所有带有“将值置于此处”标记的值。 请参阅配置 DU 代理

    sudo /etc/adu/du-config.json
    
  4. 重启 Device Update 代理。

    sudo systemctl restart deviceupdate-agent
    

Device Update for Azure IoT Hub 软件包受以下许可条款的约束:

在使用程序包之前,请阅读许可条款。 安装和使用包即表示你接受这些条款。 如果你不同意许可条款,请不要使用该包。

将标记添加到设备

  1. 登录 Azure 门户并转到 IoT 中心。

  2. 在左侧窗格的“设备”下,找到你的 IoT Edge 设备并转到设备孪生或模块孪生。

  3. 在 Device Update 代理模块的“模块孪生”中,通过将现有 Device Update 标记值设置为 null 来删除这些标记。 如果在设备更新代理中使用设备标识,请在“设备孪生”中进行这些更改。

  4. 按如下所示添加新的 Device Update 标记值:

        "tags": {
            "ADUGroup": "<CustomTagValue>"
        },
    

    显示包含标记信息的孪生体的屏幕截图。

    此屏幕截图显示了需要在孪生体中添加标记的部分。

导入更新

  1. 在 GitHub 中转到“设备更新版本”,然后选择“资产”下拉列表。 选择它以下载 Tutorial_IoTEdge_PackageUpdate.zip。 提取文件夹的内容,以发现一个示例 APT 清单 (sample-1.0.2-aziot-edge-apt-manifest.json) 及其相应的导入清单 (sample-1.0.2-aziot-edge-importManifest.json)。

  2. 登录到 Azure 门户并转到具有设备更新的 IoT 中心。 在左窗格的“自动设备管理”下,选择“更新”。

  3. 选择“更新”选项卡。

  4. 选择“+ 导入新更新”。

  5. 选择“+ 从存储容器中选择”。 选择一个现有帐户,或使用“+ 存储帐户”创建一个新帐户。 然后选择现有容器,或者使用“+ 容器”创建新容器。 此容器将用于暂存更新文件以供导入。

    备注

    建议每次导入更新时都使用新容器,以避免意外地从以前的更新导入文件。 如果不使用新容器,请务必在完成此步骤之前删除现有容器中的任何文件。

    显示存储帐户的屏幕截图。

  6. 在容器中,选择“上传”并转到在步骤 1 中下载的文件。 选择所有更新文件后,选择“上传”。 然后选择“选择”按钮以返回到“导入更新”页。

    屏幕截图显示了如何选择已上传的文件。

    此屏幕截图显示了导入步骤。 文件名可能与示例中使用的名称不匹配。

  7. 在“导入更新”页上,查看要导入的文件。 然后选择“导入更新”以启动导入过程。

    显示开始导入过程的屏幕截图。

  8. 导入过程开始后,屏幕切换到“导入历史记录”部分。 当“状态”列指示导入成功时,选择“可用更新”标题。 现在应会在列表中看到导入的更新。

    显示作业状态的屏幕截图。

有关导入过程的详细信息,请参阅将更新导入到 Device Update

查看设备组

Device Update 使用组来组织设备。 Device Update 根据设备的分配标记和兼容性属性自动将设备分组。 每个设备仅属于一个组,但组可以有多个子组来对不同的设备类进行排序。

  1. 转到页面顶部的“组和部署”选项卡。

    屏幕截图显示了未分组的设备。

  2. 查看组列表和更新合规性图表。 更新合规性图表显示了处于各种合规性状态的设备的计数:“最新的更新”、“可用的新更新”和“正在进行的更新”。 了解更新合规性

    屏幕截图显示了更新符合性视图。

  3. 应会看到一个设备组,其中包含在本教程中设置的模拟设备,以及新组中设备的任何可用更新。 如果设备不满足组的设备类要求,它们将显示在相应的无效组中。 若要从此视图中将最佳可用更新部署到新的用户定义组,请选择组旁边的“部署”。

有关标记和组的详细信息,请参阅管理设备组

部署更新

  1. 创建组后,你应该会看到新的更新可用于你的设备组,并在最佳更新下显示该更新的链接。 可能需要刷新一次。

    有关合规性的详细信息,请参阅 Device Update 合规性

  2. 通过选择组名称来选择目标组。 你将转到“组基本信息”下的组详细信息。

    屏幕截图显示了组详细信息。

  3. 要启动部署,请前往“当前部署”选项卡。在“可用更新”部分,选择所需更新旁边的“部署”链接。 给定组的最佳可用更新将以“最佳”高亮表示。

    屏幕截图显示了如何选择一个更新。

  4. 计划你的部署,以便立即开始部署或在将来开始部署。 然后选择“创建”。

    提示

    默认情况下,开始日期和时间距当前时间 24 小时。 如果你希望部署更早开始,请务必选择其他日期和时间。

    显示如何创建部署的屏幕截图。

  5. 在“部署详细信息”下,“状态”变为“活动”。 已部署的更新标有“(正在部署)”。

    将部署显示为“活动”的屏幕截图。

  6. 查看合规性图表以了解更新是否现在正在进行。

  7. 成功更新设备后,你会看到合规性图表和部署详细信息也会更新,以反映相同的情况。

    显示更新成功的屏幕截图。

监视更新部署

  1. 选择页面顶部的“部署历史记录”选项卡。

    屏幕截图显示了“部署历史记录”。

  2. 选择所创建的部署旁边的详细信息链接。

    显示部署详细信息的屏幕截图。

  3. 选择“刷新”以查看最新状态详细信息。

现在,你已经在 Ubuntu Server 18.04 x64 设备上使用 IoT 中心设备更新成功完成了端到端包更新。

清理资源

清理设备更新帐户、实例和 IoT 中心(如果不再需要)。 如果通过“部署到 Azure”按钮创建了 VM,则还要清理 IoT Edge 设备。 若要清理资源,请转到每个单独的资源,然后选择“删除”。 在清理设备更新帐户之前,请先清理设备更新实例。

后续步骤