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