快速回答是,您想使用 CPAN::Mini 创建 CPAN 上所有当前内容的本地镜像,然后使用 CPAN::Mini::Inject 向其中添加您自己的发行版。
答案很长,有助于理解 CPAN 镜像是如何构建的。从广义上讲,它只是一个包含两个子目录的目录。
“模块”目录依次包含两个文件,即 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 镜像中,一个发行版可能有多个版本,一个模块的多个版本 - 例如,当前版本和几个旧版本,或者当前稳定版本和开发版本。索引文件包含最新的稳定版本。您可以告诉发行版的开发版本,因为它们的版本中有一个下划线,或者包含字符串“-TRIAL”。
因此,了解所有这些后,您就可以构建一个类似 CPAN 的类,仅包含您的代码。但是使用 CPAN::Mini 和 CPAN::Mini::Inject 将你的东西添加到“真正的”CPAN 的工作量较少。
一旦您创建了 CPAN-a-like,您可以在 HTTP 上公开它并使用任何客户端正常访问它,或者您可以将它放在文件系统中并配置 CPAN 客户端以使用file:/// 网址。