Установка модулей 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 (без доступа к сети) до положить вещи в нужное место? Спасибо.
Ответы
Ответ 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 - это все, что необходимо для развертывания приложения и переключения между версиями с использованием тегов.