package-cleanup --orphans 및 --leaves에 대한 혼동이 있습니다.

package-cleanup --orphans 및 --leaves에 대한 혼동이 있습니다.

팔로우할 때https://access.redhat.com/solutions/64069 패치 전후의 시스템 상태에 대한 일반적인 문서화는 항상 좋은 습관입니다. 여기에는 --orphans, --problems, --dupes, --leaves 플래그를 사용하여 패키지 정리 실행이 포함되어야 합니다.

고아(현재 구성된 저장소에서 사용할 수 없는 패키지)를 찾고 있는데 kernel-3.10.0-1127.el7.x86_64CentOS 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_643가지 항목이 나열되어 있습니다.

지금 실행하면 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충분한.

관련 정보