Set up your whole system in a config file. If you mess something up you can rollback any time (or in fact boot directly into past versions). You can patch bugs anywhere in your dependency tree easily. C/C++ packaging works. You can also deploy these configurations to remote machines.