Mmm

Interactuar con YUM en CentOS usando Python

Interactuar con YUM en CentOS usando Python

Que es YUM?

YUM es una herramienta de administración que está disponible en distribuciones RedHat y CentOS Linux.  YUM (Yellowdog Updater Modified) depende de los paquetes RPM (Red Hat Package Manager) y se creó para permitir la administración de paquetes como partes de un sistema más grande de repositorios de software en lugar de archivos de paquetes individuales. YUM es un administrador de paquetes interactivo que puede realizar automáticamente análisis de dependencia y actualizaciones del sistema, además de instalar nuevos paquetes, eliminar paquetes antiguos, realizar consultas en paquetes existentes, etc. Para saber más sobre YUM, haga clic en aquí.

En este artículo, veremos los métodos para acceder a la funcionalidad de yum usando programas de Python y descubriremos cómo puede ser útil. Para este tutorial, usaremos CENTOS 7 ejecutando python 2.7.xy asumiría cierta familiaridad con las características básicas de Python.

Programando con YUM

Comencemos a aprender sobre la programación de yum usando Python mirando un script de Python simple que usa yum para consultar e imprimir nombres de paquetes. Aquí lo tienes:

importar sistema operativo
importar sys
importar yum
yb = yum.YumBase ()
yb.setCacheDir ()
resultados = yb.pkgSack.returnNewestByNameArch (patrones = ["python", "perl"])
para pkg en los resultados:
imprimir "% s% s (% s) \ n \ t% s"% (paquete.nombre, paquete.versión, paquete.arco, paquete.resumen)

Este script busca en los repositorios de YUM paquetes que coincidan con el nombre "python" e imprime información sobre los paquetes coincidentes. Examinaremos este script línea por línea.

Para comenzar a programar con YUM, necesitamos importar el paquete de python 'yum', que está instalado por defecto en CENTOS 7. Junto con 'yum', generalmente también necesitamos los paquetes 'os' y 'sys', por lo que un programa típico de Python que usa yum comenzaría con las siguientes 3 líneas.

importar sistema operativo
importar sys
importar yum

A continuación, para crear una instancia de yum para trabajar, incluya la siguiente línea.

yb = yum.YumBase ()

Esta es casi la primera línea de código funcional en cualquier programa de Python que use yum. Esto se debe a que YumBase es la clase base que alberga los métodos y objetos necesarios para realizar todas las funciones de administración de paquetes usando yum. Para obtener la estructura detallada de la clase YumBase, consulte su documentación.

Examinando la configuración de YUM

Una vez que una instancia de YumBase está disponible, podemos usarla para inspeccionar la configuración de yum. A continuación se muestra una tabla que enumera los comandos populares para enumerar los detalles de configuración.

Configuración Uso
imprimir yb.conf.config_file_path Imprime la ruta del archivo para el archivo de configuración de yum.
imprimir yb.conf.archivo de registro Para imprimir la ruta del archivo de registro
porque yo en yb.conf.reposdir: imprimir i Para imprimir los directorios y archivos de los repositorios
imprimir yb.conf.skip_broken El valor suele ser falso. Cuando se establece en verdadero, los comandos yum actuarán como si se hubiera proporcionado el parámetro -skip-broken.
imprimir yb.conf.errorlevel Para establecer el nivel de errores que le gustaría ver impreso en la salida estándar. Es un valor entre 0-10 donde 0 es solo crítico, mientras que 10 es todo lo que incluye depuración. De forma predeterminada, está establecido en 2, pero puede anularlo. Si va a ejecutar un script, es una buena idea configurarlo en 0. Puede establecer esto en un valor mayor como 3 cuando está depurando el script en sí.

Consulta de paquetes

Volviendo a nuestro script, vemos que la siguiente línea de código es configurar un nuevo directorio de caché para yum para que realice todas las tareas como un usuario normal (y también como el usuario root hasta cierto punto; todavía no podrá alterar los datos en el yumdb o rpmdb por ejemplo).

yb.setCacheDir ()

Habiendo creado un objeto yum real ahora, podemos acceder a los atributos pkgSack, rpmdb y repos. Esto nos permite realizar las siguientes funciones:

yb.pkgSack: se puede usar para realizar consultas en todos los repositorios habilitados

yb.rpmdb: se puede usar para realizar consultas en los paquetes instalados

yb.repositorios: obtenga un objeto RepositoryStorage que se pueda usar para establecer configuraciones específicas para los repositorios y que se pueda usar para habilitar o deshabilitar repositorios - e.gramo., yb.repositorios.enableRepo (), yb.repositorios.disableRepo () & yb.repositorios.listEnabled (). Más sobre esto más tarde.

Por ahora profundizaremos en las propiedades de pkgSack y rpmdb. Podemos buscar los repositorios YUM y los paquetes instalados localmente respectivamente llamando a una de las varias funciones proporcionadas por los atributos pkgSack y rpmdb. Estas funciones devuelven "objetos de paquete" que contienen información sobre el paquete. Algunas funciones útiles para obtener los objetos del paquete son: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Nuestro script usa el método returnNewstByNameArch para obtener los objetos del paquete que coinciden con las cadenas de patrones "python" o "perl".

Tenga en cuenta que los nombres de los métodos son los mismos para yb.rpmdb y yb.pkgSack. Sin embargo, realizan las consultas en diferentes dominios: rpmdb busca en la base de datos de paquetes RPM instalados localmente mientras que pkgSack busca en los repositorios de YUM.

Podríamos, de manera similar, enumerar los paquetes grandes instalados (donde grande significa, digamos que el tamaño es> 10 MB). El código yum es:

