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