Aprenda Linux, 101: Administración de paquetes RPM y YUM

Agregue nuevo software y mantenga su sistema actualizado

Aprenda a instalar, actualizar y administrar los paquetes en su sistema Linux® . Este artículo analiza el Red Hat Package Manager (RPM) desarrollado por Red Hat, y el Yellowdog Updater Modified (YUM) originalmente desarrollado para administrar sistemas Red Hat Linux en el Departamento de Física de la Universidad Duke. Usted puede utilizar el contenido de este artículo para estudiar para el examen LPI 101 para obtener la certificación como administrador de sistemas Linux, o simplemente para conocer las mejores formas de agregar nuevo software a su sistema y mantenerlo actualizado.

Ian Shields, Senior programmer, IBM

Ian Shields works on a multitude of Linux projects for the developerWorks Linux zone. He is a Senior Programmer at IBM at the Research Triangle Park, NC. He joined IBM in Canberra, Australia, as a Systems Engineer in 1973, and has since worked on communications systems and pervasive computing in Montreal, Canada, and RTP, NC. He has several patents and has published several papers. His undergraduate degree is in pure mathematics and philosophy from the Australian National University. He has an M.S. and Ph.D. in computer science from North Carolina State University. You can contact Ian at ishields@us.ibm.com.


Nivel de autor contribuyente en developerWorks

08-07-2010

Acerca de esta serie

Esta serie de artículos lo ayudará a aprender las tareas de administración del sistema Linux. Usted puede utilizar el contenido de estos artículos para prepararse para los exámenes para del nivel 1 de la Certificación delLinux Professional Institute (LPIC-1).

Vea nuestra developerWorks roadmap for LPIC-1 para obtener una descripción de cada uno de los artículos y su respectivo link. La guía básica se encuentra en marcha y refleja los últimos objetivos (abril de 2009) para los exámenes LPIC-1: a medida que completamos los artículos, los agregamos a la guía básica. Mientras tanto, sin embargo, usted puede encontrar versiones anteriores de contenido similar, que responden a los objetivos LPIC-1 anteriores a abril de 2009, en nuestros tutoriales para la preparación delLPI certification exam prep tutorials.

Visión general

En este artículo aprenda a utilizar las herramientas del RPM y el YUM, y poder así administrar los paquetes en su sistema Linux. Aprenda a:

  • Instalar, reinstalar, actualizar, y eliminar paquetes utilizando RPM y YUM
  • Obtener información acerca de los paquetes RPM, incluyendo la versión, el estado, las dependencias, la integridad y las firmas
  • Determinar qué archivos proporciona el paquete, y descubrir cual de los paquetes contiene un archivo determinado.

Este artículo lo ayuda a prepararse para el Objetivo 102.5 del Tema 102 del examen 101 para Administración Nivel Junior (LPIC-1) del Linux Professional Institute. Este objetivo tiene un valor de ponderación de 3.

Requisitos previos

Para aprovechar al máximo los artículos de esta serie usted debería poseer conocimientos básicos sobre Linux y tener un sistema de trabajo Linux para poder practicar los comandos explicados en este artículo. En ocasiones, versiones diferentes de un mismo programa muestran los resultados en formatos diferentes, por lo cual los resultados pueden no siempre ser idénticos a los listados y a las figuras presentados en este artículo. Particularmente, gran parte de los datos de salida que presentamos depende mucho de los paquetes que estén instalados en su sistema. Sus datos de salida pueden variar un poco, aunque usted debería igualmente poder reconocer las similitudes más importantes.


Introducción a la administración de paquetes

Conéctese con Ian

Ian es uno de nuestros autores más conocidos y exitosos. Vea todos los artículos de Ian en developerWorks. Conozca Ian's profile y conéctese con él, con otros autores, y con otros lectores en My developerWorks.

Antiguamente muchos programas Linux eran distribuidos como código fuente, que el usuario construía en el programa o en la serie de programas en los que era necesario, junto con las páginas de los manuales que fueran necesarias, los archivos de configuración, y demás. Hoy en día, la mayoría de los distribuidores de Linux utilizan programas o sets de programas prearmados denominados paquetes, los cuales son enviados para su distribución listos para instalar. En este artículo, aprenderá de qué manera las herramientas para administración de programas lo ayudan a instalar, actualizar, y eliminar paquetes. Este artículo trata particularmente el tema del Red Hat Package Manager (RPM), desarrollado por by Red Hat, y del Yellowdog Updater Modified (YUM), originalmente desarrollado para administrar los sistemas Red Hat Linux en el Departamento de Física de la Universidad Duke. Otro de los artículos de esta serie, "Learn Linux 101: Debian package management," analiza las herramientas de administración de paquetes utilizadas en los sistemas Debian.

Desde el punto de vista del usuario, la función básica de la administración de paquetes la realizan los comandos. Dado que los desarrolladores de Linux se han esforzado para que el uso de Linux sea más fácil, las herramientas básicas han sido complementadas por otras, incluyendo las herramientas GUI, las cuales ocultan al usuario algunas de las complejidades de las herramientas básicas. En este artículo y en el artículo sobre Debian package management, analizamos las herramientas básicas, aunque también mencionamos algunas de las otras herramientas para que usted pueda luego buscar información sobre las mismas.

RPM, YUM, y APT (para los sistemas Debian) poseen muchas similitudes. Todos ellos pueden instalar y quitar paquetes. La información sobre los paquetes instalados se guarda en una base de datos. Todos ellos tienen funcionalidad de línea básica de comando, además de herramientas adicionales que pueden proporcionar al usuario interfaces de uso más sencillo. Todos ellos pueden recuperar paquetes de Internet.

Al instalar un sistema Linux, por lo general usted puede instalar una gran variedad de paquetes. El set puede personalizarse según el uso que se quiera dar al sistema, como servidor, escritorio, o terminal de trabajo del desarrollador. Y en algún momento probablemente sea necesario instalar paquetes nuevos para obtener alguna otra funcionalidad, actualizar el paquete que posee, o incluso borrar paquetes que ya no se necesitan o son obsoleto debido a la aparición de nuevos paquetes. Demos un vistazo a la forma en la que usted realiza estas tareas, y a algunos de los desafíos a los que debe hacer frente, como la búsqueda de algún paquete que contenga algún comando en particular.

RPM

Red Hat lanzó RPM en 1995. Actualmente RPM es el sistema de gestión de paquetes usado para crear paquetes en Linux Standard Base (LSB). Las opciones del comando rpm están agrupadas en tres subgrupos según se utilicen para:

  • Consultar y verificar paquetes
  • Instalar, actualizar y borrar paquetes
  • Realizar varias funciones

En este artículo nos ocuparemos de los dos primeros subgrupos de opciones de comandos. Usted encontrará información sobre el tercer subgrupo en las páginas de los manuales para RPM.

Deberíamos tener en cuenta también que rpm es el nombre de comando para el comando principal utilizado con RPM, mientras que .rpm es la extensión utilizada en los archivos RPM. Por lo tanto "un rpm" o "el xxx rpm" se referirá generalmente a un archivo RPM, mientras que rpm por lo general se referirá al comando.

YUM

