Як дізнатися, з якого репозиторію 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.