Как я могу упаковать зависимости моего приложения Perl для развертывания?

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

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

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

3 ответа

Решение

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

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

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


Второй ответ

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

apt-get update
apt-get upgrade

на клиентских машинах, если они имеют собственный репо в качестве источника

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

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

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

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

Другие вопросы по тегам