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

教程:使用 Ubuntu (18.04 x64) 模拟器引用代理的 Device Update for Azure IoT Hub

本教程演示使用 Device Update for IoT Hub 进行的基于映像的端到端更新。 Device Update for Azure IoT Hub 支持基于映像、包和脚本的更新。

映像更新在设备的最终状态中提供更高级别的置信度。 通常可以更轻松地在预生产环境和生产环境之间复制映像更新的结果,因为它不会带来与管理包及其依赖项相同的挑战。 由于其原子性质,你还可以轻松采用 A/B 故障转移模型。

本教程介绍以下操作:

  • 使用标记将 IoT 设备分配给 Device Update 组。
  • 下载并安装映像。
  • 导入更新。
  • 部署映像更新。
  • 监视更新部署。

先决条件

  • 创建使用 Iot Hub 配置的设备更新帐户和实例

  • 具有 Ubuntu 18.04 设备。 此设备可以是物理计算机,也可以是虚拟机。

  • 从最新版本的“版本资产”中下载名为 Tutorial_Simulator.zip 的 zip 文件,并将其解压缩。

    如果测试设备与开发计算机不同,请将 ZIP 文件下载到这两台计算机上。

    可以使用 wget 下载 zip 文件。 将 <release_version> 替换为最新版本,例如 1.0.0

    wget https://github.com/Azure/iot-hub-device-update/releases/download/<release_version>/Tutorial_Simulator.zip
    

注册设备并配置模块标识

将设备添加到 IoT 中心的设备注册表。 每个连接到 IoT 中心的设备都需要注册。

在此部分,我们还将创建一个模块标识。 模块是 IoT 设备上存在的组件的独立标识,当你让 IoT 设备运行多个进程时,这可以让粒度更精细。 在本教程中,你将为在 IoT 设备上运行的 Device Update 代理使用此模块标识。 有关详细信息,请参阅了解并在 IoT 中心内使用模块孪生

  1. Azure 门户中,导航到 IoT 中心。
  2. 在左窗格中,选择“设备”。 然后选择“添加设备”。
  3. 在“设备 ID”下,输入设备的名称。 确保选中“自动生成密钥”复选框。
  4. 选择“保存”。
  5. 现在,你将返回到“设备”页,你创建的设备应在列表中。 选择该设备。
  6. 选择“添加模块标识”。
  7. 在“模块标识名称”下,输入模块的名称,例如“DUAgent”。
  8. 选择“保存”

复制模块连接字符串

  1. 在设备视图中,应该会看到新模块列在“模块标识”标题下。 选择模块名称以打开其详细信息。
  2. 选择“连接字符串(主密钥)”旁边的“复制”图标。 保存此连接字符串以在配置 Device Update 代理时使用。 此字符串是你的模块连接字符串。

将标记添加到模块孪生

  1. 仍在模块标识详细信息页上,选择“模块标识孪生体”

  2. 在孪生文件中添加与 modelIdversion 相同级别的新 Device Update 标记值,如下所示:

    "tags": {
        "ADUGroup": "DU-simulator-tutorial"
    },
    

    模块孪生中 ADUGroup 标记的屏幕截图。

    Device Update 管理的每个设备都需要这个保留标记,它将设备分配给 Device Update 组。 它可以在设备孪生或模块孪生中,如此处所示。 每个设备只能分配给一个 Device Update 组。

  3. 选择“保存” 。 门户会重新格式化模块孪生以将标记合并到 json 结构中。

安装和配置 Device Update 代理

