Yum: ¿Cómo puedo ver variables como $ releasever, $ basearch y $ YUM0?

51

Estoy configurando un repositorio de yum, y necesito depurar algunas de las URL en el archivo yum.conf. Necesito saber por qué Scientific Linux está tratando de tomar esta URL, cuando esperaba que tomara otra 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 retrieve repository metadata (repomd.xml) for repository: sl. Please verify its path and try again

La página de manual yum.conf (5) brinda información sobre estas variables:

Variables

Hay varias variables que puede usar para facilitar el mantenimiento de los archivos de configuración de yum. Están disponibles en los valores de varias opciones, incluyendo nombre, baseurl y comandos.

$ releasever Esto será reemplazado con el valor de la versión del paquete listado en distroverpkg. Esto predeterminado es la versión del paquete 'redhat-release'.

$ arch Esto será reemplazado con su arquitectura según lo enumerado por os.uname () [4] en Python.

$ basearch Esto será reemplazado con su arquitectura base en yum. Por ejemplo, si su $ arch es i686, su $ basearch será i386.

$ YUM0- $ YUM9 Se reemplazarán con el valor de la variable de entorno de shell del mismo nombre. Si la variable de entorno de shell no existe, la variable del archivo de configuración no se reemplazará.

¿Hay alguna manera de ver estas variables utilizando la yumutilidad de línea de comandos? Preferiría no buscar la versión del paquete 'redhat-release' u obtener manualmente el valor de os.uname () [4] en Python.

Stefan Lasiewski
fuente
'buscar la versión de redhat-release' es trivial. cat /etc/redhat-release En realidad, use cat /etc/system-releaseen su lugar, ya que este será un enlace simbólico a / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <lo que sea que Linux científico utilice>, según corresponda.
Xalorous
3
/etc/redhat-releaseNo es lo mismo que la $releasevervariable. La pregunta aquí es averiguar qué está sustituyendo Yum en lugar de estas variables. ¿Qué está pasando programáticamente?
Stefan Lasiewski
1
'buscar la versión de redhat-release' tampoco es lo mismo que 'cat / etc / redhat-release'. El primero pide una versión, mientras que el segundo ve un archivo completamente confiable e infinitamente mutable en el que NUNCA se debe confiar. rpm -qf /etc/issuees el método canónico, y habría sido el método en LSB, excepto que SuSE no se movió en las reuniones FSStnd. YARLY
user2066657

Respuestas:

73

Si instala yum-utils, eso le dará yum-debug-dumpcuáles escribirán esas variables y más información de depuración en un archivo. No hay ninguna opción para escribir en stdout, siempre escribirá en algún archivo que realmente no es tan útil.

Obviamente, esta no es una gran solución, así que aquí hay una línea única de Python que puede copiar y pegar que imprimirá esas variables en stdout.

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

Esto funciona en CentOS 5 y 6, pero no en 4. yum está escrito en python, por lo que el módulo yum python ya está en su servidor, no es necesario instalar nada más.

Así es como se ve en 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
fuente
2
yum-debug-dumpParece hacer lo que necesito. Parece que toda la información está ahí debajo de la %%%%YUM INFOsección. Parece que no puedo hacer que $YUM0-$YUM9aparezcan cosas como estas, pero de todas formas nunca uso esas variables.
Stefan Lasiewski
2
Para obtener una visualización limpia de $ releasever en el shell bash, use esto:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite
Esto solo funciona para la versión del sistema de Python. ¿Cómo hace que esto funcione para una versión adicional de "instalación alternativa" de Python?
RCross
¿qué hacer si releasever es en realidad $ releasever la cadena ....
The Lazy Coder
11

En caso de que alguien termine aquí, como yo, buscando la respuesta equivalente para dnf en Fedora, entendí la siguiente línea de Python:

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

En Fedora 24 se ve así:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}
sysadmiral
fuente
1
Encontré esto de la búsqueda yum variables repo names. Esto responde a la pregunta por ahora, con el reemplazo de yum con dnf. ¡Buen trabajo!
bgStack15
10

Para obtenerlos todos, necesitará usar código como mmckinst publicado , pero si solo desea verificarlo $releasever, puede ejecutar yum version nogroupsRHEL-6.

La otra cosa que hacer, en RHEL-6, es crear uno propio /etc/yum/vars.

James Antill
fuente
¿puedes elaborar? ¿Qué logra la creación /etc/yum/vars? Además, ¿sabe si esto cambió de RHEL5 a RHEL6?
Stefan Lasiewski
1
Debería poder escribir código que funcione en RHEL-5 y RHEL-6, sin ningún problema. El comando de versión no está en atm RHEL-5. Lo que quise decir sobre / etc / yum / vars (solo RHEL-6) es que puedes crear un / etc / yum / vars / foorelease ... que tiene tus propios datos de lanzamiento, o incluso anular el release del sistema escribiendo a / etc / yum / vars / releasever.
James Antill
Se /etc/yum/varspuede encontrar más información sobre access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
Stefan Lasiewski
4

Y profundizando en cómo se asigna $ releasever:

La función _getsysver consulta la base de datos rpm como:

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

El valor "system-release (releasever)" se define aquí , y podría ser anulado por distroverpkg en yum.conf

Si la consulta no devolvió ningún valor, releasever se establece en '$ releasever' (por ejemplo, si configura distroverpkg = centos-release pero ha instalado el servidor rpm redhat-release)

adrianlzt
fuente
0

Otra forma de ver los resultados de la sustitución de variables es hacer algo como esto:

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

Estaba jugando con las variables yum para controlar qué cliente de caminata espacial se seleccionó para construir un repositorio local y encontré esto útil para ver cómo se interpretan las variables.

Robert B.
fuente
Genial, sin embargo, este método no parece proporcionar variables como releasever.
Stefan Lasiewski