为什么 rpm 或 dnf 不能识别默认的 perl?

为什么 rpm 或 dnf 不能识别默认的 perl?

我有一个rpm我构建的包,它依赖于perl.当我尝试安装此软件包时失败:

$ rpm -ivh <package-y>
error: Failed dependencies:
    perl is needed by package-y.x86_64

如果我运行dnf info perl它显示 perl 没有安装,但我可以perl在我的系统上找到:

which perl
perl: /usr/bin/perl /opt/lampp/bin/perl /usr/share/man/man1/perl.1.gz

并检查 perl 的版本:

$ perl --version

This is perl 5, version 26, subversion 2 (v5.26.2) built for x86_64-linux-thread-multi
(with 47 registered patches, see perl -V for more detail)

Copyright 1987-2018, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

我的系统(fedora)上似乎默认安装了 perl,但为什么包管理器(dnf 或 rpm)无法识别它?

答案1

指定对 Perl 之类的依赖项可能非常复杂。例如,当你package-y说它需要时perl,它是指 Perl 5.x 还是 Perl 6.x?它是否需要 Perl 5.x 的特定次要版本?或者古老的 Perl 4.x 就足够了吗?

这是 Fedora 包装指南中与 Perl 相关的部分。正如您所看到的,它相当复杂。您似乎package-y没有遵循这些准则。它是专门用于 Fedora 的,还是打包用于其他随机发行版的?

在不重新打包的情况下修复它的最佳方法package-y是找出您package-y对 Perl 的实际具体要求,然后创建一个虚拟包,其名称类似于dependencies-for-package-y.rpm两者Provides: perl(以允许虚拟包满足 的要求package-y)和至少Requires: perl(:VERSION) >= <minimum required Perl version for package-y>(以package-y向包管理器提供实际需求的信息)。

如果您package-y包含预编译的 Perl 模块或链接到libperl.so,则虚拟包也应该具有适当的Requires: perl(:MODULE_COMPAT_<version number>)关键字。这样,如果您当前的 Perl 更新方式破坏了模块兼容性,例如由于安全问题,您的包管理器将告诉您必须同时更新package-y、删除它,或者推迟更新 Perl,因为更新它会破坏package-y

您的电流/usr/bin/perl实际上是由名为的包提供的perl-interpreter您可以在 rpmfind.net 中看到该软件包具有的 Requires 和 Provides 关键字。

相关内容