Есть ли способ получить дерево зависимостей из yum?
чтобы уменьшить вероятность проблемы XY, я пытаюсь установить PostGIS на чистую виртуальную установку RHEL5 с тяжелыми ограничениями. Я не знаю, есть ли у нас (как у компании) подписка на RH.
# yum install postgis
Loaded plugins: product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Setting up Install Process
No package postgis available.
Nothing to do.
он выдает ту же ошибку, когда я пытаюсь установить emacs
, поэтому я относительно уверен, что не имеет значения, какой пакет я пытаюсь установить.
виртуальная машина имеет доступ в интернет.
все, что я хочу сделать, это получить полный граф зависимостей для часть программного обеспечения я указываю (очевидно, т. е. postgis
). yum
должен уже вычислить этот график зависимостей (или иметь один доступный для извлечения), чтобы выполнить свою работу, так как я могу подключиться к этому ресурсу?
4 ответов
на rhel5 и руководство по эксплуатации страница: "repoquery - это программа для запроса информации из репозиториев YUM аналогично запросам rpm."
для вашего конкретного случая postgis:
# repoquery --requires --recursive --resolve postgis
postgresql-libs-0:8.1.23-6.el5_8.i386
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-107.el5_9.5.i686
proj-0:4.5.0-3.el5.i386
вы можете упасть ".i386 "and".i686 " отключено от имен пакетов, Если ваша система 64-разрядная.
вывод из repoquery не идеален, так как, например, он не может перечислить glibc-common в приведенном выше списке. Но ваша система не будет запуск, если у него не было уже установленных glibc и glibc-common.
редактировать: хотя это не вызывает ошибки --recursive
флаг, похоже, ничего не делает в RHEL5.11 и может быть опущено. Кроме того, используйте --pkgnarrow=all
флаг, чтобы гарантировать, что все (установленные, доступные и т. д.) пакеты рассматриваются для запроса. Наконец, для одного шага рекурсии, чтобы получить больше дерева зависимостей, в оболочке bash передайте выходные данные команды repoquery второй команде repoquery используя tee
и xargs
вот так:
# repoquery --requires --resolve --pkgnarrow=all postgis.i386 | tee >(xargs -r -n 1 -- repoquery --requires --resolve --pkgnarrow=all) | sort | uniq
basesystem-0:8.0-5.1.1.noarch
geos-0:2.2.3-3.el5.i386
glibc-0:2.5-123.el5_11.3.i686
glibc-common-0:2.5-123.el5_11.3.i386
krb5-libs-0:1.6.1-80.el5_11.i386
libgcc-0:4.1.2-55.el5.i386
libstdc++-0:4.1.2-55.el5.i386
openssl-0:0.9.8e-40.el5_11.i686
postgresql-libs-0:8.1.23-10.el5_10.i386
proj-0:4.5.0-3.el5.i386
просто добавив улучшение к этому ответу, который я хотел бы быть здесь, когда я имел дело с этим.
добавление -- recursive ничего не делает при использовании --tree-requires
лучшим вариантом является . Это единственный способ, который я нашел, чтобы получить repoquery для обеспечения 100% полного дерева зависимостей,в том числе зависимостей зависимостей.
от человека: -- рекурсивный, когда используется с --whatrequires пакеты запрос рекурсивно.
насколько я могу судить, на --requires
вернет тот же результат, как с, так и без .
если вы хотите получить список всех зависимостей, вы должны сделать repoquery --tree-requires <My-Package>
. В противном случае у вас не будет всех необходимых зависимостей.
если вы хотите иметь их в удобном для чтения списке, вы можете выполнить эту команду:
sort <(sed -e 's/ [| \\_]\+\|-[[:digit:]]\+..*\|[[:digit:]]\://g' <(repoquery --tree-requires **YOUR-PACKAGE-HERE**)) | uniq
он будет создайте разборчивый, отсортированный, список только для имени пакета. Смотрите в этом примере с пакетом libxcb. Этот список содержит все зависимости и включает зависимости зависимостей.
Я не нашел никакой разницы в результатах с --recursive
или --resolve
когда не используется . --whatrequires
служит другой цели, чем стандартное дерево зависимостей или список зависимостей. Я не нашел ответа на переполнение стека, который правильно объясняет это (есть некоторые замечания).
в настоящее время есть запрос функции для добавления команды "формат дерева" в repoquery, но на данный момент это не кажется вариантом. Надеюсь, это поможет заполнить пробел.
все, что я хочу сделать, это получить полный график зависимостей для части программного обеспечения, которое я указываю (очевидно, т. е. postgis).
для этого вы можете попробовать rpmreaper инструмент рекомендуется из этой статьи: Как проверить зависимости пакетов RPM от Fedora, CentOS или RHEL
Он предоставляет интерфейс на основе проклятий, который позволяет выборочно детализировать требования пакета или "детализировать" и посмотреть, что зависит на данном пакете.
типичный вывод ASCII на основе repoquery --tree-requires
очень трудно следовать, когда это несколько уровней и тысячи строк. Дисплей rpmreaper гораздо легче читать и пересекать.
вот краткий пример использования " drill up "(он же "Required by"), чтобы найти цикл в Samba RPMs для справки:
Это поможет очистить --tree-requires
для (x86_64 с):
for i in `repoquery --tree-requires --recursive --resolve postgis \
| perl -nle '/([a-z]+-\d+\.\d+((\.|\-)?\d+)?.*x86_64)/;print ""'`; \
do yumdownloader $i; \
done