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

Вопрос или проблема

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

Если я выполню yum info package-name (или yum list package-name), я могу только увидеть, что пакет “установлен”.

С установленным yum-utils, repoquery (с опцией --info) предоставит нужную информацию (здесь ‘epel’ — это репозиторий).

$ repoquery --info 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.

Какая версия yum?

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

$ 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

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

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

yumdb info 'python*'

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

yumdb search from_repo 'my-*-repo'

Если все остальное не помогает, вы можете вручную проверить 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, с которого был загружен пакет.

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

repoquery --repoid=epel -a | xargs yum list installed
rpm -qi packagename

Покажет вам поставщика и упаковщика

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

yum list installed [package name]

Третий столбец предоставит идентификатор репозитория, из которого был установлен пакет.

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

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

В этом каталоге есть каталог для каждого репозитория и в нем каталог packages. Поэтому, вы можете сделать что-то вроде:

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] не отображает “From repo :”, как указано ‘theotherreceive’, это происходит из-за того, что информация не находится в файле primary.xml, поэтому не будет никакого способа получить эту информацию. Следовательно, если пакет находится в двух или более файлах primary.xml, вам придется определить приоритет репозитория в вашей системе.

На основе ответа от 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)

Я знаю, что это несколько старый вопрос — но он появляется в поиске в гугле по тому, что я искал.

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

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

Это покажет репозитории, из которых были установлены пакеты.

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

yum provides "*compat-libstdc*"

Хорошая ссылка здесь.

https://access.redhat.com/sites/default/files/attachments/rh_yum_cheatsheet_1214_jcs_print-1.pdf

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

Это не лучшее решение, но я обнаружил, что команда yum list available покажет вам, где доступна самая новая версия каждого пакета, например:

yum list available | grep gstreamer

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

bluez-gstreamer.i386 4.30-2.fc10 updates
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 list available на ваш пакет, затем сравнить вашу установленную версию с помощью yum list installed и получить представление о том, из какого репозитория он поступил, если версии совпадают.

Вы можете добавить флаг verbose к “yum info”:

yum info -v <package_name>

Репозиторий установки будет показан в выводе “From repo”.

Самый легкий способ:

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

Больше советов и трюков доступно здесь: http://wiki.centos.org/TipsAndTricks/YumAndRPM

Ответ или решение

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

Интерфейс командной строки для определения источника репозитория

  1. Использование yum-utils и команды repoquery:
    Установка пакетного утилита yum-utils позволяет воспользоваться командой repoquery для получения подробной информации о пакете. Эта команда позволяет точно выяснить, из какого репозитория был установлен пакет:

    repoquery --info <название-пакета>

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

  2. Команда yum info с версией yum 3.2.23 и новее:
    В более новых версиях yum, когда вы выполняете команду yum info <название-пакета>, вывод может включать строку From repo, где указан репозиторий, из которого был загружен данный пакет. При этом условие — версия установленного пакета должна совпадать с последней доступной версией в репозитории.

    yum info <название-пакета>
  3. Поиск в базе данных yumdb:
    Для углубленного анализа, вы можете вручную исследовать базу данных yum, расположенную в /var/lib/yum/yumdb. Часто информация о репозитории может быть найдена в поле from_repo:

    cat /var/lib/yum/yumdb/<аббревиатура-пакета>/<название-пакета>/from_repo

Альтернативные подходы

  1. Кэширование данных:
    Вы можете определить репозиторий напрямую из кэша, если он включен. Ваша конфигурация должна в этот момент содержать keepcache=1. Поиск в кэше производится с помощью команды:

    find /var/cache/yum -name "<название-пакета>*"
  2. Использование grep для определения:
    Простой поиск в содержимом /var/cache/yum/ может также сказать, в каком файле упоминается пакет:

    sudo grep -ir <название-пакета> /var/cache/yum/

Заключение

Для профессионалов, работающих с системами Linux, понимание источников установленных пакетов важно для управления версиями и безопасности систем. Очень важно точно знать, какие репозитории используются для критически важных обновлений. Надеюсь, данные методы помогут вам эффективно управлять вашей инфраструктурой и держать всё под контролем. Не забывайте следить за обновлениями ваших инструментов и репозиториев для поддержания стабильности и безопасности.

Оцените материал
Добавить комментарий

Капча загружается...