Назад | Перейти на главную страницу

Создание сценария для автоматической установки Perl-приложения и его зависимостей

У меня есть приложение Perl, которое требует множества зависимостей, которые мне нужно развернуть на множестве серверов.

Я хотел бы создать сценарий, который установит это приложение Perl автоматически и быстро.

Чтобы быть быстрее, я хочу установить большинство своих зависимостей с помощью диспетчера пакетов вместо их установки с помощью CPAN.

Есть ли способ автоматически определить из списка модулей perl, есть ли для него пакет debian? А если он есть, установить пакет, а если не установить модуль Perl из CPAN?

Хм, один из способов - это написать оболочку вокруг системного менеджера пакетов, то есть apt-get, и если пакеты не возвращены, установите с помощью cpan, cpanm и т. Д.

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($_);
}

Конечно, при таком подходе вам придется учитывать регистр (или изменить регистр), поскольку я считаю, что debian использует формат lib (package-name) -perl во всех нижних регистрах, а cpan потребуется другой формат и т. Д. плюс этот код не протестирован и что-то, что просто скинули вместе.

Затем есть старый добрый сценарий bash, черт возьми, я использовал системные команды в этом примере

Мое лучшее предложение - изучить возможность использования чего-то вроде cfengine или puppet и / или чего-то еще, что, я уверен, существует для управления конфигурацией системы. Затем используйте svn или git или около того ... чтобы внести изменения в репозиторий, который будет развернут на всех ваших серверах. Если вы собираетесь управлять «многочисленными» серверами и вносить в них изменения, то после настройки cfengine / puppet / etc значительно упростит вам жизнь. только мои двое.

Могу я предложить использовать перлбрю. В общем, за прошедшие годы я обнаружил, что если у вас есть приложение, которое зависит от конкретного интерпретатора: Ruby, Perl, Python и т. Д., Обычно лучше установить отдельную установку интерпретатора для вашего приложения, чем полагаться на те, которые включены в конкретный дистрибутив.

Perlbrew поддерживает полную установку Perl в вашем $HOME каталог. На самом деле вы можете иметь множественный версии Perl вместе с его библиотеки чтобы вы могли провести тестирование, перед вы полностью переходите с одной версии на другую. Поступая таким образом, ваше приложение полностью отделено от обновлений, которые могут произойти при использовании версии Perl в вашем дистрибутиве.

Выдержка с веб-страницы Perlbrew:

perlbrew - это инструмент для управления несколькими установками perl в вашем каталоге $ HOME. Это полностью изолированные вселенные Perl. У этого подхода много преимуществ:

  • Больше не нужно запускать sudo для установки модулей CPAN.
  • Попробуйте ежемесячно выпускаемые новые перлы.
  • Изучите новые языковые функции.
  • Протестируйте свой производственный код на соответствие различным версиям Perl.
  • Оставьте Perl поставщика (тот, который поставляется с ОС) в покое.

Установка очень проста

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

использование

# 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

Ресурсы

Мое предложение:

  • Сначала взгляните на .bash_history на целевой уже установлен, есть большая вероятность, что вы найдете много уже написанных строк, готовых к использованию, вашего скрипт для автоматической установки Perl-приложения и его зависимостей

    Чем вы можете установить одну цель, используя только один терминал (старайтесь не использовать другой сеанс для той же цели, чтобы гарантировать, что все действия будут правильно регистрироваться), и использование script команда.

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

    Старайтесь не использовать интерактивные команды или записывать каждое действие в другой текстовый файл на своем столе.

    Оттуда вы должны иметь возможность точно проследить весь процесс.

    scriptreplay install-perl.t install-perl

    и для создания сценария оболочки, даже путем фильтрации файла результатов install-perl или просто цель .bash_history.

  • Промежуточный способ Делать один правильная установка, чем копировать их с помощью tar. Иногда проще действовать, чтобы все не упакован debian добавляет в /usr/local.

    Или еще проще, имея /usr/local на отдельном разделе общий и смонтированный в только чтение режим по всем целям.

  • Наконец, подробнее Debian: Из этой правильной установки (можно назвать мастер), создайте пакет debian, установите их в собственном корпоративном репозитории (простой каталог на каком-то внутреннем веб-сервере или ftp-сервере, содержащий точную структуру каталогов и открытый ключ, который вам нужно сделать.). Ссылайтесь на этот репозиторий в своих целях и правильно поддерживайте своего мастера.

    Замечание: В идеале вам нужно создать один пакет для каждой библиотеки Perl, которую вы используете (или по одному для каждой группы библиотек), но это может привести к дополнительной работе и в действительности не требуется, если вы не хотите делиться или участвовать в разработке пакетов Debian.

Примечание: Это последнее решение выглядит немного излишним (подразумевает некоторое обучение для обслуживающего персонала), но в порядке:

  1. это должно быть изучено только один раз и очень быстро после второго, может быть, третьего обновления.
  2. это наиболее эффективное и масштабируемое решение.
  3. это должно быть сделано на уже существующей работе, не беспокоясь снова.
  4. если все сделано правильно, оно может существовать дольше, чем оборудование, для которого все это сделано.