it-swarm-ru.tech

Какие существуют решения, позволяющие использовать контроль версий для файлов конфигурации сервера?

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

Я в основном интересуюсь решениями для Unix/Linux, но мне было бы любопытно также реализовать Windows.

85
Dave K

Я тестировал это дома (~ 3 хоста) в течение некоторого времени, пробуя разные scms (RCS, Subversion, git). Настройка, которая отлично работает для меня сейчас, это git с хуком setgitperms .

Что нужно учитывать:

Обработка прав доступа к файлам и владения

  • RCS: делает это изначально
  • Subversion: последний раз, когда я пытался, вам понадобилась обертка вокруг svn, чтобы сделать это
  • git: ловушка setgitperms обрабатывает это прозрачно (нужна довольно свежая версия git с поддержкой post-checkout крючки, хотя)

Кроме того, если вы не хотите, чтобы все ваши /etc под контролем версий, но только те файлы, которые вы на самом деле изменили (например, я), вам понадобится scm, поддерживающий этот вид использования.

  • RCS: все равно работает только с отдельными файлами.
  • Subversion: я обнаружил, что это сложно.
  • мерзавец: нет пробем, поставь "* "на верхнем уровне .gitignore файл и добавьте только те файлы, которые вы хотите использовать git add --force

Наконец, есть несколько проблемных каталогов под /etc где пакеты могут отбрасывать фрагменты конфигурации, которые затем считываются какой-либо программой или демоном (/etc/cron.d, /etc/modprobe.d, так далее.). Некоторые из этих программ достаточно умны, чтобы игнорировать файлы RCS (например, cron), некоторые - нет (например, modprobe). То же самое с .svn каталоги. Опять же большой плюс для git (создает только один верхний уровень .git каталог).

52
8jean

Я сделал это неофициально с помощью git, но есть также проект etckeeper , который является более полной и подробной реализацией.

28
pjz

Другой вариант - использовать инструмент автоматического конфигурирования сервера, такой как Puppet или Cfengine , чтобы создавать сценарии конфигурации вашего сервера на декларативном языке.

Это дополнительная работа с интерфейсом, но использование такой утилиты, как Puppet, позволяет автоматически перестраивать и настраивать сервер с минимальным вмешательством человека.

23
berberich

Я экспериментировал с etckeeper , который, кажется, работает довольно хорошо. Мне не требуется централизованный сервер, что может быть важно в некоторых ситуациях. Вы можете использовать несколько разных бэкэндов DVCS, так что вы можете выбрать тот, который вам наиболее знаком. Кажется, это работает очень хорошо для меня, но я еще не пытался найти других техников, где я работаю, чтобы начать использовать его.

10
Zoredache

Я в последнее время изучаю Chef. Он не только сохраняет настройки временные (.erb) в управлении версиями, но и позволяет выполнять действия (например, перезапуск службы после загрузки настроек на узел). Chef помогает с управлением пакетами, поэтому вы можете проверить зависимости с любым узлом, с которым вы взаимодействуете (т.е. должен быть установлен пакет Sudo). Кажется, что Chef легко расширяется в Ruby, поэтому, если у вас есть какие-то пользовательские процессы, вы можете просто написать его в предоставленной среде.

Но все еще не пробовали, и вам нужно установить Ruby на клиенте и сервере с соответствующими гемами (это действительно не так уж сложно). В целом, управлять многими серверами очень просто. один раз.

6
bluehavana

Я нахожусь в процессе внедрения Puppet во всей нашей инфраструктуре, и это очень способствует сохранению данных в контроле версий.

Я предпочитаю Mercurial, так как это просто набор файлов с некоторыми метаданными, которые хранятся в скрытых каталогах (легко управлять, легко понять, легко использовать).

Мои файлы Puppet находятся в/usr/local/etc/puppet/(FreeBSD 7.1). Все, что нужно, чтобы добавить к нему Mercurial:

> cd /usr/local/etc/puppet
> hg init

Все изменения фиксируются с помощью простого "hg commit". Если изменение что-то скрывает, я могу откатить каждый сервер до заданной версии файла (скажем, sudoers) с помощью одной команды.

Отличное введение в Mercurial

3
sh-beta

Я использую Subversion на серверах, которыми я управляю. Работает отлично. Я также настроил экземпляр Trac , поэтому у нас есть представление временной шкалы, система тикетов, просмотр и т.д.

Используя символические ссылки, cron и Subversion, я также настроил автоматическое распространение конфигурации на основе репозитория Subversion, где каждый сервер Linux обновляет репозиторий с помощью svn update со сценариями (например, сценарии брандмауэра).

3
Martin C.

Вот реальный пример использования: Используется Subversion для управления файлами конфигурации на 4 разных серверах. Я бы рекомендовал использовать контроль версий для файлов конфигурации по той же причине, по которой вы использовали бы их с кодом - это резервная копия и кнопка отмены все в одном. Если бы я управлял гораздо большим количеством серверов, а их конфигурация была намного ближе, я бы использовал что-то вроде Puppet, как подробно описано в ответе Бербериха.

Идея состоит в том, что у вас может быть один репозиторий, в котором вы можете извлекать определенные папки на серверах (например,/var/named /), поэтому у меня есть история и резервная копия файлов конфигурации (резервная копия является бонусом, если вы допустили ошибку использования приложения конфигурации GUI, которое стирает ваши отредактированные дополнения кашель Администратор сервера в Mac OS X Server кашель). Затем его легко протестировать на тестовом сервере и впоследствии обновить рабочий сервер файлами, которые работают без копирования файлов вручную.

2
Chealion

Я создал проект несколько лет назад, чтобы сделать именно это: Savon

Он использует Subversion для хранения файлов и имеет некоторые дополнительные функции, такие как отслеживание владения, разрешения и контекст SELinux. Это также позволяет вам логически разделять изменения файловой системы по слоям, так что вы можете, например, отслеживать изменения, которые должны поступать на все ваши веб-серверы отдельно.

1
Thomas Vander Stichele

Subversion очень прост в настройке и использовании и имеет множество ресурсов:

Базовые инструкции

SVN Book

Обзор управления документами

0
Jimmie R. Houts

Большая часть наших изменений управляется с помощью нашей системы Help Desk, даже для рутинных видов обслуживания. Мы постепенно перемещаем нашу документацию в вики для собственного использования и того, что публикуем для конечных пользователей. Публикация изменений конфигурации и обсуждение, стоящее за ней, приятно видеть в нашей внутренней сети.

0
Waldo

В течение многих лет я использовал rcs для файлов, которые я начал изменять, но пару лет назад я начал ставить весь/etc под контроль git. Требуется некоторая работа, чтобы проверить файлы в виде отдельных файлов (иногда я прибегаю к огромной проверке "различных обновлений"), и я написал несколько сценариев, чтобы помочь с этим, но упомянутое etckeeper кажется очень интересным, я попробую немедленно.

0
hlovdal