我有一个在嵌入式 Linux 设备上运行的应用程序,并且不时地对软件进行更改,有时还会对根文件系统甚至已安装的内核进行更改。
在当前的更新系统中,旧应用程序目录的内容被简单地删除,新文件被复制到上面。对根文件系统进行更改后,新文件将作为更新的一部分交付,并简单地复制旧文件。
现在,目前的方法存在几个问题,我正在寻找改善这种情况的方法:
- 用于创建文件系统映像的目标的根文件系统没有版本控制(我认为我们甚至没有原始的 rootfs)。
- 手动选择进入更新的 rootfs 文件(而不是 diff)
- 更新不断增长,变成了一个皮塔饼。现在更新/升级之间存在分歧,其中升级包含较大的 rootfs 更改。
- 我的印象是更新中的一致性检查如果完全实施的话是相当脆弱的。
要求是:
- 应用程序更新包不能太大,并且在修改的情况下还必须能够更改根文件系统。
- 升级可以更大,并且只包含进入根文件系统的内容(如新库、内核等)。更新可能需要已安装升级。
升级是否可以包含整个根文件系统并简单地dd
在目标的闪存驱动器上执行? - 创建更新/升级包应尽可能自动。
我绝对需要一些方法来对根文件系统进行版本控制。这必须以某种方式完成,我可以从中计算出某种diff
可用于更新目标设备的 rootfs 的东西。
我已经研究过 Subversion,因为我们将它用于我们的源代码,但这不适用于 Linux 根文件系统(文件权限、特殊文件等)。
我现在已经创建了一些 shell 脚本,它们可以给我类似于 an 的东西,svn diff
但我真的很想知道是否已经存在一个有效且经过测试的解决方案。
使用这样diff
的 's 我猜升级将简单地成为一个包含基于已知根文件系统状态的增量更新的包。
您对此有何想法和想法?您将如何实施这样的系统?我更喜欢一个简单的解决方案,可以在不太长的时间内实施。