YUM agrega la actualización automática y la administración de paquetes, incluyendo la administración de la dependencia, a los sistemas RPM. Además de comprender los paquetes instalados un sistema, YUM, al igual que Debian Advanced empaquetado Tool (APT), trabaja con depósitos, los cuales son recopilaciones de paquetes, generalmente accesibles mediante la conexión de red.


Instalación de paquetes RPM

Supongamos que usted desea aprender Lisp, y un colega le dice que utilice el comando gcl. Usted podría probar con gcl --help, o con which gcl, o con type gcl. Sin embargo, si su sistema no puede encontrar gcl, usted podría ver datos de salida similares a los presentados en el Listado 1.

Listado 1. Comando gcl faltante
[ian@echidna ~]$ gcl --help
bash: gcl: command not found

[ian@echidna ~]$ which gcl
/usr/bin/which: no gcl in (/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerber
os/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/
sbin:/home/ian/bin)

[ian@echidna ~]$ type gcl
bash: type: gcl: not found

Usted podría volver a verificar con su colega para encontrar cual es el paquete que se debe instalar, o podría simplemente adivinar cual de los comandos gcl es el que se encuentra en el paquete gcl. A menudo se adivina correctamente, pero no siempre. Veremos más tarde cómo encontrar el paquete adecuado. En este caso, usted necesita el paquete gcl. Suponiendo que usted ha descargado o adquirido una copia del paquete, usted podría probar instalarla utilizando el comando rpm con la opción -i (para instalación), como puede observarse en el Listado 2.

Listado 2. Instalación de gcl con rpm - paso 1
[root@echidna ~]# rpm -i gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpm
error: Failed dependencies:
gcl-selinux is needed by gcl-2.6.8-0.6.20090701cvs.fc12.x86_64

El comando rpm sabe que el paquete tiene una dependencia, pero desafortunadamente, no ayudará a resolverla. Usted necesitará obtener el paquete o los paquetes dependientes, probar nuevamente y ver si existen otras dependencias—y continuar con el mismo procedimiento hasta que se resuelvan todas las dependencias. Algo positivo es que puede darle al rpm comando una lista de paquetes para instalar y éste los instalará en el orden correcto si todas las dependencias han sido resueltas. Por lo tanto, al menos usted no tendrá que instalar cada una de las piezas en el orden correcto en forma manual.

Si usted ya ha utilizado Debian, a esta altura probablemente deseará tener algo como el comando apt-get, el cual simplemente buscaría lo que usted necesita, incluso las dependencias, y las instalaría. Para los sistemas basados en RPM, YUM (o Yellowdog Updater Modified) realiza solamente esta función. El Listado 3 muestra como instalar gcl y cual es el gcl que se requiere;el requisito previo -selinux que utiliza el comando yum con la opción install.

Listado 3. Instalación de gcl utilizando yum
[root@echidna ~]# yum install gcl
Loaded plugins: presto, refresh-packagekit
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated
--> Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64
--> Running transaction check
---> Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package           Arch         Version                          Repository     Size
=====================================================================================
Installing:
 gcl               x86_64       2.6.8-0.7.20100201cvs.fc12       updates       6.3 M
Installing for dependencies:
 gcl-selinux       x86_64       2.6.8-0.7.20100201cvs.fc12       updates        17 k

Transaction Summary
=====================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 6.4 M
Installed size: 40 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
updates/prestodelta                                           | 964 kB     00:01     
Processing delta metadata
Package(s) data still to download: 6.4 M
(1/2): gcl-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm              | 6.3 MB     00:12     
(2/2): gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm      |  17 kB     00:00     
-------------------------------------------------------------------------------------
Total                                                398 kB/s | 6.4 MB     00:16     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64                 1/2 
  Installing     : gcl-2.6.8-0.7.20100201cvs.fc12.x86_64                         2/2 

Installed:
  gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12                                            

Dependency Installed:
  gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12                                    

Complete!

Los datos de salida en el Listado 3 muestran que YUM ha encontrado el gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 y el gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 en un depósito denominado "actualizaciones" (ampliaremos esto más adelante), y ha determinado el tamaño total de la descarga. Después de que usted respondió "y" a aceptar la operación, éste descargó ambos paquetes, y luego instaló la dependencia, y por último el gcl. Más adelante ampliaremos el tema de las dependencias.


Ubicación de los paquetes

En la sección anterior, usted aprendió a instalar un paquete RPM. ¿Pero de dónde vienen los paquetes? ¿Cómo sabe yum de dónde descargar los paquetes? El punto de inicio es /etc/yum.repos.d/ directory, el cual contiene por lo general varios archivos repo. Esta es la ubicación por defecto para repos, pero otras ubicaciones pueden estar especificadas en el archivo de configuración de YUMe, generalmente /etc/yum.conf. El Listado 4 muestra el archivo fedora-updates.repo correspondiente a la ubicación desde la cual hemos instalado el gcl en nuestro sistema Fedora 12.

Un archivo repo común se divide en tres secciones, una para los paquetes normales, una para los paquetes de depuración, y el último para los paquetes fuentes. Por lo general, habrá varias copias de un paquete de distribución disponible en varias ubicaciones, o espejos. Por lo tanto el archivo repo nos dice donde yum encontrar la última lista de espejos para cada sección. Obsérvese que el nivel de distribución y la arquitectura de la máquina son parametrizados, por lo cual yum descargaría la lista para mi sistema Fedora x86_64 de https://mirrors.fedoraproject.org/metalink?repo=updates-released-f12&arch=x86_64.

Además de la ubicación del depósito, el archivo repo nos dice si un depósito en particular se encuentra habilitado y si las firmas GPG deberían utilizarse para verificar los paquetes descargados.

