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.
![]() | 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 | |
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.
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.
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:
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.
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
Los RPM de revisión se usan como RPM normales. La única diferencia es que un RPM adecuado debe estar ya instalado.
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.
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.
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
| Información del paquete |
| Lista de archivos |
| Realiza una consulta al paquete que contiene el archivo |
| Lista de archivos con información de estado (implica |
| Lista con los archivos de documentación solamente (implica |
| Lista con los archivos de configuración solamente (implica |
| Lista de archivos con información completa (para su uso con |
| Lista de funciones del paquete que otro paquete puede solicitar con |
| Capacidades que necesita el paquete |
| 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
| Suma de comprobación MD5 |
| Tamaño de archivo |
| Enlace simbólico |
| Hora de modificación |
| Números de dispositivos principales y secundarios |
| Propietario |
| Group |
| 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.
Todos los paquetes fuente de SUSE Linux llevan la extensión .src.rpm (RPM fuente).
![]() | 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 ( | |
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).
SPECSEs el directorio para archivos .spec, similares a meta makefiles, que controlan el proceso de construcción.
BUILDTodos las fuentes se desempaquetan, se revisan y compilan en este directorio.
RPMSLugar donde se almacenan los paquetes binarios finalizados.
SRPMSAquí 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.
![]() | Aviso |
|---|---|
No haga experimentos con los componentes 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:
-bpPrepara las fuentes en /usr/src/packages/BUILD: desempaqueta y revisa.
-bcHace lo mismo que -bp pero realiza una compilación adicional.
-biHace 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.
-bbHace 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.
-baHace 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-circuitOmite 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.
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.
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)).