今天早上我尝试更新我的生产 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 check”,它告诉我颠覆也有问题。
这似乎已经解决了这个问题。
我刚刚遇到了 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,触发了正确的依赖解析并修复了冲突。