Fedora

為什麼 rpm 或 dnf 不能辨識預設 perl?

  • July 4, 2018

我有一個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)無法辨識它?

指定對 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 中看到 package 的 Requires 和 Provides 關鍵字。

引用自:https://unix.stackexchange.com/questions/453460