如何手动强制从 RPM 包重新加载文件?

如何手动强制从 RPM 包重新加载文件?

使用 进行 Fedora 发行版升级(27->28)后dnf,我尝试手动解决软件包版本之间的冲突(需要保持旧操作系统版本的功能;在引导时在 GRUB2 菜单中选择有效的操作系统版本)。

dnf安全检查阻止删除冲突的软件包,我曾经rpm -e xxx --force这样做过。我无意中删除了 glibc,PC 立即出错。

我想避免从头开始重建我的计算机,因为:

  1. 我不太记得几年前安装的所有应用程序(它们是通过 dnf 系统升级自动升级的),并且
  2. /etc 中将需要大量的配置工作来恢复我的网络环境以及计算机上的服务器的自定义设置。

使用救援磁盘,我可以启动并检查硬盘。一切看起来都比较“干净”。 glibc 包中的文件完全丢失。

我无法完成chroot前一个根(以便运行rpm -i glibc),因为chroot尝试启动/bin/bash丢失的根。

有没有办法告诉 rpm 执行其通常的工作,但安装文件,而/mnt/hard_disk/不是/

之后我将负责包数据库的一致性和完整性。

答案1

chroot可以采取命令来运行这可能会起作用:

chroot /mnt/hard_disk rpm -i glibc*.rpm

另外,rpm--root选项,所以这是另一个选项:

rpm -i --root /mnt/hard_disk glibc*.rpm

答案2

有一种方法可以做到这一点,尽管它不使用命令rpm。您需要有rpm2cpio可用的二进制文件,然后您只需执行以下操作:

# cd /mnt/hard_disk
# rpm2cpio <rpmfile> | cpio -idmv

正如您所提到的,您之后需要处理 RPMDB 完整性问题,但这将使文件就位。通过简单的谷歌搜索,可以找到许多包含相关信息和更多详细信息的网页,其中之一是https://blog.packagecloud.io/eng/2015/10/13/inspect-extract-contents-rpm-packages/

相关内容