Как установить модули Perl на машины без подключения к Интернету?

Мне нужно установить программное обеспечение на основе Perl на сетевых машинах, которые не подключены к Интернету. Поэтому я хотел бы загрузить определенные версии и / или последние версии модулей Perl, и я также хотел бы знать, требуется ли процедура установки для этих модулей.

Справочная информация:
Машины не подключены к Интернету по соображениям безопасности, а также по соображениям безопасности.

Я бы поместил загруженные модули на машину, которую я называю «сервером установки», и она содержит мое программное обеспечение на основе Perl, а также будет содержать локальные копии модулей Perl.

Я называю машину, на которую хочу установить программное обеспечение на основе Perl, «целевой машиной», также не подключенной к Интернету. Целевых машин может быть несколько, на каждой из которых можно запустить это программное обеспечение, которое я хочу установить. Я вхожу на целевую машину и запускаю сценарий установки, который подключается к установочной машине через локальную сеть, чтобы получить программное обеспечение на основе Perl и зависимые модули Perl и установить их.

Итак, мне нужно знать:

  1. Как / Где получить определенные версии модулей Perl, например CGI.pm и т. Д.
  2. Как установить эти модули Perl. Это случай просто разместить их где-нибудь в каталоге, например. путь к библиотеке и убедитесь, что этот путь к каталогу находится в переменной окружения пути к библиотеке @INC, если это еще не сделано?

Я бы предпочел не делать ничего вроде make install и т. Д. Как часть установки модулей. Я хотел бы, чтобы модули были предварительно скомпилированы или подготовлены по мере необходимости, чтобы их было как можно проще установить. Я хочу избежать дополнительных зависимостей, таких как make и его конфигурация, и необходимости анализировать его вывод, чтобы проверить, успешно ли он был.

Пожалуйста, помогите мне, задав указанные выше конкретные вопросы, поскольку я не могу изменить концепцию «установочная машина» и «целевая машина», которые не подключены к Интернету - я должен предоставить решение, которое работает в рамках этой договоренности.


person therobyouknow    schedule 09.12.2009    source источник


Ответы (3)


Обычный способ решить проблему типа «Я хочу установить что-то из CPAN, но без сети» - это использовать мини-панель, как написал Дэвид Дорвард в своем ответе. Но поскольку вы делаете еще один шаг вперед, говоря, что вы не хотели бы вообще выполнять реальную установку на клиентских (целевых) машинах и что вы хотите использовать предварительно скомпилированные модули, если это возможно, я настоятельно рекомендую вам проверить PAR и, в частности, PAR :: Репозиторий (сервер) и PAR :: Репозиторий :: Клиент.

Поскольку этот подход требует некоторого исследования, прежде чем вы начнете работать, я бы не предлагал его для таких проблем, как «Мне просто нужен Foo.pm». Если вы говорите о нескольких зависимостях и, по крайней мере, о нескольких клиентах, это становится более подходящим решением.

Чтобы получить представление о том, как это работает, посмотрите слайды моего выступления на YAPC :: EU 2008. Это также намекает на решения проблемы начальной загрузки, когда модуль PAR :: Repository :: Client доступен на клиентах (подсказка: PAR может генерировать автономные исполняемые файлы).

person tsee    schedule 09.12.2009
comment
Спасибо за этот ответ. Локальное зеркало CPAN, вероятно, не является для меня правильным решением на данном этапе, поскольку у меня есть довольно небольшой список конкретных модулей, которые я хочу получить для удовлетворения зависимостей моей программы. Кроме того, я не являюсь «владельцем» машины, на которой будет располагаться локальный CPAN, и поэтому мне могут быть ограничены доступное пространство или установка того, что мне не нужно. То, что это решение PAR является модулем, может показаться представителем ситуации «курица-яйцо»; Я надеюсь, что сам модуль PAR будет легко получить, установить и запустить для решения моей проблемы. - person therobyouknow; 09.12.2009
comment
Так что спасибо за предложение - PAR - альтернативы локальному зеркалу CPAN. Я прочитаю это. - person therobyouknow; 09.12.2009
comment
Роб: Вы можете использовать PAR (:: Packer) для создания автономных двоичных исполняемых файлов. - person tsee; 09.12.2009
comment
Я принял этот ответ, потому что он охватывает все возможные решения с комментариями к каждому. PAR звучит ближе всего к моим потребностям, поскольку я хотел бы упростить автоматизацию установки модулей Perl на нескольких машинах. Поскольку у меня есть ограниченное количество поддерживаемых дистрибутивов Linux (например, Debian 5 x86 и Mandriva x86) и тот факт, что я хочу стандартизировать версии используемых модулей, я могу настроить установочный локальный сервер с предварительно скомпилированными модулями для их обслуживания. - person therobyouknow; 22.12.2009

Вы можете создать MiniCPAN, в котором есть только последние версии всего с CPAN. Вы можете вставить в него дополнительные закрытые модули с помощью CPAN :: Mini :: Inject . Если вам нужно больше контролировать версии (т. Е. Не выбирать последние версии), вы можете создать DPAN.

