팔로우할 때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
충분한.