it-swarm-pt.tech

Quais soluções existem para permitir o uso do controle de revisão para arquivos de configuração do servidor?

Em um ambiente com vários administradores de sistema, vejo algumas vantagens em adicionar os arquivos de configuração do servidor a um sistema de controle de revisão. O mais notável é a capacidade de rastrear alterações, quem as fez e, é claro, ser capaz de reverter as configurações de trabalho conhecidas.

Estou interessado principalmente em soluções Unix/Linux, mas também ficaria curioso para as implementações do Windows.

85
Dave K

Eu testei isso em casa (~ 3 hosts) há algum tempo, tentando diferentes scms (RCS, Subversion, git). A configuração que funciona perfeitamente para mim agora é git com o gancho setgitperms .

Coisas que você precisa considerar:

Manipulação de permissões e propriedade de arquivos

  • RCS: faz isso nativamente
  • Subversion: a última vez que tentei, você precisou de um wrapper em torno de svn para fazer isso
  • git: o gancho setgitperms lida com isso de forma transparente (precisa de uma versão bastante recente do git com suporte para post-checkout ganchos, no entanto)

Além disso, se você não quiser todas as suas /etc sob controle de versão, mas apenas os arquivos que você realmente modificou (como eu), você precisará de um scm que suporte esse tipo de uso.

  • RCS: funciona apenas em arquivos únicos de qualquer maneira.
  • Subversion: Achei isso complicado.
  • git: sem probem, coloque "* "no nível superior .gitignore e adicione apenas os arquivos que você deseja usar git add --force

Por fim, existem alguns diretórios problemáticos em /etc onde os pacotes podem descartar trechos de configuração que são lidos por algum programa ou daemon (/etc/cron.d, /etc/modprobe.d, etc.). Alguns desses programas são inteligentes o suficiente para ignorar arquivos RCS (por exemplo, cron), outros não (por exemplo, modprobe). A mesma coisa com .svn diretórios. Novamente, uma grande vantagem para o git (cria apenas um nível superior .git diretório).

52
8jean

Eu fiz isso informalmente com o git, mas também há o projeto etckeeper , que é uma implementação mais completa e detalhada.

28
pjz

Outra opção é usar uma ferramenta de configuração de servidor automatizada como Puppet ou Cfengine para criar scripts das configurações do servidor em um idioma declarativo.

É um trabalho extra no front-end, mas o uso de um utilitário como o Puppet permite que você reconstrua e configure automaticamente um servidor com muito pouca intervenção humana.

23
berberich

Eu tenho experimentado etckeeper que parece funcionar muito bem. Não preciso de um servidor centralizado, o que pode ser importante em algumas situações. Você pode usar vários back-ends DVCS, para escolher o que você está mais familiarizado. Parece funcionar muito bem para mim, mas ainda não tentei colocar os outros técnicos em que trabalho para começar a usá-lo.

10
Zoredache

Estive pesquisando Chef recentemente. Ele não apenas mantém configurável (.erb) configurações no controle de versão, mas permite executar ações (como reiniciando um serviço depois de fazer o upload das configurações no nó). O Chef ajuda no gerenciamento de pacotes para que você possa verificar dependências com qualquer nó com o qual faça interface (ou seja, precisa ter o pacote Sudo instalado). O Chef parece ser facilmente extensível no Ruby, portanto, se você tiver algum processo personalizado, poderá fazer o script dentro da estrutura fornecida.

Mas ainda não tentei e você precisa instalar o Ruby no cliente e no servidor com as gemas apropriadas (isso realmente não é tão difícil)). No geral, parece realmente fácil gerenciar muitos servidores em uma vez.

6
bluehavana

Estou no processo de implementação do Puppet em nossa infraestrutura e é muito propício para manter seus dados no controle de versão.

Eu prefiro o Mercurial, pois é apenas uma coleção de arquivos com alguns metadados armazenados em diretórios ocultos (fácil de gerenciar, fácil de entender e fácil de usar).

Meus arquivos Puppet estão em/usr/local/etc/puppet/(FreeBSD 7.1). Tudo o que foi preciso para adicionar Mercurial a ele:

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

Todas as alterações são confirmadas com um simples "hg commit". Se uma mudança mangueira algo, eu posso reverter cada servidor para uma determinada versão do arquivo (por exemplo, sudoers) com um único comando.

Ótima introdução ao Mercurial

3
sh-beta

Eu tenho usado o Subversion nos servidores que eu gerencio. Funciona bem. Também configurei uma instância Trac , para ter uma visualização da linha do tempo, sistema de emissão de bilhetes, navegação etc.

Usando links simbólicos, cron e Subversion, eu também configurei a distribuição de configuração automatizada com base no repositório Subversion, onde cada servidor Linux atualiza um repositório usando svn update com scripts (por exemplo, scripts de firewall).

3
Martin C.

Aqui está um caso de uso da vida real: Subversion usado para gerenciar arquivos de configuração em 4 servidores diferentes. Eu recomendo usar o controle de versão para arquivos de configuração pelo mesmo motivo que você os usaria com código - é um botão de backup e desfazer em um. Se eu estivesse gerenciando uma quantidade muito maior de servidores e eles estivessem muito mais próximos em termos de configuração, usaria algo como Puppet, conforme detalhado na resposta de berberich.

A idéia é que você possa ter um repositório que possa fazer check-out de pastas específicas nos servidores (por exemplo,/var/named /), para que eu tenha um histórico e um backup dos arquivos de configuração (o backup é um bônus se você cometer um erro de usar um aplicativo de configuração da GUI que limpe as adições editadas manualmente tosse Administrador do servidor no Mac OS X Server tosse). É fácil testá-lo em um servidor de teste e, posteriormente, atualizar o servidor de produção com arquivos que funcionam sem copiar arquivos manualmente.

2
Chealion

Eu criei um projeto há alguns anos para fazer exatamente isso: Savon

Ele usa o Subversion para armazenar arquivos e possui alguns recursos adicionais, como rastreamento de propriedade, permissões e contexto do SELinux. Ele também permite que você divida logicamente as alterações do sistema de arquivos em camadas, para que você possa, por exemplo, acompanhar as alterações que devem ir para todos os servidores da Web separadamente.

1
Thomas Vander Stichele

O Subversion é muito fácil de configurar e usar e existem muitos recursos:

Instruções básicas

Livro SVN

Visão geral do gerenciamento de documentos

0
Jimmie R. Houts

A maioria de nossas alterações é gerenciada com o sistema de Suporte Técnico, mesmo para itens de manutenção de rotina. Temos lentamente movido nossa documentação para um wiki para nosso próprio uso e o que publicamos para os usuários finais. A publicação das alterações de configuração e a discussão por trás delas é uma boa opção para abrir em nossa intranet.

0
Waldo

Por muitos anos eu usei o rcs para arquivos que comecei a modificar, mas há alguns anos comecei a colocar o/etc inteiro sob controle do git. É necessário algum trabalho para fazer o check-in de arquivos em massa granular (algumas vezes eu recorro a um enorme "várias atualizações" de check-in) e escrevi alguns scripts para ajudar com isso, mas o etckeeper mencionado parece muito interessante, tentarei imediatamente.

0
hlovdal