I'm working on a 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). 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.
Are there any tools meant for managing an OS configuration like this or at least some best practices I can implement? Everything I've seen for management tools has been targeted at more of an IT sysadmin kind of application to manage fleets of in-use computers which isn't really what I want.