Вопрос или проблема
Следуя https://access.redhat.com/solutions/64069
Общая документация о состоянии системы как до, так и после применения патчей всегда хорошая практика. Это должно включать выполнение package-cleanup с флагами –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
Загруженные плагины: fastestmirror
Загрузка скорости зеркал из кэшированного файла хоста
* 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
?
Далее, я выполнил следующую команду, чтобы получить список «листьев» (Leaf nodes — это RPM, от которых не зависит ни один другой RPM):
[root@localhost boot]# package-cleanup --leaves
Загруженные плагины: 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
Загруженные плагины: changelog, fastestmirror
Разрешение зависимостей
--> Проверка транзакции
---> Пакет libsysfs.x86_64 0:2.1.0-16.el7 будет удалён
--> Завершено разрешение зависимостей
Зависимости разрешены
=============================================================================================================================================================================================
Пакет Архитектура Версия Репозиторий Размер
=============================================================================================================================================================================================
Удаление:
libsysfs x86_64 2.1.0-16.el7 @anaconda 146 k
Итог по транзакции
=============================================================================================================================================================================================
Удалить 1 Пакет
По моему пониманию, 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
ошибка: открытие libsysfs-2.1.0-16.el7.x86_64 не удалось: Нет такого файла или директории
Спасибо за любые возможные разъяснения!
«Нужно ли мне действительно беспокоиться о том, что пакет помечен как сирота?» Нет, это просто означает, что пакет недоступен из ваших текущих настроенных репозиториев.
Цитируя из Руководства по RPM:
В терминологии RPM каждый пакет предоставляет возможности. Возможность — это просто текстовая строка, которую пакет утверждает, что предоставляет. В большинстве случаев возможность называет файл или пакет. Но возможность может быть любой произвольной текстовой строкой.
Смотря на вывод команды rpm -q --provides libsysfs
на моей системе (Fedora 33), предоставляются три возможности:
# rpm -q --provides libsysfs
libsysfs = 2.1.0-30.fc33
libsysfs(x86-64) = 2.1.0-30.fc33
libsysfs.so.2()(64bit)
Одна или несколько из этих 3 возможностей могут быть проверены rpm
(или yum
или 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
достаточно.
Ответ или решение
Понимание package-cleanup
с флагами --orphans
и --leaves
При управлении пакетами в операционной системе на базе RHEL/CentOS, важно понимать работу утилиты package-cleanup
, особенно с такими флагами, как --orphans
и --leaves
. Эти параметры помогают вам поддерживать систему в актуальном и чистом состоянии, выявляя ненужные или неиспользуемые пакеты.
--orphans
: Определение сирот
Флаг --orphans
предназначен для выявления пакетов, которые не доступны в текущих конфигурациях репозиториев. Это означает, что такие пакеты могут быть результатом установки программного обеспечения, которое в последующем было удалено или удалено из репозитория. Пример, который вы привели:
[root@localhost boot]# package-cleanup --orphans
kernel-3.10.0-1127.el7.x86_64
Это свидетельствует о том, что пакет ядра kernel-3.10.0-1127.el7.x86_64
не может быть найден в ваших активных репозиториях, так как он относится к более ранней версии CentOS. В таких ситуациях вопрос о том, нужно ли беспокоиться о маркировке пакета как «сирота», особенно если вы не планируете его удалять или он вам нужен, можно решить по своему усмотрению. Если вы часто используете возможность отката изменений с помощью yum history undo
, имеет смысл удостовериться, что нужные пакеты доступны.
--leaves
: Определение «листьев»
Флаг --leaves
используется для определения пакетов, которые не имеют зависимостей от других пакетов, то есть их можно назвать «листьями» в дереве зависимостей RPM. Например, когда вы выполнили команду:
[root@localhost boot]# package-cleanup --leaves
libsysfs-2.1.0-16.el7.x86_64
Это означает, что libsysfs
не нужен ни одним другим установленным пакетом. Ваша интерпретация вывода команд rpm -q --provides
и rpm -q --requires
подтверждает, что данный пакет предоставляет некие библиотеки, но если они не требуются, его удаление не приведет к зависимости.
Разрешение зависимостей и удаление пакета
Когда вы запускаете команду для удаления пакета:
[root@localhost boot]# yum remove libsysfs-2.1.0-16.el7.x86_64
Yum корректно анализирует зависимости и сообщает, что пакет libsysfs
может быть удален без каких-либо последствий для другой установленного программного обеспечения. Действительно, предоставляемые пакетом libsysfs
возможности будут доступны только через него, если другие пакеты их не запрашивают.
О том, почему не удается отобразить файлы пакета
Когда вы пытались перечислить файлы, установленные для libsysfs
, с помощью команды:
[root@localhost boot]# rpm -qlp libsysfs-2.1.0-16.el7.x86_64
Ошибка, которая возникла, связана с тем, что ключ -p
используется для запроса неустановленных пакетов и требует указания полного имени файла RPM, который вы хотите проверить. В вашем случае нужно использовать:
rpm -ql libsysfs
Это позволит увидеть все файлы, которые были установлены этим пакетом на вашу систему.
Заключение
Таким образом, использование утилиты package-cleanup
с флагами --orphans
и --leaves
незаменимо для поддержания чистоты системы и экономии ресурсов. Возможно, не следует углубляться в детали, если «сироты» не вызывают проблем, а удаляемые «листья» не влияют на функциональность системы. Регулярное использование данных команд позволит вам сохранять ваш сервер в оптимальном состоянии и избегать возможных зависимостей в будущем.