安装自定义 perl 模块

安装自定义 perl 模块

我已经在 CentOS 7 环境中从专有软件集合构建了一个 RPM,但构建过程需要执行.pm在源代码本身中找到的一些 Perl 模块(文件)。当我执行时,rpm -Uvh rpm-name.rpm我得到了与源代码中找到的确切 Perl 模块的失败依赖关系。所以问题是,如何安装自定义 Perl 模块?

一些.pm文件定义包,另一些文件定义子例程。我尝试将脚本的目录复制到/usr/lib64/perl5/但它不起作用。cpan -D Module::Name给我Can't call method userid on an undefined value at /usr/share/perl5/App/Cpan.pm line 836。我搜索从 perl 模块创建 RPM,但似乎每个人都在解释如何从CPAN模块创建 RPM。

答案1

从您的描述中尚不清楚到底发生了什么(特定的错误消息会有所帮助或重现问题的示例包规范),但听起来 RPM 依赖项不知何故出了问题。根据问题的具体情况,有多种选择。

提供丢失的包裹

表明该包提供了*.spec文件中缺少的模块:

Provides: perl(Module::Name)
...

*.spec这可以在软件文件中完成。有时这可能需要一个垫片 RPM,除了提供缺少的依赖项之外什么也不做,特别是当您有第三方包时,您无法或不想修改以修复依赖项。

禁用自动请求

一个很大的锤子就是关闭包的自动需求;

Autoreq: 0

这可能反过来需要文件中合适的BuildRequires,和其他语句来为包设置适当的依赖关系(或者您可以在配置管理中处理需要安装的包)。我必须在我本地维护的 133 个模块包中的 4 个中设置此标志,例如:Requires*.specperl-*perl-File-ChangeNotify.spec

# KLUGE don't pull in IO::KQueue which in turn needs *BSD
Autoreq: 0
BuildRequires:  perl(Carp)
...
Requires:       perl(Carp)
...

更改或过滤自动依赖关系脚本

这是更多的工作,因为它需要更改或过滤 RPM 运行的代码的输出以确定需求;这转速文档似乎已经过时了,因为我的 centos 7 测试系统不再具有find-*该页面上提到的脚本,因此毫无疑问,此过程发生了一些变化,谁知道它现在在哪里或是否已记录。相反,我使用上述两种方法之一,因为我没有时间追查它们对需求脚本的更改。

答案2

我发现将__requires_exclude宏添加到规范文件对于这种情况非常有用。看https://docs.fedoraproject.org/en-US/packaging-guidelines/AutoProvidesAndRequiresFiltering/欲了解更多详情

相关内容