Как узнать, из какого репозитория yum был установлен пакет?


152

После того, как я установил пакет yum (с несколькими настроенными репозиториями), как я могу найти, из какого репозитория он был установлен?

Если я запускаю yum info package-name(или yum list package-name), я вижу только, что пакет "установлен".


1
Отличный вопрос! Я установил yum-utils и попробовал один, это утилиты под названием repoquery, но не повезло.
Шон Стаатс

смотри также serverfault.com/questions/90409/... :)
Warren

@ warren Ваша ссылка бесполезна, потому что ваша ссылка представляет собой вопрос о том, «в каком репо хранится rpm», но этот вопрос спрашивает «из какого репо установлен УСТАНОВЛЕННЫЙ rpm». разные вопросы.
Тревор Бойд Смит


@TrevorBoydSmith - 7 лет назад это было близко. Сегодня это все еще похоже. Никогда не говорил, что это было то же самое . Просто это было связано.
Уоррен

Ответы:


82

С установленным yum-utils, repoquery предоставит информацию, которую вы ищете (здесь epel - это хранилище).

└─[$]> repoquery -i cherokee

Name        : cherokee
Version     : 0.99.49
Release     : 1.el5
Architecture: i386
Size        : 8495964
Packager    : Fedora Project
Group       : Applications/Internet
URL         : http://www.cherokee-project.com/
Repository  : epel
Summary     : Flexible and Fast Webserver
Description :
Cherokee is a very fast, flexible and easy to configure Web Server. It supports
the widespread technologies nowadays: FastCGI, SCGI, PHP, CGI, TLS and SSL
encrypted connections, Virtual hosts, Authentication, on the fly encoding,
Apache compatible log files, and much more.

2
Похоже, что repoquery работает неправильно, тогда я получаю разные версии пакетов yum info package_name, он не запрашивает репозитории в том же порядке, что и yum.
Майк Миллер

То же самое здесь на нескольких серверах. yum info package_nameвозвращает больше результатов, чем repoquery, по-видимому. Вот почему обмен стека не должен блокировать голоса.
рефлексив

8
Я обнаружил, что ответ Сюн Чямиова неверен. repoquery -i $pkgдает репо, из которого $pkgдоступен а, а не репо, из которого он $pkgбыл установлен. Я выполнил эту команду rpm -qi $pkgи получил разные номера версий. rpmпривело к более раннему номеру версии, чем у repoquery.

Возможно, ваша локальная копия устарела или была установлена ​​с дополнительными командами для yum (например --use-mirror). Я не думаю, что всегда можно получить правильный ответ.
Xiong Chiamiov

Пользователь 158844 прав. Это скажет вам, какие репозитории предоставляют данный пакет, но не то, из какого репозитория пришел конкретный пакет. Если вы установили пакет из определенного репо, удалили это репо, а затем установили другое репо, которое предоставляет пакет с тем же именем, запустив «repoquery -i», как это, вы вернетесь к пакетам, перечисляющим недавно установленное репо, а не тот, который вы фактически установили пакет с. Аскер хочет знать, из какого пакета на самом деле пришло установленное программное обеспечение. Не то, что текущие репо имеют пакеты с одинаковыми именами.
Тодд Уолтон

43

Какая версия ням?

В текущей версии, если установленный пакет совпадает с последней доступной версией, отображается репо, из которого он был установлен.

$ yum info irssi
Installed Packages
Name       : irssi
Arch       : i586
Version    : 0.8.14
Release    : 1.fc11
Size       : 2.3 M
Repo       : installed
From repo  : updates
Summary    : Modular text mode IRC client with Perl scripting
URL        : http://irssi.org/
License    : GPLv2+
Description: Irssi is a modular IRC client with Perl scripting. Only text-mode
           : frontend is currently supported. The GTK/GNOME frontend is no
           : longer being maintained.

$ yum --version
3.2.23

Если доступен более новый пакет, он будет показан отдельно, а в новой версии будет показан репозиторий, из которого он доступен.


Я использую yum 3.2.19 в CentOs 5.3, а строка «Из репо» не существует.
LG

Да ... Я тестировал его на 3.2.21, где нигде нет этой информации. Когда я сделал это на моей коробке, которая имеет 3.2.23, это работало.
Алекс

Теперь это лучшее решение, но оно не применимо для RHEL / Centos 5.3. Я принимаю это решение, но я готов выбрать другой ответ, если он будет применим и для RHEL / Centos 5.3.
LG

2
Это также запрещено в CentOS 5.5.
Майк Миллер

«От репутации» не доступен даже в CentOS 5.8
Sepehr

22

Пойдем поздно, но (по крайней мере, в Fedora 15) можно использовать yumdb для похожих запросов:

yumdb info 'python*'

И что мне действительно нужно было перечислить пакеты из данного репозитория (ов):

yumdb search from_repo 'my-*-repo'

Работает также на Fedora 14
LG.

1
работает на RHEL 6.2
pixelbeat

9

Если ничего не помогает, вы можете проверить yumdb вручную. Он находится в /var/lib/yum/yumdbи содержит подробную информацию о каждом установленном пакете. Вы будете особенно заинтересованы в from_repo. Например, для bind-utilsпакета:

# for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i`; done
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_data: 39f7840f93d3d76825a9e8da79cfe0366f7fad68f018a273477aee62cccfa3f4
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_type: sha256
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/command_line: install bind-utils
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo: updates
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_revision: 1397654451
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_timestamp: 1397654759
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/installed_by: 0
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/reason: user
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/releasever: 6

Чтобы получить только ту информацию, которую вы хотите:

# cat /var/lib/yum/yumdb/b/*bind-utils*/from_repo
updates

