Instalando e mantendo software em vários servidores Linux [duplicado]

4

Eu tenho uma pergunta geral, e espero que este seja o lugar certo para perguntar.

Atualmente temos 11 (9 Red Hat / 2 Centos) servidores, que foram comprados em diferentes momentos nos últimos 5 anos, e embora todos eles tenham Linux OS, existem diferenças de hardware entre eles, simplesmente porque eles foram comprados em momentos diferentes. No entanto, precisamos de um conjunto básico de software de bioinformática instalado em todas as máquinas para permitir que os usuários tenham o mesmo ambiente. No passado, usamos uma unidade montada compartilhada, mas encontramos problemas quando o software não funciona em uma determinada máquina, porque nem todas as bibliotecas necessárias foram instaladas, etc.

Para encurtar a história, estou procurando dicas e conselhos sobre a melhor abordagem para esse problema. Você acha que trabalhar em um problema de unidade compartilhada e solução de problemas conforme eles ocorrem é o melhor caminho ou há um método aprimorado que eu não conheço (software / teórico). Em última análise, sinto que tentar manter cada máquina independentemente tem que ser o método mais doloroso.

    
por user1585477 10.03.2013 / 05:41

3 respostas

8

Eu não acho que eles sejam "uma melhor abordagem", mas uma solução muito elogiada é usar Puppet ou software similar (Chef, CFEngine).

Na minha experiência, é muito trabalhoso criar, mas útil em um ambiente onde você tem muitos sistemas similares. Dito isso, achei a solução complicada e um pouco trabalhosa.

Talvez "melhor" caminho a percorrer - e eu uso uma solução híbrida para uma organização para a qual trabalho - e além de usar o Puppet para "gerenciar minimamente" partes-chave do sistema, também implementei uma inicialização PXE sistema, o que significa que é muito fácil recriar a imagem dos sistemas, para que todos tenham a mesma "configuração de base" sem qualquer trabalho manual.

Outra técnica no meu arsenal é ter uma "máquina mestra" que pode executar o SSH em todas as outras e executar o mesmo trabalho em todas elas com um único comando. (Nós temos um script que pega o comando inteiro que queremos executar como parâmetro e o executa sobre o SSH em todas as máquinas).

    
por 10.03.2013 / 06:25
0

Além das sugestões do @ davidgo:

Eu costumava usar o cluster ssh ( cssh ) para lidar com sshing em várias máquinas de uma só vez. Ele mostra várias janelas do xterm e irá multiplicar seus comandos para as diferentes sessões, e você pode selecionar janelas individuais para manipular diferentes máquinas individualmente. Essa abordagem funcionou, mas foi um pouco doloroso.

Desde então, comecei a usar o apt-dater . Isso executa subprocessos que ssh nas máquinas de destino e executa os comandos de atualização apropriados (suporta apt, rug e yum). Ele também permitirá que você selecione novos pacotes para instalação. Apesar de ser chamado de apt-dater, ele suporta yum, então deve funcionar com sistemas CentOS / RHEL.

    
por 10.03.2013 / 22:07
0

Para garantir que as bibliotecas necessárias estejam presentes, use um sistema de compilação para empacotar o software (por exemplo, como rpm). O pacote deve conter informações sobre os requisitos (incluindo versões) e pode ser instalado por meio de um comando simples (yum no caso em questão), possivelmente por meio de um shell paralelo ou de uma ferramenta como Puppet ou CFengine. Para o software Open Source, você pode usar o Open Build Service ( link ; apesar do URL, ele também faz RH e Debian). O próprio OBS é o Open Source, portanto você pode até executá-lo em seu site (mas a configuração pode ser complexa - nunca tentei).

O princípio básico é escrever um arquivo de especificação de RPM que contenha uma receita geral para construir o software. Se o software trouxer um sistema de criação decente (por exemplo, autotools), o arquivo de especificações consiste principalmente em uma lista de bibliotecas necessárias (geralmente sem números de versão ou apenas com requisitos mínimos) e uma chamada ao sistema de criação do software. No caso de autotools, isso seria configurado (com opções para habilitar a funcionalidade desejada) / make / make install. Uma lista de arquivos também é necessária, mas isso pode ser mantido curto usando shell globs.

O sistema de compilação irá então instalar os pacotes necessários (digamos, libfoo-devel) e todas as suas dependências, executar a receita e criar um pacote rpm das suas listas de arquivos. As bibliotecas compartilhadas às quais o software de pacotes se vincula serão detectadas automaticamente e um requisito correspondente será inserido no rpm. Ao instalar, o yum usará esses requisitos para adicionar as bibliotecas quando você instalar o software. Um sistema de compilação adequado pode também executar muitas verificações em pacotes construídos, e. procure por avisos sérios sobre o compilador, violações da hierarquia de arquivos, permissões de arquivos suspeitos, etc.

Escrever um arquivo de especificação que será construído sem modificações em várias versões de uma distribuição (ou distribuições relacionadas, como RH e Fedora) é normalmente um pequeno trabalho extra. Com um pouco mais de trabalho, até mesmo especificações de distribuição cruzada (por exemplo, Opensuse / Fedora) podem ser feitas.

    
por 10.03.2013 / 23:20

Tags