контроль версий на службе сисадмина

Вот, бывает, администрируешь какой-нибудь сервер... Администрируешь, администрируешь, а потом вспомнить не можешь, что, куда и зачем наадминистрировал. И, главное, как нейтрализовать последствия =)
А ведь этого легко избежать, применяя для целей администрирования такие программистские штучки, как source code management.

У юниксоподобных систем есть (среди прочих) два больших преимущества:

1. Они хранят все глобальные настройки в одном месте.

2. Настройки хранятся в обычных текстовых файлах.

Это позволяет протоколировать и вести историю вносимых в конфигурацию изменений с помощью системы контроля версий, которых существует великое множество. И которыми давно и успешно пользуются программисты. Не все =)

В правильных дистрибутивах сборщики пакетов предлагают файлы конфигурации по умолчанию, которые в большинстве случаях устраивают. Поэтому под контроль версий буду заводить только те файлы, которые изменяю лично. Для случая с несколькими админами лучше завести все. Контроль версий будет вестись при помощи mercurial.

Cоздаю репозиторий для папки /etc:

$ cd /etc

$ sudo su

# hg init


Репозиторий для текущей папки и всех подпапок в mercurial хранится в одном месте (в отличие от subversion) - в папке .hg корня проекта.

$ ls /etc/.hg/
00changelog.i 00manifest.i data undo undo.dirstate


Все готово. Так... что бы такое изменить? А, вот хороший кандидат:

$ cat /etc/hosts
127.0.0.1 localhost


Пропишу свои домены. Но сначала добавлю исходный файл в репозиторий.

# hg add hosts

# hg st
A hosts

# hg ci -m "$(hg st)"

# hg log
changeset: 0:a8461d1d94f2
tag: tip
user: Vsevolod Balashov
date: Fri Feb 09 00:15:00 2007 +0300
summary: A hosts


Теперь можно править. Вот что я направил:

# cat /hosts
127.0.0.1 localhost
192.168.0.100 server server.domain www.server www.server.domain


А что по этому поводу думает mercurial?

# hg st
M hosts

# hg diff
diff -r a8461d1d94f2 hosts
--- a/hosts Fri Feb 09 00:15:00 2007 +0300
+++ b/hosts Fri Feb 09 00:17:09 2007 +0300
@@ -1,1 +1,2 @@ 127.0.0.1 localhost
127.0.0.1 localhost
+192.168.0.100 server server.domain www.server www.server.domain


Изменения устраивают. Commit It.

# hg ci -m "осмысленный коментарий here"

# hg log
changeset: 1:5d036c7dea23
tag: tip
user: Vsevolod Balashov
date: Fri Feb 09 00:22:56 2007 +0300
summary: осмысленный коментарий here

changeset: 0:a8461d1d94f2
user: Vsevolod Balashov
date: Fri Feb 09 00:15:00 2007 +0300
summary: A hosts

# hg st -m


Если ничего не говорит - все изменения сохранены. Теперь можно откатиться к любой из конфигураций.

# hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

# cat hosts
127.0.0.1 localhost

# hg up 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

# cat hosts
127.0.0.1 localhost
192.168.0.100 server server.domain www.server www.server.domain


Что и как менялось:

# hg diff -r0:1
diff -r a8461d1d94f2 -r 5d036c7dea23 hosts
--- a/hosts Fri Feb 09 00:15:00 2007 +0300
+++ b/hosts Fri Feb 09 00:22:56 2007 +0300
@@ -1,1 +1,2 @@ 127.0.0.1 localhost
127.0.0.1 localhost
+192.168.0.100 server server.domain www.server www.server.domain

# hg diff -r1:0
diff -r 5d036c7dea23 -r a8461d1d94f2 hosts
--- a/hosts Fri Feb 09 00:22:56 2007 +0300
+++ b/hosts Fri Feb 09 00:15:00 2007 +0300
@@ -1,2 +1,1 @@ 127.0.0.1 localhost
127.0.0.1 localhost
-192.168.0.100 server server.domain www.server www.server.domain


Ну вот. На мой взгляд, все достаточно прозрачно. Особенности сливания и ветвления репозиториев интересны скорее программисту, чем
администратору, и выходят за рамки повествования.



Всеволод Балашев


Сетевые решения. Статья была опубликована в номере 01 за 2007 год в рубрике sysadmin

©1999-2024 Сетевые решения