Более поздние версии предоставят еще больше данных; например, в EL 7 точное зеркало и URL, с которого был загружен пакет, хранятся здесь.


+1. Но еще лучше сделать что-то вроде:, for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; doneкоторое в приведенном выше примере возвращает: updates- гораздо более читабельно!
Грег Дубицки

1
@GregDubicki Смысл команды состоял в том, чтобы показать больше контекста того, что происходит и как вещи хранятся. Очевидно, он не смог этого сделать: grepздесь ничего не нужно , и вы даже можете отказаться от цикла. Очень просто cat /var/lib/yum/yumdb/b/*bind-utils*/from_repoвсе, что вам нужно.
Майкл Хэмптон


5

Чтобы увидеть, что установлено из репо epel: (Должно работать под Centos 5.5), обратите внимание, что если у вас нет репо с именем epel, оно выплюнет все установленные вещи.

repoquery --repoid = epel -a | список xargs yum установлен


1
Похоже, это работает, пока в хранилище нет обновленного пакета. Так что вам нужно запустить обновление yum непосредственно перед его использованием.
Codewaggle

4

Если пакет был установлен недавно, вы можете посмотреть в / var / cache / yum.

В этом каталоге есть каталог для каждого репо, а в этом - каталог пакетов. Итак, вы бы сделали что-то вроде:

find /var/cache/yum -name [package-name]*

Однако кеш должен быть включен в ваш файл /etc/yum.conf:

cachedir=/var/cache/yum
keepcache=1

Обратите внимание, что yum clean [packages|all]очистит каталог кеша.

Если каталог кеша пуст, есть альтернативный способ. Информация, которую читают, yum info [package]взята из /var/cache/yum/[repo]/primary.xml.gz

Вы можете просмотреть файл, введя:

gunzip -d -c /var/cache/yum/[repo]/primary.xml.gz | grep '<name>[package]'

Однако на машинах, где yum info [package]не отображается «Из репозитория:», как указано «theotherreceive», это происходит потому, что его нет в файле primary.xml, поэтому нет никакой возможности получить эту информацию. Поэтому, если пакет находится в двух или более файлах primary.xml, вам придется определить приоритет репо в вашей системе.


Это решение может быть вариантом (я голосую), но я ищу окончательный ответ.
LG

4

На основании и ответ Swoogan
На RedHat и CentOS можно сделать

sudo grep -ir PACKAGE_NAME /var/cache/yum/

Результаты должны выглядеть примерно так

Binary file /var/cache/yum/REPOSITORY_NAME/primary.xml.gz.sqlite matches

Где repository_name - это репозиторий, в котором можно найти ваш пакет, и он, вероятно, был установлен из первого списка в списке (см. Yum repolist)


1

Эта информация захвачена где-нибудь? Пакет не имеет этой информации, и yum не волнует, когда он найдет пакет. Вы могли бы, вероятно, собрать это воедино, выяснив, какие репозитории имеют пакет, а затем определить, какой из них имеет приоритет.


Это решение может быть вариантом (я голосую за него), но только для недавно установленного пакета, потому что я могу изменить репозиторий и их приоритет.
LG

1

Не очень хорошее решение, но я обнаружил, что доступный список yum покажет вам, где доступна самая последняя версия каждого пакета, например:

ням список доступен | grep gstreamer

PackageKit-gstreamer-plugin.x86_64 0.3.16-1.fc10          updates               

bluez-gstreamer.i386 4.30-2.fc10 Обновления
gstreamer.i386 0.10.21-2.fc10 fedora
gstreamer-devel.i386 0.10.21-2.fc10 fedora
gstreamer-devel.x86_64 0.10.21-2.fc10 fedora
gstreamer- plugins-bad-devel.i386 0.10.9-1.fc10 rpmfusion-free
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpmfusion-free

Таким образом, вы можете составить список yum, доступный в вашем пакете, а затем сравнить установленную версию, используя установленный список yum, и понять, из какого репозитория он поступил, если версии совпадают.


Это верно только в том случае, если пакет еще не установлен.
LG

Хотя он не дает точного ответа на вопрос OP, для меня это было очень полезно, потому что он работает в Centoss 5.5 только с yum и без каких-либо других утилит, и вы можете: 1. Удалить пакет, затем запросить, чтобы увидеть, где находится репозиторий, а затем переустановить или 2. Выполните запрос на другом компьютере без установленного пакета.
владелец

1

Вы можете добавить подробный флаг к «yum info»:

yum info -v <package_name>

Инсталляционный репозиторий будет находиться под выводом «Из репо».


Кажется, это единственное решение, которое не требует установки yum-utils.
Марк Эдингтон

Это только списки «установлены» для меня.
frogstarr78

1

Так что я знаю, что это довольно старый вопрос, но он возникает в поиске Google для того, что я искал.

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

# repoquery -ai | grep 'Repository  : ' | sort | uniq

В этом списке будут перечислены репозитории, из которых установлены пакеты.


1

Самый простой и простой подход без установки каких-либо дополнительных инструментов, поиска или вывода посторонней информации - это просто:

yum list installed [package name]

В третьем столбце будет указан идентификатор хранилища, из которого был установлен пакет.

Это было упомянуто в комментарии к первоначальному вопросу с использованием grep, но это не обязательно. Вы можете просто передать имя пакета напрямую yumдля фильтрации.



-1

Самый простой способ это:

rpm -qa --qf '%{NAME} %{VENDOR}\n'

Дополнительные советы и рекомендации доступны здесь: http://wiki.centos.org/TipsAndTricks/YumAndRPM


2
Таким образом (добавляя канал с именем пакета grep -i), я обнаруживаю поставщика, но не репозиторий.
LG

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