Перерахування пакетів у Yum, які залежать від іншого встановленого пакету


48

Я намагаюся встановити сторонній пакет RPM на RHEL5, який залежить від версії 3.4 sqlite. За даними Yum, у мене вже встановлено 3.3.6.

Чи є спосіб перелічити встановлені пакети, які залежать від sqlite 3.3.6?

Відповіді:


47

Параметр rpm, який ви хочете, є:

rpm -q --whatrequires sqlite

Відредаговано: додано - встановлюється за обговоренням в інших відповідях / коментарях

Відредаговано: видалено - встановлено, оскільки це недійсна опція для rpm


3
Крім того, repoqueryможна використовувати для створення приємного дерева, подібного до структури всіх пакетів, які потребують певного пакету, наприклад:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
Я не згоден, що ця відповідь достовірна - звичайно, не на CentOS 7.x. Для тестування встановіть ImageMagick. OpenEXR-libs також будуть встановлені, оскільки ImageMagick залежить від цього. Тепер запустіть rpm -q - що вимагає OpenEXR-libs, а повернення "жоден пакет не вимагає OpenEXR-libs", який НЕПРАВИЛЬНИЙ. Тепер запустіть "repoquery -q --installed --whatrequires OpenEXR-libs", і він правильно повертає "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64". @відповідь випадкового хлопця нижче повинна бути правильною відповіддю тут.
Панчо

6
--installedє варіантом для, repoqueryале недійсний для rpm.
Ден Райс

36

Відповідь

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

1
Ця відповідь краща за прийняту відповідь
Панчо

11

Для dnf (нова версія yum) ви можете спробувати команду обгортки репокерів:

dnf repoquery --whatrequires sqlite

Якщо він недоступний, ви можете встановити його командою:

dnf -y install dnf-plugins-core

Вам потрібно --installed --recursiveв кінці, щоб він повертав лише те, що фактично встановлено, і не витягує з сховищ
Hashbrown

7

Ви також можете спробувати цю команду.

repoquery --whatrequires sqlite

Я отримав цю команду від ServerFault, а також від The Fedora Forums.


Це повернуті пакети, які я не встановлював.
2rs2ts

3

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

echo | yum upgrade sqlite

1

Як сказав Уес Хардакер , хороший вбудований метод - це використання rpm -q --whatrequires <package>. Річ у тім, що rpmпрацює на можливостях для вирішення залежності, а не просто на пакунках, як dpkgце стосується сімейства Debian / Ubuntu в дистрибутивах Linux. Як зазначають інші, просто робити 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).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.