如何修复 glibc 部分完成的 yum 更新的依赖性问题

如何修复 glibc 部分完成的 yum 更新的依赖性问题

今天早上我尝试更新我的生产 Web 服务器(t2 运行 Amazon Linux),但由于内存不足(php-fpm 已全部可用)而失败。我停止了 php-fpm 以释放一些内存,但 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 来构建服务器,因此如果服务器出现故障,我可以简单地创建另一个,但这是未来的任务。

答案1

感谢您建议使用回滚。我试过了,但无法正确回滚。

我创建了另一个 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”,它告诉我 subversion 也存在问题。

yum remove subversion
yum install subversion
yum clean all
yum check

这似乎已经解决了该问题。

答案2

我刚刚遇到了与 glibc-common-2.17-106.1.169.amzn1.x86_64 类似的问题,安装中断,而其他所有 glibc 版本均为 @ 2.17-55。

运行 yum reinstall glibc-common-2.17-106.1.169.amzn1.x86_64,触发正确的依赖性解析并修复冲突。

相关内容