Every sysop might recognize this... I changed a config file some while ago... but what did I change and what is the history of that file. Besides of the changes, I want to have them in a backup
So I decided to setup a config-file repository, where the servers can commit automaticly their changes using SVN over SSH. I use SSH to have no password prompts but certificates. Only the user svn-backup can commit files to the repository. On both server I only checked out the repository-part concerning them.
[root@tank] svn co
svn+ssh://[email protected]/repos/config-files/tank
/usr/data/svn-config
And in the crontab for the user root, we have the next entry:
45 * * * */usr/local/backup/svn-backup.sh
And in the svn-backup script we have the next lines:
#!/bin/bash
#
# Subversion script to backup configfiles
#
# Written by Pieter de Rijk <pieter -at- de-rijk.com>
SVN_BACKUP_PATH="/usr/local/svn-backup"
cp -R /usr/local/etc/ $SVN_BACKUP_PATH/usr/local/etc/ > /dev/null 2> /dev/null
cp -R /etc/ $SVN_BACKUP_PATH/etc/ > /dev/null 2> /dev/null
rm -rf $SVN_BACKUP_PATH/usr/local/etc/squid/errors
rm -rf $SVN_BACKUP_PATH/usr/local/etc/squid/icons/*.jpg
rm -rf $SVN_BACKUP_PATH/usr/local/etc/squid/icons/*.gif
cd $SVN_BACKUP_PATH
/usr/local/bin/svn up > /dev/null 2> /dev/null
for files in "`/usr/local/bin/svn status $SVN_BACKUP_PATH | grep ^?`";
do
  ADD_FILE=`echo $files | awk '{ print $2 }'`
  if [ ! -z $ADD_FILE ];
  then
    /usr/local/bin/svn add $ADD_FILE
  fi
done
/usr/local/bin/svn commit -m "[`hostname -s`] Config changes `date`"
And when something change I receive a message
Only users in the wheel group can checkout the repositories, but are not allowed to commit