El Diario Geek

Manteniendo el software usando RPM (Red Hat Package Manager)

RPM es un potente gestor de software que puede ser usado para construir, instalar, consultar, verificar, actualizar y desinstalar paquetes de software individuales. Un paquete RPM consiste en un archivo de ficheros, e información del paquete como el nombre, la versión, una descripción e información sobre las dependencias de otros paquetes RPM.

RPM es más que una herramienta específica de Red Hat. Muchas otras distribuciones modernas, como Ubuntu y SuSE, también utilizan RPM. Los beneficios de usar RPM incluyen:

  • Simplifica la distribución, instalación, actualización y eliminación de software
  • Garantiza que:
    • El software de prerrequisito se instala en el sistema.
    • Las versiones del software de prerrequisito se mantienen compatibles.
    • Los archivos de configuración modificados localmente no se clocan cuando se actualiza el RPM.
    • Los archivos de configuración modificados localmente se guardan con un sufijo «.rpmsave» si el paquete se elimina posteriormente.
  • Permite certificar que el software instalado no ha sido alterado, modificado, corrompido o cambiado de alguna manera.
    • RPM mantiene información sobre los paquetes instalados bajo el directorio «/var/lib/rpm».

      Los componentes de la herramienta RPM son:

      • Una base de datos personalizada que contiene información sobre todo el software instalado en el sistema, recogida de los RPM individuales.
      • Un ejecutable «/bin/rpm».
      • Repositorios accesibles por Internet de los paquetes RPM disponibles.
        • Tipos de paquetes RPM

          Los paquetes RPM vienen en dos categorías: fuente y binario.

          Un RPM fuente siempre se puede reconocer porque el nombre del archivo termina con la cadena «.src.rpm». En un RPM fuente no sólo están los archivos de código fuente del programa original, sino también los scripts que permiten que el código se recompile automáticamente, se instale automáticamente y se elimine automáticamente. En un RPM fuente no hay archivos ejecutables para el usuario final. Normalmente, sólo los desarrolladores están interesados en un RPM fuente.

          Un RPM binario contiene los componentes de usuario final de un RPM. Los nombres de los archivos RPM binarios identifican la arquitectura del host para los contenidos. Por ejemplo, el archivo RPM binario:

          bash-3.1-16.1.x86_64.rpm

          Contiene archivos sólo utilizables en una CPU de arquitectura Intel X86 de 64 bits. Otros valores de arquitectura comunes incluyen «i386» para hosts Intel de 32 bits. Algunos RPM binarios pueden ser instalados en cualquier arquitectura de CPU porque sus archivos funcionarán en cualquier host; un ejemplo de estos paquetes «.noarch.rpm» es el RPM «tzdata» que contiene información sobre las zonas horarias del mundo. Para actualizar su sistema con la última versión de un paquete, necesitará el RPM binario más reciente para el mismo.

          Esquema de nomenclatura RPM

          Cada paquete RPM está contenido en un único archivo. El nombre del archivo tiene varios campos para identificar completamente el contenido del paquete. Aunque las herramientas RPM en sí mismas no se basan en el nombre de archivo, debe entender la convención del nombre de archivo para ayudarle a identificar o descargar el paquete adecuado. Este es un ejemplo de nombre de archivo RPM:

          bash-3.1-16.1.x86_64.rpm
          Este RPM es para el shell BASH («/bin/bash»). El nombre del archivo se compone de varias partes:

          --..rpm

          donde:

            es el nombre del programa o paquete. El suele ser asignado por el autor del programa. En nuestro ejemplo, los desarrolladores decidieron llamar a su producto «bash» por razones que les parecieron divertidas.

          • versión] identifica qué edición del software contiene este RPM. El número es asignado por el autor del programa. El uso del número permite determinar qué versión de las fuentes del autor se utilizaron para generar el RPM.
          • proporciona el número de edición del archivo RPM en sí y no la versión de los archivos fuente del autor. Un RPM actualizado puede ser emitido para suministrar una versión parcheada del software original del autor. El parche no tiene por qué proceder del desarrollador original, por lo que el RPM se incrementa en lugar del .
          • describe el contenido del RPM e indica si este archivo contiene el código fuente del producto (un «.src.rpm»), archivos independientes de la arquitectura (un «.noarch.rpm») o archivos que sólo pueden instalarse en un tipo de host concreto (un «.sh.rpm» sólo funcionará en un procesador embebido STRONGHOLD).
          • Nota: El es controlado por el autor original y el es controlado por quien construyó el RPM.

            Entendiendo las versiones del RPM

            El RPM y los campos no son siempre estrictamente numéricos y pueden contener otros caracteres además de dígitos ordinarios. Es común ver tanto una versión «10» como una versión «10a» del mismo paquete. A veces, elegir la versión más reciente puede ser complicado. Así es como el propio RPM compara internamente los números de versión y lanzamiento:

            1. Quite el prefijo y el sufijo «..rpm». Por ejemplo,:
            «bash-3.1-16.1.x86_64.rpm» se convierte en «3.1-16.1» y «bash-3.1-16.5a.1.x86_64.rpm» se convierte en «3.1-16.5a.1»

            2. Compara las cadenas restantes carácter por carácter, de izquierda a derecha hasta encontrar un dígito. Si los caracteres difieren, el que venga después en la secuencia de cotejo es el RPM más reciente.

            3. Cuando se encuentre un dígito, convierta toda la secuencia de dígitos en un único número binario. En nuestro ejemplo, los dos caracteres «16» se combinan en un valor de dieciséis (16). Los valores binarios resultantes se comparan y el valor mayor es el RPM más reciente. Así, un RPM con a de «0010» es más reciente que uno con a de «9».

            Los pasos 2 y 3 se repiten según sea necesario hasta que se produzca una diferencia.

            Instalación y eliminación de archivos

            Nota: Normalmente sólo se puede instalar una o de un RPM a la vez.

            Las versiones posteriores suelen instalarse utilizando la función RPM «-U» (actualización) en lugar de la función RPM «-i». Las excepciones comunes a la regla de un solo RPM son los RPM del kernel. Un sistema suele tener varias versiones de kernels instaladas; RPM tiene una lista de los RPM que pueden tener varias versiones instaladas. Para eliminar una versión cuando hay varias instaladas, debe especificar completamente el nombre del paquete y la versión.

            En la arquitectura x86_64, es común tener los paquetes RPM «.i386» de 32 bits y «.x86_64» de 64 bits instalados para soportar aplicaciones de 32 y 64 bits. Normalmente, RPM no muestra la arquitectura de un paquete en una consulta pero se puede mostrar manualmente.

            Instalación y eliminación

            # rpm -i --install (install new RPM; error if already installed)# rpm -U --upgrade (delete existing RPM, if any; install new)# rpm -F --freshen (update RPM only if package already installed)# rpm -e --erase (remove, delete, expunge)

            Opciones comunes
            Salida: -v (verbose – nombre de archivo), -h (hash)
            Condiciones previas: -nodeps, -replacefiles, -force (¡¡¡Tenga cuidado aquí!!!)
            Relocalización: -excludepath, -prefix, -relocate, -badreloc, -root
            Soporte de URL: ftp, http

            Ejemplos:

            # rpm -ivh binutils-2.11.90.0.8-12.i386.rpm# rpm -Uvh finger-0.17-9-i386.rpm# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm# rpm -e diffutils# rpm -e kernel-enterprise-2.4.9-e.12

            Pista: Nunca, jamás, utilice la opción «-U» para instalar un nuevo RPM del kernel. La función de actualización «-U» primero borra el RPM actual del sistema y luego intenta instalar el nuevo RPM. Cualquier problema que impida la instalación del nuevo RPM dejará el sistema sin poder arrancar. Esto no es lo que usted quiere, así que siempre use el parámetro «-i» para instalar un RPM del kernel.

            Consultas (Paquetes y/o Información)

            Use una consulta para obtener información sobre los paquetes instalados. Puede consultar todos los paquetes instalados, o un solo paquete instalado. También puede averiguar qué RPM suministra un archivo en particular.

            # rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

            Información
            por defecto (nombre del paquete)
            -i: información general
            -l: lista de archivos

            Ejemplos:

            # rpm -qa# rpm -q kernel -i (information)# rpm -q kernel -l (files contained in package)# rpm -q kernel --requires (prereqs)# rpm -q kernel --provides (capabilities provided by package)# rpm -q kernel --scripts (scripts run during installation and removal)# rpm -q kernel --changelog (revision history)# rpm -q kernel -queryformat format (rpm --querytags for list of options)

            Consejo: Cuando se busca un paquete RPM concreto cuando no se conoce el nombre exacto, se suele utilizar un canalizador de comandos como:

            $ rpm -qa | grep foo
            . Las versiones posteriores de la herramienta RPM permiten hacer esto de forma sucinta como:

            $ rpm -qa '*foo*'

            Consultas – Verificación (Archivos)

            La base de datos del RPM contiene muchos atributos sobre todos y cada uno de los archivos instalados por un RPM. Usted puede verificar el estado actual del archivo contra la información catalogada por RPM cuando el paquete fue instalado.

            # rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)
            Nota: Muchas distribuciones de Linux incluyen un RPM «prelink» que intenta disminuir el tiempo necesario para iniciar una aplicación que utiliza una biblioteca compartida (la mayoría de las aplicaciones utilizan al menos una biblioteca compartida y potencialmente docenas) añadiendo información especial directamente en el archivo de programa de una aplicación.

            Añadir esta información hace que las aplicaciones se inicien más rápido, pero los cambios en el archivo invalidan la mayoría de los atributos del archivo en la base de datos RPM, como la fecha de la última modificación del archivo, el tamaño del archivo y la suma de comprobación MD5 del archivo.

            Consultas – Verificación (Paquetes)

            # rpm -import /mnt/cdrom/RPM-GPG-KEY# rpm -q gpg-pubkey# rpm --checksig m4-1.4.1-11.i386.rpm

            Ejemplos:

            # rpm -qf /path/filename (what package owns filename)# rpm -qf /path/filename -i (what does it do)# rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4)# rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4)# rpm -q --whatprovides glibc.so (what package provides requisite library)

            Reparar la base de datos RPM

            La herramienta RPM utiliza su propia implementación de base de datos personalizada para contener su información. A veces esa base de datos puede corromperse; los síntomas incluyen afirmaciones de que falta un paquete RPM instalado; o los intentos de actualizar un RPM simplemente se cuelgan. Si su base de datos RPM se cuelga o se corrompe, puede intentar repararla con estos comandos. No se garantiza que este proceso funcione.

            Para realizar estos pasos debe iniciar sesión con privilegios de superusuario (también conocido como «root»). Los comandos pueden ser copiados y pegados directamente en una ventana de terminal de root.

            1. Asegúrese de que no quedan procesos RPM en ejecución en su sistema. Utilice el comando ps para identificarlos. Use the kill command to terminate any «rpm» processes you find; a «kill -9» may be necessary.

            2. Delete the lock files that RPM uses:

            # rm -f /var/lib/rpm/__db*

            3. If you were experiencing a hanging «rpm» command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

            4. Make a backup of your RPM database:

            # cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

            5. Rebuild your RPM database:

            # rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

            6. Retry your failed RPM command.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *