3.3. Gestor de paquetes RPM

En SUSE Linux, el RPM (gestor de paquetes RPM) se utiliza para gestionar los paquetes de software. Los programas principales que lo componen son rpm y rpmbuild. Los usuarios, los administradores del sistema y los creadores de paquetes pueden realizar consultas a la potente base de datos RPM para obtener información detallada acerca del software instalado.

Básicamente, rpm dispone de cinco modos: instalación, desinstalación y actualización de los paquetes de software; reconstrucción de la base de datos RPM; consulta a las bases de RPM o los archivos de reserva RPM individuales; comprobación de la integridad de los paquetes y, por último, la firma de los paquetes. El comando rpmbuild puede utilizarse para generar paquetes instalables a partir de orígenes antiguos.

Los archivos de reserva RPM instalables están empaquetados con un formato binario especial. Estos archivos constan de archivos de programa para su instalación y metainformación que rpm utilizará durante la instalación para configurar el paquete de software o que se almacenará en la base de datos RPM para que sirva de documentación. Los archivos de reserva RPM normalmente tienen la extensión .rpm.

[Tip]Paquetes de desarrollo de software

En un buen número de paquetes, los componentes necesarios para el desarrollo del software (bibliotecas, encabezados, archivos include, etc.) se han colocado en paquetes independientes. Estos paquetes de desarrollo sólo son necesarios si desea compilar el software usted mismo, como en el caso de los paquetes GNOME más recientes. Se pueden identificar mediante la extensión del nombre -devel como, por ejemplo, paquetes alsa-devel, gimp-devel y kdelibs3-devel.

3.3.1. Comprobación de la autenticidad de los paquetes

Los paquetes RPM de SUSE Linux cuentan con una firma GnuPG. La clave incluida la huella digital es:


1024D/9C800ACA 2000-10-19 SuSE Package Signing Key <build@suse.de>
Key fingerprint = 79C1 79B2 E1C8 20C1 890F  9994 A84E DAE8 9C80 0ACA

El comando rpm --checksig paquete-1.2.3.rpm puede utilizarse para comprobar la firma de un paquete RPM a fin de determinar si realmente tiene su origen en SUSE Linux o en otro sistema de confianza. El uso de este comando es muy recomendable para actualizar paquetes desde Internet. La clave pública de la firma del paquete de SUSE Linux reside normalmente en /root/.gnupg/. La clave se encuentra ubicada también en el directorio /usr/lib/rpm/gnupg/, para permitir que los usuarios normales comprueben la firma de los paquetes RPM.

3.3.2. Gestión de paquetes: instalación, actualización y desinstalación

Normalmente, la instalación de un archivo de reserva RPM es bastante sencilla: rpm -i paquete.rpm. Con este comando se instala el paquete, pero sólo si se cumplen las dependencias y no hay conflictos con otros paquetes. Mediante un mensaje de error, rpm pide los paquetes que tienen que instalarse para cumplir con los requisitos de dependencias. En segundo plano, la base de datos RPM se asegura de que no surjan conflictos (un archivo concreto sólo puede pertenecer a un paquete). Al seleccionar diferentes opciones, puede forzar a rpm a hacer caso omiso de estos valores por defecto. Sin embargo, hay que ser un usuario experto para utilizarlas. De lo contrario, existe el riesgo de afectar a la integridad del sistema y poner en peligro la capacidad de actualización del sistema.

Las opciones -U o --upgrade y -F o --freshen pueden utilizarse para actualizar un paquete; por ejemplo, rpm -F paquete.rpm. Este comando desinstala los archivos de la versión anterior e instala los nuevos inmediatamente. La diferencia entre las dos versiones estriba en que -U instala paquetes que no existían previamente en el sistema mientras que -F sólo actualiza paquetes previamente instalados. Al actualizar, rpm actualiza los archivos de configuración con cuidado usando la siguiente estrategia:

  • Si el administrador del sistema no ha cambiado un archivo de configuración, rpm instalará la nueva versión del archivo adecuado. No es necesario que el administrador del sistema realice ninguna acción.

  • Si el administrador del sistema ha cambiado un archivo de configuración antes de la actualización, rpm guarda el archivo modificado con la extensión .rpmorig o .rpmsave (archivo de copia de seguridad) e instala la versión del nuevo paquete, siempre y cuando el archivo instalado en un principio y la versión más reciente sean diferentes. Si es así, compare el archivo de copia de seguridad (.rpmorig o .rpmsave) con el archivo recién instalado y realice los cambios otra vez en el archivo nuevo. Después, asegúrese de suprimir todos los archivos .rpmorig y .rpmsave para evitar problemas con futuras actualizaciones.

  • Los archivos .rpmnew aparecen si el archivo de configuración ya existe y si la etiqueta noreplace está especificada en el archivo .spec.