Device Update 代理在 Device Update 管理的每台设备上运行。 对于本教程,我们会将其配置为作为模拟器运行,以便了解如何在不实际更改设备配置的情况下将更新应用于设备。

  1. 在 IoT 设备上,添加 Microsoft 包存储库,然后将 Microsoft 包签名密钥添加到受信任密钥的列表中。

    wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb   
    
  2. 安装设备更新代理 .deb 包。

    sudo apt-get update
    sudo apt-get install deviceupdate-agent
    
  3. 打开代理的配置文件。

    sudo nano /etc/adu/du-config.json
    
  4. 更新配置文件中的以下值:

    • manufacturer: "Contoso" - 此值用于对 IoT 设备分类以确定更新目标。
    • model: "Video" - 此值用于对 IoT 设备分类以确定更新目标。
    • name: "aduagent"
    • agents.connectionData:提供从模块标识复制的连接字符串。
    • agents.manufacturer: "Contoso"
    • agents.model: "Video"

    有关此步骤中的参数的详细信息,请参阅 Device Update 配置文件

    注意

    还可以使用 IoT 标识服务来预配设备。 为此,请先安装 IoT 标识服务,然后再安装 Device Update 代理。 然后,在配置文件中使用 "connectionType": "AIS"connectionData 作为空字符串配置 Device Update 代理。

  5. 保存并关闭该文件。 CTRL+XYEnter

  6. 将代理设置为作为模拟器运行。 在 IoT 设备上运行以下命令,以便 Device Update 代理调用模拟器处理程序来处理使用 SWUpdate 进行的包更新 (microsoft/swupdate:1)。

      sudo /usr/bin/AducIotAgent --extension-type updateContentHandler --extension-id 'microsoft/swupdate:1' --register-extension /var/lib/adu/extensions/sources/libmicrosoft_simulator_1.so
    
  7. 解压缩你在先决条件中下载的 Tutorial_Simulator.zip 文件,并将 sample-du-simulator-data.json 文件复制到 tmp 文件夹。

    cp sample-du-simulator-data.json /tmp/du-simulator-data.json
    

    如果 /tmp 不存在,则运行:

    sudo mkdir/tmp
    sudo chown root:root/tmp
    sudo chmod 1777/tmp
    
  8. 更改新文件的权限。

    sudo chown adu:adu /tmp/du-simulator-data.json
    sudo chmod 664 /tmp/du-simulator-data.json
    
  9. 重启 Device Update 代理以应用所做的更改。

     sudo systemctl restart deviceupdate-agent
    

导入更新

在此部分中,你将使用在先决条件阶段下载的 Tutorial_Simulator.zip 中的 TutorialImportManifest_Sim.importmanifest.jsonadu-update-image-raspberrypi3.swu 文件。 Raspberry Pi 教程中重复使用了此更新文件。 由于本教程中的更新是模拟的,因此特定文件内容并不重要。

  1. 在开发计算机上,登录到 Azure 门户并转到配置了 Device Update 的 IoT 中心。

  2. 在导航窗格中的“设备管理”下,选择“更新”。

  3. 选择“导入新更新”。

  4. 选择“从存储容器中选择”。

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

    注意

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

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

  6. 在容器中,选择“上传”并转到在先决条件中下载的文件。 选择 TutorialImportManifest_Sim.importmanifest.json 和 adu-update-image-raspberrypi3.swu 文件,然后选择“上传”。

  7. 选中每个文件旁边的复选框,然后选择“选择”按钮返回到“导入更新”页面。

    屏幕截图显示如何在容器中选择上传的文件。

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

    屏幕截图显示将作为更新导入的已上传文件。

  9. 导入过程开始后,屏幕切换到“导入历史记录”部分。 “状态”列在导入过程中将导入显示为“正在运行”,在导入完成时将其显示为“成功”。 使用“刷新”按钮更新状态。

  10. 当“状态”列指示导入成功时,选择“可用更新”标题。 现在应会在列表中看到导入的更新。

    屏幕截图显示新更新被列为可用更新。

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

查看设备组

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

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

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

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

    应会看到一个设备组,其中包含在本教程中设置的模拟设备,以及新组中设备的任何可用更新。 如果设备不满足组的设备类要求,它们将显示在相应的无效组中。

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

部署更新

  1. 在“组和部署”选项卡上,应会看到适用于设备组的新更新。 更新链接应在“状态”下。 可能需要刷新页面。

  2. 选择组名称以查看其详细信息。

  3. 在组详细信息页面上,应会看到有一个可用的新更新。 选择“部署”以启动部署。

    屏幕截图显示如何启动组更新部署。

  4. 我们在上一部分导入的更新被列为此组的最佳可用更新。 选择“部署”。

  5. 安排部署立即开始,然后选择“创建”。

  6. 在组详细信息页面上,导航至“当前更新”选项卡。在“部署详细信息”下,“状态”变为“活动”。

  7. 在设备成功进行更新后,返回到“更新”页面。 你应该会看到合规性图表和部署详细信息也进行更新,以反映相同的情况。

监视更新部署

  1. 返回到组详细信息页面,选择“部署历史记录”选项卡。

  2. 选择创建的部署旁边的“查看部署详细信息”。

    屏幕截图显示了“部署详细信息”。

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

现在,你已经通过 Ubuntu (18.04 x64) 模拟器引用代理使用 Device Update for IoT Hub 成功完成了端到端映像更新。

清理资源

如果打算继续学习下一教程,请保留 Device Update 和 IoT 中心资源。

当不再需要时,可以在 Azure 门户中删除这些资源。

  1. Azure 门户中导航到你的资源组。

  2. 选择要删除的资源。

    • 如果要删除组中的所有资源,请选择“删除资源组”。
    • 如果只想删除所选资源,请使用复选框选择资源,然后选择“删除”。

后续步骤

在本教程中,你了解了如何导入和部署映像更新。 接下来,了解如何更新设备包。