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