Después de la actualización, se deben eliminar los archivos .rpmsave y .rpmnew después de compararlos, de manera que no obstaculicen futuras actualizaciones. La extensión .rpmorig se asigna si la base de datos RPM no ha reconocido previamente el archivo.

De lo contrario, se usará .rpmsave. En otras palabras, .rpmorig es el resultado de actualizar a partir de un formato ajeno a RPM. .rpmsave es el resultado de actualizar a partir de un RPM antiguo a uno más reciente. .rpmnew no revela ninguna información, como que el administrador del sistema haya realizado cambios en el archivo de configuración. Hay disponible una lista de estos archivos en /var/adm/rpmconfigcheck. Algunos archivos de configuración (como /etc/httpd/httpd.conf) no se sobrescriben para que no haya interrupciones en las operaciones.

El parámetro -U no es sólo el equivalente para desinstalar con la opción -e e instalar con la opción -i. Utilice -U cuando sea posible.

Para desinstalar un paquete, escriba rpm -e paquete. El comando rpm sólo suprimirá el paquete si no hay dependencias sin resolver. Teóricamente es imposible suprimir Tcl/Tk, por ejemplo, mientras otra aplicación lo necesite. Incluso en este caso, RPM pide ayuda desde la base de datos. Si tal supresión es, por las razones que sean y en circunstancias poco usuales, imposible aun en el caso de que no existan dependencias adicionales, puede resultar de ayuda volver a generar la base de datos RPM mediante la opción --rebuilddb.

3.3.3. RPM y revisiones

Para garantizar la seguridad operativa de un sistema, se deben instalar en el sistema los paquetes de actualización de vez en cuando. Antes, un error en un paquete sólo podía solucionarse sustituyendo todo el paquete. Los paquetes grandes con errores en archivos de pequeño tamaño podían dar como resultado grandes cantidades de datos. Sin embargo, SUSE RPM ofrece una función que permite la instalación de revisiones en paquetes.

Los aspectos más importantes se explican usando "pine" como ejemplo:

¿Es el RPM de revisión adecuado para mi sistema?

Para comprobarlo, realice una consulta sobre la versión instalada del paquete. Para pine, esto puede realizarse de esta forma:

 
rpm -q pino 
pino-4.44-188 

Compruebe a continuación si el RPM de revisión es adecuado para esta versión de pine:

rpm -qp --basedon pine-4.44-224.i586.patch.rpm 
pine = 4.44-188
pine = 4.44-195
pine = 4.44-207

Esta revisión es adecuada para tres versiones diferentes de pine. La versión instalada en el ejemplo también se muestra de manera que la revisión pueda instalarse.

¿Qué archivos sustituye la revisión?

Los archivos afectados por una revisión pueden verse fácilmente en el RPM de revisión. El parámetro rpm -P permite la selección de funciones de revisión especiales. Muestre la lista de archivos con el comando siguiente:

rpm -qpPl pine-4.44-224.i586.patch.rpm
/etc/pine.conf
/etc/pine.conf.fixed
/usr/bin/pine

O bien, si la revisión ya se ha instalado, con el comando siguiente:

rpm -qPl pine
/etc/pine.conf
/etc/pine.conf.fixed
/usr/bin/pine
¿Cómo puede un RPM de revisión instalarse en el sistema?

Los RPM de revisión se usan como RPM normales. La única diferencia es que un RPM adecuado debe estar ya instalado.

¿Qué revisiones están ya instaladas en el sistema y para qué versiones del paquete?

Se puede mostrar una lista de todas las revisiones instaladas en el sistema con el comando rpm -qPa. Si sólo se ha instalado una revisión en un sistema nuevo (como en este ejemplo), la lista aparecerá de la siguiente manera:

rpm -qPa
pine-4.44-224

Si, posteriormente, desea saber la versión del paquete instalada en un primer momento, esta información también estará disponible en la base de datos RPM. Para pine, esta información puede mostrarse con el siguiente comando:

