Внутренний CPAN - какой модуль - PullRequest
5 голосов
/ 11 июля 2011

Я хочу настроить собственный CPAN для распространения нашего внутреннего кода.

Поэтому я смотрел на CPAN :: Mini в соответствии с рекомендациями здесь .Но, похоже, есть и другие варианты: CPAN :: Site , CPAN :: Dark , Dist :: Zilla ...

IЯ немного перегружен всеми этими опциями.Что люди чаще всего используют / рекомендуют?

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

Ответы [ 3 ]

5 голосов
/ 11 июля 2011

Быстрый ответ заключается в том, что вы хотите использовать CPAN :: Mini для создания локального зеркала всего, что является текущим на CPAN, а затем CPAN :: Mini :: Inject, чтобы добавить в него собственные дистрибутивы.

Длинный ответ заключается в том, что это помогает понять, как создается зеркало CPAN.Вообще говоря, это просто каталог, который содержит две подкаталоги.

Каталог 'modules' в свою очередь содержит два файла, 03modlist.data.gz, содержимое которых игнорируется современными клиентами CPAN, но существует устаревший кодпредполагается, что этот файл существует, поэтому просто скопируйте его из существующего зеркала.Другой - это 02packages.details.txt.gz, который я опишу позже.

В каталоге «авторы» содержится файл «01mailrc.txt.gz», который является еще одним пережитком прошлого, содержимое которого можно игнорировать.так что просто скопируйте его из другого зеркала, и он содержит каталог 'id'.Это, в свою очередь, содержит подкаталоги и дистрибутивы, имена которых следуют шаблону.Например, мой идентификатор PAUSE - это DCANTRELL, а один из моих дистрибутивов - XML-Tiny-2.06.tar.gz, так что файл находится по адресу ... / авторы / id / D / DC / DCANTRELL / XML-Tiny-2.06.tar.gz.

Файл 02packages.details.txt.gz - это индекс, который отображает имена модулей в дистрибутивы, и этот должен быть актуальным, чтобы ваше зеркало работало должным образом.Он состоит из нескольких строк заголовка, которые должны присутствовать и быть правильными, за которыми следует пустая строка, за которой следует одна строка для каждого модуля.Эти строки представляют собой три поля, разделенные пробелами:

  • имя модуля
  • версия модуля
  • имя файла распределения

например

  XML::Tiny 2.06 D/DC/DCANTRELL/XML-Tiny-2.06.tar.gz

(вы также можете увидеть .tgz, .zip и несколько других)

Дистрибутив может отображаться в несколько строк, по одному для каждого модуля, который он содержит.например,

  XML::Tiny::DOM 1.1 D/DC/DCANTRELL/XML-Tiny-DOM-1.1.tar.gz
  XML::Tiny::DOM::Element 1.1 D/DC/DCANTRELL/XML-Tiny-DOM-1.1.tar.gz

В обычном зеркале CPAN может быть несколько версий дистрибутива и несколько версий модуля - например, текущая версия и несколько более старых или текущая стабильная иразработчик один.Индексный файл содержит самую последнюю стабильную версию.Вы можете сообщить dev версиям дистрибутивов, потому что они имеют подчеркивание в своей версии или содержат строку '-TRIAL'.

Таким образом, зная все это, вы можете создать CPAN-подобный файл, содержащий только ваш код.Но использование CPAN :: Mini и CPAN :: Mini :: Inject для добавления ваших материалов в «настоящий» CPAN - это меньше работы.

После того, как вы создали свой CPAN-подобный, вы можете либо выставитьэто по HTTP и доступ к нему с помощью любого клиента, как обычно, или вы можете просто включить его в файловую систему и настроить клиент CPAN для доступа к нему, используя файл: /// URL.

3 голосов
/ 07 августа 2012

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

1 голос
/ 15 ноября 2013

DrHyde дал очень хороший ответ на вопрос.Но если вы не хотите поддерживать зеркало CPAN, вы можете использовать MyCPAN :: App :: DPAN вместе с MyCPAN :: Indexer .

Cave : Оба дистрибутива находятся в стадии разработки.Не все комбинации будут работать.Я использую последнюю версию MyCPAN :: App :: DPAN на github (1.28_11) и MyCPAN :: Indexer версии 1.28_10 (более поздние версии не работают с MyCPAN :: App :: DPAN).

MyCPAN::App::DPAN создаст CPAN-подобную структуру каталогов на вашем локальном диске из распределенных вами дистрибутивов.Вам нужно создать файл конфигурации для него (скажем, .dpanrc):

# contents of .dpanrc
indexer_id  Edward Baudrez <my.email.address@example.org>
dpan_dir    /home/ebaudrez/rsync.net/dpan
merge_dirs  /home/ebaudrez/rsync.net/dpan/dists
report_dir  /home/ebaudrez/rsync.net/dpan/indexer_reports

Поместите ваши дистрибутивные архивы в каталог merge_dirs (я думаю, что нет никаких причин, по которым каталог должен находиться в dpan_dir, но я слишком ленив, чтобы понять это прямо сейчас).Затем вызовите dpan:

dpan -f $HOME/.dpanrc

dpan, чтобы создать CPAN-подобную структуру в dpan_dir (содержащую, в частности, authors и modules).Затем этот каталог можно использовать с cpanm (например):

cpanm --mirror $HOME/rsync.net/dpan --mirror http://search.cpan.org/CPAN

Обратите внимание, что я использую реальный CPAN в качестве запасного варианта, потому что DarkPAN по определению неполон.Если у вас также есть мини-зеркало CPAN, вы также можете использовать его здесь:

cpanm --mirror $HOME/rsync.net/dpan --mirror $HOME/mirrors/minicpan --mirror-only

Обратите внимание, что для работы этой схемы вам потребуется создать tar-архивы дистрибутивов из вашего исходного кода.Мне нравится и используется Dist :: Zilla , но учтите, что вы также можете создавать тарболы из Makefile.PL, поэтому вам определенно не нужно использовать Dist :: Zilla.Но он позаботится о многих деталях.

Создание реального дистрибутива из вашего исходного кода может показаться большой работой, но Dist :: Zilla помогает снять бремя и перейти к настоящему CPANмодуль, когда-нибудь в будущем ;-), также сильно упрощается, когда у вас уже есть дистрибутив.

...