說明:以下所有操作均是由超級管理員完成
我一個朋友遇到這個問題,就是利用yum安裝的時候報錯。如圖:
當時他問我的時候,我一開始以爲是Python版本不兼容問題,可能是Python升級後帶來的問題,所以就給他說了兩種方法
1、修改yum配置文件:
vim /usr/bin/yum
修改第一行
#!/usr/bin/python 改爲#!/usr/bin/python2.6.6
2、升級yum
然後我朋友讓我遠程幫他,當我遠程幫他修改這一行之後,又出現了新的問題。(此處沒有截圖)
找不到Python2.6.6,然後我解壓下載了Python2.6.5,然後安裝,安裝過程如下:
cd /usr/local/src/ wget tar xf Python-2.6.5.tar.bz2 cd Python-2.6.5 ./configure make && make install #創建軟連接 ln -s /usr/local/bin/python2.6.5 /usr/bin/python #檢查 python -V
安裝成功
然後執行yum,依然是這一問題,我想着是不是環境變量的問題,於是增加了環境變量
echo "export PATH=/usr/bin/python:$PATH" >> /etc/profile source /etc/profile
又出現了沒有權限的問題,然後我還是將配置文件修改爲
#!/usr/bin/python2.6.6
然後執行,出現了No module named yum問題 ,查看Python路徑
然後發現Python路徑混亂比較混亂。同樣的有三種方法解決這一問題。
方法一:
就是修改文件 /usr/bin/yum,將那一行修改,但是很明顯不可以,網上看是因爲設置了環境變量,又安裝了其他的Python版本,出現了連接混亂,導致yum找不到Python路徑,於是將環境變量註釋然後重新運行了環境變量,問題依然沒有解決,然後嘗試第二種方法。
方法二:
就是將Python回滾到默認的2.6.6版本。執行了下面兩行。
rpm -qa | grep python- | grep 2.6 rpm -ivh --force --nodeps
但是禍不單行,執行第二句代碼的時候出現報錯(由於這是問題解決後才寫的文檔,所以此處的錯誤並沒有截圖)
很無奈,只好嘗試第三種方法。
方法三:
下載RPM包(根據自己的版本選擇)
python-2.6.6-36.el6.x86_64.rpm yum-metadata-parser-1.1.2-14.1.el6.x86_64.rpm yum-3.2.29-40.el6.centos.noarch.rpm yum-plugin-fastestmirror-1.1.30-30.el6.noarch.rpm #執行安裝 rpm -ivh --force --nodeps *.rpm
到http://yum.baseurl.org/wiki下載tar包:yum-3.4.3.tar.gz
tar xf yum-3.4.3.tar.gz cd yum-3.4.3 ./yummain.py update
很顯然這個方法也不適用,還比較麻煩。
我再次嘗試着重新安裝yum和Python。以下是過程:
下載需要的RPM包到此目錄。(要下載的包看你的系統版本號,只要和你的系統版本號一致即可)
cd /usr/local/src/Python-2.6.6 #此目錄看你的系統版本號
python-2.6.6-36.el6.x86_64.rpm python-urlgrabber-3.9.1-8.el6.noarch.rpm python-devel-2.6.6-36.el6.x86_64.rpm python-libs-2.6.6-36.el6.x86_64.rpm yum-3.2.29-40.el6.centos.noarch.rpm
然後執行安裝
rpm -Uvh --replacepkgs *.rpm
#執行這一步的時候我朋友問我--replacepkgs的作用,這裏我說明一下,這個參數的意思是用一個副本替換一個包,當我們遇到需要重複安裝軟件包的時候,但是一般會報錯,如果想要繼續重複安裝,就會用到這個參數。
與這個參數相關的參數還有如下幾個:
--replacefiles #替換另一個包所擁有的文件,即就是軟件包在安裝的時候有某個文件已經被其他軟件包安裝調用過,再次安裝就會報錯,如果想要繼續再次安裝,就會用這個參數。
--nodeps #安裝或者升級的時候不檢查依賴,即當安裝的軟件包所需要的依賴未安裝的時候,就會報錯,若是仍然要安裝,就會用到這個參數。
--force #忽略包和文件的衝突強制安裝,此方法不建議。
--oldpackage #允許升級到比較舊的軟件包。一般當新安裝的軟件包出現兼容問題等的時候會用到此參數,將軟件包升級到比較老的版本。
再次使用yum的時候應該來說就好了,但是令人頭疼的是又再次報了一開始的錯
當我再一次查看報錯的時候,發現了一個問題
我想是不是因爲這個文件的問題呢?
於是我進入/lib64此目錄,然後將嘗試將librt.so.1文件改名
mv librt.so.1 librt.so.1.bak
結果再次運行出現如下的錯
提示找不到這個文件,我趕緊將這個文件還原,但是這次無論如何都不能還原
我想嘗試重啓,然而也不能執行這一操作
我查看了這個文件的屬性,發現他是一個librt-2.12.so的連接文件。我就想,既然是連接文件,那麼可不可以再做一個軟連接呢?
但是很快我就發現什麼操作都不能做了。
那麼怎麼辦呢?就在我爲難的時候,我朋友將另一臺同環境的服務上的librt.so.1這個文件拷貝到了此服務上面,然後再次運行yum,結果這次yum運行正常
總結:我想應該是librt.so.1這個文件出錯導致的。
後來我查了一下這個文件,原來librt.so是glibc中對real-time部分的支持庫。
linux 下有動態庫和靜態庫,動態庫以.so爲擴展名,靜態庫以.a爲擴展名。如果感興趣的可以自己再去查看更多的關於這個文件的知識。
其實此文檔中已經包含了如何正確的升級Python,可以參考博客
centos6.4升級Python過程總結:
http://11863547.blog.51cto.com/11853547/1906283