Как перечислить зависимости RPM?

36

Наш производственный сервер работает под управлением CentOS версии 5.2 (Final).

Как увидеть / получить / перечислить все зависимости уже установленного пакета RPM?

Например: SQLite v3.3.6 уже установлен на сервере. Я хочу увидеть все зависимости этого конкретного пакета.

Вот вывод команды: rpm -qa |grep sqlite

python-sqlite-1.1.7-1.2.1
sqlite-3.3.6-2
sqlite-3.3.6-2

Кроме того, почему он перечисляет 2 записи sqlite-3.3.6-2здесь?

Gnanam
источник

Ответы:

28
  1. rpm -q --requires somepackagehere

  2. Один - это i?86пакет, другой - x86_64пакет.

Игнасио Васкес-Абрамс
источник
Моя ОС 64-битная. Могут ли 2 пакета архитектуры сосуществовать на одном сервере? Какова цель / необходимость наличия двух архитектурных пакетов одновременно?
Гнанам
2
Производные от RH / Fedora дистрибутивы поддерживают multiarch , благодаря чему несколько пакетов, принадлежащих к «разным, но достаточно похожим», могут сосуществовать, чтобы позволить запускать исполняемые файлы, созданные для любой из этих арок.
Игнасио Васкес-Абрамс
К сожалению, для этого требуется, чтобы пакет уже был установлен локально: \
rogerdpack
@rogerdpack: ну да. Это именно то, что задал вопрос.
Игнасио Васкес-Абрамс
Да, к сожалению, Google отправляет "всем прямо здесь", если вы Google "список зависимостей RPM" - Google имеет область охвата вопрос! Независимо от того, посмотрите ответ Дэйви для любых последователей, желающих эту функциональность.
rogerdpack
34

Команда yum deplistпокажет вам, какие rpm являются зависимостями, вот пример для expectпакета (это будет работать, даже если у вас еще не установлен пакет локально):

# yum deplist expect
..
..
package: expect.i386 5.43.0-5.1
 dependency: libc.so.6
  provider: glibc.i686 2.5-49
  provider: glibc.i686 2.5-49
 dependency: libtcl8.4.so
  provider: tcl.i386 8.4.13-4.el5
Davey
источник
Эта команда не работает. Я что-то упустил или в вашей команде чего-то не хватает?
Гнанам
Извините, что не хватает места, команда yum deplist package.
Дэйви
1
+1 использование YUM здесь хорошо, это рекурсивно и разрешает такие вещи, как 'perl (COnfig :: Tiny)' или 'libc.so (64bit)'.
djhaskin987
6

Следуя ответу Игнасио, вы можете увидеть конкретную архитектуру пакетов, выполнив следующие действия:

$ rpm -qa --queryformat "%{NAME} %{ARCH}\n" sqlite
sqlite i686

В моем случае у меня есть только один пакет i686 ... но вы можете таким образом получить архитектуру, связанную с пакетами. Если вас интересует, что еще можно получить из --queryformat, введите a, rpm --querytagsчтобы увидеть список доступных переменных.

Alex
источник
1
+1 Ваша команда на листинг по архитектуре также полезна.
Гнанам
3

У меня есть быстрый фрагмент оболочки, который распечатывает все установленные пакеты вместе с их зависимостями:

for i in `rpm -qa` ; do echo "Package [$i]:"; rpm -q --requires $i ; echo ; done
Daeon
источник
3

Люди уже ответили:

  1. rpm -q --requires PKG
  2. yum -q deplist PKG

Да, либо rpmили yumработает и правильно отвечает на вопрос. Основное различие между rpmи yumзаключается в том, что yum также показывает, какие пакеты вы можете установить в соответствии с требованиями библиотеки и / или файла. К сожалению, если пакет не установлен, ни один из этих методов не является полезным. Поскольку в исходном плакате уже указано, что пакет, который вы проверяете, установлен, это немой пункт.

Что если у вас не установлен пакет? yumвсе еще можно использовать, но косвенно. Вы можете выполнить пробную установку, отменив операцию установки.

printf n  |  yum install PKG  |  grep -- "---> Package"

Вот пример:

printf n  |  yum install php  |  grep -- "---> Package"
---> Package php.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-cli.x86_64 0:5.4.16-45.el7 will be installed
---> Package php-common.x86_64 0:5.4.16-45.el7 will be installed
---> Package libzip.x86_64 0:0.10.1-8.el7 will be installed
СААВ-V
источник
Блестящий обход ограничений отчетности.
MarkHu