Est-il possible de récupérer un arbre des dépendances de yum?

pour réduire le risque du problème XY, J'essaie D'installer PostGIS sur une installation propre, virtuelle RHEL5 avec de lourdes restrictions. Je ne sais pas si nous (en tant qu'entreprise) avons un abonnement 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.

Il jette la même erreur quand j'essaie de l'installer emacs, donc je suis relativement certain que peu importe le paquet que j'essaie d'installer.

la VM a accès à internet.

Tout ce que je veux faire c'est récupérer un graphe de dépendances complet pour un logiciel que je spécifie (évidemment, c.-à-d. ). yum doit déjà calculer ce graphique de dépendance (ou en avoir un Disponible pour la récupération) pour faire son travail, alors comment puis-je puiser dans cette ressource?

20
demandé sur Sean Allred 2013-05-30 23:03:02

4 réponses

selon le RHEL5 pages de manuel:" repoquery est un programme pour interroger des informations provenant de dépôts YUM de la même manière que les requêtes rpm."

Pour votre cas spécifique de 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

Vous pouvez déposer ".i386" et ".i686 " hors des noms de paquets si votre système est 64 bits.

la sortie de repoquery n'est pas parfaite puisque, par exemple, elle ne parvient pas à lister glibc-common dans la liste ci-dessus. Mais votre système ne serait pas en cours d'exécution s'il n'y avait pas déjà glibc et glibc-common.

EDIT: Même s'il ne provoque pas d'erreur, le --recursive flag semble ne rien faire dans RHEL5.11 et peut être omis. Aussi, l'utilisation de la --pkgnarrow=all drapeau pour s'assurer que tous les paquets (installés, disponibles, etc.) sont pris en compte pour la requête. Enfin, pour un pas de récursion pour obtenir plus de l'arbre de dépendance, dans un shell bash, passer la sortie de la commande repoquery à une seconde commande repoquery en utilisant tee et xargs comme ceci:

# 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
23
répondu ZaSter 2016-10-23 04:31:11

j'ajoutais juste une amélioration à cette réponse que j'aurais aimé voir ici quand je m'en occupais.

ajouter -- la récursive ne fait rien en utilisant --tree-requires

La meilleure option est l' --tree-requires option. C'est la seule façon que j'ai trouvé pour obtenir repoquery pour fournir un arbre de dépendance 100% complet, y compris les dépendances des dépendances.

de L'homme: -- récursifs, Lorsqu'il est utilisé avec -- whatreques, interrogez les paquets de façon récursive.

autant que je puisse dire, pour un --requires retourne le même résultat, à la fois avec et sans le --recursive option.

si vous voulez obtenir une liste de toutes les dépendances, vous devez faire un repoquery --tree-requires <My-Package>. Sinon vous n'aurez pas toutes les dépendances nécessaires.

si vous voulez les avoir dans une liste facile à lire, vous pouvez lancer cette commande:

sort <(sed -e 's/ [| \\_]\+\|-[[:digit:]]\+..*\|[[:digit:]]\://g' <(repoquery --tree-requires **YOUR-PACKAGE-HERE**)) | uniq

elle produira un lisible, triés, package-seulement le nom de la liste. Voir cet exemple avec le paquet libxcb. Cette liste est toutes les dépendances, et inclut les dépendances des dépendances.

Example with libxcb

je n'ai trouvé aucune différence dans les résultats obtenus avec --recursive ou --resolve quand vous n'utilisez pas le --whatrequires la commande. --whatrequiressert un but différent de celui d'un arbre de dépendances standard ou d'une liste de dépendances. Je n'ai pas trouvé de réponse sur débordement de pile correctement explique cette (il y en a certains commentaires).

il y a actuellement une requête de fonctionnalité pour ajouter une commande "tree format" à repoquery, mais pour le moment cela ne semble pas être une option. Espérons que cela aidera à combler le vide.

6
répondu njfife 2017-05-23 18:42:47

Tout ce que je veux faire, c'est récupérer un graphe de dépendances complet pour un logiciel que je spécifie (évidemment, postgis).

Pour cela, vous pouvez essayer de l' rpmreaper outil recommandé dans cet article: Comment vérifier les dépendances des paquets RPM sur Fedora, CentOS ou RHEL

il fournit une interface basée sur les malédictions qui vous permet de percer sélectivement dans les exigences d'un paquet ou "percer" et voir ce qui dépend de un paquet donné.

La sortie standard de la basé sur le code ASCII repoquery --tree-requires est très difficile à suivre lorsqu'il est à plusieurs niveaux de profondeur et des milliers de lignes de long. L'affichage rpmreaper est beaucoup plus facile à lire et à parcourir.

samba-client-cycle

2
répondu Mark Edington 2016-09-22 15:09:24

ceci aidera à nettoyer le --tree-requires pour (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
1
répondu John Doe 2016-05-14 02:48:14