1. 程式人生 > >[問題解決]RedHat7更換CentOS7的yum源時踩過的坑

[問題解決]RedHat7更換CentOS7的yum源時踩過的坑

更換yum源的流程

  1. 檢視當前yum程式

    $ rpm -qa|grep yum

    這裡推薦將其結果截圖或拷貝出來,以免後面報錯修復。

  2. 刪除原有yum源

    $ rpm -aq | grep yum|xargs rpm -e --nodeps

  3. 判斷自己的系統適合哪個CentOS源

    放在第一位的判斷標準就是系統自帶python的版本。

    如果自帶python2.6版本,那麼你比較適合CentOS 6.9系統,你所需要的rpm包的存放地址為

    如果自帶Python2.7版本,那麼你比較適合CentOS 7.0系統,你所需要的rpm包的存放地址為

    (我這裡演示的就是安裝CentOS7的yum源)

  4. 使用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檔案,點選連結用瀏覽器或迅雷下載。下載檔案到本地再上傳到伺服器上。

  5. 安裝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

    最後兩個包一起裝,不然會報錯,因為他們之間存在依賴關係.

  6. 更改yum源

    #我們使用網易的CentOS映象源

    $ cd /etc/yum.repos.d/

    $ rm -f /etc/yum.repos.d/redhat.repo

  7. 清理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記錄下來所有的軟體,用於後期比較。發現有缺少的東西最好補上,說不定就能解決問題。