如何删除多个相同的已安装的 RPM 包?

如何删除多个相同的已安装的 RPM 包?

某个软件包更新即将结束时,主机崩溃了,现在我遇到了一个需要修复的不一致问题:

rpm -Va抱怨依赖包丢失,但那些包已经安装好了!

但是当我使用时,rpm -qa package_name我看到同一个包被安装多次(例如三次)。

当我尝试使用删除包时rpm -ve package_namerpm告诉我:

错误:“package_name”指定了多个包:

但请注意,冒号后没有输出。因此,当使用列出软件包时,rpm -qa package_name我得到了三个相同软件包的列表(相同发行版、相同版本、相同架构)。当我使用完整的软件包名称时rpm -ve,我再次收到有关多个软件包的消息,但这次列出了完整的软件包名称。

我怎样才能删除重复的包以便重新干净地安装它们?

rpm版本是4.14.3-150300.46.1.x86_64SLES 15 SP3

我已经尝试过了rpm -v --rebuilddb:它没有输出任何东西,也没有改变任何东西。

答案1

在 BtrFS 上配置了自动快照后,我尝试了以下操作:

  1. mkdir /var/lib/rpm/SAVED

  2. mv /var/lib/rpm/* /var/lib/rpm/SAVED/

  3. 用于snapper list查找最近有用的快照编号。在我的例子中,它是 439。

  4. 将保存的 RPM 数据库复制回系统。/var在 中找到一个空文件后/.snapshots/439/snapshot/var,我意识到这是一个指向(ie:/var/lib/rpm的符号链接(顺便说一句,在我看来这是一个愚蠢的概念)。所以我习惯将快照的那部分复制回系统中。../../usr/lib/sysimage/rpm/usr/lib/sysimage/rpmcp -a /.snapshots/439/snapshot/usr/lib/sysimage/rpm/* /var/lib/rpm/

  5. 接下来我检查/var/log/zypp/history发现快照之后被删除的软件包(系统认为这些软件包仍然存在),所以我重新安装了它们以使 RPM 数据库与文件一致。

  6. 同样,我重复了在线更新(可能在文件系统中,但不在 RPM 数据库中)。请记住:该快照已拍摄更新失败,因此更新不在数据库中。

  7. 最后我跑去rpm -Va寻找可疑的输出,可能需要重新安装包。不过看起来还不错!

因此,整个问题似乎在于 RPM 数据库损坏或不一致,但 RPM 本身并未检测到该问题。

相关内容