Centos yum resync 已安装软件包

Centos yum resync 已安装软件包

我的情况很奇怪。我有一台安装了 CentOS 6.6 版(最终版)的 Web 服务器,其中安装了 nginx、mysql、ISPConfig 和 Webmin,运行正常。最近,我注意到在使用 phpMyAdmin 时弹出一条消息,提示有新版本的 phpMyAdmin。Webmin 没有报告任何可用更新,因此我运行时"yum update"收到许多错误,例如:

YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. $releasever is not a valid release or hasnt been released yet/

在尝试了一些配置并执行了 之后"yum clean all",重新启动服务器,我可以再次运行 yum,但现在 yum 数据库似乎已被删除或发生了其他事情。当我运行时,"yum list installed"我什么也得不到!当我运行时,"yum update"我得到"No Packages marked for Update"。所有存储库都已启用。所有软件包都已安装,但现在 yum db 中没有任何内容。例如,当我运行时,"yum install phpMyAdmin"我得到:

Installing:
 phpMyAdmin                    noarch   4.3.7-1.el6.remi      remi  4.5 M
Installing for dependencies:
 MAKEDEV                       x86_64   3.24-6.el6            base  89 k
 apr                           x86_64   1.3.9-5.el6_2         base  123 k
 apr-util                      x86_64   1.3.9-3.el6_0.1       base  87 k
 apr-util-ldap                 x86_64   1.3.9-3.el6_0.1       base  15 k
 audit-libs                    x86_64   2.3.7-5.el6           base  71 k
 basesystem                    noarch   10.0-4.el6            base  4.7 k
 bash                          x86_64   4.1.2-29.el6          base  907 k
 binutils                      x86_64   2.20.51.0.2-5.42.el6  base  2.8 M
......
Transaction Summary
===========================
Install     158 Package(s)

Total download size: 98 M
Installed size: 346 M
Is this ok [y/N]:

这意味着 yum 迄今为止安装的所有内容现在都已从 yum db 中删除,但仍然安装。

有没有办法恢复 yum 数据库或让 yum 检测服务器已安装哪些软件包?

答案1

我以前也遇到过类似的情况。我采取了以下措施:

  1. 列出文件系统上的所有文件。
  2. 下载我有文件的 yum 存储库的 SQLite DB。
  3. 创建一个脚本,查询哪个包提供每个文件的 SQLite DB,然后重新安装这些包。

这确实不是最快的解决方案。如果这不是一个关键系统,我会重建它。

答案2

问题似乎是 RPM 数据库被彻底破坏了。我所做的就是使用所有原始 RPM 来更新数据库,而没有安装任何东西。

您可以在文件中查找已安装软件包的列表/root/install.log,或者/var/log/yum.log*如果您安装了 yum log。如果您没有日志文件,则可以使用此 PHP 脚本从 yum 数据库目录结构中收集所有已安装的软件包yumdb_scan.php

我希望我的所有 RPM 都缓存了,但我最终通过在 RPM 搜索网站上搜索找到了所有内容。我还创建了另一个脚本来下载我已安装的所有内容,这些内容都位于基础操作系统上存储库。然后我收集了所有的 RPM 包,验证了我拥有所有的包,并创建了另一个脚本,用于rpm -Uvh --nodeps --justdb {$pckg}更新每个已安装包的 RPM db,而不改变任何系统文件。

一切都完成得很好,现在我终于可以使用 yum 安装新软件包并使用 repos 更新旧软件包了。

所以我的步骤是:

  1. 在系统中搜索已安装的 RPM 并创建一个列出所有 RPM 的文件。
  2. 收集系统上安装的所有 RPM,并匹配所有版本。
  3. 用于rpm -Uvh --nodeps --justdb <package-path>将 RPM 记录放入 RPM 数据库而不安装任何文件。

相关内容