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

85

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

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

Дейв К
источник
Кажется, дублирует или очень связан с этим вопросом serverfault.com/questions/3852/…
Zoredache

Ответы:

52

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

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

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

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

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

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

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

8jean
источник
1
Subversion нужен asvn svn.collab.net/repos/svn/trunk/contrib/client-side/asvn . Архив SVN (asvn) позволит записывать типы файлов, которые обычно не обрабатываются svn. В настоящее время это включает в себя устройства, символические ссылки и право собственности на файл.
Кристиан Чиупиту
У вас есть где-нибудь описание, показывающее, как настроить используемые вами хуки?
Grufftech
Краткая рецензия
8jean
Вот пост о настройке чего-то подобного в Arch Linux ARM, который должен применяться здесь одинаково хорошо. zduck.com/2012/storing-your-raspberry-pi-config-in-git
silent__thought
28

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

pjz
источник
4
etckeeper действительно хорош - он обрабатывает восстановление прав доступа (не поддерживается git, hg и т. д.) и поддерживает выбранный вами бэкэнд (включая git, hg, bazaar и т. д.). Также имеется интеграция с APT, так что каждый раз, когда вы выполняете операцию apt-get, репозиторий / etc фиксируется и выполняет фиксации в течение ночи. Я использовал это некоторое время, и в целом это намного лучше, чем использование vanilla VCS, хотя бы для функции разрешений.
RichVel
23

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

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

Берберих
источник
5
Да, но вы также должны контролировать ревизии ваших конфигов Puppet / CFengine. Я также являюсь поклонником ревизии, контролирующей вывод, так что вы можете ответить на вопрос "какова была конфигурация на дату x?" а также «что должен был быть конфиг в соответствии с марионеткой?» и соотнести входные данные с выходными данными для устранения неполадок в системе управления конфигурацией.
Роб
10

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

Zoredache
источник
6

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

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

bluehavana
источник
Мы активно используем Chef (более 60 серверов). Все рецепты и конфигурационные файлы проверены в Subversion.
Organicveggie
3

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

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

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

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

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

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

ш-бета
источник
3

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

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

Мартин С.
источник
2

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

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

Chealion
источник
1

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

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

Томас Вандер Стичеле
источник
0

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

Waldo
источник
0

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

hlovdal
источник