Listado 4. /etc/yum.repos.d/*.repo
[ian@echidna ~]$ cat /etc/yum.repos.d/fedora-updates.repo
[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever
/$basearch/
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$r
eleasever&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

[updates-debuginfo]
name=Fedora $releasever - $basearch - Updates - Debug
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever
/$basearch/debug/
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-deb
ug-f$releasever&arch=$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

[updates-source]
name=Fedora $releasever - Updates Source
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever
/SRPMS/
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-sou
rce-f$releasever&arch=$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

YUM y RPM utilizan una base de datos local para determinar qué paquetes son instalados. Los metadatos sobre los paquetes que se guardan en la base de datos local son recuperados de los depósitos habilitados. Aunque rara vez necesite preocuparse por la base de datos local, usted utiliza el comando yum clean para borrar varias partes de la información guardada localmente y yum makecache para crear la información en su base de datos local para el repos habilitado. Usted podría hacer esto si cambia la configuración de su repo, por ejemplo.


Borrado de paquetes RPM

Si usted desea borrar un paquete, puede utilizar la opción remove de yum, o la opción -e derpm. En el Listado 5 se puede observar un test que se ejecuta para borrar gcl utilizando rpm -e. Si el paquete puede ser borrado, no existen datos de salida.

Listado 5. Test removal of gcl
[root@echidna ~]# rpm -e --test gcl

A diferencia del borrado simulado de los paquetes Debian utilizando apt-get, el sistema RPM no guarda información sobre los paquetes que se agregan automáticamente, por lo cual no hay una forma trivial de descubrir cuales son las dependencias que podrían borrarse. Sin embargo, si usted especifica que varios paquetes se borren con un único comando, los paquetes sin dependencias serán borrados antes de los paquetes que sí poseen dependencias.

Al borrar paquetes utilizando rpm, no hay ningún aviso antes de los paquetes borrados, a diferencia de lo que sucede al instalar los paquetes. Sin embargo, si usted intenta borrar un paquete que es necesario para algún otro paquete, la operación no se realizará y usted recibirá un mensaje de error, tal como se muestra en el Listado 6.

Listado 6. Borrado de un paquete independiente con rpm
[root@echidna ~]# rpm -e gcl-selinux
error: Failed dependencies:
	gcl-selinux is needed by (installed) gcl-2.6.8-0.7.20100201cvs.fc12.x86_64

En cambio, si usted utiliza yum remove usted recibirá un aviso luego de la realización de los tests de las operaciones. Si el paquete que está tratando de borrar es un paquete dependiente de algunos paquetes instalados, YUM ofrecerá borrar estos y también el paquete dependiente, tal como se observa en el Listado 7.

Listado 7. Borrado de un paquete dependiente con yum
[root@echidna ~]# yum remove gcl|||||||-selinux
Loaded plugins: presto, refresh-packagekit
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased
--> Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64
--> Running transaction check
---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package          Arch        Version                            Repository     Size
=====================================================================================
Removing:
 gcl-selinux      x86_64      2.6.8-0.7.20100201cvs.fc12         @updates       90 k
Removing for dependencies:
 gcl              x86_64      2.6.8-0.7.20100201cvs.fc12         @updates       40 M

Transaction Summary
=====================================================================================
Remove        2 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)

Is this ok [y/N]: n
Exiting on user Command
Complete!

Actualización de paquetes RPM

Ahora que ya sabe como instalar y borrar un RPM, analicemos la actualización de paquetes RPM en otro nivel. Usted puede utilizar yum update para actualizar todo su sistema, o puede especificar un solo paquete o la especificación de un comodín. El Listado 8 muestra cómo actualizar todos los paquetes cuyos nombres comienzan con "gr". Obsérvese el uso de apóstrofes para prevenir la expansión del shell de "*".

Listado 8. Actualización mediante la actualización de yum
[root@echidna ~]# yum update 'gr*'
Loaded plugins: presto, refresh-packagekit
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package grep.x86_64 0:2.6.3-1.fc12 set to be updated
---> Package groff.x86_64 0:1.18.1.4-20.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package         Arch             Version                    Repository         Size
=====================================================================================
Updating:
 grep            x86_64           2.6.3-1.fc12               updates           228 k
 groff           x86_64           1.18.1.4-20.fc12           updates           1.5 M

Transaction Summary
=====================================================================================
Install       0 Package(s)
Upgrade       2 Package(s)

Total download size: 1.7 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Download delta size: 854 k
http://fedora.fastsoft.net/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-
6.fc12_2.6.3-1.fc12.x86_64.drpm: [Errno 14] HTTP Error 404 : http://fedora.fastsoft.n
et/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_
64.drpm 
Trying other mirror.
(1/2): grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpm             | 214 kB     00:00     
(2/2): groff-1.18.1.4-18.fc12_1.18.1.4-20.fc12.x86_64.drpm    | 640 kB     00:00     
Finishing rebuild of rpms, from deltarpms
<delta rebuild>                                               | 1.7 MB     00:02     
Presto reduced the update size by 52% (from 1.7 M to 854 k).
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating       : grep-2.6.3-1.fc12.x86_64                                      1/4 
  Updating       : groff-1.18.1.4-20.fc12.x86_64                                 2/4 
  Cleanup        : grep-2.5.3-6.fc12.x86_64                                      3/4 
  Cleanup        : groff-1.18.1.4-18.fc12.x86_64                                 4/4 

Updated:
  grep.x86_64 0:2.6.3-1.fc12             groff.x86_64 0:1.18.1.4-20.fc12            

Complete!

Si usted sabe donde son colocados los archivos RPM, o los ha descargado, entonces también puede actualizar usando el comando rpm Este es un proceso similar al de la instalación, salvo por el uso de la opción -U o la opción -F en lugar de la opción -i. La diferencia entre estas dos opciones es que la opción -U actualiza un paquete existente o instala el paquete si éste todavía no está instalado, mientras que la opción -F solamente actualiza o refresca un paquete que ya está instalado. Por esta razón, la opción -U es frecuentemente la más utilizada, particularmente cuando la línea de comando contiene una lista de RPMs. De este modo, los paquetes que se desinstalaron son instalados, y los paquetes que están instalados son actualizados. A menudo se utilizan otras dos opciones, -v (detalle) y -h (tecla numeral), para dar avisos de progreso. El Listado 9 muestra de qué modo actualizar los paquetes vim-common, vim-enhanced, y vim-minimal utilizando el comando rpm . Nosotros ya hemos descargado los paquetes vim-common y vim-enhanced en el directorio principal raíz, mientras que borramos el paquete vim-minimal de uno de los espejos actualizados.

Listado 9. Actualización de paquetes con rpm
[root@echidna ~]# ls *.rpm
vim-common-7.2.411-1.fc12.x86_64.rpm  vim-enhanced-7.2.411-1.fc12.x86_64.rpm
[root@echidna ~]# rpm -Uvh *.rpm http://mirrors.usc.edu/pub/linux/distributions\
> /fedora/linux/updates/12/x86_64/vim-minimal-7.2.411-1.fc12.x86_64.rpm
Retrieving http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/updates/12/x86
_64/vim-minimal-7.2.411-1.fc12.x86_64.rpm
Preparing...                ########################################### [100%]
   1:vim-common             ########################################### [ 33%]
   2:vim-enhanced           ########################################### [ 67%]
   3:vim-minimal            ########################################### [100%]

Cuestionando los paquetes RPM

En nuestros ejemplos usted pudo observar que para instalar un rpm con el comando rpm requiere el nombre completo del archivo paquete (o URL), por ejemplo gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpm. Por otro lado, la instalación con yum, o el borrado de un rpm con cualquiera de los comandos requiere solamente el nombre del paquete, por ejemplo gcl. Al igual que APT, RPM mantiene una base de datos interna de sus paquetes instalados, permitiéndole manipular los paquetes instalados utilizando el nombre del paquete. En esta sección, vemos que se puede acceder a la información de la base de datos disponible utilizando la opción -q (for consultar) del comando rpm o las consultas yum relacionadas.

La consulta básica simplemente pregunta si el paquete está instalado, y, si lo está, cuál es su versión. Agregue la opción -i para obtener información sobre el paquete. Tenga en cuenta que necesita autorización root para instalar, actualizar, o borrar paquetes, pero los usuarios no raíz pueden realizar consultas a la base de datos rpm.

Listado 10. Visualización de información sobre gcl
[ian@echidna ~]$ yum list gcl
Loaded plugins: presto, refresh-packagekit
Installed Packages
gcl.x86_64                  2.6.8-0.7.20100201cvs.fc12                  @updates
[ian@echidna ~]$ rpm -q gcl
gcl-2.6.8-0.7.20100201cvs.fc12.x86_64

[ian@echidna ~]$ yum info gcl
Loaded plugins: presto, refresh-packagekit
Installed Packages
Name       : gcl
Arch       : x86_64
Version    : 2.6.8
Release    : 0.7.20100201cvs.fc12
Size       : 40 M
Repo       : installed
From repo  : updates
Summary    : GNU Common Lisp
URL        : http://www.gnu.org/software/gcl/
License    : GPL+ and LGPLv2+
Description: GCL is a Common Lisp currently compliant with the ANSI standard.
           : Lisp compilation produces native code through the intermediary of
           : the system's C compiler, from which GCL derives efficient
           : performance and facile portability. Currently uses TCL/Tk as GUI.

[ian@echidna ~]$ rpm -qi gcl
Name        : gcl                          Relocations: (not relocatable)
Version     : 2.6.8                             Vendor: Fedora Project
Release     : 0.7.20100201cvs.fc12          Build Date: Tue 23 Mar 2010 03:20:36 PM EDT
Install Date: Wed 05 May 2010 01:01:34 PM EDT      Build Host: x86-02.phx2.fedoraproject.
org
Group       : Development/Languages         Source RPM: gcl-2.6.8-0.7.20100201cvs.fc12.sr
c.rpm
Size        : 41667750                         License: GPL+ and LGPLv2+
Signature   : RSA/8, Tue 23 Mar 2010 04:14:06 PM EDT, Key ID 9d1cc34857bbccba
Packager    : Fedora Project
URL         : http://www.gnu.org/software/gcl/
Summary     : GNU Common Lisp
Description :
GCL is a Common Lisp currently compliant with the ANSI standard.  Lisp
compilation produces native code through the intermediary of the
system's C compiler, from which GCL derives efficient performance and
facile portability. Currently uses TCL/Tk as GUI.

Cuanto más extensos sean los listados, más le mostrarán sobre las etiquetas que pueden estar relacionadas con un paquete RPM. Habrá notado que rpm y yum muestran información levemente diferente en formatos levemente diferentes. En este artículo, nos referiremos a los datos de salida básicos que brindan las opciones de los comandos estándard. Consulte las páginas de los manuales si quiere utilizar la opción rpm --queryformat para construir consultas de salida personalizadas. Pruebe ejecutando rpm --querytags si desea conocer todas las etiquetas que soporta la versión del rpm.

Como puede observar en el Listado 10, usted puede utilizar yum para obtener un listado de los paquetes instalados. Usted puede además utilizarlo para hacer una lista de los paquetes disponibles que han sido actualizados, los paquetes que están disponibles para ser instalados, y los paquetes con otras características, por ejemplo, los obsoletos o los que recientemente han sido agregados a un depósito. Usted puede incluso usar yum para buscar paquetes. En el Listado 11, puede observar que el paquete texmacs no se encuentra instalado, pero está si se encuentra disponible en el depósito fedora. Si usted busca la palabra "texmacs" verá que hay cuatro paquetes que la mencionan. Usted puede ver fácilmente porqué se encontraron los paquetes TeXmacs* . Utilice yum info pydot para descubrir porqué el paquete pydot también es mencionado.

Listado 11. Visualización de información sobre gcl
[ian@echidna ~]$ yum list texmacs
Loaded plugins: presto, refresh-packagekit
Available Packages
TeXmacs.x86_64                         1.0.7.2-2.fc12                          fedora
[ian@echidna ~]$ yum search texmacs
Loaded plugins: presto, refresh-packagekit
================================= Matched: texmacs ==================================
TeXmacs-devel.i686 : Development files for TeXmacs
TeXmacs-devel.x86_64 : Development files for TeXmacs
TeXmacs.x86_64 : Structured wysiwyg scientific text editor
pydot.noarch : Python interface to Graphviz's Dot language

En la mayoría de los ejemplos de las consultas restantes, utilizaremos rpm, porque permite más opciones. Muchos de los ejemplos pueden también realizarse con yum, y yum posee algunas capacidades que no se encuentran en las opciones rpm básicas . Consulte las páginas del manual para aprender más.

Los paquetes RPM y los archivos que se encuentran en ellos

A menudo deseará saber el contenido de un paquete o de qué paquete viene un archivo en particular. Para obtener una lista de los archivos que se encuentran en el paquete gcl, utilice la opción -ql tal como se puede observar en el Listado 12. Hay muchos archivos en este paquete, así que sólo mostraremos parte de los datos de salida.

Listado 12. Visualizaciónn de los archivos en el paquete gcl
[ian@echidna ~]$ rpm -ql gcl
/usr/bin/gcl
/usr/lib/gcl-2.6.8
/usr/lib/gcl-2.6.8/clcs
/usr/lib/gcl-2.6.8/clcs/sys-proclaim.lisp
/usr/lib/gcl-2.6.8/cmpnew
/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpmain.lsp
/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpopt.lsp
/usr/lib/gcl-2.6.8/cmpnew/gcl_collectfn.lsp
.
.
.
/usr/share/info/gcl-tk.info.gz
/usr/share/info/gcl.info-1.gz
/usr/share/info/gcl.info-2.gz
/usr/share/info/gcl.info-3.gz
/usr/share/info/gcl.info-4.gz
/usr/share/info/gcl.info-5.gz
/usr/share/info/gcl.info-6.gz
/usr/share/info/gcl.info-7.gz
/usr/share/info/gcl.info-8.gz
/usr/share/info/gcl.info-9.gz
/usr/share/info/gcl.info.gz
/usr/share/man/man1/gcl.1.gz

Se pueden restringir los archivos listados a los archivos de configuración mediante el agregado de la opción -c a su pregunta. De manera similar, la opción -d limita la visualización a los archivos de documentación.

Archivos de paquetes de consultas

El paquete de consultas anterior ordena consultar a la base de datos RPM por los paquetes instalados. Si usted ha descargado un paquete y desea obtener este tipo de información, puede hacerlo mediante la opción -p (para archivo de paquete) en su consulta junto con la especificación del nombre del archivo de paquete (como al instalar el paquete). El Listado 13 muestra este proceso con los dos paquetes vim que descargamos anteriormente. Lo hemos ejecutado como raíz simplemente porque los archivos se encontraban en el directorio principal raíz. Usted puede agregar otras consultas, por ejemplo -l para obtener una lista de los archivos o -i para obtener una lista de la información.

Listado 13. Visualización de la información del archivo de paquete para los dos paquetes vim
[root@echidna ~]# rpm -qp *.rpm
vim-common-7.2.411-1.fc12.x86_64
vim-enhanced-7.2.411-1.fc12.x86_64

Consultas a todos los paquetes instalados

La opción -a realiza la consulta a todos los paquetes instalados. Esto puede generar gran cantidad de datos de salida, por lo cual generalmente esta opción se utiliza junto con uno o más filtros, como sort para organizar el listado, more o less para buscar en él, wc para obtener los atributos del paquete o del archivo, o grep para buscar paquetes si uno no está seguro del nombre del mismo. El Listado 14 muestra las siguientes consultas:

  1. Una lista ordenada de todos los paquetes de su sistema
  2. Un recuento de todos los paquetes de su sistema
  3. Un recuento de todos los archivos en todos los paquetes de su sistema
  4. Un recuento de todos los archivos de documentación instalados con RPMs
  5. Una búsqueda de todos los paquetes en cuyo nombre aparece "gcl" (no se distingue mayúsculas de minúsculas).
Listado 14. Consultas a todos los paquetes
[ian@echidna ~]$ rpm -qa | sort | more
aalib-libs-1.4.0-0.18.rc5.fc12.x86_64
abrt-1.0.8-2.fc12.x86_64
abrt-addon-ccpp-1.0.8-2.fc12.x86_64
abrt-addon-kerneloops-1.0.8-2.fc12.x86_64
abrt-addon-python-1.0.8-2.fc12.x86_64
abrt-desktop-1.0.8-2.fc12.x86_64
abrt-gui-1.0.8-2.fc12.x86_64
abrt-libs-1.0.8-2.fc12.x86_64
abrt-plugin-bugzilla-1.0.8-2.fc12.x86_64
abrt-plugin-logger-1.0.8-2.fc12.x86_64
abrt-plugin-runapp-1.0.8-2.fc12.x86_64
abyssinica-fonts-1.0-5.fc12.noarch
acl-2.2.49-2.fc12.x86_64
...
[ian@echidna ~]$ rpm -qa | wc -l
1792
[ian@echidna ~]$ rpm -qal | wc -l
281052
[ian@echidna ~]$ rpm -qad | wc -l
45686
[ian@echidna ~]$ rpm -qa | grep -i gcl
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64
gcl-2.6.8-0.7.20100201cvs.fc12.x86_64

El uso de rpm -qa puede facilitar la administración de múltiples sistemas. Si usted redirige los datos de salida ordenados a un archivo de su máquina, y luego hace lo mismo en la otra máquina, usted puede utilizar el programa diff para encontrar las diferencias.

¿En qué paquete se encuentra un archivo?

Dado que usted puede obtener una lista de todos los paquetes y de todos los archivos de un paquete, ahora posee toda la información necesaria para encontrar cuál es el paquete que posee el archivo que desea. Sin embargo, el comando rpm proporciona una opción -f (o --file) para ayudarlo a localizar el paquete donde se encuentra un archivo determinado. Suponga que desea saber cual de los paquetes vim que vimos anteriormente posee el comando vim . Usted necesitará la ruta completa del archivo. El Listado 15 muestra el modo de utilizar el comando which para obtener la ruta completa del comando vim, y un consejo práctico para utilizar estos datos de salida como datos de entrada para el comando rpm -qf . Observe que las marcas de ayuda circundantes `which guile-config` son back-ticks. Otro modo de utilizar este comando en el shell bash es mediante $(which vim).

Listado 15. ¿En cuál de los paquetes se encuentra el ejecutable vim?
[ian@echidna ~]$ which vim
/usr/bin/vim
[ian@echidna ~]$ rpm -qf `which vim`
vim-enhanced-7.2.411-1.fc12.x86_64
[ian@echidna ~]$ rpm -qf $(which vim)
vim-enhanced-7.2.411-1.fc12.x86_64

Dependencias RPM

Como vimos anteriormente, nuestro intento de borrar el paquete gcl-selinux fracasó debido a las dependencias. Además de archivos, un paquete RPM puede contener capacidadesarbitrarias de las que pueden depender otros paquetes.

Como pudo haber notado, esto generalmente funciona. Si usted necesita instalar varios paquetes rápidamente, algunos de los cuales pueden depender de otros, simplemente use yum, o proporcione toda la lista a su comando rpm -Uvh , y éste analizará las dependencias y realizará las instalaciones en el orden correcto.

Además de tratar de instalar o borrar un paquete y obtener un mensaje de error, hay formas de descubrir cuales son los archivos o capacidades que requiere o de los depende un paquete.

El comando rpm proporciona una opción para consultar a los paquetes instalados o a los archivos de paquete para descubrir las capacidades de las que dependen o que requieren.Esta es la opción --requires que puede ser abreviada -R. El Listado 16 muestra las capacidades requeridas por gcl. Agregue la opción -p y utilice el nombre completo del archivo RPM si desea consultar un archivo de paquete en lugar de la base de datos RPM.

Listado 16. Requisitos de gcl
[ian@echidna ~]$ rpm -qR gcl
/bin/sh  
/bin/sh  
/bin/sh  
/sbin/install-info  
/sbin/install-info  
gcl-selinux  
libX11.so.6()(64bit)  
libc.so.6()(64bit)  
libc.so.6(GLIBC_2.11)(64bit)  
libc.so.6(GLIBC_2.2.5)(64bit)  
libc.so.6(GLIBC_2.3)(64bit)  
libc.so.6(GLIBC_2.3.4)(64bit)  
libc.so.6(GLIBC_2.4)(64bit)  
libc.so.6(GLIBC_2.7)(64bit)  
libc.so.6(GLIBC_2.8)(64bit)  
libdl.so.2()(64bit)  
libgmp.so.3()(64bit)  
libm.so.6()(64bit)  
libm.so.6(GLIBC_2.2.5)(64bit)  
libreadline.so.6()(64bit)  
libtcl8.5.so()(64bit)  
libtk8.5.so()(64bit)  
libz.so.1()(64bit)  
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)  
rpmlib(PayloadIsXz) <= 5.2-1

Puede resultar difícil descubrir que capacidades que proporciona cada paquete. El comando yum con la opción deplist puede ser útil para esto. Si usted proporciona un nombre de paquete que no se encuentra capacitado para la versión, usted puede obtener un listado de otras versiones conocidas. El Listado 17 muestra de que forma obtener la lista de dependencias sólo para la versión de gcl que está instalada.

Listado 17. Uso del paquete yum para encontrar los requisitos de gcl
[ian@echidna ~]$ yum deplist $(rpm -q gcl)
Loaded plugins: presto, refresh-packagekit
Finding dependencies: 
package: gcl.x86_64 2.6.8-0.7.20100201cvs.fc12
  dependency: libc.so.6(GLIBC_2.3.4)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: gcl-selinux
   provider: gcl-selinux.x86_64 2.6.8-0.6.20090701cvs.fc12
   provider: gcl-selinux.x86_64 2.6.8-0.7.20100201cvs.fc12
  dependency: libgmp.so.3()(64bit)
   provider: gmp.x86_64 4.3.1-5.fc12
  dependency: libc.so.6(GLIBC_2.8)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libc.so.6()(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: /sbin/install-info
   provider: info.x86_64 4.13a-7.fc12
   provider: info.x86_64 4.13a-9.fc12
  dependency: libX11.so.6()(64bit)
   provider: libX11.x86_64 1.3-1.fc12
  dependency: libc.so.6(GLIBC_2.7)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libtcl8.5.so()(64bit)
   provider: tcl.x86_64 1:8.5.7-4.fc12
   provider: tcl.x86_64 1:8.5.7-5.fc12
  dependency: libc.so.6(GLIBC_2.11)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libtk8.5.so()(64bit)
   provider: tk.x86_64 1:8.5.7-2.fc12
   provider: tk.x86_64 1:8.5.7-3.fc12
  dependency: libc.so.6(GLIBC_2.3)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libm.so.6()(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libz.so.1()(64bit)
   provider: zlib.x86_64 1.2.3-23.fc12
  dependency: rtld(GNU_HASH)
   provider: glibc.i686 2.11-2
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
   provider: glibc.i686 2.11.1-6
  dependency: libdl.so.2()(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libreadline.so.6()(64bit)
   provider: readline.x86_64 6.0-3.fc12
  dependency: /bin/sh
   provider: bash.x86_64 4.0.33-1.fc12
   provider: bash.x86_64 4.0.35-3.fc12
  dependency: libc.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6
  dependency: libm.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.11-2
   provider: glibc.x86_64 2.11.1-6

Esta lista también muestra los posibles proveedores de cada capacidad. Como puede ver la mayoría de las dependencias podrían ser proporcionadas por más de uno de los niveles de alternativas de un paquete. Por ejemplo, /bin/sh podrían venir de cualquiera de los dos niveles de bash. Con un pequeño filtro de escritura, usted puede reducir estos datos de salida a una lista de nombres de paquetes como se muestra en el Listado 18.

Listado 18. Reducción de los datos de salida del paquete yum a tan sólo los nombres de los paquetes
[ian@echidna ~]$ yum deplist $(rpm -q gcl) | grep "provider:" | \
> awk '{ print $2 }'|sort|uniq
bash.x86_64
gcl-selinux.x86_64
glibc.i686
glibc.x86_64
gmp.x86_64
info.x86_64
libX11.x86_64
readline.x86_64
tcl.x86_64
tk.x86_64
zlib.x86_64

Si usted sólo necesita saber qué paquetes es necesario instalar, usted puede siempre ejecutar yum install y ver la lista antes de recibir el aviso para aceptar la propuesta de instalación.

Además de descubrir cuales son las capacidades que requiere un paquete, usted quizá necesite saber qué paquetes contienen una capacidad en particular. Más arriba vimos cómo descubrir cuales son los paquetes que poseen un determinado archivo. El Listado 19 muestra cómo utilizar rpm o yum para descubrir qué paquetes contienen la capacidad gcl-selinux(x86-64). Además de la información sobre los paquetes instalados que contienen la capacidad, YUM también muestra los paquetes o las versiones disponibles en los depósitos. Estas son las versiones originales 2.6.8-0.6 de los depósitos fedora y la versión 2.6.8-0.7 actualizada disponible de los depósitos de actualizaciones.

Listado 19. ¿Qué paquetes suministran la capacidad gcl-selinux(x86-64) ?
[ian@echidna ~]$ rpm -q --whatprovides 'gcl-selinux(x86-64)'
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64
[ian@echidna ~]$ yum whatprovides 'gcl-selinux(x86-64)'
Loaded plugins: presto, refresh-packagekit
gcl-selinux-2.6.8-0.6.20090701cvs.fc12.x86_64 : SELinux policy for GCL images
Repo        : fedora
Matched from:
Other       : gcl-selinux(x86-64)



gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64 : SELinux policy for GCL images
Repo        : updates
Matched from:
Other       : gcl-selinux(x86-64)



gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64 : SELinux policy for GCL images
Repo        : installed
Matched from:
Other       : Provides-match: gcl-selinux(x86-64)

La integridad del archivo de paquete RPM

Para asegurar su integridad, los paquetes RPM incluyen un resumen, como MD5 o SHA1, y por lo general tienen firma digital. Para la verificación de los paquetes que contienen firma digital se requieren una clave pública. Para verificar la integridad de un archivo de paquete RPM, se utiliza la opción --checksig (abreviada -K) de rpm. Probablemente le parecerá útil agregar la opción -v para obtener datos de salida prolijos. El Listado 20 muestra un ejemplo de vim-enhanced RPM .

Listado 20. Verificación de la integridad del archivo de paquete vim-enhanced
[root@echidna ~]# rpm -vK vim-enhanced-7.2.411-1.fc12.x86_64.rpm
vim-enhanced-7.2.411-1.fc12.x86_64.rpm:
    Header V3 RSA/SHA256 signature: OK, key ID 57bbccba
    Header SHA1 digest: OK (f9a199545a515f7ff0716729768b41eb68fe29a8)
    V3 RSA/SHA256 signature: OK, key ID 57bbccba
    MD5 digest: OK (d4045f1f72d48073e3f401ee9d1f71cf)

Usted puede obtener una línea de datos de salida como esta:

V3 DSA signature: NOKEY, key ID 16a61572

Esto significa que usted posee un paquete con firma, pero no posee la clave pública necesaria en su base de datos RPM. Tenga en cuenta que las versiones anteriores de RPM pueden presentar la verificación de un modo diferente.

Si un paquete contiene firma y usted desea verificar la firma, entonces necesitará ubicar el archivo de firma correcto e importarlo a la base de datos de su RPM. Primero deberá descargar la clave y luego verificar la huella digital antes de importarlo utilizando el comando rpm --import . Si desea más información consulte las páginas de los manuales RPM. Usted encontrará más información en los binarios con firma en la página principal de RPM (vea Resources para encontrar el link).


Verificación del paquete instalado

Al igual que puede verificar la integridad de un rpm, usted puede también verificar la integridad de sus archivos instalados utilizando rpm -V. Este paso le asegura que los archivos no han sido modificados desde su instalación desde el rpm. Como se puede observar en el Listado 21, no hay datos de salida desde este comando si el paquete sigue siendo bueno, pero usted puede agregar la opción -v para obtener datos de salida más detallados.

Listado 21. Verificación del paquete vim-common instalado
[ian@echidna ~]$ rpm -V vim-common

Como usuario raíz corrompamos la instalación del vim-common borrando /usr/bin/xxd y reemplazándolo por /usr/share/vim/vim72/syntax/bindzone.vim /bin/bash. Hagamos la verificación nuevamente. En el Listado 22 pueden verse los resultados.

Listado 22. Manipulación de datos con el paquete vim-common
[root@echidna ~]# rpm -qf /usr/bin/xxd /usr/share/vim/vim72/syntax/bindzone.vim
vim-common-7.2.411-1.fc12.x86_64
vim-common-7.2.411-1.fc12.x86_64
[root@echidna ~]# rm /usr/bin/xxd
rm: remove regular file `/usr/bin/xxd'? y
[root@echidna ~]# cp /bin/bash /usr/share/vim/vim72/syntax/bindzone.vim
cp: overwrite `/usr/share/vim/vim72/syntax/bindzone.vim'? y
[root@echidna ~]# rpm -V vim-common
missing     /usr/bin/xxd
S.5....T.    /usr/share/vim/vim72/syntax/bindzone.vim

Estos datos de salida muestran que el archivo h /usr/share/vim/vim72/syntax/bindzone.vim fracasa en el conteo de MD5, tamaño de archivos, y tests mtime. Una forma de resolver el problema debería ser borrar el paquete y luego reinstalarlo, pero hay otros paquetes que dependen de vim-common y todavía se encuentran instalados y listos. La solución es necesariamente reinstalarlo utilizando la opción --force de rpm, o la función reinstall de yum. El Listado 23 muestra como reinstalarlo con yum, y luego verificar que el paquete se encuentre OK y que el archivo borrado haya sido restaurado.

Listado 23. Reinstalación del paquete vim-common
[root@echidna ~]# yum reinstall vim-common
Loaded plugins: presto, refresh-packagekit
Setting up Reinstall Process
Resolving Dependencies
--> Running transaction check
---> Package vim-common.x86_64 2:7.2.411-1.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package            Arch           Version                     Repository       Size
=====================================================================================
Reinstalling:
 vim-common         x86_64         2:7.2.411-1.fc12            updates         6.0 M

Transaction Summary
=====================================================================================
Remove        0 Package(s)
Reinstall     1 Package(s)
Downgrade     0 Package(s)

Total download size: 6.0 M
Installed size: 17 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
updates/prestodelta                                           | 969 kB     00:00     
Processing delta metadata
Package(s) data still to download: 6.0 M
vim-common-7.2.411-1.fc12.x86_64.rpm                          | 6.0 MB     00:01     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing     : 2:vim-common-7.2.411-1.fc12.x86_64                            1/1 

Installed:
  vim-common.x86_64 2:7.2.411-1.fc12                                                 

Complete!
[root@echidna ~]# rpm -V vim-common
[root@echidna ~]# ls /usr/bin/xxd
/usr/bin/xxd

Si necesita más potencia

Generalmente los sistemas de administración de paquetes mantienen sus paquetes en orden. Sin embargo, si logra borrar algún archivo que es parte importante de un paquete—y reinstalar el paquete sin borrar no solucionará el problema—, quizá usted necesite entonces borrar el paquete antes de realizar la instalación. En ese caso, usted probablemente querrá borrar la copia actual y reinstalarla, sin necesidad de desinstalar y reinstalar todos los paquetes que dependen de él. En ese caso, usted puede utilizar la opción rpm de los comandos --nodeps para evitar la dependencia realizando la verificación al borrar un paquete. El Listado 24 muestra como esto podría funcionar si usted accidentalmente borrara el archivo /usr/bin/xxd, el cual forma parte del paquete vim-common, como lo hicimos anteriormente.

Listado 24. Actualización de paquetes con rpm
[root@echidna ~]# rm /usr/bin/xxd
rm: remove regular file `/usr/bin/xxd'? y
[root@echidna ~]# # Oops! we needed that file
[root@echidna ~]# rpm -Fvh vim-common-7.2.411-1.fc12.x86_64.rpm 
[root@echidna ~]# ls /usr/bin/xxd
ls: cannot access /usr/bin/xxd: No such file or directory
[root@echidna ~]# # Oh! Freshening the package didn't replace the missing file
[root@echidna ~]# rpm -e vim-common
error: Failed dependencies:
	vim-common = 2:7.2.411-1.fc12 is needed by (installed) vim-enhanced-2:7.2.411-1.f
c12.x86_64
[root@echidna ~]# # Can't remove vim-common because vim-enhanced needs it
[root@echidna ~]# rpm -e --nodeps vim-common
[root@echidna ~]# # Bypassing the dependency check allowed removal
[root@echidna ~]# rpm -Uvh vim-common-7.2.411-1.fc12.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:vim-common             ########################################### [100%]
[root@echidna ~]# # Update (or install) vim-common again
[root@echidna ~]# ls /usr/bin/xxd
/usr/bin/xxd
[root@echidna ~]# # And /usr/bin/xxd is back

Por lo tanto ahora puede tener algunas ideas de como actualizar y reparar en caso de accidentes o de que fracasara el proceso normal de actualización. Tenga en cuenta que también puede evitar la dependencia realizando la verificación al instalar un RPM, pero esta no es generalmente una buena idea.


Descarga de RPMs desde los depósitos

Aunque yum recupere automáticamente paquetes de los depósitos, usted quizá quiera descargar RPMs y guardarlos, tal vez para instalarlos en un sistema sin conexión de red, o para examinar sus contenidos, o por alguna otra razón. Usted puede utilizar para esto el comando yumdownloader como se muestra en el Listado 25. En nuestro caso, el paquete ya ha sido instalado, por lo cual no hay paquetes adicionales para descargar. Si existieran esos paquetes, la opción --resolve provocaría su descarga también.

Listado 25. Descarga del paquete gcl
[ian@echidna ~]$ yumdownloader --resolve gcl
Loaded plugins: presto, refresh-packagekit
adobe-linux-i386                                                               17/17
--> Running transaction check
---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated
--> Finished Dependency Resolution
gcl-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm                     | 6.3 MB     00:01

Uso de rpm2cpio

Si usted descarga un RPM y necesita examinar su contenido, en lugar de instalarlo, puede utilizar el comando rpm2cpio para convertir los contenidos en un archivo cpio y luego filtrarlo a través del comando cpio para extraer los archivos del paquete de manera individual o todos los archivos juntos. El Listado 26 muestra como hacer esto con el paquete gcl-selinux y luego mostrar cuales son los archivos (y directorios) que fueron descomprimidos. Consulte las páginas de los manuales para encontrar detalles adicionales de rpm2cpio y cpio de estos comandos.

Listado 26. Descompresión del paquete gcl-selinux con rpm2cpio
[ian@echidna ~]$ yumdownloader gcl-selinux
Loaded plugins: presto, refresh-packagekit
gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm        |  17 kB     00:00     
[ian@echidna ~]$ mkdir gcl-selinux
[ian@echidna ~]$ cd gcl-selinux
[ian@echidna gcl-selinux]$ rpm2cpio ../gcl-selinux*.rpm | cpio -idv
./usr/share/selinux/packages/gcl
./usr/share/selinux/packages/gcl/gcl.pp
182 blocks
[ian@echidna gcl-selinux]$ find .
.
./usr
./usr/share
./usr/share/selinux
./usr/share/selinux/packages
./usr/share/selinux/packages/gcl
./usr/share/selinux/packages/gcl/gcl.pp

Búsqueda de RPMs

Hemos visto anteriormente que YUM proporciona una capacidad de búsqueda, la cual permite buscar descripciones y nombres de paquetes. Si usted necesita encontrar cual es el paquete que contiene un programa que no ha instalado, hay otras formas de hacerlo:

  • Adivinar qué paquete podría contenerlo y descargarlo sin instalarlo. Una vez que tiene el paquete, usted puede cuestionarlo.
  • Buscar en Internet.
  • Utilizar la capacidad comando-no-encontrado descripta más abajo.

Si usted no puede encontrar un RPM determinado con las herramientas de su sistema, un buen recurso de Internet para localizar RPMs es el servidor Rpmfind.Net (consulte Resources para encontrar un link).

Comando no encontrado

Cuando el shell bash busca un comando y no lo encuentra, entonces el shell busca una función del shell denominada command_not_found_handle. Si la función command_not_found_handle ya existe, ésta es invocada con el comando original y los argumentos originales como sus argumentos, y el estado salida de la función se convierte en el shell del estado de salida. Si la función no ha sido definida, el shell imprime un mensaje de error y vuelve al estado de salida de 127. La función generalmente se establece en el archivo de sistema /etc/bash.bashrc . El Listado 27 muestra cómo hemos buscado la capacidad comando no encontrado y luego la hemos instalado.

Listado 27. Búsqueda e instalación de la capacidad comando no encontrado
[root@echidna ~]# yum search command-not-found
Loaded plugins: presto, refresh-packagekit
========================== Matched: command-not-found ==========================
PackageKit-command-not-found.x86_64 : Ask the user to install command line
                                    : programs automatically
You have new mail in /var/spool/mail/root
[root@echidna ~]# yum install PackageKit-command-not-found.x86_64
Loaded plugins: presto, refresh-packagekit
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package PackageKit-command-not-found.x86_64 0:0.5.7-2.fc12 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                          Arch       Version          Repository   Size
================================================================================
Installing:
 PackageKit-command-not-found     x86_64     0.5.7-2.fc12     updates     102 k

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)

Total download size: 102 k
Installed size: 262 k
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Package(s) data still to download: 102 k
PackageKit-command-not-found-0.5.7-2.fc12.x86_64.rpm     | 102 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : PackageKit-command-not-found-0.5.7-2.fc12.x86_64         1/1 

Installed:
  PackageKit-command-not-found.x86_64 0:0.5.7-2.fc12                            

Complete!

El Listado 28 muestra cómo la función procesar se define luego de instalar PackageKit-command-not-found. Si la función no puede realizar la búsqueda, entonces imita el comportamiento estándar del sistema y reaparece 127.

Listado 28. El proceso de comando no encontrado
[ian@echidna ~]$ type command_not_found_handle
command_not_found_handle is a function
command_not_found_handle () 
{ 
    runcnf=1;
    retval=127;
    [ ! -S /var/run/dbus/system_bus_socket ] && runcnf=0;
    [ ! -x /usr/sbin/packagekitd ] && runcnf=0;
    if [ $runcnf -eq 1 ]; then
        /usr/libexec/pk-command-not-found $1;
        retval=$?;
    else
        echo "bash: $1: command not found";
    fi;
    return $retval
}

Si este ha sido instalado antes de ejecutar gcl como lo hicimos en el Listado 1, usted podría haber visto algo parecido al Listado 29.

Listado 29. Intento de procesar el comando no encontrado con gcl
[ian@echidna ~]$ gcl
Command not found. Install package 'gcl' to provide command 'gcl'? [N/y]

Otras Herramientas

Además de yum y rpm, su distribuidor puede proporcionarle otras herramientas para la instalación de paquetes del depósito o la actualización de todo su sistema. Estas herramientas pueden ser gráficas o líneas de comando o ambas. Algunos ejemplos son:

  • YaST (SUSE)
  • up2date (Red Hat)
  • Mandrake Software Management (Mandriva)

Generalmente estas herramientas procesarán las múltiples actualizaciones en un modo automático o semiautomático . Estas también pueden proporcionar capacidades para visualizar el contenido de los depósitos o la búsqueda de paquetes. Consulte la documentación por más detalles sobre la distribución.


PackageKit

No hay duda de que la instalación del paquete se completaría sin mencionar PackageKit, que es un sistema diseñado para facilitar la instalación y la actualización del software. El intento de unificar todas las herramientas gráficas de software utilizadas en distribuciones diferentes. PackageKit utiliza un sistema de activación daemon, que significa que daemon se activa sólo cuando es necesario. Packagekit tiene una versión para Gnome (gnome-packagekit) y KDE KPackageKit). El proceso del comando no encontrado descripto más arriba forma parte también de PackageKit. Este incluye los comandos pkcon para realizar las funciones de administración de paquetes desde la consola, y pkmon para monitorear la actividad del kit de paquetes. También incluye herramientas gráficas para agregar paquetes de software, o para actualizar su sistema. La Figura 1 muestra un ejemplo de interfaz gráfica de actualización de Software .

Figura 1. Interfaz gráfica de actualización de Software en Fedora 12 (Gnome)
Interfaz gráfica de actualización de Software en Fedora 12 (Gnome)

Varios sistemas de administración de paquetes RPM and YUM están explicados aquí. Vea Resources para obtener más links.

Recursos

Aprender

  • Use la developerWorks roadmap for LPIC-1 para encontrar los artículos developerWorks que lo ayudarán a estudiar para la certificación LPIC-1 conforme a los objetivos de abril de 2009.
  • En el sitio del Programa LPIC encuentre los objetivos detallados, las listas de tareas, y ejemplos de consultas para los tres niveles de la certificación de administración de sistema Linux del Linux Professional Institute. En particular, vea los objetivos de abril de 2009 para el examen LOI 101 Certificación y LPI exam 101. Siempre consulte en el sitio del Programa LPIC los últimos objetivos.
  • Revea toda la serie LPI exam prep series en developerWorks para aprender las bases de Linux y prepararse para la certificación como administrador de su sistema según los objetivos del examen LPI anteriores a abril de 2009.
  • En la RPM home page encuentre información actualizada sobre las herramientas de empaquetado del software RPM y las sugerencias para obtener más información sobre RPM.
  • El libro Maximum RPM ofrece un análisis amplio y sistemático de todos los aspectos de RPM. Éste se encuentra disponible en dos formatos, copias duras y blandas.
  • En LSB Home, aprenda sobre Linux Standard Base (LSB), un proyecto del Free Standards Group (FSG) para desarrollar un entorno operativo binario estándar.
  • Consulte la página principal de PackageKit para aprender más sobre PackageKit.
  • El Linux Documentation Project contiene varios de documentos útiles, especialmente sus HOWTOs.
  • En ladeveloperWorks Linux zone, encuentre cientos de artículos y tutoriales how-to , además de descargas, foros de discusión, y otros recursos para los desarrolladores y administradores de Linux.
  • Permanezca actualizado developerWorks technical events and webcasts sobre una gran variedad de productos IBM y los temas de la industria IT.
  • Asista a una sesión free developerWorks Live! para actualizarse de manera sencilla sobre los productos IBM y encontrar herramientas y tendencias sobre la industria IT.
  • Mire developerWorks on-demand demos que explican desde la instalación de productos y la configuración a principiantes, hasta las funcionalidades avanzadas para desarrolladores con experiencia.
  • Manténgase al tanto de developerWorks on Twitter, o suscríbase a un canal de tweets de Linux en developerWorks.

Obtener los productos y tecnologías

  • Encuentre paquetes sobre uno de los espejos de su distribución, como Fedora/12 Public Active Mirrors.
  • Busque RPMs para su distribución en Rpmfind.Net y RPM Search.
  • Evaluate IBM products de la manera que más le convenga: baje un producto de prueba, pruebe un producto en línea, use un producto en un entorno nube, o pase algunas horas en el SOA Sandbox aprendiendo como implementar de manera eficaz la arquitectura orientada al servicio.

Comentar

  • Conéctese con la My developerWorks community. Conéctese con los usuarios de developerWorks mientras explora los blogs administrados por los desarrolladores, los foros, los grupos, y los wikis.

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=966306
ArticleTitle=Aprenda Linux, 101: Administración de paquetes RPM y YUM
publish-date=07082010