rpm -q --basedon pine
pine = 4.44-188

Hay más información, incluso sobre la función de revisión de RPM, disponible en las páginas Man de rpm y rpmbuild.

3.3.4. Paquetes RPM delta

Los paquetes RPM delta contienen las diferencias entre una versión antigua y una nueva de un paquete RPM. Aplicar un RPM delta en un RPM antiguo da como resultado un RPM completamente nuevo. No es necesario contar con una copia de un RPM antiguo porque un RPM delta también puede funcionar con un RPM instalado. Los paquetes RPM delta tienen incluso un tamaño más pequeño que los RPM de revisión, lo que supone una ventana a la hora de transferir los paquetes de actualización por Internet. El inconveniente radica en que las actualizaciones con los RPM delta consumen muchos más ciclos de CPU que los RPM de revisión o los normales. Para que YaST utilice los paquetes RPM delta durante las sesiones de YOU, defina YOU_USE_DELTAS en yes (sí) en /etc/sysconfig/onlineupdate. En este caso, tenga preparados los medios de instalación. Si YOU_USE_DELTAS está vacío o definido en filesystem, YOU intentará descargar los paquetes delta que se aplicarán a los archivos instalados. En este caso no serán necesarios los medios de instalación, pero el tiempo de descarga podría ser mayor. Si está definido en no, YOU sólo usará RPM de revisión y normales.

Los binarios prepdeltarpm, writedeltarpm y applydeltarpm forman parte del paquete RPM delta (paquete deltarpm), y ayudan a crear y a aplicar paquetes RPM delta. Con los comandos siguientes, cree un RPM delta denominado nuevo.delta.rpm. El siguiente comando asume que antiguo.rpm y nuevo.rpm están presentes:

prepdeltarpm -s seq -i info antiguo.rpm > old.cpio 
prepdeltarpm -f nuevo.rpm > nuevo.cpio

xdelta delta -0 old.cpio nuevo.cpio delta

writedeltarpm nuevo.rpm delta info nuevo.delta.rpm 
rm antiguo.cpio nuevo.cpio delta 

Con applydeltarpm podrá reconstruir el RPM nuevo desde el sistema de archivos si el paquete antiguo ya está instalado:

applydeltarpm nuevo.delta.rpm nuevo.rpm 

Para derivarlo desde el RPM antiguo sin tener que acceder al sistema de archivos, utilice la opción -r:

applydeltarpm -r antiguo.rpm nuevo.delta.rpm nuevo.rpm 
  

Consulte /usr/share/doc/packages/deltarpm/README para conocer los detalles técnicos.

3.3.5. Consultas de RPM

Con la opción -q, rpm inicia las consultas, posibilitando la inspección de un archivo de reserva RPM (añadiendo la opción -p) y además realizando consultas a la base de datos RPM de los paquetes instalados. Hay varios parámetros disponibles para especificar el tipo de información necesaria. Consulte la Tabla 3.6, “Opciones de consulta más importantes de RPM”.

Tabla 3.6. Opciones de consulta más importantes de RPM

-i

Información del paquete

-l

Lista de archivos

-f NOMBREARCHIVO

Realiza una consulta al paquete que contiene el archivo NOMBREARCHIVO (la vía completa debe especificarse en NOMBREARCHIVO)

-s

Lista de archivos con información de estado (implica -l)

-d

Lista con los archivos de documentación solamente (implica -l)

-c

Lista con los archivos de configuración solamente (implica -l)

--dump

Lista de archivos con información completa (para su uso con -l, -c o -d)

--provides

Lista de funciones del paquete que otro paquete puede solicitar con --requires

--requires, -R

Capacidades que necesita el paquete

--scripts

Guiones de instalación (instalación previa, posterior y desinstalación)

Por ejemplo, el comando rpm -q -i wget muestra la información mostrada en el Ejemplo 3.2, “rpm -q -i wget”.

Ejemplo 3.2. rpm -q -i wget


