如何从模块创建RPM并为依赖项递归创建单独的独立RPM?

Eva*_*oll 9 perl packaging cpan rpm

给定模块,我如何不仅创建模块,还创建所有模块依赖项的rpm?

首先创建一个测试模块

$ module-starter --author "Evan Carroll" --email "me@evancarroll.com" --module Foo::Bar
Added to MANIFEST: Changes
Added to MANIFEST: ignore.txt
Added to MANIFEST: lib/Foo/Bar.pm
Added to MANIFEST: Makefile.PL
Added to MANIFEST: MANIFEST
Added to MANIFEST: README
Added to MANIFEST: t/00-load.t
Added to MANIFEST: t/manifest.t
Added to MANIFEST: t/pod-coverage.t
Added to MANIFEST: t/pod.t
Added to MANIFEST: xt/boilerplate.t
Created starter directories and files
Run Code Online (Sandbox Code Playgroud)

现在,我编辑Makefile.pl,并添加Mojolicious为先决条件。

...
PREREQ_PM => {                                                         
      'Mojolicious' => '0'
....
Run Code Online (Sandbox Code Playgroud)

现在我可以跑步

perl Makefile.PL
make dist
Run Code Online (Sandbox Code Playgroud)

但是跑步

$ sudo cpantorpm -y /tmp/yum /tmp/Foo-Bar/Foo-Bar-0.01.tar.gz 
Run Code Online (Sandbox Code Playgroud)

我明白了

error: Failed build dependencies:
        perl >= 5.006 is needed by perl-Foo-Bar-0.01-1.noarch
        perl(ExtUtils::MakeMaker) is needed by perl-Foo-Bar-0.01-1.noarch
        perl(Mojolicious) is needed by perl-Foo-Bar-0.01-1.noarch
Run Code Online (Sandbox Code Playgroud)

这是有道理的,但我希望它为这些要求创建RPM。我想Foo::Bar要求从也代表Mojolicious的cpan生成一个rpm,并使构建系统输出两个RPM(一个rpm Foo::Bar也需要提供MojoliciousRPM)。

tuk*_*kan 2

这太容易绕过依赖地狱了。我会选择一些像cpan-dependecy这样的项目。有人已经为你完成了这项工作。

下面是它的工作原理:

1) 如何安装 需要以下CPAN模块。

  • CPANPLUS
  • RPM::规格文件

2) 如何使用 创建 Linux::Smaps bin/cpan-dependency.pl --conf=config/conf.yml Linux::Smaps 的 rpm

3)conf.yml

  • filter_requires .. 从包中删除指定的需求。
  • build_skip .. 跳过构建包。
  • build_requires .. 在构建包之前构建并安装指定的包。
  • 需要 .. 将指定的包添加到包的依赖项中。

您需要调整conf.yml以满足您的依赖关系。

要构建您的项目,您将执行以下操作:

bin/cpan-dependency.pl --conf=config/conf.yml Foo::Bar