etckeeper — отслеживание изменений конфигурационных файлов

etckeeper — программа(скрипт) которая позволяет держать /etc (или любой другой каталог) в системе контроля версий(на текущий момент поддерживается git, mercurial, bazaar или darcs). Есть в репозиториях CentOS и Debian. В принципе, никто не мешает нам организовать в /etc git репозиторий и получить почти тоже самое. Но etckeeper позволяет автоматизировать ряд случаев:

  • При установке программ — все конфигурационные файлы автоматически добавляют в репозиторий
  • По крону (/etc/cron.daily/etckeeper) каждую ночь комитятся все изменения которые не были добавлены в ручную.

Если с помощью etckeeper вы захотите отслеживать изменения в любом другом каталоге( -d ключ) то cron скрипт лучше дублировать дописав везде где надо ключ -d.

Учитывая, что теперь /etc представляет собой репозиторий мы можем использовать hook’и (скрипты).
Можно как положить нужные скрипты в /etc/.git/hooks так и в /etc/etckeeper/*.d. Таким образом можно настроить уведомление на почту, например списка измененных файлов и сами изменения, это будет удобно если сервером управляют несколько системных администраторов.

Типовой пример работы с etkeeper.

  • etckeeper init — инициализирует репозиторий в /etc/ — скорее всего не надо будет делать этого, тк инициализация будет произведена в процессе установки etckeeper.
  • etckeeper commit -m «Комментарий» — записать изменения в репозиторий

Так же доступны все комманды выбранной VCS(Системы контроля версий). На примере git:

  • git status
  • git log

Настройка уведомлений на почту на примере git:

    1. Скопируем дефолтный email хук:
# cp /usr/share/git-core/contrib/hooks/post-receive-email /etc/.git/hooks/post-commit
# chmod +x  /etc/.git/hooks/post-commit
  1. Применим к нему patch:
    --- post-commit.orig    2014-04-23 19:18:31.226172671 +0400
    +++ post-commit 2014-04-23 19:03:42.096839354 +0400
    @@ -742,9 +742,10 @@
            # themselves
            prep_for_email $2 $3 $1 && PAGER= generate_email
     else
    -       while read oldrev newrev refname
    -       do
    -               prep_for_email $oldrev $newrev $refname || continue
    -               generate_email $maxlines | send_mail
    -       done
    +        oldrev=$(git log -2 --format=%H| tail -1)
    +        newrev=$(git log -1 --format=%H)
    +        if [ "$oldrev" = "$newrev" ]; then oldrev="00000"; fi
    +        refname="refs/heads/master"
    +        prep_for_email $oldrev $newrev $refname || continue
    +       generate_email $maxlines | send_mail
     fi
    
  2. Впишем в /etc/.git/config конфигурацию для hook’а
    [hooks]
            showrev = "git show -C %s; echo"
            emailprefix = "[git-projectname] "
            mailinglist = "john@example.com,anybody@example.com"
            envelopesender = noreply@yourdomain.com
    

Все, теперь при выполнении команды etckeeper commit и ночью по крону на почту будут падать изменения в каталоге /etc/.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *