[問題解決]RedHat7更換CentOS7的yum源時踩過的坑
更換yum源的流程
-
檢視當前yum程式
$ rpm -qa|grep yum
這裡推薦將其結果截圖或拷貝出來,以免後面報錯修復。
-
刪除原有yum源
$ rpm -aq | grep yum|xargs rpm -e --nodeps
-
判斷自己的系統適合哪個CentOS源
放在第一位的判斷標準就是系統自帶python的版本。
如果自帶python2.6版本,那麼你比較適合CentOS 6.9系統,你所需要的rpm包的存放地址為
如果自帶Python2.7版本,那麼你比較適合CentOS 7.0系統,你所需要的rpm包的存放地址為
(我這裡演示的就是安裝CentOS7的yum源)
-
使用CentOS的yum源下載新的yum安裝包
我就不推薦使用wget命令獲取rpm安裝包了,因為我懶得寫並且wget老是會下載不下來,這裡推薦下面的方法:
(如果網路不好)推薦直接用瀏覽網頁http://mirrors.163.com/centos/7/os/x86_64/Packages/,然後分別按關鍵詞python-iniparse,yum-metadata-parser,yum-,yum-plugin-fastestmirror搜尋出對應的四個rpm檔案,點選連結用瀏覽器或迅雷下載。下載檔案到本地再上傳到伺服器上。
-
安裝yum源
首先切換到rpm檔案存放地址。
$ rpm -ivh yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
$ rpm -ivh yum-3.4.3-158.el7.centos.noarch.rpm yum-plugin-fastestmirror-1.1.31-45.el7.noarch.rpm
最後兩個包一起裝,不然會報錯,因為他們之間存在依賴關係.
-
更改yum源
#我們使用網易的CentOS映象源
$ cd /etc/yum.repos.d/
$ rm -f /etc/yum.repos.d/redhat.repo
-
清理yum快取
$ yum clean all # 清除原有快取
$ yum makecache # 將伺服器上的軟體包資訊快取到本地,以提高搜尋安裝軟體的速度 #
$ yum update
現在可以使用CentOS的yum源線上安裝軟體了!
踩坑1:rpm版本過低
安裝yum-3.4.3-118.el7.centos.noarch.rpm時報錯了。
這是因為我的python-urlgrabber版本為小於3.10-8,可以用下面的命令來檢視python-urlgrabber的版本。
$ rpm -qa|grep python-urlgrabber
可以使用下面的命令檢視當前rpm命令的版本。
$ rpm –version
其中python-urlgrabber是很好更新的,在http://mirrors.163.com/centos/7/os/x86_64/Packages/搜尋並下載python-urlgrabber-3.10-8.el7.noarch.rpm,然後使用命令安裝即可
$ rpm -Uvh python-urlgrabber-3.10-8.el7.noarch.rpm
至於rpm的更新我是踩了不少坑。開始覺得用rpm自我更新可能會出問題,然後打算想採用CentOS6.9的yum源,但是報錯結果是其依賴於python2.6。如果解除安裝系統自帶的python,那麼yum命令和rpm命令都不能使用了。所以判斷這樣做更不合適。
$ rpm -Uvh rpm-4.11.3-25.el7.x86_64.rpm --nodeps
如果命令裡不加—nodeps,結果是這樣的:
升級完python-urlgrabber和rpm-4.11.3-25就可以使用rpm命令安裝yum了,詳細參考第一節的第五步。
但是由於rpm命令的升級沒有考慮他的依賴,所以在使用yum命令時經常會提示一些資訊:
** Found 6 pre-existing rpmdb problem(s), 'yum check' output follows: PackageKit-0.8.9-11.el7.x86_64 has missing requires of PackageKit-backend anaconda-19.31.79-1.el7.x86_64 has missing requires of yum-utils >= ('0', '1.1.11', '3') rhn-check-2.0.2-5.el7.noarch has missing requires of yum-rhn-plugin >= ('0', '1.6.4', '1') rpm-build-4.11.1-16.el7.x86_64 has missing requires of rpm = ('0', '4.11.1', '16.el7') rpm-libs-4.11.1-16.el7.x86_64 has missing requires of rpm = ('0', '4.11.1', '16.el7') rpm-python-4.11.1-16.el7.x86_64 has missing requires of rpm = ('0', '4.11.1', '16.el7') |
可以這樣做:使用yum命令來安裝或更新rpm和yum的依賴包。
$ yum install yum-utils
$ yum install yum-rhn-plugin
$ yum update rpm-build
$ yum update rpm-libs
$ yum update rpm-python
踩坑2:一直找不到PackageKit-backend
坑1解決後,6個提示資訊只剩下一個:
** Found 6 pre-existing rpmdb problem(s), 'yum check' output follows: PackageKit-0.8.9-11.el7.x86_64 has missing requires of PackageKit-backend |
PackageKit-backend在任何一個rpm源裡都是找不到的,我開始認為PackageKit應該是Redhat遺留下來的,二者不相容,這裡選擇將PackageKit解除安裝,重新安裝CentOS 7的PackageKit。
$ rpm -aq | grep PackageKit|xargs rpm -e --nodeps # 解除安裝PackageKit
然後使用yum命令時系統提示:
gnome-packagekit-3.8.2-10.el7.x86_64 has missing requires of PackageKit >= ('0', '0.5.0', None) gnome-packagekit-3.8.2-10.el7.x86_64 has missing requires of PackageKit-device-rebind >= ('0', '0.5.0', None) gnome-packagekit-3.8.2-10.el7.x86_64 has missing requires of PackageKit-libs >= ('0', '0.5.0', None) gnome-packagekit-3.8.2-10.el7.x86_64 has missing requires of libpackagekit-glib2.so.16()(64bit) gnome-settings-daemon-updates-3.8.6.1-9.el7.x86_64 has missing requires of libpackagekit-glib2.so.16()(64bit) realmd-0.14.6-6.el7.x86_64 has missing requires of libpackagekit-glib2.so.16()(64bit) |
這讓人很難受,下載CentOS 7的PackageKit,發現它的版本如下。使用yum命令安裝後系統提示缺失其他軟體,
這裡就不列出來了。
將rpm包下載下來後,用rpm命令一一安裝。我這時想起來當時用rpm -qa|grep yum命令時有一條是PackageKit-yum*****,而我現在使用rpm -qa|grep yum所得到的結果沒有PackageKit-yum*****了,我就嘗試從這個網站上下載PackageKit-yum-0.8.9-11.el7.x86_64.rpm 和PackageKit-yum-plugin-0.8.9-11.el7.x86_64.rpm,使用rpm命令安裝,發現安裝了PackageKit-yum-0.8.9-11.el7.x86_64.rpm之後系統就不提示資訊了,至此問題得到完滿解決。
另記:PackageKit似乎是用來自動更新軟體的,yum命令可能會被它佔用很久,如果想要停止PackageKit自動更新,可以參考:centos7下yum升級被PackageKit鎖定
在這個過程中不僅更新了yum源,還更新了rpm命令,處理了包依賴的問題,消除了每一條系統提示資訊。
這個過程給我的教訓就是:以後用rpm -aq | grep yum|xargs rpm -e --nodeps命令解除安裝軟體之前一定要使用rpm -qa|grep yum記錄下來所有的軟體,用於後期比較。發現有缺少的東西最好補上,說不定就能解決問題。