![](/img/trans.png)
[英]Bash script - determine vendor and install system (apt-get, yum etc)
[英]Yum/apt-get before cpan to manage UNIX system-wide Perl modules?
Perl的cpan
命令是管理Perl模塊的強大方法。 但是,在UNIX下在系統范圍內維護模塊時, Michal Ingeli指出另一個可能的選擇是yum install 'perl(PerlModuleName)'
。 如果可以的話,在這種情況下,yum應該是我的第一選擇嗎?
例如,命令cpanm CGI
將CGI模塊安裝在我的〜/ perl5目錄下,如果僅在我的帳戶下運行的腳本才需要CGI模塊,則可能是最好的選擇。 但這不會為其他帳戶運行的腳本提供CGI模塊。
我可以使用cpanm -l <directory>
強制cpanm
命令將模塊加載到特定目錄(例如, cpanm -l /usr/local CGI
將CGI安裝到/ usr / local / lib / perl5),或者我可以編輯~/cpan/CPAN/MyConfig.pm
更改cpan
使用的默認安裝位置。
但是在幾乎所有系統上,都存在多個Perl系統庫位置(/ usr / local / share / perl5,/ usr / share / perl5 / vendor_perl,/ usr / lib64 / perl5等),並且選擇正確的位置有些武斷因為這些不是cpan命令生成的。
考慮到這一點,我應該在cpan
之前轉向yum
(如果可用)進行系統范圍的UNIX Perl模塊管理嗎? 使用以下命令進行測試非常容易:
yum install 'perl(LWP::Simple)'
如果在這種情況下yum失敗,我將退回至:
cpanm -l <directory> LWP::Simple
在這種情況下,您有什么建議?為什么?
(請注意, nxadm已回答了有關此問題的更一般的問題。)
總結到目前為止的答案:
如果可能,請使用系統軟件包管理器更新CPAN模塊。 例如,對於LWP :: Simple :
yum install 'perl(LWP::Simple)'
或
apt-get install liblwp-simple-perl
如果上述操作失敗,請嘗試實現單獨的Perl環境,在其中使用系統級庫中不存在的CPAN模塊。 考慮使用local :: lib或Perlbrew來實現;
僅當以上選項不適用時,才使用cpanm -l <directory>
將模塊加載到系統范圍的目錄中。
我不能從RPM / yum系統的經驗談起,但是我已經在Debian系統上的Perl應用程序上做了很多工作,我強烈建議您盡可能使用CPAN模塊的系統打包版本。 我知道很多人都不同意,從歷史上看,他們可能有充分的理由,但是我已經做了很長時間了,發現它運作良好。
在Debian世界中,有大量的預包裝形式的Perl模塊,如果您碰巧需要一個未包裝的模塊,則可以使用dh-make-perl
構建自己的軟件包並將其放入本地apt倉庫中。 當您的代碼在開發->登台/ UAT->生產工作流程中移動時,能夠運行apt-get install your-application
並將其拉入所有必需的依賴項可以節省大量時間。 它還使您確信要部署到生產中的特定模塊的版本與您在UAT中測試的模塊的版本相同。
您絕對不應該做的一件事是使用cpanm
或cpan shell作為根目錄將模塊安裝到系統目錄中。 如果決定直接從CPAN安裝,則使用local :: lib將模塊安裝在特定於應用程序的lib目錄中。
[編輯]根據要求提供一些示例命令:
在基於Debian的系統上,您首先要安裝dh-make-perl工具:
sudo apt-get-install dh-make-perl
然后從CPAN下載一個程序包並將其構建為.deb文件,您將運行以下命令*:
dh-make-perl --build --cpan Algorithm::CouponCode
您可以使用以下命令安裝生成的.deb
文件:
sudo dpkg -i libalgorithm-couponcode-perl_1.005-1_all.deb
管理您自己的apt信息庫是另一個主題。 就我而言,我.deb
復制到本地apt服務器上的適當目錄,然后運行腳本來更新索引(我認為我們的腳本使用dpkg-scanpackages
)。
請注意,在上面的開頭段落中,建議“如果可以”使用系統軟件包。 明確地說,我的意思是說Debain已經打包了您想要的大多數模塊。 上面的示例未構建任何依賴項的軟件包。 如果您的應用程序涉及安裝具有較長依賴鏈的模塊,而這些模塊尚不包含在Debian中,則使用cpanm和local :: lib將簡化安裝。 但是,隨着代碼逐步升級到生產服務器,您將承擔重復重復執行代碼的負擔。 並且您可能需要使用cpanfile或紙箱來確保每個步驟都獲得相同的版本。
*一個陷阱:如果您之前已經設置了local :: lib,以便cpan安裝進入一個私有目錄(例如:/ home / user / perl5),那么這將影響dh-make-perl
生成的.deb
使用的路徑名。 dh-make-perl
。 為了避免這種情況,請在dh-make-perl
之前運行此命令:
unset PERL5LIB PERL_LOCAL_LIB_ROOT PERL_MB_OPT PERL_MM_OPT
系統的perl已放置在此處供系統使用。 維護您的發行版的人員會在看到適合您系統需求的另一個版本時對其進行更新。 使用系統的Package Manager進行管理確實是您的最佳選擇。
隨時使用它,但是如果出於任何原因需要其他版本,最好將自己的版本滾動到單獨的位置。 維護自己的perl安裝時,請使用CPAN。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.