Можете ли вы сказать мне, какие из моих репозиториев предоставляют конкретный пакет? - PullRequest
36 голосов
/ 11 марта 2009

Надеюсь, короткая версия вопроса: если я на машине с установленным конкретным пакетом, есть ли команда yum, которая скажет мне, какие из настроенных репозиториев предоставили этот пакет? (Или, в качестве альтернативы, в каком хранилище будет установлен еще не установленный пакет.)

Фон на случай, если нужен какой-то контекст: у нас есть лабиринт репозиториев yum, из которого мы рисуем. У меня есть машина, на которой установлен определенный пакет rpm, и другая машина с явно недостаточно настроенным лабиринтом репозиториев, и поэтому я не могу установить нужный пакет на эту машину. Мне нужно добавить минимально необходимые репозитории на новую машину. Я не могу просто выстрелить из хранилища с одной машины на другую. И просто выйти и схватить обороты не вариант, потому что мне нужно, чтобы это было воспроизводимо.

Ответы [ 6 ]

37 голосов
/ 11 марта 2009
yum list packagename

Это покажет, из какого репозитория пакет находится в третьем столбце вывода.

Для уже установленных пакетов это не сработает, поскольку в третьем столбце отображается только «установлен». В этом случае вы можете сделать, например, «rpm -qi packagename», обычно теги Vendor, Packager и Build Host будут указывать, к какому репозиторию принадлежит пакет. Также довольно часто встречаются символы репо, добавляемые к номеру версии пакета.

25 голосов
/ 06 января 2012
repoquery -i {packagename} 

Это даст вам реальное имя репо по сравнению с бесполезным «установленным», которое возвращает yum. repoquery предоставляется yum-utils.

12 голосов
/ 29 августа 2013

Вы можете использовать yum -v search, который будет показывать вам пакеты вместе с репо, в котором он присутствует. Если вы также добавите --showduplicates, вы увидите все версии этого пакета.

Кредит: http://www.spinics.net/linux/fedora/yum/msg11975.html

2 голосов
/ 11 апреля 2012

Для одного пакета, вы можете найти это с

PACKAGE=ruby-enterprise
repoquery --qf "%{repoid}" $PACKAGE

Замените $ ПАКЕТ на название пакета, который вам нужен.

Вы можете найти все пакеты, которые пришли из определенного репозитория с

REPO=ruby-enterprise-opt
repoquery --repoid=$REPO -a --qf "%{name}" | sort > repo_packages
rpm -qa --qf "%{name}\n" | sort > installed_packages
comm -1 -2 repo_packages installed_packages

Замените $ REPO идентификатором хранилища, о котором вы заботитесь; вы можете увидеть идентификаторы всех ваших включенных репозиториев с помощью yum repolist.

1 голос
/ 10 сентября 2017

Вот несколько способов обнаружения хранилища для данного установленного пакета:

rpm -qi {packagename}

или

repoquery -i {packagename}

Рекомендации:

0 голосов
/ 24 октября 2014
yum reinstall [package_name]

Затем, когда вас попросят подтвердить, вы можете выбрать N, чтобы не менять вашу систему:

Пример вывода на сентос:

Resolving Dependencies
--> Running transaction check
---> Package mc.x86_64 1:4.6.1a-35.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================================
 Package                      Arch                             Version                                   Repository                      Size
==============================================================================================================================================
Reinstalling:
 mc                           x86_64                           1:4.6.1a-35.el5                           base                           2.1 M

Transaction Summary
==============================================================================================================================================
Remove        0 Package(s)
Reinstall     1 Package(s)
Downgrade     0 Package(s)

Total download size: 2.1 M
Is this ok [y/N]:
...