Name        : wget                         Relocations: (not relocatable)
Version     : 1.9.1                             Vendor: SUSE LINUX AG, Nuernberg, Germany
Release     : 50                            Build Date: Sat 02 Oct 2004 03:49:13 AM CEST
Install date: Mon 11 Oct 2004 10:24:56 AM CEST      Build Host: f53.suse.de
Group       : Productivity/Networking/Web/Utilities   Source RPM: wget-1.9.1-50.src.rpm
Size        : 1637514                          License: GPL
Signature   : DSA/SHA1, Sat 02 Oct 2004 03:59:56 AM CEST, Key ID a84edae89c800aca
Packager    : http://www.suse.de/feedback
URL         : http://wget.sunsite.dk/
Summary     : A tool for mirroring FTP and HTTP servers
Description :
Wget enables you to retrieve WWW documents or FTP files from a server.
This can be done in script files or via the command line.
[...]

La opción -f sólo funciona si especifica el nombre de archivo completo con su vía. Escriba tantos nombres de archivo como desee. Por ejemplo, el siguiente comando:

rpm -q -f /bin/rpm /usr/bin/wget

da como resultado:

rpm-4.1.1-191
wget-1.9.1-50

Si sólo se sabe una parte del nombre del archivo, utilice un guión de shell tal y como se muestra en el Ejemplo 3.3, “Guión para buscar paquetes”. Pase el nombre parcial del archivo al guión como un parámetro cuando lo ejecute.

Ejemplo 3.3. Guión para buscar paquetes

#! /bin/sh
for i in $(rpm -q -a -l | grep  $1); do
    echo "\"$i\" is in package:"
    rpm -q -f $i
    echo ""
done

El comando rpm -q --changelog rpm muestra una lista detallada de información de cambios sobre un paquete específico ordenados por fecha. Este ejemplo muestra información sobre el paquete rpm.

Con la ayuda de la base de datos RPM instalada, se pueden realizar comprobaciones de verificación. Inícielas con -V, -y o --verify. Con esta opción, rpm muestra todos los archivos de un paquete que han cambiado desde la instalación. rpm utiliza símbolos de ocho caracteres para proporcionar algunas sugerencias sobre los cambios siguientes:

Tabla 3.7. Opciones de verificación de RPM

5

Suma de comprobación MD5

S

Tamaño de archivo

L

Enlace simbólico

T

Hora de modificación

D

Números de dispositivos principales y secundarios

U

Propietario

G

Group

M

Modo (permisos y tipo de archivo)

En el caso de los archivos de configuración, se imprime la letra c. Por ejemplo, para cambios a /etc/wgetrc (wget):

rpm -V wget
S.5....T c /etc/wgetrc

Los archivos de la base de datos RPM se colocan en /var/lib/rpm. Si la partición /usr tiene un tamaño de 1 GB, esta base de datos puede ocupar casi 30 MB, sobre todo después de una actualización completa. Si la base de datos es mucho más grande de lo esperado, resulta muy útil reconstruirla con la opción --rebuilddb. Antes de hacerlo, realice una copia de seguridad de la base de datos antigua. El guión cron cron.daily realiza copias diarias de la base de datos (empaquetadas con gzip) y las almacena en /var/adm/backup/rpmdb. El número de copias está controlado mediante la variable MAX_RPMDB_BACKUPS (por defecto: 5) en /etc/sysconfig/backup. El tamaño de una copia de seguridad es de aproximadamente 1 MB para 1 GB en /usr.

3.3.6. Instalación y compilación de los paquetes fuente

Todos los paquetes fuente de SUSE Linux llevan la extensión .src.rpm (RPM fuente).

[Tip]Sugerencia

Los paquetes fuente pueden copiarse desde el medio de instalación en el disco duro y desempaquetarse con YaST. Sin embargo, en el gestor de paquetes no aparecen marcados como instalados ([i]). Esto se debe a que los paquetes fuente no se introducen en la base de datos RPM. Sólo aparece en ella el software del sistema operativo instalado. Cuando “instala” un paquete fuente, sólo se añadirá el código fuente al sistema.

Los siguientes directorios deben estar disponibles para rpm y rpmbuild en /usr/src/packages (a menos que haya especificado los ajustes personalizados en un archivo como /etc/rpmrc):

SOURCES

Es el directorio para las fuentes originales (archivos .tar.bz2 o .tar.gz, etc.) y para los ajustes específicos de distribución (sobre todo para archivos .diff o .patch).

SPECS

Es el directorio para archivos .spec, similares a meta makefiles, que controlan el proceso de construcción.

BUILD

Todos las fuentes se desempaquetan, se revisan y compilan en este directorio.

RPMS

Lugar donde se almacenan los paquetes binarios finalizados.

SRPMS

Aquí se encuentran los RPM fuente.

