CENTOS手動安裝修復YUM
一、問題場景
centos 上的 python 版本默認比較低,很多同學都會手動升級 python 的版本到 3.x。
因為 yum 的代碼是依賴 python2.x 的,如果直接刪除老版本 python ,會導致 yum 不可用。
# 報錯核心語句 No module named yum
這個情況必須手動修復,很多同學因為修復失敗而重裝了系統,這樣成本會很高。
這里以 centos7.5 x64 為例子,進行修復演示。
二、手動修復
2.1 下載 rpm 包
centos 官方下載網站是 http://mirror.centos.org/centos/。選擇國內鏡像網站會快一些。這里使用的是 mirrors.ustc.edu.cn。
首頁就有各個方向的目錄鏈接。
進到 7.5 對應的目錄 http://mirrors.ustc.edu.cn/centos/7.5.1804/, 發現這里是空的。不過這沒有關系,同一個大版本號下, rpm 包是兼容的。所以可以使用 7.6 目錄下的包。
http://mirrors.ustc.edu.cn/centos/7.6.1810/os/x86_64/Packages/ ,這里就是我們所需的 python 和 yum 包 所在地。
下載如下包
# python 部分 python-backports-1.0-8.el7.x86_64.rpm python-pycurl-7.19.0-19.el7.x86_64.rpm python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch.rpm python-ipaddress-1.0.16-2.el7.noarch.rpm python-setuptools-0.9.8-7.el7.noarch.rpm python-urlgrabber-3.10-9.el7.noarch.rpm python-2.7.5-76.el7.x86_64.rpm python-iniparse-0.4-9.el7.noarch.rpm python-libs-2.7.5-76.el7.x86_64.rpm python-devel-2.7.5-76.el7.x86_64.rpm rpm-4.11.3-35.el7.x86_64.rpm rpm-python-4.11.3-35.el7.x86_64.rpm # yum 部分 yum-3.4.3-161.el7.centos.noarch.rpm yum-metadata-parser-1.1.4-10.el7.x86_64.rpm yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
2.2 安裝 rpm 包
先安裝 python。
運行 rpm 命令。這里一定要加 --replacefiles --replacepkgs 參數, 因為需要覆蓋一些老文件老包,不加的話會提示文件沖突或者包已經安裝過了。
sudo rpm --replacefiles --replacepkgs -ivh python-backports-1.0-8.el7.x86_64.rpm python-pycurl-7.19.0-19.el7.x86_64.rpm python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch.rpm python-ipaddress-1.0.16-2.el7.noarch.rpm python-setuptools-0.9.8-7.el7.noarch.rpm python-urlgrabber-3.10-9.el7.noarch.rpm python-2.7.5-76.el7.x86_64.rpm python-iniparse-0.4-9.el7.noarch.rpm python-libs-2.7.5-76.el7.x86_64.rpm python-devel-2.7.5-76.el7.x86_64.rpm rpm-4.11.3-35.el7.x86_64.rpm python-2.7.5-76.el7.x86_64.rpm rpm-4.11.3-35.el7.x86_64.rpm rpm-python-4.11.3-35.el7.x86_64.rpm
輸出為
warning: package python-2.7.5-76.el7.x86_64 was already added, skipping python-2.7.5-76.el7.x86_64 warning: package rpm-4.11.3-35.el7.x86_64 was already added, skipping rpm-4.11.3-35.el7.x86_64 Preparing... ################################# [100%] Updating / installing... 1:python-libs-2.7.5-76.el7 ################################# [ 8%] 2:python-2.7.5-76.el7 ################################# [ 17%] 3:python-backports-1.0-8.el7 ################################# [ 25%] 4:python-pycurl-7.19.0-19.el7 ################################# [ 33%] 5:python-ipaddress-1.0.16-2.el7 ################################# [ 42%] 6:python-backports-ssl_match_hostna################################# [ 50%] 7:rpm-4.11.3-35.el7 ################################# [ 58%] 8:rpm-python-4.11.3-35.el7 ################################# [ 67%] 9:python-setuptools-0.9.8-7.el7 ################################# [ 75%] 10:python-urlgrabber-3.10-9.el7 ################################# [ 83%] 11:python-iniparse-0.4-9.el7 ################################# [ 92%] 12:python-devel-2.7.5-76.el7 ################################# [100%]
再安裝 yum,同樣也要加 --replacefiles --replacepkgs。
sudo rpm --replacefiles --replacepkgs -ivh yum-3.4.3-161.el7.centos.noarch.rpm rpm-python-4.11.3-35.el7.x86_64.rpm yum-metadata-parser-1.1.4-10.el7.x86_64.rpm yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm rpm-4.11.3-35.el7.x86_64.rpm
輸出為
Preparing... ################################# [100%] Updating / installing... 1:rpm-4.11.3-35.el7 ################################# [ 20%] 2:rpm-python-4.11.3-35.el7 ################################# [ 40%] 3:yum-metadata-parser-1.1.4-10.el7 ################################# [ 60%] 4:yum-plugin-fastestmirror-1.1.31-5################################# [ 80%] 5:yum-3.4.3-161.el7.centos ################################# [100%]
這里一定要注意,必須出現進度條 100% 的 輸出,才是安裝成功了。
不同版本的系統,需要的包可能不太一樣,當運行安裝命令時,可能會提示有一些依賴包缺失。
這種情況下,可以根據提示下載響應的依賴包,添加到 rpm -ivh 的列表中。
2.3 可以使用了
嘗試運行下 yum。
yum --version
輸出為
3.4.3 Installed: rpm-4.11.3-32.el7.x86_64 at 2018-06-20 10:02 Built : CentOS BuildSystem <http://bugs.centos.org> at 2018-04-11 03:54 Committed: Panu Matilainen <pmatilai@redhat.com> at 2017-11-13 Installed: rpm-4.11.3-35.el7.x86_64 at 2019-03-07 10:09 Built : CentOS BuildSystem <http://bugs.centos.org> at 2018-10-30 19:27 Committed: Pavlina Moravcova Varekova <pmoravco@redhat.com> at 2018-06-19 Installed: yum-3.4.3-161.el7.centos.noarch at 2019-03-07 10:08 Built : CentOS BuildSystem <http://bugs.centos.org> at 2018-11-05 01:54 Committed: CentOS Sources <bugs@centos.org> at 2018-10-30 Installed: yum-plugin-fastestmirror-1.1.31-50.el7.noarch at 2019-03-07 10:08 Built : CentOS BuildSystem <http://bugs.centos.org> at 2018-10-30 22:58 Committed: Michal Domonkos <mdomonko@redhat.com> at 2018-08-24
三、python 升級小建議
-
最好編譯安裝 python 包到一個獨立的目錄,需要使用高版本 python 時,直接指定此版本的可執行文件路徑即可。
-
千萬不要刪除老版本 python, yum 本身自己升級兼容可能還需要很久,當前還是會依賴系統默認的 python。
