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

85

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.

Dave K
fonte
Parece duplicar ou ser muito relacionada com esta questão serverfault.com/questions/3852/...
Zoredache

Respostas:

52

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

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ê precisava de um wrapper svnpara fazer isso
  • git: o setgitpermshook lida com isso de forma transparente ( post-checkoutembora precise de uma versão bastante recente do git com suporte para hooks)

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

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

Finalmente, existem alguns diretórios problemáticos sob /etconde os pacotes podem cair pedaços de configuração que depois 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 os .svn diretórios. Novamente, uma grande vantagem para o git (cria apenas um .git diretório de nível superior ).

8jean
fonte
11
O Subversion precisa do asvn svn.collab.net/repos/svn/trunk/contrib/client-side/asvn . O arquivo SVN (asvn) permitirá a gravação de tipos de arquivo normalmente não tratados pelo svn. Atualmente, isso inclui dispositivos, links simbólicos e propriedade / permissões de arquivos.
Cristian Ciupitu 19/06/2009
Você tem uma anotação em algum lugar mostrando como configurar os ganchos usados, etc.?
9119 grufftech
Uma breve descrição está aqui: jottit.com/jg8h7
8jean
Aqui está um post sobre como configurar algo assim no Arch Linux ARM, que deve ser aplicado igualmente bem aqui. zduck.com/2012/storing-your-raspberry-pi-config-in-git
silent__thought
28

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

pjz
fonte
4
O etckeeper é realmente bom - ele lida com a restauração de permissões (não suportada pelo git, hg, etc) e suporta o backend de sua escolha (incluindo git, hg, bazar, etc). Também possui integração ao APT para que toda vez que você faça uma operação apt-get, o repositório / etc seja confirmado e seja confirmado durante a noite. Eu usei isso por um tempo e, no geral, é muito melhor do que usar um VCS de baunilha, mesmo que apenas pelo recurso de permissões.
RichVel
23

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

É 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.

Berberich
fonte
5
Sim, mas você também deve revisar suas configurações do Puppet / CFengine. Também sou fã do controle de revisão da saída, para que você possa responder à pergunta "qual foi a configuração na data x?" bem como "o que deveria ter sido a configuração de acordo com o fantoche?" e correlacionar entradas com saídas para solucionar problemas do sistema de gerenciamento de configurações.
Rob Chanter
10

Eu tenho experimentado o 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.

Zoredache
fonte
6

Estive pesquisando Chef recentemente. Ele não apenas mantém configurações configuráveis (.erb) no controle de versão, mas permite executar ações (como reiniciar um serviço após o upload das configurações para o nó). O Chef ajuda no gerenciamento de pacotes para que você possa verificar as 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á criá-lo 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 de uma só vez.

bluehavana
fonte
Usamos o Chef pesadamente (mais de 60 servidores) com bastante sucesso. Todas as receitas e arquivos de configuração são verificados no Subversion.
Orgânicasveggie 31/05
3

Estou no processo de implementação do Puppet em nossa infraestrutura e é muito favorável para manter seus dados no controle de versão.

Prefiro o Mercurial, pois é apenas uma coleção de arquivos com alguns metadados armazenados em diretórios ocultos (fáceis de gerenciar, fáceis de entender e fáceis 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

sh-beta
fonte
3

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

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

Martin C.
fonte
2

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, eu 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 GUI que apaga sua mão editado adições tosse admin Server 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.

Chealion
fonte
1

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.

Thomas Vander Stichele
fonte
0

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. Publicar as alterações na configuração e a discussão por trás disso é bom ter aberto em nossa intranet.

Waldo
fonte
0

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. Requer algum trabalho para fazer o check-in de arquivos granulares (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.

hlovdal
fonte