安裝自定義 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。
從您的描述中不清楚到底發生了什麼(特定的錯誤消息會有所幫助或重現問題的範例包規範),但聽起來 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-*
,所以毫無疑問,這個過程發生了一些變化,誰知道現在在哪里或是否記錄了它。我改為使用上述兩種方法之一,因為我沒有時間追查他們對需求腳本所做的更改。