通过单个帐户访问、连接和远程管理多个设备的能力非常重要。更进一步,能够完全远程更新设备是系统管理员减少工作量和最大限度减少麻烦的另一种方式。
UpdateHub 是一个开源解决方案,允许您远程执行完整的设备更新,包括固件和引导加载程序。它的目标是使设备更新更容易,并减少返工和风险,无论您是更新数千台设备还是管理小型部署。UpdateHub 处理无线 (OTA) 更新的所有方面,包括软件包完整性和真实性,而您可以处理其他工作。
这个关于 UpdateHub 的分步指南旨在帮助您开始使用这个专业工具。UpdateHub 服务器有两个选项:UpdateHub Cloud 和 UpdateHub 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

(Diandra Martini,CC BY-SA 4.0)
通过主机 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 的主界面

(Diandra Martini,CC BY-SA 4.0)
配置环境以生成镜像
下一步是生成设备将使用的 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
确认目标设备上运行的镜像版本。

(Diandra Martini,CC BY-SA 4.0)
生成更新包
您的设备应该正在运行并且工作正常,但您需要添加创建更新包的功能。这将创建一个镜像来更新您的目标设备。以下示例添加了对目标设备上 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) 选项卡以查看您的设备是否已列出

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

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

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

(Diandra Martini,CC BY-SA 4.0)
完成升级过程后,目标设备会自动重启。新镜像启动并自动查询服务器以进行更新。服务器响应它没有任何更新并结束更新周期。
当状态显示 updated
时,在主机上运行以下命令以通过 SSH 访问目标设备
ssh root@IP_DO_TARGET
无需密码;只需按 Enter,您就可以进入目标控制台。您可以检查 /etc/os-release
文件中的版本以进行确认。
恭喜!您已完成!
现在,您可以使用专业的工具远程更新您的设备。本教程使用了带有 Yocto Project 版本 Dunfell 3.1.2 的 Raspberry Pi 3,但支持其他设备和版本。
如果您有任何关于集成设备的问题,请通过 Gitter 或发送电子邮件至 contact@updatehub.io 联系开发人员团队。
1 条评论