среда, 8 января 2014 г.

Выборочная отмена изменений в конфигурации сервера, которые были сделаны давно

Когда-то давно я устанавливал pnp4nagios, чтобы решить что я буду использовать для мониторинга изменений параметров своего домашнего сервера. В тот раз я выбрал на эту роль Munin, но удаление уже ненужного pnp4nagios отложил до лучших времен. Сейчас есть свободная минутка и я решил потренироваться в выборочной отмене изменений конфигурации сервера.

Сначала удаляю пакеты, принадлежащие pnp4nagios и затем конфигурацию всех пакетов, которые были автоматически установлены для pnp4nagios.

$ sudo aptitude purge '~i pnp4nagios'
$ sudo aptitude purge '~c'

Теперь нужно отменить изменения в /etc, которые были сделаны для интеграции уже установленного Nagios с pnp4nagios. Для контроля за изменениями в /etc у меня используется etckeeper, но поскольку я не помню когда и какие изменения я внес, то пробую поискать в истории изменений.

$ sudo etckeeper vcs log | grep -B3 -i pnp4nagios
набор изменений:  281:1d3749d4f348
пользователь:     andrey@server.home.tataranovich.com
дата:             Wed May 08 16:03:27 2013 +0300
сводка:           Before pnp4nagios debugging.
--
набор изменений:  280:e44540a69bf4
пользователь:     Andrey Tataranovich 
дата:             Wed May 08 16:02:33 2013 +0300
сводка:           Installed pnp4nagios.

Итак, pnp4nagios я устанавливал весной прошлого года. Поскольку после этого уже было внесено много изменений, то просто откатить весь /etc на состояние предшествующее установке пакетов нельзя. Нужно отменить только изменения, связанные с настройкой интеграции nagios и pnp4nagios. Etckeeper всегда делает комит состояния /etc до и после работы менеджера пакетов - следовательно мне нужно найти комит, соответствующий состоянию до начала установки пакетов pnp4nagios. Для верности беру 5 ревизий, предшествующих e44540a69bf4.

$ sudo etckeeper vcs log -r e44540a69bf4~5: -l 6
набор изменений:  275:ad2066d36826
пользователь:     @server.home.tataranovich.com
дата:             Sun May 05 06:54:28 2013 +0300
сводка:           daily autocommit

набор изменений:  276:15ddfe25a664
пользователь:     @server.home.tataranovich.com
дата:             Tue May 07 06:31:12 2013 +0300
сводка:           daily autocommit

набор изменений:  277:a7dd8e2fa616
пользователь:     @server.home.tataranovich.com
дата:             Wed May 08 06:42:30 2013 +0300
сводка:           daily autocommit

набор изменений:  278:b24e999300fe
пользователь:     andrey@server.home.tataranovich.com
дата:             Wed May 08 09:30:35 2013 +0300
сводка:           saving uncommitted changes in /etc prior to apt run

набор изменений:  279:6107c041a05b
пользователь:     andrey@server.home.tataranovich.com
дата:             Wed May 08 09:30:47 2013 +0300
сводка:           committing changes in /etc after apt run

набор изменений:  280:e44540a69bf4
пользователь:     Andrey Tataranovich 
дата:             Wed May 08 16:02:33 2013 +0300
сводка:           Installed pnp4nagios.

В данном случае меня интересует b24e999300fe, который был зафиксирован перед вызовом apt. Теперь осталось получить все изменения в /etc/nagios3, сделанные после.

$ sudo etckeeper vcs diff -r b24e999300fe: /etc/nagios3 > /tmp/pnp4nagios.diff

Теперь нужно проверить diff-файл /tmp/pnp4nagios.diff - возможно туда попали лишние изменения, которые не связаны с интеграцией pnp4nagios - у меня такие были и я отредактировал файл, чтобы он содержал только нужные мне изменения. В результате получилось так:

cat /tmp/pnp4nagios.diff 
diff -r b24e999300fe -r 024b430644d3 nagios3/conf.d/generic-host_nagios2.cfg
--- a/nagios3/conf.d/generic-host_nagios2.cfg   Wed May 08 09:30:35 2013 +0300
+++ b/nagios3/conf.d/generic-host_nagios2.cfg   Wed Jan 08 09:36:12 2014 +0300
@@ -15,5 +15,6 @@
                notification_period             24x7
                notification_options            d,u,r
                contact_groups                  admins
+       action_url                      /pnp4nagios/graph?host=$HOSTNAME$
         register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
         }
diff -r b24e999300fe -r 024b430644d3 nagios3/conf.d/generic-service_nagios2.cfg
--- a/nagios3/conf.d/generic-service_nagios2.cfg        Wed May 08 09:30:35 2013 +0300
+++ b/nagios3/conf.d/generic-service_nagios2.cfg        Wed Jan 08 09:36:12 2014 +0300
@@ -22,5 +22,6 @@
                notification_period             24x7
                notification_options            w,u,c,r
                contact_groups                  admins
+       action_url                      /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
         register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
         }
diff -r b24e999300fe -r 024b430644d3 nagios3/nagios.cfg
--- a/nagios3/nagios.cfg        Wed May 08 09:30:35 2013 +0300
+++ b/nagios3/nagios.cfg        Wed Jan 08 09:36:12 2014 +0300
@@ -248,6 +248,7 @@
 
 #broker_module=/somewhere/module1.o
 #broker_module=/somewhere/module2.o arg1 arg2=3 debug=0
+broker_module=/usr/lib/pnp4nagios/npcdmod.o config_file=/etc/pnp4nagios/npcd.cfg
 
 
 
@@ -832,7 +833,7 @@
 # performance data.
 # Values: 1 = process performance data, 0 = do not process performance data
 
-process_performance_data=0
+process_performance_data=1
 
 


Пробуем отменить этот "патч".

$ cd /etc
$ sudo patch -p1 -R --dry-run < /tmp/pnp4nagios.diff 
patching file nagios3/conf.d/generic-host_nagios2.cfg
patching file nagios3/conf.d/generic-service_nagios2.cfg
patching file nagios3/nagios.cfg

Проверка завершилась успешно и теперь можно применить изменения и зафиксировать их в etckeeper.

$ sudo patch -p1 -R < /tmp/pnp4nagios.diff
patching file nagios3/conf.d/generic-host_nagios2.cfg
patching file nagios3/conf.d/generic-service_nagios2.cfg
patching file nagios3/nagios.cfg
$ sudo service nagios3 check && service nagios3 restart
$ sudo etckeeper commit

4 комментария:

  1. Я вот смотрю на текст и думаю, а для чего это мне может пригодиться если я буду использовать систему контроля версий?! Так вот хочу вас попросить привести примеры для чего это можно использовать кроме как совместной разработки всего и вся ..., спасибо за ответ.

    ОтветитьУдалить
    Ответы
    1. На подобные вопросы ответ простой - если вы не знаете зачем оно вам нужно - оно вам не нужно.

      Удалить
  2. А вот если бы вы привели пример то может и применение нашлось, ведь век живи век учись

    ОтветитьУдалить
    Ответы
    1. etckeeper - система отслеживания изменений в конфигурации сервера (директория /etc), использующая контроль версий. При грамотном использовании позволяет ответить на вопрос - кто, когда и для чего изменил настройки.

      Пост посвящен проблеме, которую не решает etckeeper.

      Удалить