1. 程式人生 > >rpm包依賴那些坑 ld-linux-x86-64.so.2:bad ELF interpreter

rpm包依賴那些坑 ld-linux-x86-64.so.2:bad ELF interpreter

rpm缺少依賴 yum依賴沖突

前言

在rpm/dpkg 安裝軟件包時會經常包缺少依賴類的錯誤,往往這時會選擇忽略依賴安裝,雖然有時這種方式解決了當下的問題,但卻為以後挖了坑。

往往是yum/apt 倉庫沒有相應軟件或相應版本時才使用rpm/dpkg 安裝軟件包,而出現這種情況大多數又是因為網絡限制或內部部署了本地庫,又或者是因為yum/apt 倉庫配置不全導致的

這裏說下,在centos 系統下至少要配置base、updates、extras這三類元數據地址

掉坑

過了N久,在安裝某一軟件包或yum 更新時,系統報出了依賴錯誤或版本沖突……比如glibc 依賴錯誤

1.glibc ld-linux-x86-64.so.2:bad ELF interpreter

這時想當然的盲目卸載glibc 然後安裝對應的版本 可能就會導致無法挽救的結果……
一旦將glibc 卸載後,絕大多少系統命令都會無法使用,因為需要依賴glibc庫文件,報錯如下
ld-linux-x86-64.so.2:bad ELF interpreter

這時如果恰巧系統安裝了busybox,則可以使用busybox 工具下載並重新安裝glibc庫文件

busybox wget http://mirror.centos.org/centos/6/os/x86_64/Packages/glibc-2.12-1.209.el6.x86_64.rpm
busybox rpm -ih glibc-2.12-1.209.el6.x86_64.rpm

2.Error: Package: glibc-2.12-1.209.el6.i686 (Base)

描述:已經配置好yum源,在update 時報錯終止,具體信息如下

Error: Package: glibc-2.12-1.209.el6.i686 (Base)
           Requires: glibc-common = 2.12-1.209.el6
           Installed: glibc-common-2.12-1.209.el6_9.1.x86_64 (installed)
               glibc-common = 2.12-1.209.el6_9.1
           Available: glibc-common-2.12-1.209.el6.x86_64 (Base)
               glibc-common = 2.12-1.209.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

之前在處理類似問題時是因為沒有yum 源,手工安裝更新,但這次已經配置好了yum,不應該報此類錯誤

yum clan all
yum update

反復試了幾次,問題依舊。檢查yum 配置,發現內容相同的兩份repo 文件,一份為開啟狀態,一份為關閉狀態,且updates元數據都是關閉狀態
保留一份repo 文件,且將元數據全部設置為開啟狀態,再次update 執行成功

3.has missing requires of

此類錯誤在update 錯誤後需要執行

yum check

才會出現,報錯信息如下

cloog-ppl-0.15.7-1.2.el6.x86_64 has missing requires of libppl.so.7()(64bit)
cloog-ppl-0.15.7-1.2.el6.x86_64 has missing requires of libppl_c.so.2()(64bit)
Error: check all

大概意思是“has missing requires of” 前面的軟件包缺少“has missing requires of” 後面的庫文件
如確認軟件包可有可無時,則可先remove掉,若無法remove,則需要安裝對應缺少的庫文件包,然後則可正常update

後記

單獨rpm 安裝軟件包時,如遇依賴錯誤,一定要連同缺少的依賴包一起安裝
慎用 --nodeps 參數,例如glibc和glibc-common 相互依賴,則可這樣安裝

rpm -ih glibc.rpm glibc-common.rpm

缺少什麽依賴就一起安裝什麽,有時系統已經安裝的需要的軟件包,但包版本略低,需要升級,安裝時則需要註意,此時應該用-U 參數升級軟件包,不是-i 參數安裝

rpm -Uh openssl-1.0.2.rpm

如遇依賴報錯,則同時將依賴的包一起升級

劃重點

以上的問題使用yum/apt 安裝方式基本都不會出現,所以有一個可以訪問到的元數據倉庫是多麽的重要!
針對centos 系統一定要保證有os、updates、extras這三個元數據倉庫
有關元數據倉庫的配置,可參考上一篇

rpm包依賴那些坑 ld-linux-x86-64.so.2:bad ELF interpreter