扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

新功能:Raspberry Pi Connect 支持远程更新!

03/26 15:33
285
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

Raspberry Pi Connect 是一种安全又便捷的方式,让你可以在全球任何地方远程访问你的树莓派。我很喜欢它,因为它能在防火墙背后正常工作,就算设备的 IP 地址发生变化也不会出错 —— 这在树莓派总部(Pi Towers)是很常见的情况。它的远程桌面功能很棒,但像我这样习惯用命令行界面(CLI)的人,会更偏爱最近推出的远程 Shell 功能;它响应更迅捷,而且不会占用主机大量的屏幕空间。最棒的是,不管是远程桌面还是远程 Shell,客户端只需要一个普通浏览器就能使用。

现在,是时候让 Raspberry Pi Connect 迈入下一阶段了。在过去半年里,一直在开发一项全新功能:远程更新。目标很简单 —— 让设备上的软件更新变得尽可能简单、方便。

更新说明

Connect 用户原本就可以用更新普通树莓派的方式来更新设备,比如点击工具栏里的 “Software Updates” 图标,或是运行 apt upgrade 等更新命令。现在,有了远程无线(OTA)更新功能,你不需要打开 Connect 会话,就能直接触发软件更新。而且,因为更新是通过 Connect 服务器统一管理的,设备甚至不必在你发起更新时处于开机状态 ——Connect 会在设备下次上线时自动完成更新。

在继续介绍之前,先了解一下在谈论远程更新过程时使用的一些术语:

Artefact(构件):包含软件更新包或更新执行指令的文件(部分英语地区写作 artifact)

Deployment(部署):安装构件的指令;同一个构件可以被多次安装,但每一次安装都算作一次独立部署

分步使用指南

按照以下步骤,即可通过 Raspberry Pi Connect 执行远程更新(你需要运行 Raspberry Pi OS Trixie 版本):raspberrypi.com/software/

1. 安装最新的rpi-connect软件包和新的rpi-connect-ota软件包:

$ sudo apt update$ sudo apt install rpi-connect rpi-connect-ota

如果你使用的是 rpi-connect-lite,则运行:

$ sudo apt update$ sudo apt install rpi-connect-lite rpi-connect-ota

2. 使用 rpi-connect 命令行工具启用实验性远程更新功能,按提示输入密码:

$ rpi-connect ota on

3. 创建一个构件(或使用你信任的人提供的现成构件)。

4. 将构件放到设备可以通过 URL 访问到的位置(Connect 服务器不需要能访问它)。如果是公共构件,步骤 3 和 4 通常已经提前完成。

5. 在 Connect 网站上注册这个构件,并填写它的 SHA-256 校验和,确保文件没有损坏或被篡改。

6. 点击 “Deploy” 按钮,将部署任务发送到你的设备;同一个构件可以重复使用,也可以部署到多台设备。

完成后,部署任务会显示为 “待处理(Pending)”。如果设备在线,状态会立刻变为 “进行中(In progress)”,更新结束后如果需要会自动重启。全部完成后,部署状态会显示为 “成功(Succeeded)”(可能需要刷新页面)。如果出现问题,状态会显示为 “失败(Failed)”,点击即可查看相关错误信息。待处理的部署任务可以手动取消,也会在新部署排队时自动取消。

从A到B

有些远程设备的位置非常偏远 —— 放在阁楼、挂在高处,或是装在亲戚家里 —— 你最不希望的就是它们更新完后无法重新上线。对于智能设备和其他极简界面的设备来说尤其如此,它们本身并不以 “电脑” 的形态存在。这种场景下,需要一种可以尝试更新的机制,以及在更新失败时自动回退到安全版本的方案。

实现这一点最稳妥的办法,就是在每台设备上预留两个版本的存储空间:一个当前活跃版本,和一个用于存放另一个版本的备用槽位。这就是常说的 A/B 升级方案:每次更新都会交换两个槽位的角色 ——A 槽从活跃变为备用,B 槽则反过来。这套机制最巧妙、最能防护坏更新的地方在于:设备可以重启进入另一个槽位,但不永久切换。如果启动成功,设备再 “确认(commit)” 将新槽位设为活跃版本;如果软件崩溃或意外重启,系统会检测到异常并放弃这次切换。

A/B 更新方案依赖一些简单的硬件特性:一小段可以在重启后保留(断电不保留)的状态信息,以及一个在软件无响应时能触发重启的看门狗(watchdog)。所有树莓派设备都具备这些功能。遗憾的是,目前官方发布的所有操作系统镜像,都还没有按这种槽位结构制作,也没有配置用于跨更新持久保存数据的额外分区(不过 Canonical 的 Dave Jones 已经介绍过未来 Ubuntu 版本的相关计划)。

https://waldorf.waveform.org.uk/2025/pull-yourself-up-by-your-bootstraps.html

对于基于树莓派硬件开发产品的开发者,rpi-image-gen 工具可以相对轻松地制作出带 A/B 分区结构的系统镜像。

前端专家 Paul Mucur 写的一篇论坛帖子,详细介绍了制作流程,以及如何用它在 Raspberry Pi Connect 上部署远程 / 无线更新。

https://forums.raspberrypi.com/viewtopic.php?p=2360978

动手实践

到目前为止,讲的构件和部署都是围绕软件更新,但它们其实还可以包含任何你想在设备上执行的任务。一个构件可以包含一个或多个要执行的脚本,以及脚本需要用到的数据文件。这些脚本会以 root 权限运行,因此可以访问所有文件系统。我前面提到过 apt upgrade,而对于自定义软件更新,你可以做一个包含 .zip 包和解压脚本的构件;甚至只是做一些简单的事,比如播放音乐或点亮 LED。

1. 一个用于 apt upgrade 的脚本大致如下:

#!/bin/shexport DEBIAN_FRONTEND=noninteractiveapt updateif apt -y -o DPKG::Options::="--force-confnew" upgrade > output.txt; then    if [ -r /var/run/reboot-required ]; then        echo Rebooting to finish the upgrade        exit 2 # EXIT_REBOOT    fielse    echo Upgrade failed:    echo    cat output.txt    exit 1 # EXIT_FAILUREfiecho Upgrade completeexit 0 # EXIT_SUCCESS

主更新命令需要一些参数才能非交互式运行。把这段代码保存为文件 aptupgradescript。

2. 创建一个配套的 YAML 控制文件,命名为 aptupgrade.yaml:

# Run apt upgrade on a remote deviceartefact:  name: aptupgrade  version: 1.0  device_type: rpipayloads:- name: aptupgradescript  type: script

3. 运行 otamaker 工具,将它打包成 Zstandard 压缩格式的构件:

$ otamaker aptupgrade.yamlContents:  _contents_.yaml  aptupgradescriptArtefact: aptupgrade.tar.zstSHA256:   861dc9c0a04d458a918de89cef1ddfa60dad4c30fa7f4…

4. 查看主机在局域网内的 IP 地址:

$ hostname -I

5. 在主机上启动一个 HTTP 服务 —— 正常情况下这台主机不会是待更新的设备,但如果你只有一台树莓派,这样也可以运行:

$ python3 -m http.server 8000 --directory .

6. 点击 “Create and deploy” 按钮,在 Connect 服务器上创建新构件,填入你自己的 IP 地址和上面得到的 SHA-256 值。

7 .新构件会自动部署到你的设备。耐心等待它运行完成 —— 最后可能需要重启。

事实如此

otamaker 工具会作为 rpi-connect-ota 包的一部分自带。不过,如果你是在非树莓派平台制作构件,也可以从 GitHub 的 utils 仓库下载。在那里,你还能找到关于构件描述文件和脚本的语法与功能的初步文档。https://github.com/raspberrypi/utils

最后

希望这篇介绍能让你了解 Raspberry Pi Connect 远程更新功能的能力。它目前仍处于测试阶段,有一些明显的限制,其中最主要的是暂时没有简单的方式直接查看运行脚本的输出结果。临时解决方案是先用远程 Shell 登录,然后运行:

$ journalctl -t rpi-ota-connector

来查看脚本输出。

未来的计划包括:制作并托管一些常用的公共更新,比如官方的 apt upgrade。同时也会和企业版 Connect(Connect for Organisations)深度整合,搭配设备筛选能力;只需点几下就能批量更新一群设备,这是必备的 “超能力”。

 

官方网站:https://edatec.cn/zh/cm0

淘宝店铺:https://edatec.taobao.com/

相关推荐