Как перечислить зависимости 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здесь?

Ответы:


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

Эта команда не работает. Я что-то упустил или в вашей команде чего-то не хватает?
— Гнанам

Извините, что не хватает места, команда 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чтобы увидеть список доступных переменных.


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

3

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

for i in `rpm -qa` ; do echo "Package [$i]:"; rpm -q --requires $i ; echo ; done

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

Блестящий обход ограничений отчетности.
— MarkHu
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.