Як перелічити залежності RPM?


36

На нашому виробничому сервері працює версія CentOS 5.2 (заключна).

Як я бачу / отримую / перелічую всі залежності вже встановленого пакету 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, підтримують мультиарх , завдяки чому безліч пакетів, що належать до "різних, але схожих на достатню кількість" архів, можуть співіснувати для того, щоб дозволити запуску виконуваних файлів, побудованих для будь-якої арки.
Ігнасіо Васкес-Абрамс

На жаль, це вимагає, щоб пакет уже був встановлений локально: \
rogerdpack

@rogerdpack: Ну так. Саме це і задало питання.
Ігнасіо Васкес-Абрамс

Так, Google, на жаль, Google надсилає "всіх сюди прямо", якщо ви "перелічите залежність RPM" - Google має розширення питання! Незалежно від цього, див. Відповідь Дейві для тих, хто підписався, хто бажає цієї функціональності.
rogerdpack

34

yum deplistКоманда покаже вам , які RPM «s є залежностями, ось приклад для 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.