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

Je mets en place un repository yum, et j'ai besoin de déboguer certaines des URL dans le file yum.conf. J'ai besoin de savoir pourquoi Scientific Linux essaie d'attraper cette URL, alors que je m'attendais à saisir une autre URL:

# 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 resortingeve repository metadata (repomd.xml) for repository: sl. Please verify its path and try again 

La page de manuel yum.conf (5) donne quelques informations sur ces variables:

Variables

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

$ releasever Ceci sera remplacé par la valeur de la version du package listée dans distroverpkg. La valeur par défaut est la version du packageage '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 $ arche est i686, votre $ basearch sera i386.

$ YUM0- $ YUM9 Ceux-ci seront remplacés 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 file de configuration ne sera pas remplacée.

Yat-il un moyen de voir ces variables en utilisant l'utilitaire de command line yum ? Je préférerais ne pas searchr la version du packageage 'redhat-release', ni get manuellement la valeur de os.uname () [4] en Python.

    Si vous installez yum-utils , vous obtiendrez yum-debug-dump qui écrira ces variables et plus d'informations de debugging dans un file. Il n'y a pas d'option pour écrire dans stdout, il écrira toujours dans un file qui n'est vraiment pas utile.

    Ce n'est évidemment pas une bonne solution alors voici un python monoligne vous pouvez copyr et coller qui va imprimer ces variables à 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 server, pas besoin d'installer quoi que ce soit exra.

    Voici à quoi ça 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]# 

    Pour les get, vous devrez utiliser du code comme mmckinst posté , mais si vous voulez juste vérifier $releasever vous pouvez exécuter les yum version nogroups sur RHEL-6.

    L'autre chose à faire, dans RHEL-6, est de créer votre propre dans /etc/yum/vars .

    Juste au cas où n'importe qui finirait ici, comme moi, à la search de la réponse équivalente pour dnf sur Fedora j'ai sondé le python one-liner suivant:

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

    Sur Fedora 24, il ressemble à ceci:

     {'arch': 'x86_64', 'basearch': 'x86_64', 'releasever': '24'} 

    Et expliquant comment $ releasever est assigné:

    La fonction _getsysver interroge la database 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 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 que vous avez installé le server rpm redhat-release)

    Une autre façon de voir les résultats de la substitution de variable 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 extraverti est sélectionné pour build un repo local et j'ai trouvé cela utile pour voir comment les variables sont interprétées.