SUSE LINUX utiliza RPM (Red Hat Package Manager) con sus principales programas rpm y rpmbuild para la administración de los paquetes de software. Esta potente base de datos puede ser consultada tanto por usuarios como por administradores de sistemas o constructores de paquetes para obtener información detallada sobre el software instalado.
Básicamente, rpm puede actuar de cinco maneras distintas: instalar, desinstalar o actualizar paquetes de software, volver a crear la base de datos RPM, enviar consultas a la base de datos RPM o a archivos RPM individuales, comprobar la integridad de los paquetes y firmar paquetes. rpmbuild sirve para generar paquetes listos para instalar a partir de las fuentes originales (pristine sources).
Los archivos RPM instalables tienen un formato binario especial que incluye
los archivos con los programas e información adicional usada por
rpm. Esta información adicional se usa para configurar el
software del paquete o para la documentación en la base de datos RPM. Estos
archivos tienen la extensión .rpm.
Con rpm se pueden gestionar los paquetes LSB. Puede obtener información adicional sobre LSB en la Sección A.4, “Estándares y especificaciones”.
Los paquetes RPM de SUSE LINUX están firmados con GnuPG. La clave incluyendo huella digital (fingerprint) es la siguiente:
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 apache-1.3.12.rpm permite
comprobar la firma de un paquete RPM para averiguar si éste procede realmente
de SUSE u otra entidad de. Este procedimiento se recomienda especialmente
con los paquetes de actualización de Internet. Nuestra clave pública para
firmar los paquetes se encuentra normalmente en
/root/.gnupg/. Esta clave también se incluye en el
directorio /usr/lib/rpm/gnupg/ para que los usuarios
normales también puedan comprobar la firma de los paquetes RPM.
Por lo general, la instalación de un archivo RPM es muy simple:
rpm -i paquete.rpm.
Este comando estándar solamente instala un paquete si se cumplen todas las
dependencias, ya que de lo contrario podrían aparecer conflictos; los
mensajes de error de rpm indican los paquetes que faltan
para cumplir con las dependencias. La base de datos se ocupa de evitar
conflictos: normalmente un archivo debe pertenecer a un solo paquete;
también hay diferentes opciones que permiten pasar por alto esta regla, pero
se debe estar muy seguro de ello ya que se puede poner en peligro la posibilidad de
actualizar el paquete.
Las opciones -U o --upgrade y -F o
--freshen pueden utilizarse para la actualización de un
paquete, por ejemplo: rpm -F paquete.rpm.
Este comando borra la antigua versión de un paquete e instala los archivos nuevos. La diferencia entre ambas opciones radica en que en el
caso de -U también se instalan paquetes que hasta ahora no
estaban disponibles en en el sistema, mientras que la opción
-F sólo actualiza un paquete que ya estuviera instalado.
Por su parte, rpm actualiza los archivos de
configuración cuidadosamente apoyándose en la siguiente
estrategia:
Si el administrador de sistema no ha cambiado ningún archivo de configuración, rpm instala la versión nueva y por lo tanto, el administrador de sistema no tiene que intervenir de ninguna manera.
Si el administrador de sistema ha cambiado un archivo de configuración
antes de realizar la actualización, rpm guarda el
archivo con la extensión .rpmorig o
.rpmsave e instala la nueva versión del paquete RPM,
salvo que el archivo de configuración de esta nueva versión no haya
cambiado su estructura. En el caso de reemplazar el archivo de
configuración, es muy probable que sea necesario adaptar el nuevo
basándose en la copia con la extensión .rpmorig o
.rpmsave.
Los archivos con extensión .rpmnew siempre
aparecen cuando el archivo de configuración ya existe
y si el indicador noreplace aparece
dentro del archivo .spec.
Después de la actualización se deben borrar los archivos .rpmsave y
.rpmnew para que estos no obstaculicen la siguiente
actualización. La extensión .rpmorig se aplica cuando
la base de datos RPM no ha reconocido el archivo.
Si la base de datos reconoce el archivo se utiliza
.rpmsave. En otras palabras, la extensión
.rpmorig se genera cuando se actualizan paquetes de otro
formato a RPM y .rpmsave se genera cuando se actualiza de
un paquete RPM antiguo a uno más actual. La extensión
.rpmnew se usa cuando no se puede determinar si el
administrador de sistema ha modificado el archivo de configuración o no. Puede
encontrar una lista de estos archivos en
/var/adm/rpmconfigcheck. Algunos archivos de configuración
(como /etc/httpd/httpd.conf) no se sobreescriben para
posibilitar la operación continua.
Así pues, la opción -U (update) es algo más que una
equivalencia de la secuencia -e (desinstalar/eliminar) e
-i (instalar). Siempre que sea posible, es preferible usar
la opción -U.
Para eliminar un paquete ejecute rpm -e
paquete. rpm sólo
borra un paquete en caso de no existir ninguna dependencia. Por lo tanto no es
posible suprimir por ejemplo Tcl/Tk si todavía existe algún programa que lo
necesite para su ejecución; esta funcionalidad se debe al control por parte de
la base de datos RPM. Si en algún caso excepcional no es posible eliminar un
paquete aunque haya dejado de existir toda dependencia, es probable que el
problema se resuelva al generar de nuevo la base de datos RPM, usando la opción
--rebuilddb.
Para garantizar la seguridad en la operación de un sistema es necesario instalar periódicamente en el sistema paquetes que lo actualicen. Hasta ahora, un fallo en un paquete sólo podía ser resuelto sustituyendo el paquete entero. En el caso de paquetes grandes con fallos en archivos pequeños, podíamos encontrarnos rápidamente ante una gran cantidad de datos. No obstante, el RPM de SUSE incorpora una función que permite instalar parches en paquetes.
La información más importante sobre un parche RPM se mostrará tomando al programa pine como ejemplo:
Para comprobarlo, debe averiguarse en primer lugar la versión instalada del paquete. En el caso de pine, esto se realiza con el comando
rpm -q pine pine-4.44-188
A continuación examine el parche RPM para comprobar si resulta 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
Este parche sirve para tres versiones distintas de pine, incluyendo la versión instalada en nuestro ejemplo. Por tanto, el parche puede ser instalado.
Los archivos afectados por el parche pueden leerse fácilmente del parche RPM. El parámetro -P de rpm sirve para seleccionar características especiales del parche. Así, es posible obtener una lista de los archivos con
rpm -qpPl pine-4.44-224.i586.patch.rpm /etc/pine.conf /etc/pine.conf.fixed /usr/bin/pine
o, si el parche ya está instalado, con
rpm -qPl pine /etc/pine.conf /etc/pine.conf.fixed /usr/bin/pine
Los parches RPMs se utilizan como RPMs normales. La única diferencia radica en que en el caso de los parches, el RPM apropiado ya debe estar instalado.
Puede obtener una lista con los parches instalados en el sistema con el
comando rpm -qPa. Si en un sistema nuevo se ha
instalado sólo un parche, como en nuestro ejemplo, la salida del comando
será semejante a:
rpm -qPa pine-4.44-224
Si transcurrido un cierto tiempo quiere saber qué versión del paquete fue instalada en primer lugar, puede consultar la base de datos RPM. En el caso de pine, esta información se obtiene con el comando:
rpm -q --basedon pine pine = 4.44-188
Puede obtener más información sobre RPM (incluyendo las prestaciones de los parches) en las páginas del manual de rpm y rpmbuild.
Los paquetes “RPM delta” contienen la diferencia (denominada
“delta”) entre las versiones nueva y antigua de un paquete RPM.
Si se aplica un RPM delta a un RPM antiguo, el resultado es un RPM
completamente nuevo. No obstante, no es necesario tener una copia del antiguo
RPM: un RPM delta también funciona con el RPM instalado. Los paquetes deltarpm
son incluso más pequeños que los parches RPM, lo cual constituye una ventaja a
la hora de transferir paquetes de actualización por Internet. Su principal
inconveniente radica en que las actualizaciones con RPMs delta consumen
bastante más ciclos de CPU que las actualizaciones con RPMs normales o
parches. Si desea que YaST utilice paquetes RPM delta en las actualizaciones
con YOU, asigne el valor “yes” a la opción
YOU_USE_DELTAS en el archivo
/etc/sysconfig/onlineupdate.
Los binarios prepdeltarpm, writedeltarpm
y applydeltarpm forman parte de la suite deltarpm y su labor
es la de facilitar la creación y aplicación de los paquetes RPM delta. Con los
comandos siguientes puede crear un RPM delta llamado
new.delta.rpm (este comando asume que tanto
old.rpm como new.rpm están
presentes):
prepdeltarpm -s seq -i info old.rpm > old.cpio prepdeltarpm -f new.rpm > new.cpio xdelta delta -0 old.cpio new.cpio delta writedeltarpm new.rpm delta info new.delta.rpm rm old.cpio new.cpio delta
El comando applydeltarpm le permite reconstruir el nuevo RPM, ya sea desde el sistema de archivos en caso de que el paquete antiguo esté instalado:
applydeltarpm new.delta.rpm new.rpm
o bien con la opción -r para reconstruirlo a partir
del antiguo RPM pero sin acceder al sistema de archivos:
applydeltarpm -r old.rpm new.delta.rpm new.rpm
Consulte file:///usr/share/doc/packages/deltarpm/README para obtener información adicional de carácter técnico.
La opción -q (query) permite enviar consultas a los archivos RPM (opción
-p archivo_paquete), así
como a la base de datos RPM. Existen varias opciones para especificar el
tipo de información requerida (Tabla 4.8, “Las principales opciones para consultas RPM”).
Tabla 4.8. Las principales opciones para consultas RPM
| Mostrar información sobre un paquete |
| Mostrar lista de archivos del paquete |
| Consultar el paquete que contiene el archivo
|
| Mostrar estado de los archivos (implica
|
|
Nombrar archivos de documentación (implica |
|
Nombrar archivos de configuración (implica
|
|
Mostrar toda la información de verificación de todos los archivos
(utilizarlo con |
|
Mostrar prestaciones del paquete que otro paquete puede solicitar con
|
| Mostrar dependencias entre los paquetes |
| Mostrar los distintos scripts de instalación (preinstall, postinstall, uninstall) |
Por ejemplo, el comando rpm -q -i wget produce como resultado la información postrada en el Ejemplo 4.2, “rpm -q -i wget”.
Ejemplo 4.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 might be done in script files or via command line. [...]
La opción -f sólo funciona cuando se indica el nombre de
archivo completo con la ruta incluida; se pueden indicar tantos archivos
como se desee. Por ejemplo el comando:
rpm -q -f /bin/rpm /usr/bin/wget
produce como resultado:
rpm-4.1.1-191 wget-1.9.1-50
Si sólo se conoce una parte del nombre del archivo, utilice un script de shell como el mostrado en el Ejemplo 4.3, “Script de búsqueda de paquetes”) pasándole como parámetro el nombre del archivo buscado.
Ejemplo 4.3. Script de búsqueda de paquetes
#! /bin/sh
for i in $(rpm -q -a -l | grep $1); do
echo "\"$i\" está en el paquete:"
rpm -q -f $i
echo ""
done
El siguiente comando rpm -q --changelog rpm muestra información detallada
(actualizaciones, configuración, cambios, etc.) sobre un paquete específico.
Este ejemplo proporciona información sobre el paquete rpm.
No obstante, sólo se muestran las últimas 5 entradas de la base de
datos RPM, el paquete en sí contiene todas las entradas (de los últimos
2 años). La siguiente consulta sólo funciona si el CD 1 está
montado en /media/cdrom:
rpm -qp --changelog /media/cdrom/suse/i586/rpm-4*.rpm
La base de datos instalada también permite efectuar verificaciones. Estas se
introducen con la opción -V (equivalente a
-y o --verify). Con la verificación,
rpm muestra todos los archivos del paquete que han sido
modificados desde su instalación original. rpm coloca
hasta ocho caracteres por delante del nombre de archivo que indican los
siguientes cambios:
Tabla 4.9. Las verificaciones
| Suma de control MD5 |
| Tamaño de archivo |
| Enlace simbólico |
| Tiempo de modificación |
| Número de dispositivo (device number) major y minor |
| Usuario (user) |
| Grupo (group) |
| Modo (con derecho y tipo) |
Para los archivos de configuración aparece como valor adicional la letra
c, como lo muestra el ejemplo para el archivo
/etc/wgetrc de wget, que ha sido modificado:
rpm -V wget S.5....T c /etc/wgetrc
Los archivos de la base de datos RPM se encuentran en
/var/lib/rpm. Estos pueden ocupar hasta 30 MB en una
partición /usr de 1 GB, especialmente después de una
actualización completa. Si la base de datos parece demasiado grande, se puede
reducir su tamaño usando la opción --rebuilddb. Antes de
reconstruir la base de datos se debe hacer una copia de seguridad de la base de
datos existente. El script cron
cron.daily genera diariamente copias comprimidas de la base
de datos y las guarda en /var/adm/backup/rpmdb. El número
de estas copias está definido por la variable
MAX_RPMDB_BACKUPS, cuyo valor por defecto es
5, pero se puede modificar en
/etc/sysconfig/backup. Cada copia de seguridad ocupa aproximadamente 3
MB en una partición /usr de 1 GB.
Todos los paquetes fuente (sources) tienen la
extensión .src.rpm; estos archivos se llaman
“Source-RPMs”.
![]() | Sugerencia |
|---|---|
Los paquetes con fuentes se pueden instalar con YaST como cualquier otro
paquete, con la diferencia que estos no se marcan como instalados, con una
| |
Si no hay ninguna configuración personal activada (por ejemplo a través del archivo
/etc/rpmrc), los directorios de trabajo de
rpm o rpmbuild deben existir en
/usr/src/packages. Dichos directorios son:
SOURCES
para las fuentes originales (archivos .tar.bz2 o
.tar.gz, etc.) y para las adaptaciones específicas de las
distintas distribuciones (principalmente archivos .diff o
.patch).
SPECS
para los archivos .spec, que controlan el proceso
build y de este modo actúan como
makefiles.
BUILD
por debajo de este directorio se desempaquetan o se compilan las fuentes, también se añaden a este los parches.
RPMS
en este se graban los paquetes completos en formato binario.
SRPMS
y aquí se guardan los RPM source (fuente).
Al instalar con YaST un paquete de fuentes, todos los componentes
necesarios para el proceso build se copian en el directorio
/usr/src/packages: las fuentes y los parches en
SOURCES y el archivo .spec
correspondiente en SPECS.
![]() | Importante |
|---|---|
No haga experimentos con RPM y componentes importantes del sistema como
pueden ser | |
Tomemos como ejemplo el paquete wget.src.rpm. Después
de instalar este paquete con YaST, obtendrá una lista de archivos
semejante a esta:
/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
Con el comando rpmbuild -b X
/usr/src/packages/SPECS/wget.spec comienza la compilación. La
variable X es un comodín que puede representar
diferentes pasos (vea la salida de --help o la documentación
de RPM para obtener información adicional). A continuación se explican las
opciones brevemente:
-bp
Prepara las fuentes en el directorio
/usr/src/packages/BUILD, las desempaqueta y pone los
parches.
-bc
Igual que -bp, pero con compilación.
-bi
Igual que -bc, pero con instalación del paquete.
Atención: si hay algún paquete que no soporte la característica
BuildRoot, es posible que durante la instalación se sobreescriban algunos
archivos de configuración importantes.
-bb
Igual que -bi, pero con generación adicional del RPM
binario que, en caso de éxito, se encuentra en el directorio
/usr/src/packages/RPMS.
-ba
Como -bb, pero genera adicionalmente el RPM fuente que
se encuentra, en caso de éxito, en el directorio
/usr/src/packages/SRPMS.
--short-circuitPermite saltarse determinados pasos.
El RPM binario creado ya puede instalarse con rpm
-i o mejor aún con rpm
-U. La instalación con rpm hace
que aparezca en la base de datos RPM.
En el caso de muchos paquetes se corre el riesgo de que se instalen archivos
no deseados en el sistema. Para evitarlo se puede emplear el paquete
build, el cual crea un entorno
definido dentro del que se construye el paquete. Para crear este entorno
chroot, se debe proporcionar un árbol completo de
paquetes al script build, ya sea en el disco duro,
mediante NFS o desde un DVD. La ubicación concreta se comunica al script por
medio del comando build --rpms ruta. A diferencia
de rpm, el comando build quiere tener
el archivo SPEC en el mismo directorio que las fuentes. Para volver a
compilar wget en el ejemplo superior con el DVD montado en el sistema en
/media/dvd, ejecute los siguientes comandos como
usuario root:
cd /usr/src/packages/SOURCES/ mv ../SPECS/wget.spec . build --rpms /media/dvd/suse/ wget.spec
A continuación se crea en /var/tmp/build-root un
entorno mínimo donde se construirá el paquete. Los paquetes resultantes se
almacenarán posteriormente en
/var/tmp/build-root/usr/src/packages/RPMS
El script build ofrece además otras opciones. Así, se puede definir la
preferencia de los propios RPMs de cara al resto, saltarse el inicio del
entorno build o restringir el comando rpm a una de las
fases descritas anteriormente. Puede obtener más información con el comando
build --help y en la página man de build.
Midnight Commander (mc) puede mostrar el contenido de un
archivo RPM y copiar partes de él. El archivo RPM se muestra en un sistema de
archivos virtual para el cual se ponen a disposición todas las opciones del
menú de mc. La información de los encabezamientos del archivo
HEADER se visualiza con F3. Las teclas
del cursor e Intro permiten “navegar” por la
estructura del archivo y además es posible copiar componentes de un archivo con
F5.
KDE incluye la herramienta kpackage como interfaz para rpm. Asimismo un completo gestor de paquetes está disponible en forma de módulo de YaST (ver Sección 2.2.1, “Instalar y desinstalar software”).