Может ли yum сказать мне, какие из моих репозиториев предоставляют конкретный пакет?
Надеюсь, короткая версия вопроса: если я нахожусь на машине с установленным конкретным пакетом, есть ли команда yum, которая сообщит мне, какой из них сконфигурировал репозитории при условии, что пакет? (Или поочередно, какой репозиторий предоставит еще не установленный пакет.)
Фон в случае необходимости какого-то контекста: у нас есть лабиринт репозиториев yum, из которых мы извлекаем. У меня есть машина, на которой установлен определенный пакет rpm, и еще одна машина с явно недостаточным лабиринтом репозиториев, и поэтому я не могу установить пакет, который я хочу на эту машину. Мне нужно добавить минимальные необходимые репозитории к новой машине. Я не могу просто рубить репозитории с одной машины на другую. И просто выйти и захватить обороты не является вариантом, потому что мне нужно, чтобы это было воспроизводимым.
Ответы
Ответ 1
yum list packagename
Это покажет, из какого репозитория пакет находится в третьем столбце вывода.
Для уже установленных пакетов это не сработает, так как третий столбец показывает только "установленный". В этом случае вы можете сделать это, например. "rpm -qi packagename", как правило, теги Vendor, Packager и Build Host дадут указание тому, к какому репозиторию принадлежит пакет. Также довольно распространено, что некоторый символ репо добавляется к номеру версии пакета.
Ответ 2
repoquery -i {packagename}
Это даст вам фактическое имя репо против неустановленного "установленного", которое возвращает yum.
repoquery предоставляется yum-utils.
Ответ 3
Вы можете использовать yum -v search
, который покажет вам пакеты вместе с репо, в котором он присутствует. Если вы также добавите --showduplicates
, вы увидите все версии этого пакета.
Кредит: http://www.spinics.net/linux/fedora/yum/msg11975.html
Ответ 4
Для одного пакета вы можете найти это с помощью
PACKAGE=ruby-enterprise
repoquery --qf "%{repoid}" $PACKAGE
Замените $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
.
Ответ 5
yum reinstall [package_name]
Затем, когда вас попросят подтвердить, вы можете выбрать N, чтобы не изменять вашу систему:
Пример вывода на centos:
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]:
Ответ 6
Вот несколько способов обнаружения репозитория для данного установленного пакета:
rpm -qi {packagename}
или
repoquery -i {packagename}
Ссылки: