Is it possible to use etckeeper with a single shared git repository?
First, use install etckeeper, configured for git in /etc/etckeeper/etckeeper.conf. Follow etckeeper's install method for your distro or from source.
Soon, you'll have a /etc/.git
Now on on your server, make sure you have a (safe) repo to push to...
# ssh faruser@farhost
# mkdir somedir cd somedir && git init && chmod 700 .git
# exit
Now on the initial host, push your local repo to the server via ssh:
# cd /etc && git push faruser@farhost:somedir
Somedir can of course be relative in this case (following ssh convention)
Do this any time you make a change that affects /etc (and is snarfed into /etc/.git by etckeeper) and you'll have both local and off-machine repos for your machine.
Or set up passwordless ssh and make a hook in /etc/etckeeper/commit.d/ so it happens automagically if the machine is always connected.
It is possible to add a remote branch configuration to map the master branch of etckeeper repository from each server to a branch on the remote repository. To do that you can run the following commands on each server:
cd /etc
git branch -m master $HOSTNAME
git remote add origin [email protected]:path/to/single/repo.git
git push -u origin master:$HOSTNAME
After this setup, subsequent git push
will send changes from each server master branch to the dedicated server branch on the central repository.
Although the branches will not have a common starting point, this allows to easily compare the same file from two different branches, representing two different servers, by running:
git diff origin/server1 origin/server2 -- file
This can be combined with the automated setup suggested by jojoo.
How to do it automatically, the full story:
Create the file /etc/etckeeper/commit.d/60-push (dont forget to chmod+x it) on the clients.
#!/bin/sh
git push central_server:/var/git/client_name.git master
central_server is defined in the ssh config, see below. /var/git/client_name.git is the directory on the central server, containing the git repo.
The ~/.ssh/config from root(!) should contain something like this:
host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
#etcpeeper@central_server:~/.ssh/authorized_keys
Then you need to init the git repo on the central_server
mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init
Test it with a minor edit in /etc and then a etckeeper commit "test push'ing".