С помощью любого из этих решений вы можете настроить свой клиент CPAN для работы с локальным источником. Это может быть каталог, который вы знаете заранее, или что-то, что вы определяете динамически, например, компакт-диск или флэш-накопитель. Дело просто в правильной настройке конфигурации.

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

person brian d foy    schedule 09.12.2009

1) Как / где получить определенные версии модулей Perl, например CGI.pm и т. Д.

http://search.cpan.org/

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

http://img.skitch.com/20091209-bu7kt3bj65374k7iijfnhrue2y.png

2) Как установить эти модули Perl. Это случай просто разместить их где-нибудь в каталоге, например. путь к библиотеке и убедитесь, что этот путь к каталогу находится в переменной окружения пути к библиотеке @INC, если это еще не сделано?

Это иногда срабатывает, но вам действительно следует пройти perl Makefile.PL && make && make test && make install процесс.

Однако для этого потребуется вручную отследить все зависимости. Вам, вероятно, будет лучше использовать что-то вроде minicpan.

person Quentin    schedule 09.12.2009
comment
В своем ответе вы должны выделить мини-пан. Это ПРАВИЛЬНОЕ решение этой проблемы. - person tsee; 09.12.2009
comment
@David Dorward - спасибо, что ответил так скоро после того, как я разместил вопрос. Как упоминалось в исходном вопросе, я хотел избежать make install и т. Д., Потому что это добавляет сложности, поскольку мне придется вручную находить зависимости, мне нужно будет убедиться, что make присутствует и работает правильно. Я бы с радостью следил за этим процессом, если бы существовала последовательная и надежная автоматизированная система, которая четко обрабатывала бы все результаты создания. - person therobyouknow; 09.12.2009
comment
Было бы неискренне называть Perl переносимым интерпретируемым языком, если необходимо использовать make для предоставления предварительно скомпилированных модулей для удовлетворения зависимостей программы. Прочитав дальше, я понял, что возможно, что модули могут содержать код C, чтобы можно было объяснить, почему необходим make. Это позор, потому что он добавляет дополнительные шаги для точного определения процедур управления конфигурацией и установки. - person therobyouknow; 09.12.2009
comment
Я надеялся, что смогу просто получить необходимые модули в виде текстовых файлов кода Perl и поместить их в каталог, о котором знает @INC, и тогда моя программа будет успешно работать. К сожалению, это не кажется таким простым (не так ли?), Но ответ @ tsee ниже с модулем PAR может быть решением, которое лучше всего подходит для моей ситуации. - person therobyouknow; 09.12.2009
comment
Роб: Для многих простых модулей копирование файлов .pm в соответствующий подкаталог каталога в @INC действительно работает. Но такой подход чреват опасностями. - person tsee; 09.12.2009
comment
@Rob: Perl портативен, но это не мешает людям создавать с его помощью непереносимые вещи. CPAN - это просто сторонний код. - person brian d foy; 09.12.2009
comment
Близкие. Спасибо за ваши дальнейшие комментарии. @tsee: для многих простых модулей копирование файлов .pm в соответствующий подкаталог каталога в @INC действительно работает. Но такой подход чреват опасностью, я принимаю это, но в качестве улучшения сторонних библиотек было бы бесполезно иметь флаг в заголовке, своего рода инструкцию прагмы, подтверждающую, что модуль является чистым Perl - не зависит от не- Языки Perl, двоичные файлы или компиляция. модули, которые являются зависят от языка make или не-Perl для успешного запуска и установки, возможно, эти шаги могут быть встроены в сам модуль. - person therobyouknow; 10.12.2009
comment
@brian d foy: Perl портативен, но это не мешает людям создавать с его помощью непереносимые вещи. CPAN - это просто сторонний код. Эти непереносимые вещи могут усложнить управление конфигурацией и установку, поскольку не может быть единого общего способа работы со всеми непереносимыми компонентами, от которых зависит конкретный модуль. Каждый модуль необходимо рассматривать в индивидуальном порядке. - person therobyouknow; 10.12.2009
comment
Я не знаю, насколько велика проблема модулей Perl, зависящих от непереносимого кода: я хотел бы думать, что это было только для необходимых вещей - таких как драйверы устройств для конкретных платформ низкого уровня и, возможно, оптимизация производительности. Но последний должен быть ядром языка, поскольку он очень мощный, например, хеши. Каким бы большим ни был объем модулей Perl, требующих установки процесса make, этого достаточно, чтобы я включил его в составление последовательного, повторяемого и надежного процесса установки, а также попытался максимально автоматизировать этот процесс. Нетривиальная задача! - person therobyouknow; 10.12.2009
comment
Я хотел бы рассмотреть все ваши комментарии и попытаться опубликовать здесь окончательный ответ по поводу получения и установки сторонних модулей. Ответ надежный, повторяемый и последовательный. - person therobyouknow; 10.12.2009