plist = yb.rpmdb.returnPackages ()
l_plist = [p para p en plist si p.tamaño> 1024 * 1024 * 10]
imprimir "Paquetes instalados con un tamaño> 10 MB:"
para p en l_plist:
imprimir "% s:% sMB"% (paquete, paquete.tamaño / (1024 * 1024))

Esa es básicamente la esencia de usar Python para acceder a yum. En el resto del artículo profundizaremos en los matices de la API del módulo yum y probaremos algunas acciones de complicación más como instalar / desinstalar paquetes o configurar nuestro propio repositorio.

Nevra, PRCO y Tuples

No hay errores tipográficos en el encabezado: estos son algunos términos específicos de yum que facilitan la identificación de paquetes y dependencias, así como la comunicación con otros usuarios de yum, incluidos los scripts de Python.

NEVRA son las siglas de Name, Epoch, Version, Release, Architecture y se utiliza para identificar de forma única un sabor o instancia de un paquete: estos cinco parámetros juntos apuntan sin ambigüedades a una instancia única del paquete. Por ejemplo, un paquete llamado "python" puede tener varias versiones como 2.6, 2.7 etc., y cada versión podría tener múltiples lanzamientos para diferentes arquitecturas e.gramo., x86_64, i386 (Tenga en cuenta que la palabra arquitectura aquí se refiere a la arquitectura de la CPU - e.gramo., i386 es Intel de 32 bits). Juntos, estos cinco representan una combinación única y se conoce como nevra.

PRCO significa Proporciona / Requiere / Conflictos / Obsoletos que resumen los metadatos de administración de paquetes para el objeto de paquete.

Ciertos métodos de API en pkgSack / rpmdb, como yb.pkgSack.simplePkgList (), yb.pkgSack.paquetesByTuple () etc., devuelve la información de NEVRA o PRCO como tuplas de python en lugar de pkgobjects

Listar e instalar paquetes

Similar a usar el comando "yum list", podemos usar 'yb.doPackageLists () 'para enumerar todos los paquetes instalados / paquetes disponibles para instalar / reinstalar.

plist = yb.doPackageLists (patrones = sys.argv [1:])

Ahora plist contiene 3 listas de paquetes: una para el paquete instalado, el paquete instalable y los disponibles para reinstalar. Podemos imprimir / instalar / reinstalar paquetes usando el siguiente código:

si pl.instalado:
imprimir "Paquetes instalados"
para pkg en ordenados (pl.instalado):
paquete de impresión
si pl.disponible:
imprimir "Paquetes disponibles"
para pkg en ordenados (pl.disponible):
imprimir paquete, paquete.repositorio
si pl.reinstalar_disponible:
imprimir "Reinstalar paquetes disponibles"
para pkg en ordenados (pl.reinstalar_disponible):
paquete de impresión, paquete.repositorio

De manera similar, para listar todos los paquetes instalados que podemos usar:

imprimir "\ n".unirse ([x.nombre de x en yb.rpmdb.returnPackages ()])

Instalar paquetes

La instalación de paquetes implica configurar y ejecutar una transacción. Para realizar acciones simples como instalar / quitar usamos el 'yb.instalar 'o' yb.remove 'respectivamente para configurar la transacción. Entonces invocamos el 'yb.resolveDeps () 'para activar la resolución de dependencias y' yb.processTransaction () 'para indicarle a YUM que siga adelante y ejecute la transacción.

Todos los pasos, excepto el último, son preparatorios y solo la llamada al método processTransaction () da como resultado la instalación / desinstalación. A continuación se muestra un fragmento de código para la instalación del paquete.

yb = yum.YumBase ()
yb.install (nombre = 'nombre del paquete')
yb.resolveDeps ()
yb.processTransaction ()

Al realizar tales transacciones, el 'yb.El objeto tsInfo 'contiene la información sobre el estado actual de la transacción hasta que se confirma. Puedes leer más al respecto en su documentación.

Configurar un repositorio en una ubicación arbitraria

El siguiente script le ayuda a configurar yum para acceder a un repositorio en una ubicación arbitraria. Espera que la URL del repositorio se pase como argumento de línea de comando.

url = sys.argv [1]
yb = yum.YumBase ()
si no yb.setCacheDir (force = True, reuse = False):
imprimir >> sys.stderr, "No se puede crear un tmp. cachedir. "
sys.salir (1)
yb.repositorios.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Para ejecutar el script

secuencia de comandos de Python.py url: // a / mi / repositorio

Resumen

En este artículo aprendimos cómo controlar el administrador de paquetes YUM usando su API de Python. Analizamos las opciones de configuración, así como las API de consulta / búsqueda en los paquetes disponibles e instalados y, finalmente, las formas de realizar operaciones de administración de paquetes, como instalar / desinstalar / reinstalar paquetes.

Este artículo está destinado a servir como una ventana a lo que es posible a través de la API de yum python. Aunque la API no está muy bien documentada, sigue las convenciones estándar y funciona de manera predecible. Armado con el conocimiento de las capacidades de YUM y las habilidades de Python, es divertido explorar y aprender todo lo que puede hacer. Espero que hayas disfrutado leyendo hasta ahora y que continúes explorando y aplicando yum en tus proyectos.

Las 5 mejores cartas de captura de juegos
Todos hemos visto y amado la transmisión de juegos en YouTube. PewDiePie, Jakesepticye y Markiplier son solo algunos de los mejores jugadores que han ...
Cómo desarrollar un juego en Linux
Hace una década, no muchos usuarios de Linux predecían que su sistema operativo favorito algún día sería una plataforma de juegos popular para videoju...
Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...