Упрощаем администрирование с etckeeper. Настройка контроля версий конфигов в /etc.

С самого появления систем управления версиями, многие администраторы присматриваются к ним. Крайне удобным кажется слежение за конфигурационными файлами серверов с возможностью сравнения версий, отката в любой момент. В свое время я использовал Mercurial, который натравливал на важные мне конфиги с помощью директории с симлинками. Но познакомившись с etckeeper, не променяю его на старые приемы. Etckeeper позволяет держать под наблюдением всю директорию etc, при этом не ограничиваясь какой-то конкретной VCS, так как поддерживает Git, Mercurial, Bazaar, Darks. Главным аргументом при использовании etckeeper перед простым добавлением директории /etc в VCS является возможность контроля метаданных файлов. Помимо этого, Git и Mercurial не отслеживают пустые директории, хотя в рамках etc они могут иметь значение.

Etckeeper в рамках DEB систем встраивается в pre-intall и post-install менеджера пакетов apt, что позволяет эффективно контролировать изменения содержимого etc при установке или обновлении софта. При попытке установки софта будет проводиться проверка на существование неподтвержденных изменений, после установки софта новые конфиги добавятся в список наблюдения VCS и будет произведен коммит уже с ними.

В статье приведены примеры с использованием Git, как наиболее часто применяемого. Пушить изменения мы будем на этот же сервер, хотя никто не мешает нам использовать сторонний. Главное не забывать, что пушатся в том числе и файлы, к которым необходимо ограничить доступ для посторонних (passwd, shadow), так что не забывайте защищать репозиторий от несанкционированного доступа.

Установка etckeeper производится из пакета:

1
sudo apt-get install etckeeper git-core

При установке из пакета первичная инициализация etckeeper произойдет автоматически. Если вы поставите его другими способами, инициализацию можно провести командой:

1
sudo etckeeper init

В директории /etc появится .git

Настройки etckeeper лежат в файле /etc/etckeeper/etckeeper.conf. В нашем случае мы оставим их по умолчанию.

Самое время совершить первый коммит:

1
etckeeper commit 'Initial commit'

etckeeper commit ‘Initial commit’

1
sudo apt-get install mc

Проверим, что появилось в Git.

1
2
cd /etc
git log
1
2
3
4
5
6
7
8
commit 0e592864b520d148f81f61f715a6e2c7f4594a2f
Author: root <root@vm716.local>
Date: Sun Apr 26 22:21:10 2015 +0300
committing changes in /etc after apt run
Package changes:
+mc 3:4.8.3-10
+mc-data 3:4.8.3-10
+unzip 6.0-8+deb7u2

Теперь попробуем изменить конфигурационный файл и сравнить его версии.

1
2
3
4
5
echo "test1" > /etc/testfile
etckeeper commit "test commit 1"
echo "test2" > /etc/testfile
etckeeper commit "test commit 2"
git log -p /etc/testfile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
commit 5f7e7db6ba070f8244efb4e25be27ed96201c663
Author: root <root@vm95716.local>
Date: Sun Apr 26 22:28:22 2015 +0300
test commit 2
diff --git a/testfile b/testfile
index a5bce3f..180cf83 100644
--- a/testfile
+++ b/testfile
@@ -1 +1 @@
-test1
+test2
commit 416c9dc355c45c359c05a9e1e3aee865b968a41e
Author: root <root@vm716.local>
Date: Sun Apr 26 22:28:15 2015 +0300
test commit 1
diff --git a/testfile b/testfile
new file mode 100644
index 0000000..a5bce3f

Теперь сравним текущую версию файла с определенным коммитом:

1
echo "test3" >testfile

Из списка коммитов (git log) выберем нужный и выполним:

1
git diff e91a38271edc9497346ae2455b201fe2a7e6b175 #имя коммита
1
2
3
4
5
6
7
diff --git a/testfile b/testfile
index 180cf83..df6b0d2 100644
--- a/testfile
+++ b/testfile
@@ -1 +1 @@
-test2
+test3

В процессе эксплуатации полезно исключить из контроля файлы, редактируемые демонами. Предположим файл testfile — как раз такой:

1
2
3
git rm --cached testfile
echo testfile >> .gitignore
git commit -a -m "don't track testfile"

Безусловно у любой VCS гораздо больше возможностей, чем описано в статье. Важно то, что лучше начать контроль версий уже сейчас, даже если вы никогда не использовали VCS, ведь потом это может сэкономить ваши время и силы.


Смотрите также

comments powered by Disqus