Inicialização rápida do servidor Debian usando arquivos .deb personalizados

1

Eu preciso de uma maneira confiável de inicializar novos servidores Debian com software customizado pré-construído. Por exemplo, eu preciso ter uma versão específica do PHP construída a partir de fontes com opções otimizadas, nginx, servidor Percona e assim por diante. Atualmente para cada novo servidor eu estou fazendo manualmente o que é realmente chato.

Estou começando a pensar em como automatizar esse processo. Claro, existem soluções como Chef, Puppet, cfengine, mas todas elas parecem muito complicadas e frágeis para mim. Eu preciso de algo realmente simples e comprovado. Como estou usando servidores baseados em Debian, estou pensando em empacotar todo o software necessário em um arquivo .deb. Dessa forma, tudo o que preciso fazer é instalá-lo e exigir todas as dependências, arquivos de configuração, executar ganchos pós-instalação e assim por diante.

O que você acha disso? É uma boa ideia?

    
por pachanga 29.04.2011 / 07:19

1 resposta

1

( Link obrigatório para onde eu escrevi minhas experiências )

Se fosse eu, dividiria as tarefas e permitiria que diferentes ferramentas lidassem com cada etapa:

  • Debian-installer com preseed para obter os discos formatados, o sistema operacional carregado e algum tipo de software de gerenciamento de configuração instalado.
  • Deixe que o software de gerenciamento de configurações cuide do restante das instalações e configurações do pacote.
  • Verifique se você tem versões .deb de qualquer software personalizado que deseja instalar, coloque-os em um site da web acessível, ftp ou ssh , e instale-os através do software de gerenciamento de configuração.
Honestamente, eu repensaria sua posição no Puppet (e talvez no Chef, mas eu não recomendaria o cfengine - eu olhei para ele em 2007 porque achei que seria mais fácil rodar no Solaris. Mas assim que Eu vi que o Puppet era relativamente fácil de configurar, joguei o cfengine de lado).

Você não precisa entregar tudo ao software de gerenciamento de configuração, apenas o que faz sentido.

  • Se tudo que você quer que o Puppet faça é manter um arquivo de configuração do Apache em sincronia de uma cópia mestre e reiniciar o processo do httpd sempre que você fizer uma nova versão, ele fará isso.
  • Se você quiser garantir que todos os servidores em uma determinada classe tenham um determinado conjunto de pacotes instalados e conseguir alterar esse conjunto em um único local e que todos esses servidores instalem os pacotes adicionados à lista, ele será faça isso também.

Se você quisesse otimizar a dor inicial,

  • Crie pacotes individuais para PHP, nginx, etc. e coloque-os em um repositório .deb. Não vejo nenhum motivo para fazer um pacote gigante.
  • Use o Debian-installer com preseed para instalar o SO base mais seus pacotes customizados no momento da instalação.

Para criar seus próprios arquivos deb , existem pelo menos duas opções. Ambos requerem entradas deb-src apropriadas em /etc/apt/sources.list:

  1. Pegue a versão atual do pacote do seu release, modifique seu procedimento de construção e, em seguida, reconstrua.
  2. Pegue a versão atual do testing ou unstable, opcionalmente modifique seu procedimento de construção e, em seguida, reconstrua.

Para a opção 1, você deve ser capaz de fazer apt-get build-dep somepackage; apt-get source somepackage para obter as dependências e origens de compilação para qualquer pacote em sua versão atual. Vá até a pasta de origem do pacote e edite debian/rules com suas alterações de configuração. Edite debian/changelog para aumentar o número da versão e adicione suas anotações. Em seguida, execute dpkg-buildpackage para criar os novos binários e fontes.

Para a opção 2, é basicamente o mesmo procedimento, exceto que as dependências de compilação podem ser mais complicadas de serem satisfeitas. O teste ou instável pode ter uma versão mais recente do Boost, glibc ou o que for. Às vezes, um pacote dependerá das versões mais recentes que você não possui. Às vezes, você pode remover o requisito de número de versão de debian/control e criar sem problemas. Se isso não funcionar, então você tem que recursivamente transferir as dependências de compilação para o seu release.

Existe também uma chance de que seu pacote já esteja no repositório de backports do Debian, neste caso, você obtém uma versão mais recente de um pacote pronto para instalar (ou modificar e reconstruir) em sua versão atual. Por exemplo, Debian lenny tem nginx 0.6.32, mas lenny-backports tem 0.7.67. Squeeze tem 0.7.67, mas não existe nenhum nginx para squeeze-backports.

    
por 29.04.2011 / 15:09

Tags