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


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

Меня в основном интересуют решения Unix / Linux, но было бы любопытно и для реализаций Windows.


85
2018-05-06 17:46


Источник


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


Ответы:


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

Вещи, которые вам нужно учитывать:

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

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

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

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

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


52
2018-05-06 18:23



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


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


28
2018-05-06 17:47



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


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

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


23
2018-05-06 18:03



Да, но вы также должны контролировать ревизию своих конфигураций Puppet / CFengine. Я также являюсь поклонником ревизии, контролирующей вывод, чтобы вы могли ответить на вопрос «что был config on date x? ", а также« что должна была быть конфигурация в соответствии с марионеткой? »и коррелировать входы с выходами для устранения неполадок системы управления конфигурацией. - Rob Chanter


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


10
2018-05-06 18:10





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

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


6
2018-05-27 20:49



Мы очень хорошо используем шеф-повара (более 60 серверов). Все рецепты и файлы конфигурации проверяются в Subversion. - organicveggie


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

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

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

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

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

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


3
2018-05-06 19:59





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

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


3
2018-05-07 16:19





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

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


2
2018-05-06 19:11