2016-03-10 2 views
2

Команда Perl cpan - это мощный способ управления модулями Perl. Тем не менее, при обслуживании модулей по всей системе под UNIX Michal Ingeli отмечает, что другой возможной опцией является yum install 'perl(PerlModuleName)'. Если это возможно, должен ли я быть первым в этом случае?Yum/apt-get перед cpan для управления UNIX общесистемными модулями Perl?

Например, команда cpanm CGI устанавливает модуль CGI в моем каталоге ~/perl5, что может быть лучше, если CGI-модуль необходим только для скриптов, выполняемых под моей учетной записью. Но это не даст модулю CGI скриптам, выполняемым другими учетными записями.

я могу использовать cpanm -l <directory>, чтобы заставить команду cpanm загрузить модули в определенный каталог (например, cpanm -l /usr/local CGI установить CGI в/USR/местные/Библиотека/perl5), или я могу редактировать ~/cpan/CPAN/MyConfig.pm изменить установки по умолчанию местоположение cpan использует.

Но почти во всех системах существует несколько расположений системной библиотеки Perl (/ usr/local/share/perl5,/usr/share/perl5/vendor_perl,/usr/lib64/perl5 и т. Д.) И выбирая правильные один из них несколько произволен, так как они не генерируются командой cpan.

Имея это в виду, следует ли мне обратиться к yum (если имеется) до cpan для общесистемного управления модулем UNIX Perl? Это достаточно легко проверить с помощью команды:

yum install 'perl(LWP::Simple)' 

Если ни не удались в этом случае, я бы упасть обратно:

cpanm -l <directory> LWP::Simple 

Что вы рекомендуете в этом типе случая, и почему?

(Обратите внимание, что nxadm ответил на более общий вопрос об этом.)


Суммируя ответы до сих пор:

  • Если это вообще возможно, использовать менеджер системы пакетов обновления CPAN. Например, для LWP :: Simple:

    • yum install 'perl(LWP::Simple)' или

    • apt-get install liblwp-simple-perl

  • Если предыдущий не удается, попробуйте реализовать отдельную среду Perl, в котором использовать Модули CPAN не присутствуют в общесистемных библиотеках. Рассмотрение local::lib или Perlbrew для этого;

  • Только если вышеуказанные параметры не применяются, используйте cpanm -l <directory> для загрузки модуля в общесистемный каталог.

+0

Да. В пакетной управляемой системе, если менеджер пакетов предоставляет необходимое вам программное обеспечение, я бы предложил использовать его, прежде чем делать что-либо еще. –

+4

Обычно вам не следует смешивать установки пакетов с установками CPAN. Если вы хотите использовать систему perl, используйте диспетчер пакетов; в противном случае лучше всего установить свой собственный perl и использовать CPAN. – ThisSuitIsBlackNot

+0

То же самое относится к 'dpkg' в системах на базе Debian (например, Ubuntu), хотя схема именования пакетов отличается. Одна из проблем заключается в том, что не все модули CPAN будут доступны в репозитории пакета вашей ОС (поэтому вам нужно «cpanm» в качестве резервной копии). –

ответ

3

Я не могу говорить по опыту с системами RPM/yum, но я много работал с приложениями Perl в системах Debian, и я хочу, чтобы вы рекомендовали использовать системные версии модулей CPAN, если вы можете , Я знаю, что многие люди не согласны, и исторически у них может быть веская причина, но я делаю это в течение долгого времени и считаю, что это работает очень хорошо.

В мире Debian существует огромное количество модулей Perl в предварительно упакованной форме, и если вам понадобится тот, который не упакован, вы можете создать свой собственный пакет с помощью dh-make-perl и поместить его в локальный репозиторий apt. Возможность запускать apt-get install your-application и затягивать все необходимые зависимости - это экономия в режиме реального времени, когда ваш код перемещается через Dev -> Staging/UAT -> Производственные рабочие процессы. Это также дает вам уверенность в том, что версия определенного модуля, который вы развертываете для производства, такая же, как версия, которую вы тестировали в UAT.

Одно, что вам абсолютно не нужно делать, это использовать cpanm или оболочку cpan как root для установки модулей в системные каталоги. Если вы решите установить прямо из CPAN, используйте local::lib для установки модулей в каталоге приложений, предназначенном для приложения.

[Редактировать] Некоторые примеры команд в соответствии с просьбой:

В системе Debian на базе, вы бы сначала установить DH-сделать жемчужно инструмент:

sudo apt-get-install dh-make-perl 

Затем, чтобы загрузить пакет из CPAN и построить его в файл .deb вы бы выполнить команду, как этот *:

dh-make-perl --build --cpan Algorithm::CouponCode 

вы можете установить полученный .deb файл с:

sudo dpkg -i libalgorithm-couponcode-perl_1.005-1_all.deb 

Управление собственным хранилищем APT - это целая другая тема. В моем случае я скопировал .deb в соответствующий каталог на локальном apt-сервере и запустил скрипт для обновления индекса (я думаю, наш скрипт использует dpkg-scanpackages).

Примечание в моем первом абзаце выше Я рекомендую использовать системные пакеты «если можно». Чтобы быть ясным, я имел в виду, что большинство модулей, которые вы хотите, уже упакованы Debain. В приведенном выше примере не были созданы пакеты для любых зависимостей. Если ваше приложение включает в себя установку модулей с длинными цепочками зависимостей, которые уже не находятся в Debian, то использование cpanm и local :: lib упростит установку. Но тогда вы несете ответственность за повторение этого, поскольку ваш код продвигается через постановку на производственные серверы. И вам может понадобиться использовать cpanfile или carton, чтобы убедиться, что вы получаете одинаковые версии на каждом шагу.

* один глюк: если ранее вы создали локальную :: LIB, так что CPAN INSTALLs перейти в отдельный каталог (например:/Главная/пользователь/perl5), то, что будет влиять на имена, используемые в .deb производимого dh-make-perl ,Чтобы избежать этого, запустите его до dh-make-perl:

unset PERL5LIB PERL_LOCAL_LIB_ROOT PERL_MB_OPT PERL_MM_OPT 
+0

Грант, чтобы уточнить, чтобы установить общесистемный модуль CPAN, не найденный 'apt-get', вы рекомендуете загружать и создавать свои собственные и добавлять их в локальный репозиторий а не полагаться на 'cpanm', чтобы найти и установить его? Кроме того, не могли бы вы привести пример команды (ов), которую вы используете для этого в Debian? –

+0

Добавлены примеры. –

0

Ваш системный perl был помещен туда для использования вашей системой.Люди, которые поддерживают ваш дистрибутив, будут обновлять его, когда они сочтут нужным другую версию, которая соответствует потребностям вашей системы. Использование диспетчера пакетов вашей системы для управления им - это ваша лучшая идея.

Не стесняйтесь использовать его, но если вам нужна другая версия, по какой-либо причине, вы лучше всего переходите в отдельное место. При сохранении собственной установки perl используйте CPAN.

+0

Я не совсем согласен с * «поставьте туда для использования вашей системы» *. Да, система использует модули Perl и Perl, но в конечном итоге все эти пакеты становятся доступными для всех пользователей. Я согласен с тем, что вам не следует связываться с файлами, предоставляемыми пакетами распространения. –

+0

@GrantMcLean «доступно для всех пользователей» Пока мы готовы использовать устаревшую версию perl, которая поставляется с дистрибутивом, конечно! Обновление его на месте опасно. Это оставляет возможность локально установленного «производственного» perl. Возможно, я просто управляющий freak ... – tjd

Смежные вопросы