基于 OpenEmbedded/Yocto 的系统的强大软件更新解决方案

Robust software update solutions for an OpenEmbedded/Yocto based system

我们正在使用 Variscite VAR-SOM-AM33 platform for our project, and software platform is based on OpenEmbedded/Yocto

为确保硬件是运行当前的软件,设备已连接到互联网。到目前为止,我们一直在遵循 OE 配方并生成 ipk 并通过 opkg 应用软件更新。

但是,由于部分食谱写得不好(在升级过程中未能uninstall/install),因此过程并不令人满意。 稳健 technique/solution 可用于基于 OE/Yocto 的系统?

提前致谢。

我正在研究元数据层,以将来自 Clear Linux 的软件更新程序 (swupd) 与 Yocto Project / OpenEmbedded Core 集成。

swupd 执行整个 OS 更新,而不是基于包的更新,使用二进制增量仅更新更改的文件并以高效的方式执行此操作。

我最近写了一些文档(在 meta-swupd 回购的 docs/Guide.md 文件中)关于采用 "Clear Linux Way" 从基于 OE/YP 的发行版中使用 meta-swupd . Yocto Project wiki 上提供了该指南的维基化版本,包括层 git 存储库的 link: https://wiki.yoctoproject.org/wiki/Meta-swupd

我在 Github 上也有一个示例层,它演示了该层的使用(这也是我测试大部分 meta-swupd 所用的发行版层): https://github.com/incandescant/meta-myhouse

好吧,您可以像现在一样使用基于软件包的升级。在这种情况下,您需要在将任何更新推送到现场之前在本地测试和验证所有内容。显然,您可能需要改进一些食谱。 (而且我假设您在上游进行了这些改进,对吗?)

替代方法是使用基于映像的升级。无论是完整图像,例如参见 [​​=10=]

上的讨论

注:写这个回答的时候走神了,看joshuagi的回答;他解释了很多 swupd。

我认为这是两个问题。我们 (OpenEmbedded) 确实需要注意不要破坏基于包的更新。

此外,还有图像更新,如 swupd(上面提到的和 swupdate,描述于:https://sbabic.github.io/swupdate/swupdate.html

关于 mender.io,我最近与他们讨论了他们的开源更新。

目前,他们已经开发了客户端,正在开发服务器端。他们使用 HTTP 和 JSON。这是他们的 git,目前只支持 Beaglebone 和 QEMU。

mender.io的工作方式是:他们会有一个持久化数据和uboot。和 2 个 rootfs(活动和备份)进行更新。因此,当服务器上有更新时,将通知用户将其拉下。给出一个 mender -rootfs image 更新命令。如果升级成功,用户再输入一个 mender -commit 命令。如果没有mender -commit,下次重启时rootfs会回滚到之前的rootfs。 Mender目前只支持更新内核和rootfs。

mender.io的主要作用是保证海量分布式镜像升级过程可以从错误中恢复。在服务器端,mender.io开发了一个管理服务器到使用UUID的大量分布式设备。

不打广告,请大家试用mender.io并给予反馈,让软件更加成熟。

Mender Introduction pdf

我想为汽车级 Linux 添加 SWUpdate to the list of packages that you should consider. It was recommended in a 2016 paper by the Konsulko Group。该论文提到了一些其他选项,并提供了对各种工具的分析,因此可能值得一读。引自论文:

It is our recommendation that the reference AGL software update strategy make use of SWUpdate in a dual copy configuration and integrate OSTree support. This allows recovery from a corrupt partition for the exception case, but also optimizes the common case where small, incremental updates can be quickly applied or rolled back as needed to [meet] OEM policy.

我不完全同意这篇论文。例如,他们注销了 Mender.io,因为它缺乏社区支持,但 IMO 汽车级 Linux 组的影响力足以从头开始创造人气。不过,这是一篇好论文,他们选择 SWUpdate 的事实对我来说很有趣。我已经倾向于它了,因为作者 sbabic 参与了 U-Boot 软件开发,我们使用 U-Boot 将新图像刻录到我们的设备中。

目前我对所有当前选项都不满意,但主要是因为我想要额外的功能。我可能会选择一个包含一个或多个上述软件包的自定义系统。不幸的是,这不是 SO 喜欢的那种明确答案,但我希望它能有所帮助。

meta-updater provides support for OSTree 基于 OE 系统的更新。

OSTree 很有趣,因为它在完整图像更新(体积大且难以正确处理)和基于包的更新(难以实现健壮)之间提供了一个折衷方案。它具有根文件系统的 'git-like' 对象表示,并使用 chroot 和硬链接在文件系统映像之间自动切换。

(披露:我是元更新程序的贡献者)