Подтвердить что ты не робот

Установка модулей Perl с большим количеством зависимостей на машине без доступа к сети CPAN

Я пытаюсь установить машину DateTime на сервере Linux. К сожалению, этот Linux-сервер имеет некоторую ограниченную политику доступа к сети, которая запрещает мне использовать оболочку CPAN непосредственно для загрузки контента или установки cpanminus. Изменение политики доступа вне моего контроля, поэтому я ищу обходной путь. У меня также нет корневого доступа к этому серверу Linux.

Я могу, однако, загрузить что-нибудь на свою работу Window machine и загрузить в общий доступ к файлу на этом сервере. Поэтому я начал сбрасывать зависимости DateTime один за другим. Я бы загрузил модуль, когда-нибудь у него будет Makefile.PL, иногда он будет иметь Build.PL. Затем я переустанавливаю каждую сборку или файл Makefile на мой INSTALL_BASE, проверяя каждый модуль. Я сделал это примерно для 20 модулей, и деревья, кажется, расширяются до все меньших классов, без конца... [/p >

Надеюсь, ты сможешь сказать мне лучший способ. Есть ли способ, с помощью которого я могу инициировать загрузку с компьютера с доступом CPAN (то есть с моим ящиком Windows) всех зависимостей DateTime в один гигантский пакет Perl, загрузить его на сервер Linux и запустить там CPAN (без доступа к сети) до положить вещи в нужное место? Спасибо.

4b9b3361

Ответ 1

Наиболее эффективным способом является создание minicpan, установка cpanm на машине linux и псевдоним localcpanm примерно так:

alias localcpanm='cpanm --mirror file:///Users/Shared/cpan/ --mirror-only'

Я использовал эту технику на длинных поездках на поезде с патчам доступа к сети с большим успехом.

Ответ 2

Первым шагом является автоматическая загрузка всех зависимостей. Вы можете использовать cpanm для этого на подключенном к сети компьютере:

cpanm -L /dev/null --save-dists dists --scandeps DateTime

Это создает список зависимостей, но, что более важно, загружает их в каталог dists. -L /dev/null гарантирует, что он не обратит внимание на уже установленные модули.

Скопируйте dists так же, как в свой ограниченный блок.

Затем используйте cpanm в ограниченном поле для выполнения локальной установки:

cpanm --mirror file:///path/to/dists -L foo DateTime

где /path/to/dists - абсолютный путь к каталогу dists. Это приведет к установке вещей в каталог foo.

Ответ 3

Есть несколько решений для этой проблемы, например, Carton, который похож на ruby ​​bundler, или Pinto, целью которого является ваш собственный CPAN (как я понимаю).

Ответ 4

Одним из решений, которое я использую на работе, является наличие сервера разработки с perlbrew, одного модуля Perl + и приложения для каждого приложения и всего этого в репозитории git. На производственных машинах доступ к репозиторию git - это все, что необходимо для развертывания приложения и переключения между версиями с использованием тегов.