Ideally I would like something which:
- Allowed me to write a reason for installation of a package or a set of packages.
- Kept track of all changes the installed package made to my system. I would like to see /etc file modifications, user and group changes and file changes overall. And anything important I forgot. :-)
- Allowed me to write a reason for removing a package or a set of packages.
- Allowed me to modify the reasons I gave at a later time. I might have installed a package to begin with just because I wanted to check it out. Then I might find it really useful and have a good reason for keeping it. As the reasons are for documentation and not a diary I'd like to change the original reason "Just testing it out" into "Installed as it offers services x,y,z using a minimal and fast implementation".
- Allowed me to (manually) include the manual steps I needed to perform. Like change that files' contents, and that ones permissions, remove that file & create that file. Basically log commands I perform together with some documentation comments. And tie them to the packages I installed/removed which caused these manual steps to be necessary.
- I could get output from which basically is a description of how to duplicate my system on a freshly installed machine. This means that only the installed/removed packages that differs from the fresh install are shown with their descriptions (still in sequental order as packages may depend upon each other).
Questions
- Does it sound like a good system for documentation? Why? Why not? What can be improved?
- Is there something like this out there already?
- Is it possible to hook into the APT system to gain the necessary level of control to create something like this? Any tips on how?
- Do you have any suggestions on how to implement something like this?
If something like this is not out there already, I might have a try at creating something myself.
Some of what you are doing seems like it would be covered by using a combination of a configuration management system (like puppet) and a change control system (like subversion).
As you add, remove, modify packages, you do them through the puppet system; you then check your configuration changes in, and log what changed and why.
This lets you not only reproduce a system, but also lets you reproduce it at any point in time. You also get control over more than just the package files; you can control all the config files in your system.
Although I'm a fan of Puppet myself (well, technically, I love the idea of Puppet and loathe the implementation, but that's a whole other story), and would recommend that in general, you could produce more-or-less what you want with some scripts -- apt is powerful enough to do that. Also, the
etckeeper
package does the "config change tracking" bit for you, and would provide an example of how to hook into apt to do what you want.I use
etckeeper
on my workstation just to have an idea of what changed and when, but I would not ever consider it as a replacement for a real configuration management system on production systems. It just doesn't (can't!) keep track of enough system state to make it a viable alternative.