web-dev-qa-db-fra.com

Yum: Comment puis-je afficher des variables comme $ releasever, $ basearch & $ YUM0?

J'installe un référentiel yum et j'ai besoin de déboguer certaines URL dans le fichier yum.conf. J'ai besoin de savoir pourquoi Scientific Linux essaie de récupérer cette URL, alors que je m'attendais à ce qu'elle en récupère 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) donne des informations sur ces variables:

Variables

Il existe un certain nombre de variables que vous pouvez utiliser pour faciliter la maintenance des fichiers de configuration de yum. Ils sont disponibles dans les valeurs de plusieurs options dont le nom, baseurl et les commandes.

$ releasever Ceci sera remplacé par la valeur de la version du paquet répertoriée dans distroverpkg. Il s'agit par défaut de la version du package "redhat-release".

$ Arch Il sera remplacé par votre architecture comme indiqué par os.uname () [4] en Python.

$ basearch Ceci sera remplacé par votre architecture de base en miam. 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'utilitaire de ligne de commande yum? Je préférerais ne pas traquer la version du package 'redhat-release', ou obtenir manuellement la valeur de os.uname () [4] en Python.

62
Stefan Lasiewski

Si vous installez yum-utils, Cela vous donnera yum-debug-dump Qui écrira ces variables et plus d'informations de débogage dans un fichier. Il n'y a pas d'option pour écrire sur stdout, il écrit toujours sur un fichier qui n'est vraiment pas utile.

Ce n'est évidemment pas une excellente solution, alors voici un python one-liner que vous pouvez copier et coller qui imprimera ces variables sur stdout.

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 quoi que ce soit exra.

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]# 
80
Mark McKinstry

Juste au cas où quelqu'un finirait ici, comme moi, à chercher la réponse équivalente pour dnf sur Fedora, j'ai compris ce qui suit python one-liner:

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'}
14
sysadmiral

Pour les obtenir tous, vous devrez utiliser du code comme mmckinst publié , mais si vous voulez simplement vérifier $releasever tu peux courir yum version nogroups sur RHEL-6.

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

11
James Antill

Et expliquant comment $ releasever est affecté:

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

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 elle pourrait ê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 rpm redhat-release-server)

4
adrianlzt

Obtenir la valeur de $Arch Devrait être aussi simple que Arch="$(Arch)" ou Arch="$(uname --machine)" mais si vous voulez vraiment savoir quelle est la valeur de yum pour $Arch Est, essayez:

bash-4.2# Arch="$(python -c 'from rpmUtils import Arch; print(Arch.getCanonArch());')";
bash-4.2# declare -p Arch
declare -- Arch="ia32e"

Obtenir les valeurs des autres vars sans avoir besoin d'utiliser Python est un peu plus facile.

Option 1:

bash-4.2# distroverpkg="$(awk --field-separator \= '/distroverpkg/{print$2}' /etc/yum.conf)";
bash-4.2# releasever="$(rpm --query --queryformat '%{VERSION}\n' "${distroverpkg:-redhat-release}")";
bash-4.2# basearch="${HOSTTYPE:-$(uname --machine)}";
bash-4.2# declare -p distroverpkg releasever basearch
declare -- distroverpkg="centos-release"
declare -- releasever="7"
declare -- basearch="x86_64"

Option 2:

bash-4.2# releasever="$(rpm --query --file --queryformat '%{VERSION}\n' /etc/system-release)";
bash-4.2# basearch="$(rpm --query --queryformat '%{Arch}\n' "kernel-$(uname --kernel-release)")";
bash-4.2# declare -p releasever basearch
declare -- releasever="7"
declare -- basearch="x86_64"

Remarque: les commandes affichées en utilisant long-opts (Lorsqu'elles sont disponibles) pour plus de clarté.

0
bfs

Une autre façon de voir les résultats de la substitution de variables est de faire quelque chose comme ceci:

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

Je bricolais avec des variables yum pour contrôler quel client de sortie dans l'espace est sélectionné pour construire un dépôt local et j'ai trouvé cela utile pour voir comment les variables sont interprétées.

0
Robert B.