Linux

如何通過部分完成的 glibc yum 更新來解決依賴問題

  • April 27, 2017

今天早上我嘗試更新我的生產 Web 伺服器(執行 Amazon Linux 的 t2)但它失敗了,因為我的 RAM 用完了(php-fpm 擁有一切)。我停止了 php-fpm 以釋放一些 RAM,但 yum 更新無法完成。伺服器執行正常,但我想解決這個問題。

# yum update
Resolving Dependencies
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.17-106.168.amzn1 will be updated
--> Processing Dependency: glibc-headers = 2.17-106.168.amzn1 for package: glibc-devel-2.17-106.168.amzn1.x86_64
---> Package glibc-headers.x86_64 0:2.17-157.169.amzn1 will be an update
--> Finished Dependency Resolution
Error: Package: glibc-devel-2.17-106.168.amzn1.x86_64 (@amzn-main)
      Requires: glibc-headers = 2.17-106.168.amzn1
      Removing: glibc-headers-2.17-106.168.amzn1.x86_64 (@amzn-main)
          glibc-headers = 2.17-106.168.amzn1
      Updated By: glibc-headers-2.17-157.169.amzn1.x86_64 (amzn-updates)
          glibc-headers = 2.17-157.169.amzn1
You could try using --skip-broken to work around the problem
** Found 6 pre-existing rpmdb problem(s), 'yum check' output follows:
glibc-devel-2.17-106.168.amzn1.x86_64 has missing requires of glibc(x86-64) = ('0', '2.17', '106.168.amzn1')
glibc-devel-2.17-157.169.amzn1.x86_64 is a duplicate with glibc-devel-2.17-106.168.amzn1.x86_64
glibc-devel-2.17-157.169.amzn1.x86_64 has missing requires of glibc-headers = ('0', '2.17', '157.169.amzn1')
glibc-headers-2.17-106.168.amzn1.x86_64 has missing requires of glibc(x86-64) = ('0', '2.17', '106.168.amzn1')
subversion-1.9.4-2.55.amzn1.x86_64 has missing requires of subversion-libs(x86-64) = ('0', '1.9.4', '2.55.amzn1')
subversion-1.9.5-1.56.amzn1.x86_64 is a duplicate with subversion-1.9.4-2.55.amzn1.x86_64

這是已安裝的 glibc 軟體包

# rpm -qa | grep glibc
glibc-devel-2.17-157.169.amzn1.x86_64
glibc-devel-2.17-106.168.amzn1.x86_64
glibc-common-2.17-157.169.amzn1.x86_64
glibc-headers-2.17-106.168.amzn1.x86_64
glibc-2.17-157.169.amzn1.x86_64

一個問題似乎是安裝了兩個不同版本的 glibc-devel。看起來 glibc 的某些部分在版本 106 上,而其他部分在版本 157 上。

我重新啟動了伺服器,正如預期的那樣沒有任何區別,但值得一試。我跑了以下,沒有效果

yum-complete-transaction
yum-complete-transaction --cleanup-only
yum clean all

過去我也遇到過類似的問題,但使用的軟體包不太重要。我只是將它們全部刪除,然後再次安裝它們。我不相信這對 glibc 是可能的,因為很多事情都依賴於它。

我查看了 Centos 論壇,一個選項似乎是降級一些軟體包以降級一些軟體包,但我不知道是否有更好的選擇。由於這是我的生產伺服器,因此在嘗試此操作之前,我將不勝感激。如果這是一個好方法,我應該降級哪些軟體包?降級後我該怎麼辦,定期 yum 更新?

請注意,我有定期備份,如果需要,可以從最近的備份中恢復,但我不希望這樣做,因為我必須重做一些有點棘手的 SSL 證書工作。我計劃將來遷移到 Ubuntu 並使用 CloudFormation 建構伺服器,因此如果伺服器出現故障,我可以簡單地創建另一個,但這是未來的任務。

感謝您使用回滾的建議。我試過了,但它沒有正確回滾。

我創建了另一個 VM 實例並嘗試手動執行操作。從上面注意到我有兩個版本的 glibc-devel 我做了以下

yum remove glibc-devel-2.17-157.169.amzn1.x86_64
yum update glibc-devel-2.17-106.168.amzn1.x86_64

那時我做了一個“yum check”,它告訴我顛覆也有問題。

yum remove subversion
yum install subversion
yum clean all
yum check

這似乎已經解決了這個問題。

引用自:https://serverfault.com/questions/831165