Device Update for Azure IoT Hub 支持基于映像、包和脚本的更新。
映像更新在设备的最终状态中提供更高级别的置信度。 通常可以更轻松地在预生产环境和生产环境之间复制映像更新的结果,因为它不会带来与包及其依赖项相同的挑战。 由于其原子性质,你还可以轻松采用 A/B 故障转移模型。
本教程将逐步指导你使用 Device Update for IoT Hub 完成基于映像的端到端更新。
本教程介绍以下操作:
- 下载并安装映像。
- 将标记添加到 IoT 设备。
- 导入更新。
- 创建设备组。
- 部署映像更新。
- 监视更新部署。
先决条件
创建 Device Update 帐户和实例,并配置 IoT 中心(如果尚未这样做)。
从最新版本的“版本资产”中下载名为 Tutorial_Simulator.zip
的 zip 文件,并将其解压缩。
将设备添加到 Azure IoT 中心
在 IoT 设备上运行 Device Update 代理后,必须将该设备添加到 IoT 中心。 在 IoT 中心内,将为特定设备生成一个连接字符串。
从 Azure 门户启动 Device Update for IoT Hub。
创建新设备。
在左侧窗格中转到“设备”。 然后,选择“新建”。
在“设备 ID”下,输入设备的名称。 确保选中“自动生成密钥”复选框。
选择“保存”。
现在,你将返回到“设备”页,你创建的设备应在列表中。 选择该设备。
在设备视图中,选择“主连接字符串”旁边的“复制”图标。
将复制的字符粘贴到某个位置,以便以后在以下步骤中使用:
此复制的字符串为设备连接字符串。
安装 Device Update 代理以将其作为模拟器进行测试
遵循有关安装 Azure IoT Edge 运行时的说明。
注意
设备更新代理不依赖于 IoT Edge。 但是,它确实依赖于随 IoT Edge(1.2.0 及更高版本)一起安装的 IoT 标识服务守护程序来获取标识并连接到 IoT 中心。
虽然本教程中未介绍,但基于 Linux 的 IoT 设备上可以独立安装 IoT 标识服务守护程序。 安装的顺序很重要。 设备更新包代理必须在 IoT 标识服务后安装。 否则,包代理将不会注册为获得授权的组件来建立与 IoT 中心的连接。
然后,安装设备更新代理 .deb 包。
sudo apt-get install deviceupdate-agent deliveryoptimization-plugin-apt
运行以下命令,输入 IoT 设备配置文件中的模块(或设备,具体取决于你如何通过 Device Update 预配设备)主连接字符串:
sudo nano /etc/adu/du-config.json
将代理设置为作为模拟器运行。 在 IoT 设备上运行以下命令,以便 Device Update 代理调用模拟器处理程序来处理使用 APT 的包更新 ('microsoft/apt:1'):
sudo /usr/bin/AducIotAgent --register-content-handler /var/lib/adu/extensions/sources/libmicrosoft_simulator_1.so --update-type 'microsoft/apt:1'
若要注册并调用模拟器处理程序,请使用以下格式,并填写占位符:
sudo /usr/bin/AducIotAgent --register--content-handler <full path to the handler file> --update-type <update type name>
你需要使用在先决条件阶段下载的
Tutorial_Simulator.zip
中的sample-du-simulator-data.json
文件。打开
sample-du-simulator-data.json
文件并将其内容复制到剪贴板:nano sample-du-simulator-data.json
选择文件的内容,然后按 Ctrl+C。 按 Ctrl+X 关闭文件,不保存更改。
运行以下命令,在 tmp 文件夹中创建并编辑
du-simulator-data.json
文件:sudo nano /tmp/du-simulator-data.json
按 Ctrl+V 将内容粘贴到编辑器中。 选择 Ctrl+X 以保存更改,然后按 Y。
更改权限:
sudo chown adu:adu /tmp/du-simulator-data.json sudo chmod 664 /tmp/du-simulator-data.json
如果 /tmp 不存在,请执行以下操作:
sudo mkdir/tmp sudo chown root:root/tmp sudo chmod 1777/tmp
通过运行以下命令重启 Device Update 代理:
sudo systemctl restart adu-agent
Device Update for Azure IoT Hub 软件受以下许可条款的约束:
使用代理之前,请阅读许可条款。 安装和使用即表示你接受这些条款。 如果不同意许可条款,请不要使用 Device Update for IoT Hub 代理。
备注
使用模拟器进行测试后,运行以下命令以调用 APT 处理程序并部署远程包更新:
# sudo /usr/bin/AducIotAgent --register-content-handler /var/lib/adu/extensions/sources/libmicrosoft_apt_1.so --update-type 'microsoft/a pt:1'
将标记添加到设备
登录 Azure 门户并转到 IoT 中心。
在左侧窗格的“设备”上,找到 IoT设备并前往“设备孪生”或“模块孪生”。
在 Device Update 代理模块的“模块孪生”中,通过将现有 Device Update 标记值设置为 null 来删除这些标记。 如果在 Device Update 代理中使用设备标识,请在“设备孪生”中进行这些更改。
按如下所示添加新的 Device Update 标记值:
"tags": { "ADUGroup": "<CustomTagValue>" }
导入更新
你需要使用在先决条件阶段下载的
Tutorial_Simulator.zip
中的TutorialImportManifest_Sim.importmanifest.json
和adu-update-image-raspberrypi3.swu
文件。 Raspberry Pi 教程中重复使用了此更新文件。 由于本教程中的更新是模拟的,因此特定文件内容并不重要。登录到 Azure 门户并转到具有设备更新的 IoT 中心。 在左窗格的“自动设备管理”下,选择“更新”。
选择“更新”选项卡。
选择“+ 导入新更新”。
选择“+ 从存储容器中选择”。 选择一个现有帐户,或使用“+ 存储帐户”创建一个新帐户。 然后选择现有容器,或者使用“+ 容器”创建新容器。 此容器将用于暂存更新文件以供导入。
注意
建议每次导入更新时都使用新容器,以避免意外地从以前的更新导入文件。 如果不使用新容器,请务必在完成此步骤之前删除现有容器中的任何文件。
在容器中,选择“上传”并转到在步骤 1 中下载的文件。 选择所有更新文件后,选择“上传”。 然后选择“选择”按钮以返回到“导入更新”页。
此屏幕截图显示了导入步骤。 文件名可能与示例中使用的名称不匹配。
在“导入更新”页上,查看要导入的文件。 然后选择“导入更新”以启动导入过程。
导入过程开始后,屏幕切换到“导入历史记录”部分。 当“状态”列指示导入成功时,选择“可用更新”标题。 现在应会在列表中看到导入的更新。
详细了解如何导入更新。
创建更新组
转到页面顶部的“组和部署”选项卡。
选择“添加组”以创建一个新组。
从列表中选择一个 IoT 中心标记和“设备类”。 然后选择“创建组”。
创建组后,更新合规性图表和组列表也会更新。 更新合规性图表显示了处于各种合规性状态的设备的计数:“最新的更新”、“可用的新更新”和“正在进行的更新”。 了解更新合规性。
你应看到新创建的组和新组中设备的任何可用更新。 如果设备不满足组的设备类要求,它们将显示在相应的无效组中。 若要从此视图中将最佳可用更新部署到新的用户定义组,请选择组旁边的“部署”。
详细了解如何添加标记和创建更新组。
部署更新
创建组后,应会看到适用于设备组的新更新。 更新链接应在“最佳更新”下。 可能需要刷新一次。 详细了解更新合规性。
通过选择组名称来选择目标组。 你将转到“组基本信息”下的“组详细信息”。
若要启动部署,请转到“当前部署”选项卡。从“可用更新”部分选择所需更新旁边的“部署”链接。 给定组的最佳可用更新将以“最佳”高亮表示。
计划你的部署,以便立即开始部署或在将来开始部署。 然后选择“创建”。
在“部署详细信息”下,“状态”变为“活动”。 已部署的更新标有“(正在部署)”。
查看合规性图表以了解更新是否现在正在进行。
成功更新设备后,你会看到合规性图表和部署详细信息也会更新,以反映相同的情况。
监视更新部署
现在,你已经通过 Ubuntu (18.04 x64) 模拟器引用代理使用 Device Update for IoT Hub 成功完成了端到端映像更新。
清理资源
清理 Device Update 帐户、实例、IoT 中心和 IoT 设备(如果不再需要)。