Etckeeper
Etckeeper lets you keep /etc
under version control.
Contents
Install
Etckeeper can be installed with the etckeeper package, available in the official repositories.
Configure
The main config file is /etc/etckeeper/etckeeper.conf
.
You can set things such as the VCS to use in this file.
Once you've set your preferred VCS (the default is git), you can initialize the /etc repository by running
# etckeeper init
Usage
Etckeeper supports using pacman as a LOWLEVEL_PACKAGE_MANAGER
in etckeeper.conf
.
Support for using pacman as a HIGHLEVEL_PACKAGER_MANAGER
is not possible since pacman does not have hook capability,
so you'll need to either commit changes manually or use one of the stopgap solutions below.
systemd
Service and timer units are included in the package. Simply enable etckeeper.timer
.
See Systemd/Timers for more informations and Systemd#Editing provided unit files if you wish to edit the provided units.
Cron
There is a cron script in the source distribution at debian/cron.daily
.
You can use this script to automatically commit changes on a schedule.
To make it run daily, for example, make sure you have cron installed and enabled,
then simply copy the script from the srcdir where you built etckeeper to /etc/cron.daily
and make sure it's executable (e.g. chmod +x /path/to/script
).
Wrapper script
In order to emulate the auto-commit functionality that etckeeper has on other systems,
you could place a script such as the one below somewhere in your PATH, make it executable,
and use it instead of pacman -Syu
to update your system.
#!/bin/bash etckeeper pre-install pacman -Syu etckeeper post-install
Alternatively you can add a quick alias to ~/.bashrc
:
alias pkg-update='sudo etckeeper pre-install && sudo pacman -Syu && sudo etckeeper post-install'
or a function where it is possible to specify the arguments for pacman or pacman wrapper:
Pacman () { sudo etckeeper pre-install && sudo pacman "$@" && sudo etckeeper post-install; }
To use the function, just run pacman as usual with flags as needed, but with a capital "P". For example:
Pacman -Syu Pacman -R foo
Incron
As an alternative to the above, you could set up incron to automatically commit changes using etckeeper whenever a file in /etc is modified.
Automatic push to remote repo
Whilst having a local backup in /etc/.git
is a good first step, etckeeper can automatically push your changes on each commit to a remote repository such as Github. Create an executable file /etc/etckeeper/commit.d/40github-push
:
#!/bin/sh set -e if [ "$VCS" = git ] && [ -d .git ]; then cd /etc/ git push origin master fi
Change to etc/.git
and add your remote Github repository:
# git remote add origin https://github.com/user/repo.git
Now each time you run your wrapper script or alias from above, changes will be automatically commited to your Github repo.