Fundamentos
Si bien RPM es el gestor base para los paquetes, el cálculo
de las dependencias puede llevarnos a de vez cuando a jalarnos los
pelos de la cabeza, de ahí la necesidad de aprender a usar YUM
quién nos evitará tales malos ratos y que siempre y
cuando tengamos un acceso a un repositorio YUM, podremos sonreír
e instalar, desinstalar y actualizar cualquiera de los paquetes de
software en nuestro Fedora o sistema basado en RPM.
YUM : Yellow dog Updater, Modified, software para actualizar,
instalar y desinstalar paquetes en sistemas basados en RPM de forma
automática.
La ventaja fundamental es el cálculo de las dependencias y
en consecuencia su inclusión³n automática para
poder instalar lo que queremos. Ejemplo:
[root@elbax ~]# yum install xfig
...
Dependencies Resolved
===========================
Package Arch Version
Repository Size
===========================
Installing:
xfig i386 3.2.4-17.3.fc5
fedora 4.7 M
Installing for dependencies:
openmotif i386 2.3.0-0.1.9.3
fedora 1.5 M
transfig i386 1:3.2.4-13.3
fedora 212 k
xpdf i386 1:3.01-12.1
fedora 2.7 M
xpdf-utils i386 1:3.01-12.1
fedora 349 k
Transaction Summary
====================================================
Install 5 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 9.4 M
Is this ok [y/N]:
En este ejemplo queremos instalar xfig pero necesitamos una serie
de dependencias no instaladas previamente en nuestros sistema.
Yum se ha dado cuenta de ello y ha incluido las dependencias para
que podamos tener éxito, fácil no?
Bien, si esto es fácil, no dejen de probar:
yum remove <paquete>
yum update <paquete>
# Si no especifica paquete, podrá
aplicar todas las actualizaciones disponibles
Luego tenemos a los primos gráficos (GUIs) Pirut y Pup que
son frontales de Yum para actualizar nuestro sistema Fedora. Pirut se
llama desde el menú Aplicaciones -> Agregar/Remover
Software y Pup desde el menú Aplicaciones ->
Herramientas del Sistema -> Software Updater.
También existen otro par de primos mayores, yumex y gnome-yum
que son herramientas más avanzadas que permiten más
poder de control sobre yum desde el entorno X.
Guía Yum
Exclusión al actualizar
De tanto en tanto, o por cualquier razón, nos interesa
excluir este o cual paquete en una actualización. Para ello
use la opción --exclude, por ejemplo así:
# yum update --exclude=ekiga
Esto puede que sea necesario porque en un momento dado los espejos
que usa no se actualizan lo suficientemente rápido y no quiere
esperar, o simplemente no desea usar la nueva versión.
Listando
Ya que en la sección anterior anterior aprendimos a
instalar, remover y actualizar software con Yum, veamos ahora un uso
un poco más avanzado de Yum en la consola.
Veamos qué paquetes tenemos instalados:
[gomix@movix ~]$ yum list installed
Loading "installonlyn"
plugin
Installed Packages
GConf2.i386 2.14.0-1
installed
GConf2-devel.i386 2.14.0-1
installed
GFS.i386 6.1.5-0.FC5.1
installed
GFS-kernel-smp.i686
2.6.15.1-5.FC5.33 installed
.... [muchos otros]
Veamos qué paquetes están disponibles para ser
instalados en los repositorios configurados:
[gomix@movix ~]$ yum list available
Loading "installonlyn"
plugin
Setting up repositories
Reading repository metadata in from
local files
Available Packages
915resolution.i386 0.5.2-3.fc5
fedora-extras-ve
BackupPC.noarch 2.1.2-6.fc5
fedora-extras-ve
BibTool.i386 2.48-4.fc5
fedora-extras-ve
.... [muchos otros]
Finalmente, por ahora, veamos qué paquetes instalados
tienen actualizaciones disponibles:
[gomix@movix ~]$ yum list updates
Loading "installonlyn"
plugin
Setting up repositories
fedora-actualizaciones-ve
[1/3]
fedora-extras-ve
[2/3]
fedora-core-ve
[3/3]
Reading repository metadata in from
local files
Updated Packages
apr-util.i386
1.2.8-1.fc6 fedora-actualiza
cups.i386
1:1.2.7-1.5.fc6 fedora-actualiza
cups-libs.i386
1:1.2.7-1.5.fc6 fedora-actualiza
... [otros]
[gomix@movix ~]$
Grupos
Ya que hemos revisado varias de las opciones del programa yum,
ahora revisaremos una que no es muy popular y que ciertamente es muy
útil, y es la capacidad de Yum de manejar grupos de sw para
instalar, actualizar, remover o listar.
[gomix@movix ~]$ yum grouplist
Loading "installonlyn"
plugin
Setting up Group Process
Setting up repositories
Installed Groups:
Office/Productivity
Development Libraries
Editors
System Tools
Development Tools
GNOME Software Development
Text-based Internet
Base for rpm.livna.org
RPM-Repository
X Software Development
GNOME Desktop Environment
Xine
Authoring and Publishing
Network Servers
Hardware Support
Games and Entertainment
Java Development
X Window System
Graphics
Web Server
Eclipse
Printing Support
Mail Server
Server Configuration Tools
Sound and Video
Administration Tools
MPlayer
Graphical Internet
Available Groups:
Engineering and Scientific
MySQL Database
Virtualization
Legacy Network Server
DNS Name Server
FTP Server
Legacy Software Development
Windows File Server
KDE Software Development
KDE (K Desktop Environment)
PostgreSQL Database
News Server
Done
Digamos que quiero comenzar a desarrollar en KDE (nadie me cree
eso).
# yum groupinstall "KDE Software
Development"
.... otros tantos mas ....
kdelibs i386 6:3.5.5-0.2.fc6
fedora-ve 18 M
kdenetwork i386 7:3.5.5-0.1.fc6
fedora-ve 12 M
kdepim i386
6:3.5.5-0.2.fc6 fedora-ve 19 M
kdeutils i386
6:3.5.5-0.1.fc6 fedora-ve 3.8 M
kdnssd-avahi i386 0.1.3-0.1.fc6
fedora-ve 43 k
kdnssd-avahi-devel i386
0.1.3-0.1.fc6 fedora-ve 11 k
pcre-devel i386 6.6-1.1
fedora-ve 175 k
sip-devel i386 4.4.5-3
fedora-ve 15 k
Transaction Summary
=======================================================
Install 24 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 121 M
Is this ok [y/N]:
Obviamente haber averiguado todos y cada uno de los nombres e
instalarlos uno a uno, aún con sus dependencias calculadas con
yum hubiera sido un dolor de cabeza. Esto funciona para la remoción
de grupos completos, por ejemplo, puede desinstalar KDE completo con
una sola instrucción:
# yum groupremove "KDE (K Desktop Environment)"
También puede obtener información de los grupos.
# yum groupinfo "KDE (K Desktop
Environment)"
...
Group: KDE (K Desktop Environment)
Description: KDE is a powerful,
graphical user interface which includes a panel, desktop,
system icons, and a graphical file
manager.
Mandatory Packages:
arts
kdebase
Default Packages:
im-chooser
kdeaddons
kdeartwork
kdeaccessibility
kdemultimedia
kdeutils
kdegraphics
desktop-printing
autorun
kdepim
kdemultimedia-extras-nonfree
kdenetwork
Optional Packages:
kdeadmin
Igual puede actualizar un grupo dado con por ejemplo:
# yum groupupdate "MySQL
Database"
Para Atrás (rollback)
Ya no es tan común, sobre todo si ya es un administrador
experimentado, pero puede pasar que deseemos echar atrás lo
que hicimos, esto se denomina en inglés rollback. En ciertos
entornos esto es mandatorio. Después de largo tiempo usando
sistemas RPM finalmente y desde hace no mucho está disponible
las facilidades necesarias en rpm y en yum para para poder echar
atrás de forma automática y simple. Esto aún no
permite tener varias versiones del mismo software, que yo sepa, en la
base de datos rpm, es uno de los pocos requerimientos que no se
maneja aún en rpm hasta donde sé.
Veamos entonces qué debemos hacer para lograr el poder
echar para atrás con yum/rpm.
Para configurar yum para que salve la información
de roolback agregue la siguiente línea a su /etc/yum.conf.
tsflags=repackage
Para configurar la utilidad de línea de comando rpm
para que haga lo mismo, agregue la siguiente línea en
/etc/rpm/macros.
%_repackage_all_erasures 1
Instale, elimine y actualice a su voluntad, ya sea usando
pup, pirut, yumex, yum, rpm, o el
servicio automático de actualizaciones yum.
Si y cuando desee echar atrás a un estado previo,
realice una actualización rpm con la opción
--rollback seguida de un especificador de fecha/hora.
Algunos ejemplos son:
# rpm
-Uhv --rollback '9:00 am'
# rpm
-Uhv --rollback '4 hours ago'
# rpm
-Uhv --rollback 'december 25'
La capacidad de echar pa'tras es de gran valor para empresas que
operan bajo condiciones estrictas como las de telecomunicaciones, en
donde se debe trabajar en condiciones de “ventanas de tiempo de
mantenimiento”.
También ocurre que a veces hacemos actualizaciones sin
muchas evaluaciones previas y llegamos a un punto donde la mejor
solución simplemente es volver al estado anterior a la
actualización.
No olvide que una actualización puede haber provocado
decenas de actualizaciones de dependencias. El hacer el procedimiento
manualmente puede tomarle simplemente mucho tiempo.
Note que no hay un comando yum para hacer el rollback, debe
hacerse con rpm. Tampoco sé que se pueda hacerlo con algún
gui de yum com pirut, pup, yumex o
gnome-yum.
Configuración con Prioridad
Siguiendo con el uso avanzado de Yum, ahora veremos como podemos
configurar nuestro Fedora para que use nuestros repositorios locales
en cierto orden con prioridad sin descartar la lista de espejos
externos. Sin más vea la configuración necesaria.
[fedora-core-ve]
name=Fedora Core $releasever -
$basearch - Base
baseurl=http://mirepo.org/$releasever/$basearch/os/
http://otrorepo.org/$releasever/$basearch/os/
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=core-$releasever&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
Primero note el uso de múltiples URL en baseurl.
Debe hacerse como lo he puesto aquí, no utilice múltiples
declaraciones baseurl, no funcionará adecuadamente.
Luego note el uso de la declaración failovermethod,
este parámetro puede tener los valores 'roundrobin' o
'priority'. Por omisión el valor es 'roundrobin' que
aleatoriamente selecciona un URL de la lista de URLs. El valor puesto
a 'priority' hace que se comience por el primer URL de la lista de
URLs. Aquí es importante notar que la lista de URLs se
construye con los baseurl y luego de la lista obtenida de
mirrorlist. Así entonces logramos lo que queríamos,
buscamos primeros en nuestros repos, luego si fallan, en ese orden,
se busca en los URL de la lista de espejos.
Extensiones Yum
El sitio para la centralización de configuración de
las extensiones en Fedora es /etc/yum/pluginconf.d.
http://wiki.linux.duke.edu/YumPlugins
installonlyn
Debido a la naturaleza de kernel en donde con Yum siempre se hace
una instalación en vez de una actualización, esta
extensión permite ser configurada para mantener instalados “n”
kernels y no infinitas versiones. Su configuración se
encuentra en en /etc/yum/pluginconf.d/installonlyn.conf. La
configuracón por omisión es:
[main]
# Lo siguiente habilita la extensión
enabled=1
# La siguiente línea establece
la cantidad que se permiten instalados
tokeep=2
downloadonly
Ahora vamos a comentar acerca de un módulo adicional de
Yum. Ah perdón, se me olvidaba decirles, Yum es modular y
puede incorporar una serie de módulos adicionales con
diferentes propósitos, este es uno de ellos.
# yum install yum-downloadonly
...
Dependencies Resolved
=========================================================
Package Arch Version
Repository Size
=========================================================
Installing:
yum-downloadonly noarch 1.0.1-1.fc6
fedora-extras 5.9 k
Transaction Summary
=========================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 5.9 k
Is this ok [y/N]: y
Veamos cómo podemos usarlo y recordemos que podemos usar
Yum para obtener información general de los paquetes con yum
info, aún si no están instalados:
# yum info yum-downloadonly
Loading "installonlyn"
plugin
Loading "downloadonly"
plugin
Setting up repositories
Reading repository metadata in from
local files
Installed Packages
Name : yum-downloadonly
Arch : noarch
Version: 1.0.1
Release: 1.fc6
Size : 3.1 k
Repo : installed
Summary: Yum plugin to add
downloadonly command option
Description:
This plugin adds a --downloadonly
flag to yum so that yum will only download the packages and not
install/update them.
Para los que no le pegan al inglés, una de las razones de
esta publicación, la descripción lo dice todo, se
agrega la opción --downloadonly a Yum. Intentemos usarla con
un paquete no instalado (note la línea de carga del módulo,
'Loading "downloadonly" plugin').
# yum --downloadonly
yum-kernel-module
Esto nos dará un error porque Yum espera un comando después
de la opción. Así que ahora lo intentaremos
correctamente con:
# yum install --downloadonly
yum-kernel-module
Loading "installonlyn"
plugin
Loading "downloadonly"
plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from
local files
Parsing package install arguments
Resolving Dependencies
...
Dependencies Resolved
==========================================
Package Arch
Version Repository Size
==========================================
Installing:
yum-kernel-module noarch
1.0.1-1.fc6 fedora-extras-ve 7.0 k
Transaction Summary
==========================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 7.0 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): yum-kernel-module- 100%
|=========================| 7.0 kB 00:00
exiting because --downloadonly
specified
Note ahora que yum termina. Ahora la pregunta es, ¿dónde
está nuestro archivo rpm? La respuesta es que depende de la
configuración de yum, pero la configuración de caja
almacena todo en la carpeta /var/cache/yum/<repositorio>.
Como en nuestro caso el archivo rpm descargado provenía de
Fedora Extras, el nombre del directorio donde se almacenó es
/var/cache/yum/extras.
# cd /var/cache/extras
# ls
cachecookie headers packages
primary.xml.gz
primary.xml.gz.sqlite repomd.xml
# cd packages/
# ls
yum-kernel-module-1.0.1-1.fc6.noarch.rpm
Ahí está nuestro rpm descargado y podemos confirmar
que no se ha instalado con :
# rpm -q yum-kernel-module
package yum-kernel-module is not
installed
¿Qué pasa si el paquete tiene
dependencias?
# yum --downloadonly install
zaptel-utils
...
Dependencies Resolved
=========================================================
Package Arch Version
Repository Size
=========================================================
Installing:
zaptel-utils i386 1.4.0-9.fc6
fedora-extras 32 k
Installing for dependencies:
zaptel-lib i386 1.4.0-9.fc6
fedora-extras 13 k
Transaction Summary
=========================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 45 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): zaptel-lib-1.4.0-9 100%
|========| 13 kB 00:00
(2/2): zaptel-utils-1.4.0 100%
|========| 32 kB 00:01
exiting because --downloadonly
specified
Nuevamente yum hace lo correcto, descarga todo, pero no los
instala.
# ls
yum-kernel-module-1.0.1-1.fc6.noarch.rpm
zaptel-lib-1.4.0-9.fc6.i386.rpm
zaptel-utils-1.4.0-9.fc6.i386.rpm
Asi que con esta extensión podemos entonces descargar los
paquetes y sus dependencias para por ejemplo un computador que no
tiene conexión a internet.
¿Qué pasa si el paquete ya está
instalado?
# rpm -q httpd
httpd-2.2.3-5
# yum --downloadonly install httpd
...
Nothing to do
Y tiene sentido, ya está instalado. ¿Hay manera de
forzar? No. Hablaremos de otro programa para resolver ese caso en una
próxima ocasión.
Fastestmirror
Esta extensión está diseñada para ordenar la
lista de espejos por velocidad de respuestas de cada uno antes de
comenzar una descarga.
# yum install yum-fastestmirror
Dependencies Resolved
=============================================================================
Package Arch
Version Repository Size
=============================================================================
Installing:
yum-fastestmirror noarch
1.0.2-2.fc6 fedora-extras-ve 9.9 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 9.9 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): yum-fastestmirror- 100%
|=========================| 9.9 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: yum-fastestmirror
######################### [1/1]
Installed: yum-fastestmirror.noarch
0:1.0.2-2.fc6
Complete!
Su configuración está en
/etc/yum/pluginconf.d/fastestmirror.conf.
[main]
enabled=1
verbose=0
socket_timeout=3
hostfilepath=/var/cache/yum/timedhosts.txt
maxhostfileage=10
Al intentar una operación Yum, siempre ocurre este
ordenamiento. Podemos medir su efectividad desactivando y activando
la extensión y realizando la misma descarga y procurando que
no se use el cache.
## Limpieza del cache
# yum clean packages
Loading "fastestmirror"
plugin
Loading "installonlyn"
plugin
Loading "downloadonly"
plugin
5 packages removed
## Deshabilito fastestmirror en su
archivo de config primero, descargo de fedora-ve.org
## Escogemos algun rpm a descargar
con unos +/-10Megas para que se note la diff
## También agregamos -y para
evitar el retardo de contestar de forma interactiva
# time yum -y --downloadonly install
abiword
...
Totalc download size: 9.1 M
...
real 5m6.770s
user 0m11.469s
sys 0m1.660s
## Limpiamos el cache otra vez
# yum clean packages
Loading "fastestmirror"
plugin
Loading "installonlyn"
plugin
Loading "downloadonly"
plugin
5 packages removed
## Vuelvo habilitar fastestmirror en
su archivo de config
# yum -y --downloadonly install yumex
...
real 5m23.901s
user 0m11.926s
sys 0m1.845s
Curiosamente, de hecho no va más rápido. No conozco
los detalles de cómo mide esta extensión la velocidad
de los repositorios, pero lo cierto es que no parece muy efectivo.
Aún así y de acuerdo a los experimentos que realice, si
funciona de acuerdo a su propia lógica, es decir, sea como sea
que mide los servidores, usa el mejor de acuerdo a esa medida, de ahí
que si hay posibilidades de que nos vaya mejor. Una de las pruebas
que hice fue verificar que esta extensión actúa después
de armar la lista de servidores sin importar el método de
failovermethod seleccionado en la configuración de los
repositorios, es decir que funciona sin importar el orden de dicha
lista, se vuelve a ordenar de acuerdo a la medida de velocidad y se
escoge el “más rápido”.