perl - 如何从模块创建 RPM 并递归地为依赖项创建单独的独立 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
现在我编辑Makefile.pl
, 并添加Mojolicious
为先决条件。
...
PREREQ_PM => {
'Mojolicious' => '0'
....
现在我可以跑了
perl Makefile.PL
make dist
但是跑步,
$ sudo cpantorpm -y /tmp/yum /tmp/Foo-Bar/Foo-Bar-0.01.tar.gz
我明白了,
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
这是有道理的,但我希望它为这些需求创建 RPM。我想Foo::Bar
需要一个也从代表 Mojolicious 的 cpan 生成的 rpm,以及让构建系统输出两个 RPM(一个 rpmFoo::Bar
需要同时提供的Mojolicious
RPM)。
解决方案
绕过依赖地狱太容易了。我会去做一些像cpan-dependecy这样的项目。有人已经为你完成了这项工作。
下面是它的工作原理:
1) 如何安装以下 CPAN 模块是必需的。
- CPANPLUS
- RPM::规范文件
2) 使用方法 创建Linux::Smaps的rpm bin/cpan-dependency.pl --conf=config/conf.yml Linux::Smaps
3) conf.yml
- filter_requires .. 从包中删除指定的要求。
- build_skip .. 跳过构建包。
- build_requires .. 在构建包之前构建和安装指定的包。
- 需要 .. 将指定的包添加到包的依赖项中。
您需要调整conf.yml以满足您的依赖。
要构建您的项目,您将执行以下操作:
bin/cpan-dependency.pl --conf=config/conf.yml Foo::Bar
推荐阅读
- javascript - 查询选择器如何跳过一个 td 并将其用作部分名称
- javascript - Redux:在 try-catch 语句中处理拒绝(错误)
- java - JAVA FX:如何在 fxml 视图的同一场景中设置菜单栏
- javascript - 按钮未在 ASP.NET Webforms 中触发
- c - 将函数作为参数传递给同一函数
- r - dyn.load("path/file_name.so") 中的错误:无法加载共享对象
- javascript - 无法在 ASP.NET 的查看器中更新 iframe 的 src
- python - 如何使用python删除具有-9999作为列值的数据框的行?
- python - 将 groupby() 组中的每个元素与该组中的唯一值进行比较,并获得相等的位置
- python - WINdows 7 上 PgAdmin 4 的“启动应用程序服务器时出错。无法启动应用程序服务器”