I have an application that runs on an embedded Linux device, and from time to time there are changes in the software, and sometimes in the root file system or even in the installed kernel.
In the current update system, the contents of the old application directory are simply deleted, and new files are copied over it. When changes to the root file system have been made, new files are delivered as part of the update and simply copied over the old ones.
Now there are several problems with the current approach, and I'm looking for ways to improve the situation:
- The root target file system used to create the file system images is not a version (I donβt think we even have the original rootfs).
- The rootfs that are included in the update are manually selected (instead of diff)
- Update is constantly growing and becoming pita. There is currently a separation between upgrade / upgrade where the update contains larger rootfs changes.
- I get the impression that consistency checks in an update are pretty fragile, if implemented at all.
Requirements:
- The application service pack should not be too large, and it should also be able to change the root file system in case changes were made.
- The update can be much larger and contains only material that is included in the root file system (for example, new libraries, the kernel, etc.). An update may require an update that must be installed.
Can the update contain the entire root file system and just make dd on the target flash drive? - Creating service packs / updates should be as automatic as possible.
I absolutely need a way to control the root file system versions. This should be done in such a way that I can calculate from it some diff that can be used to update the rootfs of the target device.
I have already studied Subversion, as we use this for our source code, but this is inappropriate for the Linux root file system (file permissions, special files, etc.).
Now I have created some shell scripts that can give me something similar to svn diff , but I would really like to know if there is already an existing and tested solution for this.
Using such a diff , I assume that Upgrade will simply turn into a package containing incremental updates based on the known state of the root file system.
What are your thoughts and ideas on this? How would you implement such a system? I prefer a simple solution that can be implemented in too little time.
linux software-update embedded-linux
trenki Aug 04 '11 at 7:19 2011-08-04 07:19
source share