redhat系列linux系統的yum,有時會出現錯誤的依賴,用linux早期,遇到該類問題簡直是束手無策,無奈之下會在yum的“教唆“下使用“--skip-broken”參數,有時確實可以解決問題,但有時的後果,可以把系統玩兒壞,下次啟動無法啟動,或出現其它莫名其妙的問題。
列一個典型的錯誤依賴訊息如下:
--> 正在處理依賴關係 /usr/sbin/ldconfig,它被軟體包 libva1-1.3.1-11.el7.x86_64 需要
--> 正在處理依賴關係 /usr/sbin/ldconfig,它被軟體包 libmad0-0.15.1b-4.el7.x86_64 需要
--> 正在處理依賴關係 /usr/sbin/ldconfig,它被軟體包 librtmp0-2.3-1.el7.x86_64 需要
--> 正在處理依賴關係 /usr/sbin/ldconfig,它被軟體包 libx264_142-0.142-20_20140406.2245.el7.x86_64 需要
--> 正在處理依賴關係 /usr/sbin/ldconfig,它被軟體包 libxvidcore4-1.3.2-15.el7.x86_64 需要
.......
錯誤:軟體包:libmad0-0.15.1b-4.el7.x86_64 (@atrpms)
需要:/usr/sbin/ldconfig
正在刪除: glibc-2.17-55.el7_0.1.i686 (@updates)
未找到
更新,由: glibc-2.17-55.el7_0.3.i686 (updates)
未找到
錯誤:軟體包:librtmp0-2.3-1.el7.x86_64 (@atrpms)
需要:/usr/sbin/ldconfig
正在刪除: glibc-2.17-55.el7_0.1.i686 (@updates)
未找到
更新,由: glibc-2.17-55.el7_0.3.i686 (updates)
未找到
您可以嘗試添加 --skip-broken 選項來解決該問題
您可以嘗試執行:rpm -Va --nofiles --nodigest
看到了最後兩行了吧,通常別聽信它,小心!
為了優雅的處理類似錯誤依賴的問題,要搞先瞭解一下該問題的原因。通常是在自己手動安裝了一些非官方rpm包,或使用了多個yum源所致。尤其是升級安裝了新版本的包。例如,在centos裡為了安裝某些軟體而使用fedora裡的包升級了系統內建的包。
個人經驗如下:
先移除/etc/yum.repo.d/下非系統官方的源,備份到其它目錄裡,處理好問題後還移回來繼續用。
yum list 查看系統都有哪些源的包,除了@base @anaconda @updates 之外的,都要留意一下,按“靠譜”程度從低到高逐漸移除。這裡的“靠譜程度”,要憑一些經驗的。 如本文前面列出錯誤依賴的這個例子,本人用了好多個源的包,@epel @atrpms @nux-dextop @google-chrome 等這幾個第三方源,epel是很高品質的,google-chrome 只有chrome瀏覽器,其它幾個就是不太靠譜的,先移除它們。
檢查yum list列出的包名,是否用了fedora,或非本機架構的等的包(如x64系統下686的包),yum erase移除它們。卸載包時,注意著,別把重要的系統包卸載了。千萬別這樣帶-y 參資料 yum erase {包名} -y,yum erase 卸載某個包時,系統提示會提示都移除哪些包,如果看著不對勁就按 N
最後,你會找到出問題的那個包名,即提示錯誤依賴的資訊
--> 正在處理依賴關係 /usr/sbin/ldconfig,它被軟體包 libbluray1-0.4.0-6.el7.x86_64 需要
--> 解決依賴關係完成
錯誤:軟體包:libbluray1-0.4.0-6.el7.x86_64 (@atrpms)
需要:/usr/sbin/ldconfig
正在刪除: glibc-2.17-55.el7_0.1.x86_64 (@updates)
未找到
更新,由: glibc-2.17-55.el7_0.3.x86_64 (updates)
未找到
您可以嘗試添加 --skip-broken 選項來解決該問題
您可以嘗試執行:rpm -Va --nofiles --nodigest
會類似上面所示,只是少數一兩個包,嘗試卸載一下看看
[root@fsc ~]# rpm -e libbluray1-0.4.0-6.el7.x86_64
錯誤:依賴檢測失敗:
libbluray.so.1()(64bit) 被 (已安?) gvfs-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-fuse-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-afc-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-gphoto2-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-goa-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-mtp-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-smb-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-afp-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) gvfs-archive-1.16.4-7.el7.x86_64 需要
libbluray.so.1()(64bit) 被 (已安?) libbluray-0.4.0-6.el7.x86_64 需要
libbluray1 = 0.4.0-6.el7 被 (已安?) libbluray-0.4.0-6.el7.x86_64 需要
那查查系統裡該包是什麼版本吧 rpm -q {包名}
上面例子裡,該包是atrpms源的包,比centos源裡的包新。回憶時當時為了安裝smplayer,裝了一系列atrpms的包。而印象中,atrpms源有時會升級centos的包,所以就造成了yum update 升級系統時造成錯誤依賴。到centos鏡像裡下載這個rpm包,rpm --force -Uvh {包檔案路徑}覆蓋安裝一下,然後再yum更新試試。
如果沒有問題,那就好了。再把yum 源的設定檔移回去,重新yum makecache,然後根據剛才卸載的包的記錄,把它們安裝上;可參考history 命令的記錄.