Cuando instala un paquete fuente con YaST, todos los componentes necesarios se instalan en /usr/src/packages: las fuentes y los ajustes en SOURCES y el archivo .spec relevante en SPECS.

[Warning]Aviso

No haga experimentos con los componentes del sistema (glibc, rpm, sysvinit, etc.) ya que pondría en peligro el funcionamiento del sistema.

En el siguiente ejemplo se utiliza el paquete wget.src.rpm. Después de instalar el paquete con YaST, debería tener archivos similares a la siguiente lista:

/usr/src/packages/SOURCES/nops_doc.diff
/usr/src/packages/SOURCES/toplev_destdir.diff
/usr/src/packages/SOURCES/wget-1.9.1+ipvmisc.patch
/usr/src/packages/SOURCES/wget-1.9.1-brokentime.patch
/usr/src/packages/SOURCES/wget-1.9.1-passive_ftp.diff
/usr/src/packages/SOURCES/wget-LFS-20040909.tar.bz2
/usr/src/packages/SOURCES/wget-wrong_charset.patch
/usr/src/packages/SPECS/wget.spec

rpmbuild -b X /usr/src/packages/SPECS/wget.spec inicia la compilación. X es un comodín para varias fases del proceso de construcción (consulte la salida de --help o la documentación de RPM para obtener más información). A continuación sólo se ofrece una breve explicación:

-bp

Prepara las fuentes en /usr/src/packages/BUILD: desempaqueta y revisa.

-bc

Hace lo mismo que -bp pero realiza una compilación adicional.

-bi

Hace lo mismo que -bp pero instala además el software creado. Precaución: si el paquete no admite la función BuildRoot, podría sobrescribir los archivos de configuración.

-bb

Hace lo mismo que -bi pero crea además el paquete binario. Si la compilación se ha realizado correctamente, el archivo binario debería estar en /usr/src/packages/RPMS.

-ba

Hace lo mismo que -bb pero crea además el RPM fuente. Si la compilación se ha realizado correctamente, el archivo binario debería estar en /usr/src/packages/SRPMS.

--short-circuit

Omite algunos pasos.

El RPM binario creado pueda instalarse ahora con rpm -i o preferiblemente con rpm -U. La instalación con rpm hace que aparezca en la base de datos RPM.

3.3.7. Compilación de los paquetes RPM con build

El peligro de manejar muchos paquetes es que se añaden archivos no deseados al sistema que se está ejecutando durante el proceso de creación. Para evitarlo, use el guión build, que crea un entorno definido en el que se crea el paquete. Para establecer este entorno chroot, el guión build debe contar con un árbol de paquetes completo. Este árbol puede estar disponible en el disco duro, mediante NFS o desde el DVD. Defina la posición con build --rpms directorio. A diferencia de rpm, el comando build busca el archivo SPEC en el directorio de origen. Para crear wget (como en el ejemplo anterior) con el DVD montado en el sistema en /media/dvd, utilice los siguientes comandos como usuario Root:

cd /usr/src/packages/SOURCES/
mv ../SPECS/wget.spec .
build --rpms /media/dvd/suse/ wget.spec

Posteriormente se establecerá un entorno mínimo en /var/tmp/build-root. El paquete se creará en este entorno. Al terminar, los paquetes resultantes estarán situados en /var/tmp/build-root/usr/src/packages/RPMS.

El guión build ofrece algunas opciones adicionales. Por ejemplo, provoca que el guión prefiera sus propios RPM, omite la inicialización del entorno de creación o limita el comando rpm a una de las fases anteriormente mencionadas. Acceda a información adicional mediante build --help o leyendo la página Man de build.

3.3.8. Herramientas para los archivos de reserva RPM y la base de datos RPM

Midnight Commander (mc) puede mostrar los contenidos de los archivos de reserva RPM y copiar algunas partes. Representa archivos de reserva como sistemas de archivos virtuales, ofreciendo todas las opciones de menú usuales de Midnight Commander. Muestre el archivo HEADER con F3. Eche un vistazo a la estructura de los archivos de reserva con las teclas de cursor e Intro. Copie los componentes de los archivos de reserva con F5.

KDE ofrece la herramienta kpackage como interfaz de usuario para rpm. Hay disponible un gestor de paquetes con funcionalidad completa como módulo de YaST (consulte la Sección 2.3.1, “Instalación y desinstalación del software” (↑Inicio)).