контроль версий на службе сисадмина
Вот, бывает, администрируешь какой-нибудь сервер... Администрируешь, администрируешь, а потом вспомнить не можешь, что, куда и зачем наадминистрировал. И, главное, как нейтрализовать последствия =)
А ведь этого легко избежать, применяя для целей администрирования такие программистские штучки, как 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
Ну вот. На мой взгляд, все достаточно прозрачно. Особенности сливания и ветвления репозиториев интересны скорее программисту, чем
администратору, и выходят за рамки повествования.
Всеволод Балашев
А ведь этого легко избежать, применяя для целей администрирования такие программистские штучки, как 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