使用 进行 Fedora 发行版升级(27->28)后dnf
,我尝试手动解决软件包版本之间的冲突(需要保持旧操作系统版本的功能;在引导时在 GRUB2 菜单中选择有效的操作系统版本)。
dnf
安全检查阻止删除冲突的软件包,我曾经rpm -e xxx --force
这样做过。我无意中删除了 glibc,PC 立即出错。
我想避免从头开始重建我的计算机,因为:
- 我不太记得几年前安装的所有应用程序(它们是通过 dnf 系统升级自动升级的),并且
- /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/。