Yum: Comment afficher des variables telles que $ releasever, $ basearch & $ YUM0?

51

Je suis en train de configurer un référentiel yum et je dois déboguer certaines des URL du fichier yum.conf. J'ai besoin de savoir pourquoi Scientific Linux tente de récupérer cette URL, alors que je m'attendais à ce qu'elle en saisisse une autre:

# yum install package 
http://192.168.1.100/pub/scientific/6.1/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: sl. Please verify its path and try again

La page de manuel yum.conf (5) fournit des informations sur ces variables:

Variables

Vous pouvez utiliser un certain nombre de variables pour faciliter la maintenance des fichiers de configuration de yum. Ils sont disponibles dans les valeurs de plusieurs options, y compris name, baseurl et commandes.

$ releasever Ceci sera remplacé par la valeur de la version du paquet indiqué dans distroverpkg. Ceci est la version par défaut du paquetage 'redhat-release'.

$ arch Ceci sera remplacé par votre architecture listée par os.uname () [4] en Python.

$ basearch Ceci sera remplacé par votre architecture de base en yum. Par exemple, si votre $ arch est i686, votre $ basearch sera i386.

$ YUM0- $ YUM9 Celles-ci seront remplacées par la valeur de la variable d'environnement shell du même nom. Si la variable d'environnement shell n'existe pas, la variable du fichier de configuration ne sera pas remplacée.

Existe-t-il un moyen d'afficher ces variables à l'aide de l' yumutilitaire de ligne de commande? Je préférerais ne pas traquer la version du paquetage 'redhat-release', ou obtenir manuellement la valeur de os.uname () [4] en Python.

Stefan Lasiewski
la source
"traquer la version de redhat-release" est trivial. cat /etc/redhat-release En fait, utilisez cat /etc/system-releaseplutôt, puisqu'il s'agira d'un lien symbolique vers / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <quelles que soient les utilisations scientifiques de Linux>, selon le cas.
Xalorous
3
/etc/redhat-releasen'est pas la même chose que la $releasevervariable. La question ici est de savoir ce que Yum remplace à la place de ces variables. Que se passe-t-il par programmation?
Stefan Lasiewski
1
'traquer la version de redhat-release' n'est pas non plus identique à 'cat / etc / redhat-release'. Le premier demande une version, tandis que le second considère un fichier complètement non fiable et infiniment mutable sur lequel on ne devrait JAMAIS faire confiance. rpm -qf /etc/issueest la méthode canonique, et aurait été la méthode dans LSB sauf SuSE n'a pas bougé dans les réunions FSStnd. YARLY.
user2066657

Réponses:

73

Si vous installez yum-utils, cela vous yum-debug-dumpindiquera qui écrira ces variables et d'autres informations de débogage dans un fichier. Il n'y a pas d'option pour écrire sur stdout, il sera toujours écrit dans un fichier ce qui n'est vraiment pas utile.

Ce n’est évidemment pas une bonne solution. Voici donc une ligne unique en python que vous pouvez copier et coller pour imprimer ces variables sur la sortie standard.

python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'

Cela fonctionne sur CentOS 5 et 6, mais pas 4. yum est écrit en python, donc le module yum python est déjà sur votre serveur, pas besoin d’installer rien d’autre.

Voici à quoi cela ressemble sur CentOS 5:

[root@somebox]# python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'
{'arch': 'ia32e',
 'basearch': 'x86_64',
 'releasever': '5',
 'yum0': '200',
 'yum5': 'foo'}
[root@somebox]# 
Mark McKinstry
la source
2
yum-debug-dumpsemble faire ce dont j'ai besoin. On dirait que l'information est tout là dans la %%%%YUM INFOsection. Je n'arrive pas à faire en sorte que des choses semblables $YUM0-$YUM9apparaissent, mais je n'utilise jamais ces variables de toute façon.
Stefan Lasiewski
2
Pour obtenir un affichage clair de $ releasever dans le shell bash, utilisez ceci:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite
Cela ne fonctionne que pour la version système de Python. Comment cela fonctionne-t-il pour une version "alt-install" supplémentaire de Python?
RCross
que faites-vous si releasever est en fait $ releasever la chaîne ....
The Lazy Coder
11

Juste au cas où quelqu'un se retrouverait ici, comme moi, à la recherche de la réponse équivalente pour dnf sur Fedora, j'ai découvert le one-liner python suivant:

python3 -c 'import dnf, pprint; db = dnf.dnf.Base(); pprint.pprint(db.conf.substitutions,width=1)'

Sur Fedora 24, cela ressemble à ceci:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}
sysadmiral
la source
1
J'ai trouvé ça en cherchant yum variables repo names. Ceci répond à la question pour l'instant, avec le remplacement de yum par dnf. Bon travail!
bgStack15
10

Pour tous les obtenir, vous devez utiliser un code tel que mmckinst publié , mais si vous voulez juste vérifier, $releasevervous pouvez utiliser yum version nogroupsRHEL-6.

L’autre chose à faire, dans RHEL-6, est de créer le vôtre /etc/yum/vars.

James Antill
la source
peux-tu élaborer? Qu'est-ce que la création /etc/yum/varsaccomplit? Aussi, savez-vous si cela a changé de RHEL5 à RHEL6?
Stefan Lasiewski
1
Vous devriez être capable d'écrire du code qui fonctionne sur RHEL-5 et RHEL-6, sans problème. La commande de version ne se trouve pas dans l'atmosphère RHEL-5. Ce que je voulais dire à propos de / etc / yum / vars (uniquement pour RHEL-6), c’est que vous pouvez simplement créer un fichier / etc / yum / vars / foorelease ... qui contient vos propres données de version, ou même simplement remplacer le système de publication. en écrivant dans / etc / yum / vars / releasever.
James Antill
Plus d'informations sur /etc/yum/varspeuvent être trouvées à l' adresse access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
Stefan Lasiewski
4

Et explorer comment $ releasever est assigné:

La fonction _getsysver interroge la base de données rpm comme suit :

rpm -q --provides $(rpm -q --whatprovides "system-release(releasever)") | grep "system-release(releasever)" | cut -d ' ' -f 3

La valeur "system-release (releasever)" est définie ici et peut être remplacée par distroverpkg dans yum.conf

Si la requête n'a renvoyé aucune valeur, releasever est défini sur '$ releasever' (par exemple, si vous définissez distroverpkg = centos-release mais avez installé le serveur rpm redhat-release-server).

Adrianlzt
la source
0

Une autre façon de voir les résultats de la substitution de variable consiste à faire quelque chose comme ceci:

yum-config-manager -c /etc/reposyncb.conf  | grep -i spacewalk

Je bricolais avec les variables yum pour contrôler le client Spacewalk sélectionné pour la construction d'un référentiel local et trouvais cela utile pour voir comment les variables étaient interprétées.

Robert B.
la source
Cool, cependant cette méthode ne semble pas fournir de variables comme releasever.
Stefan Lasiewski