Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Specificly I would like to track my grub.conf (/boot/grub/grub.conf) and some oracle files (i.e. /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora).

I attempted using links; however etckeeper/git only tracks where the link points to, not the actual contents. And I can not create hard links as the files are on another volume.

I know I could setup another GIT repository but I would rather have it all within etckeeper.

Update

Based on nealmcb's answer I came up with the following script:

#!/bin/sh
set -e

# Based on nealmcb's idea/script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}


mirror_dir "/boot/grub"
mirror_dir "/root"  

To add or remove a path you simply add or remove the mirror_dir call at the bottom.

share|improve this question
    
Not a real answer, but since comments aren't allowed (for me at least) above, sharing this: How to reuse/extend etckeeper's metadata engine for git control of non-/etc filesystems, or extend git natively with said capability?. (Please don't down-tick/ding me for posting a reference here simply because I wasn't able to comment, thx.) –  Johnny Utahh Dec 14 '11 at 22:00
add comment

3 Answers

up vote 3 down vote accepted

I edited the above script to also include plain files.

maybe someone should add a possibility to configure this outside a script (in the etckeeper config?) and send this as a patch to joey hess?

#!/bin/sh
set -e

# Based on nealmcb's + ErebusBat's script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}

mirror_file() {
   LOCAL_PATH=$1
   DIRPATH=`dirname $LOCAL_PATH`
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$DIRPATH
   rsync -a $LOCAL_PATH $MIRROR_ROOT/$DIRPATH
}
mirror_file "/var/srv/foo_bar/blog/config.py"
mirror_file "/var/srv/foo_bar_another_host/trac/conf/trac.ini"
share|improve this answer
add comment

etckeeper does allow you to integrate it with other systems.

I also wanted to track changes made by update-grub in /boot, so I put the code below in /etc/etckeeper/commit.d/20mirror-outside-files

This way any time etckeeper is called for other reasons (when I install software, sometimes nightly, etc), it will grab and track revisions in the latest grub configuration.

I invented the convention to put this stuff under /etc/Mirror/path-to-outside-file, e.g. /etc/Mirror/boot/grub/grub.cfg but if anyone has precedent for another such convention, I'd love to hear about it.

#!/bin/sh
set -e

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

echo etckeeper: mirroring outside files

mkdir -p /etc/Mirror/boot/grub
cp -p /boot/grub/grub.cfg /etc/Mirror/boot/grub

Update:

Note that for some reason etckeeper doesn't run this when you do an apt-get remove or purge, e.g. to delete an old kernel. Odd.... But you can run sudo etckeeper commit manually in that case, or after a manual update-grub.

share|improve this answer
add comment

I don't think etckeeper will do this, but there are a couple of solutions:

  1. reverse the links: put a link out on the filesystem to a file in /etc/

  2. script the copying of those files into /etc (backup) and out of /etc (restore). Then use those scripts periodically or in an appropriate git hook.

share|improve this answer
2  
While the reverse link is a good idea, and I use it in some cases there are cases where it won't work. Specifically don't try the reverse link for your grub.conf or else you won't be able to boot. –  Zoredache Dec 10 '10 at 23:05
    
@Zoredache - Exactly. However the reverse link would probably work for my Oracle files. And and @pjz's copy method would probably work for anything on boot (grub + kernel conf). I will try this next week. –  ErebusBat Dec 11 '10 at 18:17
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.