Як дізнатися, з якого репозиторію yum встановлено пакет?


152

Після того як я встановив пакет yum (з налаштованими кількома сховищами), як я можу знайти, з якого сховища він був встановлений?

Якщо я запускаю yum info package-name(або yum list package-name), я бачу лише те, що пакет "встановлений".


1
Чудове запитання! Я встановив yum-utils і спробував один, який називається repoquery, але не пощастило.
— Шон Стейтс

дивіться також serverfault.com/questions/90409/… :)
— warren

@warren ваше посилання не є корисним, оскільки ваше посилання - це питання про те, "що репо - це rpm, що зберігається в", але в цьому запитанні задається "що репо - це ВСТАНОВЛЕНИЙ об / хв від". різні питання.
— Тревор Бойд Сміт


@TrevorBoydSmith - 7 років тому це було близько. Сьогодні це все одно схоже. Ніколи не говорив, що це те саме . Тільки, що це було пов’язано.
— warren

Відповіді:


81

При встановленні yum-utils репортаж надасть інформацію, яку ви шукаєте (тут '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повертає більше результатів, ніж репост. Ось чому обмін стеками не повинен фіксувати голоси.
— reflexiv

8
Я вважав, що відповідь Ксьонга Чяміова не відповідає правильності. repoquery -i $pkgнадає репо, з якої $pkgдоступне а, а не репо, з якого $pkgбуло встановлено. Я зробив цю команду rpm -qi $pkgі отримав різні номери версій. rpmпризвели до отримання більш ранньої версії, ніж номера repoquery.

Можливо, ваша локальна копія застаріла, або вона була встановлена ​​за допомогою додаткових команд yum (наприклад --use-mirror). Я не думаю, що завжди можна отримати правильну відповідь.
— Xiong Chiamiov

user158844 має рацію. Це покаже вам, які репости надають певний пакет, але не те, з чого прийшов конкретний пакет. Якщо ви встановили пакет з певного репо, вилучили це репо, потім встановили ще одне репо, яке надає пакет із тим самим іменем, виконуючи "repoquery -i", як це повернеться до вас пакунками, що містять список нещодавно встановленого репо, а не того, що ви фактично встановили пакет з. Запитувач хоче знати, з якого пакета насправді прийшло встановлене програмне забезпечення. Не те, що в поточних репостах трапляються пакети з такою ж назвою.
— Тодд Уолтон

43

Яка версія 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

Якщо є новіший пакет, він відображатиметься окремо, в новій версії відображатиметься репо, з якого він доступний.


Я використовую yum 3.2.19 на CentOs 5.3, а рядок "From repo" не існує.
— lg.

Так ... Я тестував його 3.2.21, який не має цієї інформації ніде. Коли я зробив це на своїй коробці, яка має 3.2.23, вона спрацювала.
— Олексій

Тепер це найкраще рішення, але не застосовується для RHEL / Centos 5.3. Я приймаю це рішення, але я готовий обрати іншу відповідь, чи застосовуватиметься також RHEL / Centos 5.3.
— lg.

2
Це також не в CentOS 5.5.
— Майк Міллер

"From rep" немає в центрі 5.8
— 1313

22

Добігаючи до пізнього, але (принаймні, у Fedora 15) можна використовувати yumdb для подібних запитів:

yumdb info 'python*'

І що мені насправді потрібно, щоб перелічити пакети із заданих репортажів:

yumdb search from_repo 'my-*-repo'

Він також працює на Fedora 14
— lg.

1
працює над RHEL 6.2
— піксельбіт

8

Якщо все інше не вдається, ви можете оглянути 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- все, що вам потрібно.
— Майкл Хемптон

6
rpm -qi packagename

Скаже вам постачальник і пакувальник


5

Щоб побачити, що встановлено з репо-епелі: (Якщо працює під 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

Зауважте, що a yum clean [packages|all]очистить каталог кешу.

Якщо каталог кешу порожній, існує альтернативний спосіб. Інформація, яку читають, yum info [package]надходить з /var/cache/yum/ evidencerepoškar/primary.xml.gz

Ви можете переглянути файл, ввівши:

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

Однак на машинах, де yum info [package]не відображається "From repo:", як вказує "theotherreceive", це тому, що його немає у файлі Primary.xml, тому не вдасться отримати цю інформацію. Тому, якщо пакет знаходиться у двох чи більше файлах primar.xml, вам доведеться визначити пріоритет репо в системі.


Це рішення, можливо, варіант (я його проголосую), але я шукаю остаточну відповідь.
— lg.

4

На основі та відповіді Swoogan
On 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

Не чудове рішення, але я виявив, що наявний список покаже вам, де доступна найновіша версія кожного пакета, наприклад:

список доступний | 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.

Хоча він точно не відповідає на питання ОП, для мене це було дуже корисно, оскільки він працює в Centoss 5.5 просто з yum і без інших утиліт, і ви можете: 1. Видаліть пакет, а потім запитайте, щоб побачити, де потім перевстановити репо. або 2. Запит на іншій машині без встановленого пакету.
— lreeder

1

Ви можете додати багатослівний прапор до "yum info":

yum info -v <package_name>

Інсталяційний сховище знаходитиметься у висновку "From repo".


Це здається єдиним рішенням, яке не потребує встановлення 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.