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