it-swarm-ru.tech

Список пакетов в Yum, которые зависят от другого установленного пакета

Я пытаюсь установить сторонний RPM-пакет на RHEL5, который зависит от версии 3.4 sqlite. Согласно Yum У меня уже установлена ​​3.3.6.

Есть ли способ перечислить установленные пакеты, которые зависят от sqlite 3.3.6?

53
Rich

Опция rpm, которую вы хотите:

rpm -q --whatrequires sqlite

Отредактировано: добавлено - установлено за обсуждение в других ответах/комментариях

Отредактировано: удалено - установлено, поскольку это неверная опция для rpm

50
Wes Hardaker

Ответ

_repoquery -q --installed --whatrequires sqlite
_

Пояснения

_rpm -q --whatrequires sqlite_ сообщает только о зависимостях от имен пакетов.

Напротив, repoquery действует следующим образом (из manpages):

_   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.
_

Пример

Давайте возьмем пакет libdb.

_# rpm -q --whatrequires libdb
no package requires libdb
_

Никакой пакет не зависит от libdb, поэтому мы должны иметь возможность удалить его плавно. Однако...

_# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected
_

Как вы можете видеть, некоторые другие пакеты зависели не от пакета, а от предоставляемого им файла libdb-5.3.so()(64bit).

Наконец, вот реальный список пакетов в зависимости от libdb:

_# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
_
43
Elouan Keryell-Even

Для dnf (новая версия yum) вы можете попробовать с помощью команды оболочки repoquery:

dnf repoquery --whatrequires sqlite

Если он недоступен, вы можете установить его с помощью команды:

dnf -y install dnf-plugins-core
12
teoincontatto

Вы также можете попробовать эту команду.

repoquery --whatrequires sqlite

Я получил эту команду от ServerFault , а также от Форумы Fedora.

7
FilBot3

Я думаю, что вы действительно хотите знать, это "какие пакеты требуют sqlite-3.3.6, но не будут рады sqlite-3.4.z" ... и единственный хороший способ выяснить это, это попробуй это. Подобно:

echo | yum upgrade sqlite
3
James Antill

Как сказал Уэс Хардакер , хороший встроенный метод заключается в использовании rpm -q --whatrequires <package>. Дело в том, что rpm работает с возможностями для разрешения зависимостей, а не просто с пакетами, как, например, dpkg в семействе дистрибутивов Linux Debian/Ubuntu. Как отметили другие, просто делать rpm -q --whatrequires sqlite не рассказывает всей истории, поэтому некоторые предлагают использовать repoquery. repoquery, однако, не устанавливается по умолчанию в минимальной RHEL/CentOS 7 (может быть, и для настольного компьютера?), поэтому может быть доступно не для всех.

Пользователь может сделать rpm -q --provides <pkgname> чтобы увидеть все возможности, предоставляемые пакетом, затем используйте rpm -q --whatrequires <capability> чтобы увидеть, какие установленные пакеты требуют такой возможности. Эта информация может быть кратко запрошена с использованием однострочного BASH (разделенного здесь на две строки по длине):

capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

При этом используются только параметры, встроенные в rpm, и поэтому не требуется устанавливать никаких дополнительных пакетов (например, yum-utils в CentOS 7, который представляет собой пакет, содержащий repoquery).

1
villapx