В среде с несколькими системными администраторами я вижу несколько преимуществ добавления файлов конфигурации сервера в систему контроля версий. Наиболее примечательными являются возможность отслеживать изменения, кто их сделал, и, конечно же, возможность откатиться к известным рабочим конфигурациям.
Меня в основном интересуют решения для Unix / Linux, но мне также были бы любопытны реализации для Windows.
Я протестировал это дома (~ 3 хоста) в течение некоторого времени теперь, пробуя другой scms (RCS, Подверсия, мерзавец). Установка, которая работает отлично на меня прямо сейчас, является мерзавцем с setgitperms
рычаг.
Вещи необходимо рассмотреть:
Обработка полномочий файла и владения
svn
сделать этоsetgitperms
сцепитесь обрабатывает это прозрачно (нуждается в довольно последней версии мерзавца с поддержкой post-checkout
рычаги, хотя)Кроме того, если Вы не хотите ко всему Вашему /etc
при управлении версиями, но только файлах, которые Вы на самом деле изменили (как я), Вам будет нужен scm, который поддерживает этот вид использования.
*
"на верхнем уровне .gitignore
файл и добавляет только те файлы, которые Вы хотите использовать git add --force
Наконец, существуют некоторые проблематичные каталоги под /etc
где пакеты могут отбросить отрывки конфигурации, которые затем читаются некоторой программой или демоном (/etc/cron.d
, /etc/modprobe.d
, и т.д.). Некоторые из этих программ достаточно умны для игнорирования файлов RCS (например, крон), некоторые не (например, modprobe). То же самое с .svn
каталоги. Снова большое плюс для мерзавца (только создает один верхний уровень .git
каталог).
Другая опция состоит в том, чтобы использовать автоматизированный инструмент конфигурирования сервера как Puppet или Cfengine для сценариев конфигураций сервера на декларативном языке.
Это - дополнительная работа над фронтендом, но использование утилиты как Марионетка позволяет Вам автоматически восстанавливать и настраивать сервер с очень небольшим человеческим вмешательством.
Я экспериментировал с etckeeper, который, кажется, работает вполне прилично. Я не требую централизованного сервера, который может быть важным в некоторых ситуациях. Можно использовать несколько различных бэкендов DVCS, таким образом, можно выбрать тот, Вы являетесь самыми знакомыми с. Это, кажется, работает очень хорошо на меня, но я не попытался получить другой techs, где я работаю, чтобы начать использовать его все же.
Я нахожусь в процессе реализации Марионетки через нашу инфраструктуру, и это очень способствует хранению ее данных в управлении версиями.
Я предпочитаю Подвижный, так как это - просто набор файлов с некоторыми метаданными, сохраненными в скрытых каталогах (легкий справиться, легкий понять, простой в использовании).
Мои Марионеточные файлы в/usr/local/etc/puppet/(FreeBSD 7.1). Все это взяло для добавления Подвижный к нему:
> cd /usr/local/etc/puppet
> hg init
Все изменения фиксируются с простым "hg фиксация". Если изменение поливает из шланга что-то, я могу откатывать каждый сервер к данной версии файла (скажите, sudoers) с единственной командой.
Я использовал Подверсию на серверах, которыми я управляю. Хорошо работает. Я также настроил экземпляр Trac, таким образом, у нас есть представление временной шкалы, система покупки билетов, просмотр, и т.д.
Используя символьные ссылки, крон и подверсию у меня есть также автоматизированное распределение конфигурации установки на основе репозитория подверсии, где каждый сервер Linux обновляет использование репозитория svn update
со сценариями (например, сценариями брандмауэра).
Вот реальный вариант использования: Используемая Подверсия для управления конфигурационными файлами на 4 различных серверах. Я рекомендовал бы использовать управление версиями для конфигурационных файлов по той же причине, Вы будете использовать их с кодом - это - резервное копирование и кнопка отмены все в одном. Если бы я управлял намного большей суммой серверов, и они были намного ближе в терминах на конфигурации, я использовал бы что-то как Марионетка, как детализировано в ответе berberich.
Идея состоит в том, что у Вас может быть один репозиторий, что Вы можете контроль определенные папки на серверах (например,/var/named/) так я и иметь историю и резервное копирование конфигурационных файлов (резервное копирование является премией, если Вы делаете ошибку использования приложения конфигурирования GUI, которое вытирает отредактированные дополнения Вашей руки, кашляют Администратор Сервера при кашле Сервера Mac OS X). Затем легко протестировать его на тестовом сервере и впоследствии обновить рабочий сервер с файлами, которые работают, вручную не копируя файлы.
Я создал проект несколько лет назад, чтобы сделать точно это: Savon
Это использует подверсию, чтобы хранить файлы и имеет некоторые дополнительные функции, как отслеживание владения, полномочий и контекста SELinux. Это также позволяет Вам логически разделять свои изменения файловой системы в слоях, таким образом, можно, например, отследить изменения, которые должны перейти ко всем веб-серверам отдельно.
Подверсию очень легко установить и использовать и существует много ресурсов:
Большинством наших изменений управляют с нашей системой Справочной службы, даже для материала типа регламентного техобслуживания. Мы медленно перемещали нашу документацию в Wiki для нашего собственного использования, и что мы публикуем к конечным пользователям. При регистрации изменений конфигурации и обсуждения позади него, хорошо иметь открытый на нашей интранет.
Много лет я использовал rcs для файлов, которые я начал изменять, но несколько лет назад я начал помещать целый / и т.д. под управлением мерзавца. Это требует, чтобы некоторая работа зарегистрировалась в файлах в детализированных объемах (несколько раз, я обращаюсь к огромные "различные обновления" регистрация), и я записал некоторые сценарии для помощи с этим, но упомянутый etckeeper кажется очень интересным, я сразу испытаю.
Я изучал Шеф-повара в последнее время. Мало того, что это сохраняет templatable (.erb) конфигурации в управлении версиями, но позволяет Вам выполнять действия (как перезапуск сервиса после загрузки конфигураций на узел). Шеф-повар помогает с управлением пакетом, таким образом, можно проверить зависимости с любым узлом, с которым Вы соединяете интерфейсом с (т.е. должен иметь sudo установленный пакет). Шеф-повар, кажется, легко расширяем в Ruby, поэтому если у Вас есть какие-либо пользовательские процессы, можно просто написать сценарий его в служившей основе.
Но все еще не попробовали его, и действительно необходимо установить Ruby на клиенте и сервере с соответствующими драгоценными камнями (это действительно не это трудно). Общий вид, действительно легкий управлять многими серверами сразу.