使用此开源工具远程更新设备

使用 UpdateHub Community Edition 通过无线方式处理所有完整的设备更新,包括固件和引导加载程序。
109 位读者喜欢这个。
Working from home at a laptop

Opensource.com

通过单个帐户访问、连接和远程管理多个设备的能力非常重要。更进一步,能够完全远程更新设备是系统管理员减少工作量和最大限度减少麻烦的另一种方式。

UpdateHub 是一个开源解决方案,允许您远程执行完整的设备更新,包括固件和引导加载程序。它的目标是使设备更新更容易,并减少返工和风险,无论您是更新数千台设备还是管理小型部署。UpdateHub 处理无线 (OTA) 更新的所有方面,包括软件包完整性和真实性,而您可以处理其他工作。

这个关于 UpdateHub 的分步指南旨在帮助您开始使用这个专业工具。UpdateHub 服务器有两个选项:UpdateHub CloudUpdateHub Community Edition (UpdateHub CE),一个完全开源的服务器(根据 MIT 许可证分发),本教程将使用它。

检查要求

首先,确保您的 Linux 发行版已安装所有构建使用 Yocto Project 镜像所需的软件包

您还需要以下硬件

  • 目标设备 (Target) 是开发设备。本教程使用 Raspberry Pi 3 Model B+,但您也可以使用 Raspberry Pi 3、Model B 或 Model B+。
  • 主机 (Host) 是您将在其中使用 Yocto Project 构建镜像的计算机。本教程使用 Yocto 3.1 Dunfell

要启动 UpdateHub CE,您必须在主机上安装 Docker。如果您没有安装,请参阅 Docker 的入门和设置说明。

本教程使用 Google 的 repo 工具来简化流程,因为它需要多个存储库。您可以在Android 开发设置指南中了解有关 repo 的更多信息。

在 Debian 和 Ubuntu 发行版上,使用以下命令安装 repo

sudo apt install repo

如果您使用其他 Linux 发行版,请直接下载 repo 并使用以下命令设置您的发行版

mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
PATH=${PATH}:~/bin

最后,您需要通过 DHCP 进行网络连接,或者您必须知道如何更改互联网协议 (IP) 地址或创建处理此配置的 Yocto Project 层。

为构建准备环境

UpdateHub 提供了一个带有 manifest 文件的存储库,repo 工具使用该文件,这使得管理多个层更容易。

通过创建目录并获取必要的 Yocto Project 层来下载源代码

mkdir updatehub-platform
cd updatehub-platform
repo init -u https://github.com/UpdateHub/updatehub-yocto-project-reference-platform.git -b dunfell
repo sync

repo sync 命令完成后,您将在 sources 目录中看到您需要的所有层。

UpdateHub 平台为多种受支持的设备提供支持。在 Yocto Project 环境设置期间,它会询问您是否要接受 meta-freescale 层的最终用户许可协议 (EULA);这对于本项目不是必需的。

加载 Yocto Project 环境

MACHINE="raspberrypi3" source ./setup-environment build

请注意,此命令仅对加载环境的终端会话有效。如果您使用新的终端,您将需要再次加载环境。但是,您无需再次配置机器,因为配置内容存储在 conf/local.conf 文件中。

启动 UpdateHub CE

安装 Docker 后,下载 Docker 镜像并在端口 8080 上启动服务器

docker run -d -p 8080:8080 updatehub/updatehub-ce:latest

