Centos

安裝自定義 perl 模組

  • June 19, 2019

我已經從 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。

從您的描述中不清楚到底發生了什麼(特定的錯誤消息會有所幫助或重現問題的範例包規範),但聽起來 RPM 依賴項已經出錯了,不知何故。根據問題的具體情況,有多種選擇。

提供缺少的包裹

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

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

這可以在*.spec軟體的文件中完成。這有時可能需要一個 shim RPM,它只提供缺少的依賴項,特別是當您有一個第三方包時,您不能或不想修改以修復依賴項。

禁用自動請求

一個非常大的錘子是關閉包的自動要求;

Autoreq: 0

這可能反過來需要文件中合適的BuildRequires,Requires和其他語句*.spec來為包設置適當的依賴項(或者您可以在配置管理中處理需要安裝的包)。我必須在perl-*本地維護的 133 個模組包中的 4 個中設置此標誌,例如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 執行的程式碼的輸出以確定需求;RPM 文件似乎已經過時了,因為我的 centos 7 測試系統不再有該頁面上提到的腳本find-*,所以毫無疑問,這個過程發生了一些變化,誰知道現在在哪里或是否記錄了它。我改為使用上述兩種方法之一,因為我沒有時間追查他們對需求腳本所做的更改。

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