内部CPAN - 什么模块

时间:2011-07-11 10:38:02

标签: perl cpan

我想设置内部CPAN以分发我们的内部代码。

所以我按照CPAN::Mini推荐here。但它看起来有其他选项CPAN::SiteCPAN::DarkDist::Zilla ......

我对所有这些选择都不知所措。人们大多使用/推荐什么?

我需要的是一种将内部模块推送到存储库的方法,可以从多台机器访问。

3 个答案:

答案 0 :(得分:5)

快速回答是你想使用CPAN :: Mini来创建CPAN上当前所有当前镜像,然后CPAN :: Mini :: Inject将你自己的发行版添加到它。

答案很长,它有助于理解如何构建CPAN镜像。从广义上讲,它只是一个包含两个子目录的目录。

'modules'目录依次包含两个文件03modlist.data.gz,其内容被现代CPAN客户端忽略,但是遗留代码假定该文件存在,因此只需从现有镜像复制它。另一个是02packages.details.txt.gz,稍后我将对此进行描述。

'authors'目录包含一个文件'01mailrc.txt.gz',它是过去的另一个遗物,其内容可以忽略,所以只需从另一个镜像复制它,它包含'id'目录。这又包含子目录和分布,其名称遵循模式。例如,我的PAUSE id是DCANTRELL,我的一个发行版是XML-Tiny-2.06.tar.gz,因此该文件位于... / authors / 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和其他的coupla)

分布可能会出现在几行中,每个模块包含一次。例如

  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-a-like。但是使用CPAN :: Mini和CPAN :: Mini :: Inject将你的东西添加到“真正的”CPAN中的工作量较少。

创建类似CPAN之后,您可以在HTTP上公开它并使用任何客户端正常访问它,或者您可以将它放在文件系统中并配置CPAN客户端以使用file:/// URL。

答案 1 :(得分:3)

您可能还会考虑Pinto。 Pinto允许您策划自己的稳定CPAN存储库,该存储库可以包含任意数量的公共和私有分发。随着您的依赖关系随着时间的推移而发展,Pinto还可以帮助您管理更改。

答案 2 :(得分:1)

DrHyde给出了一个非常好的答案。但是,如果您想要维护CPAN镜像,则可以将MyCPAN::App::DPANMyCPAN::Indexer一起使用。

洞穴:两个发行版都在开发中。并非所有组合都有效。我使用的是github上的最新版本的MyCPAN :: App :: DPAN(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

将您的分发tarball放在merge_dirs目录中(我认为目录不应该位于dpan_dir下,但我现在懒得弄清楚)。然后拨打dpan

dpan -f $HOME/.dpanrc

dpan将在dpan_dir中创建类似CPAN的结构(特别包含authorsmodules)。然后,此目录可以与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

请注意,要使此方案生效,您需要从源代码创建分发tarball。我喜欢并使用Dist::Zilla,但请注意,您也可以从Makefile.PL生成tarball,因此您绝对不需要使用Dist :: Zilla。但它需要处理很多细节。

从您的源代码创建一个真实的发行版可能看起来很多工作,但是Dist :: Zilla有助于解除负担,并且在未来的某一天向真正的CPAN模块过渡;-),也被简化了当你已经有一个发行版时,很多。