У меня есть приложение 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.
Примечание: Это последнее решение выглядит немного излишним (подразумевает некоторое обучение для обслуживающего персонала), но в порядке: