yum путаница с package-cleanup –orphans и –leaves

Вопрос или проблема

Следуя 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 незаменимо для поддержания чистоты системы и экономии ресурсов. Возможно, не следует углубляться в детали, если «сироты» не вызывают проблем, а удаляемые «листья» не влияют на функциональность системы. Регулярное использование данных команд позволит вам сохранять ваш сервер в оптимальном состоянии и избегать возможных зависимостей в будущем.

Оцените материал
Добавить комментарий

Капча загружается...