关于 package-cleanup --orphans 和 --leaves 的 yum 混淆

关于 package-cleanup --orphans 和 --leaves 的 yum 混淆

跟随时https://access.redhat.com/solutions/64069 修补之前和之后的系统状态的一般文档始终是良好的做法。这应该包括使用以下标志运行包清理:--orphans、--problems、--dupes、--leaves。

寻找孤儿(当前配置的存储库中不可用的软件包)我确实得到了kernel-3.10.0-1127.el7.x86_64,这是真的,因为我已经安装了 CentOS 7.8 并升级到 7.9,并且内核软件包位于https://vault.centos.org/7.8.2003/os/Source/SPackages/回购不是 7.9。

[root@localhost boot]# package-cleanup --orphans
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.wielun.net
 * extras: centos.wielun.net
 * updates: centos.wielun.net
kernel-3.10.0-1127.el7.x86_64
[root@localhost boot]# rpm -qa kernel
kernel-3.10.0-1160.6.1.el7.x86_64
kernel-3.10.0-1127.el7.x86_64

我可以想象,如果我想用来yum history undo恢复上次所做的更改,并且给定的rpm包必须在系统上可用,那么建议运行上述命令,但如果它没有被删除,yum update那么我是否会这样做?真的需要关心包裹是否标记为orphaned

接下来,我执行以下命令来获取叶子列表(叶子节点是不被任何其他 RPM 依赖的 RPM):

[root@localhost boot]# package-cleanup --leaves
Loaded plugins: fastestmirror
libsysfs-2.1.0-16.el7.x86_64
[root@localhost boot]# rpm -q --requires libsysfs-2.1.0-16.el7.x86_64
/sbin/ldconfig
/sbin/ldconfig
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
[root@localhost boot]# rpm -q --provides libsysfs-2.1.0-16.el7.x86_64
libsysfs = 2.1.0-16.el7
libsysfs(x86-64) = 2.1.0-16.el7
libsysfs.so.2()(64bit)

我检查了rpm -q --provides该软件包提供的功能libsysfs-2.1.0-16.el7.x86_64,并列出了 3 项。

当我现在运行时,yum remove libsysfs-2.1.0-16.el7.x86_64我得到以下信息:

[root@localhost boot]# yum remove libsysfs-2.1.0-16.el7.x86_64
Loaded plugins: changelog, fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libsysfs.x86_64 0:2.1.0-16.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================================================
 Package                                     Arch                                      Version                                            Repository                                    Size
=============================================================================================================================================================================================
Removing:
 libsysfs                                    x86_64                                    2.1.0-16.el7                                       @anaconda                                    146 k

Transaction Summary
=============================================================================================================================================================================================
Remove  1 Package

根据我的理解, yum 解决了所有依赖关系,看起来我可以随意删除软件包,但我想知道命令的输出rpm -q --provides。是否正确地说,列出的 3 个项目是与软件包一起安装的内容libsysfs.x86_64 0:2.1.0-16.el7,并且由于 yum 解决了所有依赖关系,并且系统上没有其他内容需要此软件包 + 它提供的软件包/共享库,因此可以毫无问题地删除它?

如果这是真的,为什么我无法列出作为该 rpm 一部分安装的文件?

[root@localhost boot]# rpm -qa libsysfs
libsysfs-2.1.0-16.el7.x86_64
[root@localhost boot]#
[root@localhost boot]#
[root@localhost boot]# rpm -qlp libsysfs-2.1.0-16.el7.x86_64
error: open of libsysfs-2.1.0-16.el7.x86_64 failed: No such file or directory

感谢您的任何澄清!

答案1

“我真的需要关心包裹是否被标记为孤儿吗?”不,只是意味着该包无法从您当前配置的任何存储库中获得。

引用自 RPM 指南:

在 RPM 术语中,每个包都提供功能。功能只是包声称它提供的一个文本字符串。在大多数情况下,功能会命名文件或包。但该功能可以是任意文本字符串。

查看我的系统(Fedora 33)上的输出rpm -q --provides libsysfs,提供了三种功能:

# rpm -q --provides libsysfs
libsysfs = 2.1.0-30.fc33
libsysfs(x86-64) = 2.1.0-30.fc33
libsysfs.so.2()(64bit)

当您安装软件包时,可能会通过rpm(或yum或)检查这 3 种功能中的一项或多项。dnf如果当前安装的软件包没有需要这 3 个功能中的任何一个,您可以删除该软件包而不会遇到依赖性错误。

继续,你的最后一个命令应该是rpm -ql libsysfs.-p表示查询已卸载的包 - 这需要提供包括扩展名的完整文件名,例如libsysfs-2.1.0-16.el7.x86_64.rpm

顺便说一句,您不需要键入yum remove libsysfs-2.1.0-16.el7.x86_64即可删除此包。yum remove libsysfs足够了。

相关内容