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?
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
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.
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. --whatrequires
sert 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.
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.
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