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.
Is there a type of tool for managing an OS configuration like this or at least some best practices I can implement? I've tried 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 doesn't fit the embedded hardware use case very well. I feel like I'm searching for the wrong thing.