I'm working on a hardware product that contains an embedded Linux system. The majority of what we execute on that system is a set of Python code which currently has its own Git repository and is version controlled like a normal standalone software project.
I'm stuck on how to manage and version control the OS configuration itself. In order to load the OS onto a newly built machine, we have a stored master image file of the entire filesystem (a single ~4GB file backed up onto a network drive). It does need to be in that format to install. This leaves me with no version control over a variety of important things such as:
- Installed version of the Python software.
- Debian version and kernel version.
- Third party libraries and hardware drivers which have been installed.
- Important system configuration files (Device Tree sources, rc.local, etc)
As I work on debugging my custom hardware, this is getting especially concerning because I'm poking and prodding at config files with no version control.
AreIs there any tools meanta type of tool for managing an OS configuration like this or at least some best practices I can implement? Everything I've seen fortried looking at configuration management tools and everything I've found has been targeted at more of an IT sysadmin kind of application to manage fleets of in-use computers which isn't really whatdoesn't fit the embedded hardware use case very well. I wantfeel like I'm searching for the wrong thing.