Criando um script para instalar um aplicativo Perl e suas dependências automaticamente

7

Eu tenho um aplicativo Perl que precisa de muitas dependências que eu preciso implantar em vários servidores

Eu gostaria de criar um script que instalasse o aplicativo Perl de maneira automática e rápida.

Para ser mais rápido, quero instalar a maioria das minhas dependências usando meu gerenciador de pacotes em vez de instalá-las com o CPAN

Existe uma maneira de determinar automaticamente a partir de uma lista de módulos perl se houver um pacote debian para ele? E se houver um, instale o pacote, se não instalar o módulo Perl do CPAN?

    
por Vincent Membré 02.01.2013 / 17:31

3 respostas

2

Hmm, Uma maneira seria olhar para escrever um wrapper em torno do gerenciador de pacotes de sistemas, ou seja, apt-get, e se os pacotes não retornarem, instale com cpan, cpanm, etc.

sub check_pre_req_package {
  my $package = shift;
  system("dpkg -s $package > /dev/null 2>&1");
  if ( $? != 0 ) {
    system("apt-get -y install $package > /dev/null 2>&1");
      if ( $? != 0 ) {
        system("cpanm $package");
      }
  }
  elsif ($? == 0) {
    print "Package $package is already installed \n";
  }
}

my @pre_req_packages = qw(strace nmap gcc);

foreach(@pre_req_packages) {
  check_pre_req_package($_);
}

Claro que com isso você teria que fazer distinção entre maiúsculas e minúsculas (ou mudar o caso) pois acredito que o debian usa um formato lib (package-name) -perl em todas as letras minúsculas e o cpan vai querer um formato diferente , etc, mais esse código não foi testado e algo que acabou de ser colocado juntos.

Depois, há um bom script bash, como eu usei comandos do sistema neste exemplo

Minha melhor sugestão é que você olhe para o uso de algo como cfengine ou fantoche e / ou algum outro que eu tenho certeza que está lá fora, gerenciamento de configuração do sistema. Em seguida, use svn ou git ou ... para fazer alterações no envio para um repositório que será implantado em todos os seus servidores. Se você for gerenciar e fazer as alterações em "numerosos" servidores, então o cfengine / puppet / etc facilitará muito a sua vida depois de configurado. apenas meus dois.

    
por 12.02.2013 / 04:06
0

Minha sugestão:

  • Primeiro, dê uma olhada no .bash_history do alvo já instalado, há uma grande chance de você encontrar muitas linhas já escritas, prontas para usar, do seu script para instalar um aplicativo Perl e suas dependências automaticamente

    Do que você poderia instalar um destino, usando somente um terminal (cuidado para não usar outra sessão no mesmo destino para garantir que todas as ações serão registradas corretamente) e usando o comando script .

    script -t install-perl 2>install-perl.t

    Tente não usar comandos interativos ou registre cada ação em outro arquivo de texto na sua mesa.

    De lá, você deve ser capaz de refazer o processo todo

    scriptreplay install-perl.t install-perl

    e para criar um script de shell, mesmo filtrando o arquivo de resultado install-perl ou simplesmente o .bash_history do destino.

  • Modo intermediário Faça uma instalação correta, em vez de replicá-las usando tar . Às vezes é mais simples agir, pois todas as adições não debian empacotadas estão confinadas em /usr/local .

    Ou ainda mais simples, ter /usr/local na partição separada compartilhada e montada no modo somente leitura em todos os destinos.

  • Final, mais Debian : A partir dessa instalação correta, (pode ser chamado de master ), crie um pacote debian, instale-os no seu próprio repositório corporativo (diretório simples em alguma web interna ou servidor ftp, contendo estrutura de diretório exata e uma chave pública que você precisa fazer). Faça referência a este repositório em seus destinos e mantenha seu mestre corretamente.

    Nota: Idealmente você tem que construir um pacote por biblioteca de perl que você usa (ou um por familly de bibliotecas), mas isso pode gerar algum trabalho extra e não é realmente necessário a menos que você queira compartilhar ou contribuir com os empacotadores do Debian. / p>

Nota: Esta última solução parece um pouco exagerada (implica algum aprendizado para o maintener), mas in fine:

  1. isso para ser aprendido apenas uma vez e é muito rápido após o segundo, talvez o terceiro upgrade.
  2. esta é a solução mais eficiente e escalável.
  3. isso tem que ser feito em um trabalho já existente, sem ter que pensar novamente.
  4. se bem feito, isso pode existir por mais tempo do que o hardware para o qual tudo isso é feito.
por 02.01.2013 / 18:15
0

Poderia sugerir o uso de perlbrew . Em geral, descobri ao longo dos anos que, se você tem um aplicativo que depende de um intérprete específico: Ruby, Perl, Python, etc. Geralmente, é melhor configurar uma instalação dedicada do interpretador para o aplicativo, em vez de confiar em os incluídos em uma determinada distro.

O Perlbrew mantém uma instalação completa do Perl no seu diretório $HOME . Na verdade, você pode ter várias versões do Perl junto com suas bibliotecas para que você possa realizar testes, antes faça o upgrade completo de uma versão para a próxima. Ao fazer isso, seu aplicativo é completamente separado das atualizações que podem ocorrer ao confiar na versão do Perl da sua distribuição.

Trecho da página da web de perlbrew:

perlbrew is a tool to manage multiple perl installations in your $HOME directory. They are completely isolated perl universes. This approach has many benefits:

  • No need to run sudo to install CPAN modules, any more.
  • Try the monthly released new perls.
  • Learn new language features.
  • Test your production code against different perl versions.
  • Leave vendor perl (the one that comes with OS) alone.

A instalação é fácil

curl -kL http://install.perlbrew.pl | bash

Uso

# Pick a preferred CPAN mirror
% perlbrew mirror

# See what is available
% perlbrew available

# See full help
% perlbrew help

# Install some Perls
% perlbrew install 5.14.0
% perlbrew install perl-5.8.1
% perlbrew install perl-5.13.6

# See what were installed
% perlbrew list

# Switch perl in the $PATH
% perlbrew switch perl-5.12.2
% perl -v

# Temporarily use another version only in current shell.
% perlbrew use perl-5.8.1
% perl -v

Recursos

por 12.02.2013 / 05:01