2015-01-09 4 views
3

Я работаю над приложением Perl, предназначенным для развертывания с использованием Module::Build. Мне нужно установить несколько модулей через CPAN, потому что они недоступны через диспетчер пакетов Ubuntu - или, вернее, внутреннее зеркало apt-get, используемое всеми нашими серверами. Хотя на нашем сервере разработки все это хорошо и хорошо, ИТ (по понятным причинам) неохотно запускает код на производственных машинах, которые не кэшируются или не контролируются иным образом внутри компании.Как я могу упаковать свои зависимости приложения Perl для развертывания?

Поскольку в настоящее время у нас нет зеркала CPAN, это в основном означает, что мне нужно получить все эти модули, отличные от Ubuntu, в одном месте, чтобы они могли быть заархивированы и/или закреплены за контролем версий. Идеальным решением было бы проверить утилиту вне контроля источника, изменить пару конфигурационных переменных для баз данных и, возможно, запустить команду сборки/установки и сделать это. К счастью, сервер разработки - это клон производственного сервера, поэтому модули, использующие XS или другие специфичные для архитектуры функции, не должны вызывать проблемы.

Я думаю, что самый чистый способ справиться с этим будет проверять исходные файлы для модулей, которые мне нужны, и устанавливать Module::Build, чтобы использовать их для разрешения своих зависимостей вместо поиска CPAN, но я не вижу возможности для этого. Является ли это чем-то выполнимым или существует другой способ объединить все модули, которые мне нужны для развертывания по существу в автономном режиме?

+0

Вы посмотрели [App :: FatPacker ] (https://metacpan.org/pod/App::FatPacker)? –

+0

Модуль :: Build не (последний раз проверял) самостоятельно определяет зависимости, он просто сообщает cpan (или cpanplus или cpanm), каковы они. и cpan может использовать файл url для поиска модулей. но подумайте о том, чтобы использовать что-то вроде Pinto. – ysth

ответ

3

Как уже упоминалось в комментариях выше, Pinto может удовлетворить ваши потребности, поскольку он создает ваше собственное CPAN-репо.

У Пинто есть два основных шага. Во-первых, Пинто стремится решить проблему нестабильности в зеркалах CPAN . Архивы распространения: постоянно добавляются и удаляются из CPAN, поэтому, если вы используете его для построения системы или приложения, вы можете не получить тот же результат дважды. Во-вторых, Пинто стремится поощрять разработчиков использовать инструментальную привязку CPAN для создания, тестирования и управления зависимостями своего собственного локального программного обеспечения , даже если они никогда не планируют выпустить его в CPAN.

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


Второй Ответ

В качестве альтернативы, если вы только собираетесь развернуть на Ubuntu, вы можете включить модули CPAN - и свои собственные в пакеты Debian с dh-make-perl. Затем вы можете разместить их в своем собственном репо с reprepro. Красота этого является то, что вы можете обновить пакеты и сделать

apt-get update 
apt-get upgrade 

на клиентских машинах, так долго, как у них есть свой собственный репозиторий в качестве источника

0

Я не уверен, как часто это, но я использую perlbrew и Pinto вместе, чтобы решить некоторые из проблем, вы говорите.

  1. С perlbrew я не взаимодействую с «системным» perl. Существует приложение perl и система perl, и нет никакого риска для меня устанавливать более позднюю версию модуля, которая каким-то образом мешает чему-то, что делал система perl.

  2. С Pinto у меня есть архивные версии модулей CPAN, которые, как я знаю, будут работать.

Когда я раскрываю, я строю perlbrew Perl (с псевдонимом, как «прод» или что-то), а затем установить все необходимые модули в этой perlbrew Perl, используя репозиторий Пинто. В настоящее время я облегчаю это с помощью модуля пакета cpan (этот модуль также входит в репозиторий Pinto), поэтому вы можете просто установить пакет из репозитория, и он автоматически устанавливает все ваши зависимости.