2014-09-13 46 views
3

我試圖升級Perl和把我的電腦變成一臺完整的混亂 我目前運行的RHEL6.5,64位,這就是事情:不同的Perl一團糟安裝

  • 我有着Perl 5.10 .1安裝好了,工作很好。這來了安裝, ,我可以看到它從百勝
  • 我想安裝Padre,一個Perl IDE,但至少需要v5.11 [我是如此接近! :(]
  • 還有沒有更新的版本的Perl在回購,我有機會(我有一個限制,我不能添加新的回購)
  • 我得到了我的老闆批准下載perl-5.20 0.0從www.perl.org,並試圖安裝它

...和混亂開始了!

  • 首先,我安裝了我自己的ID的新的Perl,並推perl的某處在我的家目錄下
  • 我用'perl -v'進行了測試,可以看到我的環境指向較新的安裝,但是,yum從來沒有認出它(不是真的是一個問題)
  • 當我試圖安裝Padre,似乎它有硬編碼的原始perl(從/ usr /斌),仍然聲稱5.11更新。
  • 試圖修復它,我再次安裝了新的perl,現在使用root,使它在/ usr樹下推送perl ...它安裝了,但是將perl推送到/ usr/local/bin而不是/ usr/bin中
  • 所以,再一次,我有一個更perl的安裝,但神父仍在尋找放在/ usr/bin中

我放棄了約神父的一個,並刪除與之相關的文件,以及該perl安裝在我的家庭目錄上,但是我現在已經編碼的幾個perl腳本正在拋出類似如下的錯誤:

perl -cw "xmltest.pl" (in directory: /home/myid/scripts/xmltest.pl) 
perl: symbol lookup error: /usr/lib64/perl5/auto/Data/Dumper/Dumper.so: undefined symbol: Perl_Istack_sp_ptr 
Compilation failed. 

...和Data :: Dumper不是唯一的一個...每當我禁用其中一個模塊時,另一個掛在相同或類似的方式

從我讀到的這個,似乎這個問題涉及到原先安裝了一個perl的版本,並正在由另一個稱爲模塊,但是,我已經強迫我使用直接從CPAN重新安裝的模塊,他們仍然未能

問題:我該如何安全地從當前的perl安裝中解脫出來,並執行新的全新安裝,以便能夠在不使用這些版本的情況下使用它?

我的主要關注點是對衆多的應用程序,我有需要Perl,我不是我再破上卸載

任何幫助將非常感激。

+2

(5.odd是dev版本。 ) – ikegami 2014-09-13 00:33:00

+0

'perl -V'(大寫字母「V」)告訴你'perl'在哪裏搜索模塊,所以你知道該怎麼開始刪除...至於安全嗎?那麼,就我所知,你的軟件包管理器可能需要Perl,所以誰知道! – ikegami 2014-09-13 00:35:56

+0

tkx @ikegami ...移動到另一個版本,如5.19或類似的東西不會是一個限制...但首先,我需要擺脫這個混亂! :-( – Renato 2014-09-13 00:37:05

回答

7

您應該:

  1. 清理

    • 乾淨(註釋掉)您~/.profile從任何不需要的路徑,所以從您的$HOME(移動到
    • 乾淨的任何新的Perl安裝安全的地方肯定)
    • 總之,試試把你的環境改成prev白條工作狀態
  2. 重新記錄,(註銷,登錄)

  3. 修復系統的Perl。那意思是說,

    • 閱讀@Sam Varshavchik的回答
    • 從發行重新安裝,使用您的包管理器(5.10)。
    • 這一步應該覆蓋你造成的混亂。
    • 測試一下吧!
    • 不會繼續,直到你確保,一切正常工作。

教訓:從來沒有覆蓋系統的perl

  • 學習讀通perlbrew.pl

  • 重複前面的步驟,一旦

  • 安裝perlbrew

    • 運行安裝命令\wget -O - http://install.perlbrew.pl | bash
    • 應該完成沒有錯誤
    • 按照說明如何修改您的啓動文件例如~/.profile或這樣的......(你需要添加一行到年底)
    • 檢查~/perl5/perlbrew/bin應該包含prelbrewpatchperl
  • 重新記錄

  • 建立新的Perl,運行

    • perlbrew init #init environment
    • perlbrew available #show wh在Perl中,您可以安裝
    • perlbrew install 5.20.0 #will需要幾分鐘的時間 - 取決於你的系統運行速度
    • perlbrew install-cpanm
    • perlbrew list#檢查
    • perlbrew switch perl-5.20.0 #activate新安裝的perl的5.20
  • 檢查您的安裝

    • ~/perl5/perlbrew/bin你應該有3個腳本:prelbrewpatchperlcpanm
    • perl -v應該返回5.20
    • type cpanm - 應該返回~/perl5/perlbrew/bin/cpanm

    大功告成。

  • CPAN模塊
  • 可以與cpanm安裝新的模塊,例如:

    檢查~/perl5/perlbrew/perls/perl-5.20.0/bin/新命令

    您將需要更新自己 perl腳本的家當線

    #!/usr/bin/env perl 
    

    我希望不要忘記任何事,也許其他更有經驗的Perl的大師們將添加/編輯/正確的更多。

    無論如何,在現實中5,6,7步驟聽起來要容易得多(通過閱讀),並且可以在幾分鐘內完成。

    +0

    在基於rpm的發行版上,我不會推薦cpanm作爲安裝Perl軟件包的一種手段。轉速是唯一的出路。即使我可以簡單地構建一個新版本的Perl或任何包,並且自己安裝它(我過去也這樣做),而無需破壞系統Perl,我仍在說明這一點。即使我做了破壞,我也可以修復它。我不是吹牛,我是在說一個觀點。如果我想要大幅度提高轉速,那麼rpm就是爲了挽救我的屁股。無論有人會怎麼樣,每個人都會犯錯誤,而且rpm會讓我免於浪費整個週末的時間來解決一個大問題。 – 2014-09-13 15:21:59

    +2

    @SamVarshavchik請,瞭解perlbrew。 'cpanm'是perlbrew的本地代碼,整個'perlbrew'完全與系統perl分離(運行在自己分離的環境中,在它自己的目錄樹中),加上,你不需要是'root'安裝它。如果你不是root,那麼不能寫perl系統,也不能意外。當某人使用'cpanm'作爲系統範圍的perl(作爲root或'--sudo')時,你的評論是可以的 - 但這不是'perlbrew'的情況。所以,_youre正確地哭泣,但在錯誤的墳墓......_;) – jm666 2014-09-13 16:00:40

    4

    在基於rpm的Linux發行版上,您絕對不應該手動安裝系統軟件,例如嘗試自己編譯和構建它。 RHEL的軟件包管理工具rpm執行一項重要功能,即跟蹤軟件包之間的依賴關係,並防止軟件包衝突。

    您顯示的錯誤恰恰是系統Perl安裝損壞的症狀,並且rpm正好存在以避免發生此類事情。手動構建和安裝隨機壓縮包完全繞過了rpm提供的安全網。

    有沒有從損壞的系統恢復安裝一個關鍵的系統轉如Perl的千篇一律的配方,但一般:

    1)運行「轉-q」的perl,這會告訴你確切版本rpm認爲應該安裝的perl rpm軟件包。

    2)轉到RHEL安裝介質/目錄,驗證它是否包含相同的perl-.x86_64.rpm軟件包。如果您以前安裝過RHEL更新,那麼您可能已經更新了perl,因此請查找rpm告訴您已安裝在RHEL更新目錄中的版本,並驗證您是否擁有正確的rpm包。

    3)執行:

    rpm -ivh --force perl-<version>.x86_64.rpm 
    

    這將重新安裝以前安裝原來的perl RPM軟件包。您的問題不僅在於您安裝了額外的perl版本,而且您的一些自定義perl版本可能會破壞系統perl軟件包,並且卸載它們也無濟於事,您必須重新安裝系統perl。

    4)在RHEL中,許多perl模塊作爲單獨的軟件包安裝。應該使用上述過程來重新安裝您安裝的每個perl rpm包。執行:

    rpm -q -a | grep '^perl' 
    

    這會給你一個你安裝的所有Perl軟件包的列表。您需要爲每個Perl rpm軟件包重複此過程。

    這不是100%的保證,這會解決所有問題,也可能有其他問題,但這是邁向恢復的良好開端。

    +0

    tkx爲您的答覆@ Sam-Varshavchik ...似乎我會有一個長週末!...當然會嘗試這種做法並在完成後發佈結果 只是一個問題,在rpm/yum有沒有辦法列出所有依賴於perl的軟件包?...我可以看到perl依賴於什麼,但是找不到一種方法來確定誰依賴於它 關心。 – Renato 2014-09-13 01:26:40

    +0

    「rpm -e --test perl」 - 這將會是一個長長的列表。 – 2014-09-13 02:04:24

    0

    我做了什麼:

    從@薩姆 - Varshavchik答案:

    1. 發現在我的百勝緩存以前的perl的轉速,並安裝... rpm -ivh --force perl-<version>.x86_64.rpm

    2. 經過爲其他人「perl *」以前安裝的軟件包...有+260所以將其保存在文件中rpm -qa "perl*" > /tmp/perl.pkgs

    3. 隨着+260包的安裝,我意識到手動做會花費太多時間,所以現在是時候在實踐中加入一些ksh技能了......

      我在百勝緩存檢查,發現+260包〜130,所以

      • 從列表中拿出Perl基本包(我已經安裝);
      • 對於那些在緩存中,我決定用rpm安裝,然後用和基礎包一樣的方法;
      • 對於那些我沒有派上用場,我用百勝,這會下載並執行轉速相同 ,所以...

      CACHE="/var/cache/yum/x86_64" for perlpkg in $(cat /tmp/perl.pkgs) do FILE=$(find $CACHE -name "${perlpkg}.rpm") if [[ ${FILE} != "" ]] ; then rpm -ivh --force ${FILE} else yum -y reinstall ${perlpkg} fi done

    從@ jm666:

  • 安裝perlbrew(能夠從我的AUTH回購得到它,所以用yum得到它),並使用perlbrew,localy

    安裝5.20.
    • TODO:沒有任何額外的模塊既不帕德里尚未...需要了解更多的方式perlbrew作品,並從系統的perl
  • 一旦隔離安裝的版本遠再一次,謝謝@ Sam-Varshavchik和@ jm666對你的支持ang指導

    +0

    我對'yum'安裝的perlbrew一無所知。 我的答案中的方法安裝'perlbrew' _到您的主目錄_。默認是'$ HOME/perl5/perlbrew'。之後,'perlbrew'會將新的perl(可以有_multiple_)安裝到目錄「$ HOME/perl5/perlbrew/perls/perl5.20.0」中(按版本)。在5.)中,通過添加一行'source〜/ perl5/perlbrew/etc/bashrc'來修改'.profile',並且這一行允許您使用新安裝的perl。 **你不需要是root用戶,用perlbrew **來安裝perl。例如你不能覆蓋你的系統Perl。 – jm666 2014-09-14 19:05:27