教程:使用 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,但使用类似的步骤可以更新其他包,例如它使用的容器引擎。

即使你计划使用其他 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/a pt:1'
    

准备设备

手动或自动准备设备。

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

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

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

    显示 iotedge-vm-deploy 的“部署到 Azure”按钮的屏幕截图

  2. 填写可用的文本框:

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

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

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

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

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

    小提示

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

  4. 打开配置详细信息(请参阅如何使用以下命令在此处设置配置文件。 将 connectionType 设置为“AIS”,将 connectionData 设置为空字符串。

/etc/adu/du-config.json
  1. 运行以下命令重启设备更新代理:
 sudo systemctl restart adu-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 deliveryoptimization-plugin-apt 
    
  3. 运行以下命令,输入 IoT 设备的模块(或设备,具体取决于 如何使用设备更新预配设备)配置文件中的主要连接字符串:

    /etc/adu/du-config.json
    
  4. 运行以下命令重启设备更新代理:

     sudo systemctl restart adu-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. 选择“+ 导入新更新 (Import New Update)”。

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

    注释

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

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

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

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

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

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

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

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

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

详细了解 如何导入更新。

创建更新组

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

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

  2. 选择“添加组”按钮创建新组。

    显示设备组添加的屏幕截图。

  3. 从列表中选择 物联网中心 标签和 设备类。 然后选择“创建组”。

    显示标签选择的屏幕截图。

  4. 创建组后,可以看到更新符合性图表和组列表已更新。 更新合规性图表显示了处于各种合规性状态的设备的计数:“最新的更新”、“可用的新更新”和“正在进行的更新”。 了解更新合规性

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

  5. 你应该可以看到你新创建的组以及新组中设备的任何可用更新。 如果有设备不符合该组的设备类别要求,它们将显示在相应的无效设备组中。 若要从此视图中将最佳可用更新部署到新的用户定义组,请选择组旁边的“部署”。

了解有关如何添加标记和创建更新组的信息

部署更新

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

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

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

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

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

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

    小提示

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

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

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

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

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

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

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

监控更新部署

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

    显示部署历史记录的屏幕截图。

  2. 请选择您创建的部署旁边的详情链接。

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

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

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

清理资源

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

后续步骤

使用以下教程简单演示 IoT 中心的设备更新: