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.
linux
version-control
Dave K
fonte
fonte
Respostas:
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
setgitperms
gancho.Coisas que você precisa considerar:
Manipulação de permissões e propriedade de arquivos
svn
para fazer issosetgitperms
hook lida com isso de forma transparente (post-checkout
embora 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
/etc
controle sob versão, mas apenas os arquivos que você realmente modificou (como eu), precisará de um scm que suporte esse tipo de uso.*
" no.gitignore
arquivo de nível superior e adicione apenas os arquivos que você deseja usargit add --force
Finalmente, existem alguns diretórios problemáticos sob
/etc
onde 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 ).fonte
Eu fiz isso informalmente com o git, mas também há o projeto etckeeper , que é uma implementação mais completa e detalhada.
fonte
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.
fonte
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.
fonte
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.
fonte
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:
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
fonte
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 update
scripts (por exemplo, scripts de firewall).fonte
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.
fonte
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.
fonte
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
fonte
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.
fonte
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.
fonte