通过主机 IP 地址和端口 8080 (http://IP_ADDRESS:8080) 访问 UpdateHub CE 仪表板。示例中的主机 IP 为 192.168.15.50,因此地址为 http://192.168.15.50:8080

使用默认的 admin 作为登录名和密码,然后单击登录 (Login)

您需要配置 UPDATEHUB_SERVER_URL 以使用 UpdateHub CE 地址,因为设备需要知道服务器的 IP 地址。默认情况下,meta-updatehub 层在服务器 URL 变量中使用 UpdateHub Cloud 地址。

您应该看到 UpdateHub CE 的主界面

配置环境以生成镜像

下一步是生成设备将使用的 Linux 镜像。但首先,您需要在 conf/local.conf 文件中设置一些变量

UPDATEHUB_SERVER_URL = "http://IP_ADDRESS:8080"
UPDATEHUB_PACKAGE_VERSION_SUFFIX = "-test-image-1"
ENABLE_UART = "1"
UPDATEHUB_POLLING_INTERVAL = "1m"

逐行查看上面的代码

  • UPDATEHUB_SERVER_URL 包含 UpdateHub CE 正在运行的 IP 地址。
  • UPDATEHUB_PACKAGE_VERSION_SUFFIX 在镜像版本中添加后缀。这对于放置版本号并为每个新镜像递增它很有用。此变量将是 VERSION_ID,它由 DISTRO_VERSION(在文档中描述)加上 UPDATEHUB_PACKAGE_VERSION_SUFFIX 组成。您可以在目标设备中的 /etc/os-release 文件中验证这一点。
  • ENABLE_UART:有几种方法可以访问目标设备,例如使用串行控制台或连接键盘和显示器。此变量允许通过使用 GPIO 接头上的串行端口访问 Raspberry Pi 上的串行控制台。
  • UPDATEHUB_POLLING_INTERVAL:默认情况下,UpdateHub 的代理和服务器之间的通信每 24 小时发生一次。使用此变量设置新的 1 分钟咨询时间。

本教程使用 Minicom 连接到目标设备;如果您愿意,您可以了解更多关于在 Raspberry Pi 中使用串行连接的信息。

生成镜像

现在 Yocto Project 环境已准备就绪,通过运行以下命令,使用 BitBake 任务执行引擎编译镜像

bitbake updatehub-image-base

镜像生成可能需要一段时间,具体取决于主机。如果这是您第一次在 Yocto 的 Dunfell 分支中为 raspberrypi3 构建镜像,BitBake 将下载整个源代码,因此您的下载速度将影响生成镜像所需的时间。

镜像编译完成后,导航到 build/tmp/deploy/images/raspberrypi3/ 主机目录,并验证镜像文件 updatehub-image-minimal-raspberrypi3.wic.gz 是否存在。

将 SD 卡插入 Raspberry Pi 并通过运行 dmesg 检查其名称。然后使用以下命令将镜像刷入您的 SD 卡,但请确保将 /dev/sdX 更改为您的 SD 卡名称

zcat updatehub-image-base-raspberrypi3.wic.gz | sudo dd of=/dev/sdX

将已刷入镜像的 SD 卡插入目标设备以连接到 Raspberry Pi。该镜像的网络配置为使用 DHCP 获取 IP 地址。使用用户 root 访问控制台,密码留空。

使用 cat /etc/os-release 确认目标设备上运行的镜像版本。

生成更新包

您的设备应该正在运行并且工作正常,但您需要添加创建更新包的功能。这将创建一个镜像来更新您的目标设备。以下示例添加了对目标设备上 SSH 服务器的支持,并创建了一个更新包来安装此功能。

通过将以下行添加到 build/conf/local.conf 文件来添加对 OpenSSH 服务器的支持

IMAGE_FEATURES += "ssh-server-openssh"

为了清楚地表明更新后的镜像将具有另一个版本,请在 UPDATEHUB_PACKAGE_VERSION_SUFFIX 变量中放入后缀 -test-image-2

UPDATEHUB_PACKAGE_VERSION_SUFFIX = "-test-image-2"

保存文件并运行

bitbake updatehub-image-base -c uhuarchive

此命令生成一个扩展名为 .uhupkg 的文件,UpdateHub 使用该格式来更新系统。生成的文件将与镜像位于同一目录中,即 tmp/deploy/images/raspberrypi3;在本例中,它是 updatehub-image-base-raspberrypi3.uhupkg

检查您的设备

要访问 UpdateHub CE 仪表板,请单击设备 (Devices) 选项卡以查看您的设备是否已列出

发送更新包

UpdateHub CE 仪表板的软件包 (Packages) 选项卡显示可用软件包的列表,但您目前没有任何软件包。要添加软件包,请单击上传软件包 (Upload Package) 按钮,然后选择 updatehub-image-minimal-raspberrypi3.uhupkg 文件。在本例中,它位于 tmp/deploy/images/raspberrypi3/directory 中。将出现一个显示软件包详细信息的屏幕。这显示了将更新包添加到仪表板的过程

创建 rollout

在设备被识别且数据包发送到服务器后,您可以创建一个 rollout,这本质上是一个部署计划。导航到Rollouts (Rollouts) 选项卡,然后单击创建 Rollout (Create Rollout)。选择您要在升级中使用的软件包版本。此示例仅包含上一步中的软件包,版本为 20.04-test-image-2。选择此版本,并确保它包含将要更新的设备列表。

之前,您已将目标设备上运行的镜像配置为每分钟在 UpdateHub 服务器上执行更新查询,因此在创建 rollout 后一分钟内,更新过程将开始。要跟踪更新状态,请检查 Rollouts (Rollouts) 选项卡。

完成升级过程后,目标设备会自动重启。新镜像启动并自动查询服务器以进行更新。服务器响应它没有任何更新并结束更新周期。

当状态显示 updated 时,在主机上运行以下命令以通过 SSH 访问目标设备

ssh root@IP_DO_TARGET

无需密码;只需按 Enter,您就可以进入目标控制台。您可以检查 /etc/os-release 文件中的版本以进行确认。

恭喜!您已完成!

现在,您可以使用专业的工具远程更新您的设备。本教程使用了带有 Yocto Project 版本 Dunfell 3.1.2 的 Raspberry Pi 3,但支持其他设备和版本

如果您有任何关于集成设备的问题,请通过 Gitter 或发送电子邮件至 contact@updatehub.io 联系开发人员团队。


本文基于 UpdateHub 博客上的 UpdateHub:使用 Yocto Project 发送 OTA 更新

接下来阅读什么

1 条评论

嘿,很高兴在这里看到 updateHub!!
它确实是一款很棒的产品。我正在将它用于一些嵌入式项目!!真正易于使用且直观 =D

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.