Yum (Yellowdog Updater, Modified) es el gestor de paquetes de software RPM (Red Hat Package) utilizado en RHEL, CentOS, Fedora y otros sistemas basados en GNU/Linux y RPM.
Podemos hacer uso de Yum desde la línea de comandos para gestionar software: actualizar, instalar, desinstalar, ETC. Yum se encargará de instalar las dependencias necesarias a la hora de instalar un paquete RPM de forma automática. Por ejemplo si necesitamos instalar el paquete httpd será necesario instalar una serie de paquetes adicionales para su correcto funcionamiento, veamos:
yum deplist httpd | grep dependency dependency: libexpat.so.0()(64bit) dependency: libldap-2.3.so.0()(64bit) dependency: initscripts >= 8.36 dependency: /bin/mv dependency: libdl.so.2()(64bit) dependency: /usr/sbin/useradd dependency: libcrypto.so.6()(64bit) dependency: /bin/sh dependency: gawk dependency: /bin/rm dependency: libpcre.so.0()(64bit) dependency: /bin/bash dependency: libselinux.so.1()(64bit) dependency: libssl.so.6()(64bit) dependency: /sbin/chkconfig dependency: /etc/mime.types dependency: libc.so.6(GLIBC_2.3.4)(64bit) dependency: /bin/mktemp dependency: libdb-4.3.so()(64bit) dependency: sh-utils dependency: libcrypt.so.1(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.4)(64bit) dependency: libc.so.6()(64bit) dependency: liblber-2.3.so.0()(64bit) dependency: libz.so.1()(64bit) dependency: rtld(GNU_HASH) dependency: /usr/bin/find dependency: libcrypt.so.1()(64bit) dependency: libpthread.so.0()(64bit) dependency: libc.so.6(GLIBC_2.2.5)(64bit) dependency: libm.so.6(GLIBC_2.2.5)(64bit) dependency: libpthread.so.0(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.3)(64bit) dependency: libm.so.6()(64bit) dependency: libaprutil-1.so.0()(64bit) dependency: textutils dependency: config(httpd) = 2.2.3-83.el5.centos dependency: /usr/share/magic.mime dependency: libapr-1.so.0()(64bit) dependency: libexpat.so.0()(64bit) dependency: libldap-2.3.so.0()(64bit) dependency: initscripts >= 8.36 dependency: /bin/mv dependency: libdl.so.2()(64bit) dependency: /usr/sbin/useradd dependency: libcrypto.so.6()(64bit) dependency: /bin/sh dependency: gawk dependency: /bin/rm dependency: libpcre.so.0()(64bit) dependency: /bin/bash dependency: libselinux.so.1()(64bit) dependency: config(httpd) = 2.2.3-82.el5.centos dependency: /sbin/chkconfig dependency: /etc/mime.types dependency: libc.so.6(GLIBC_2.3.4)(64bit) dependency: /bin/mktemp dependency: libdb-4.3.so()(64bit) dependency: sh-utils dependency: libcrypt.so.1(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.4)(64bit) dependency: libc.so.6()(64bit) dependency: liblber-2.3.so.0()(64bit) dependency: libz.so.1()(64bit) dependency: rtld(GNU_HASH) dependency: /usr/bin/find dependency: libssl.so.6()(64bit) dependency: libcrypt.so.1()(64bit) dependency: libpthread.so.0()(64bit) dependency: libc.so.6(GLIBC_2.2.5)(64bit) dependency: libm.so.6(GLIBC_2.2.5)(64bit) dependency: libpthread.so.0(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.3)(64bit) dependency: libm.so.6()(64bit) dependency: libaprutil-1.so.0()(64bit) dependency: textutils dependency: /usr/share/magic.mime dependency: libapr-1.so.0()(64bit) dependency: libexpat.so.0()(64bit) dependency: libldap-2.3.so.0()(64bit) dependency: initscripts >= 8.36 dependency: /bin/mv dependency: libdl.so.2()(64bit) dependency: /usr/sbin/useradd dependency: libcrypto.so.6()(64bit) dependency: /bin/sh dependency: gawk dependency: /bin/rm dependency: config(httpd) = 2.2.3-87.el5.centos dependency: /bin/bash dependency: libselinux.so.1()(64bit) dependency: libssl.so.6()(64bit) dependency: /sbin/chkconfig dependency: /etc/mime.types dependency: libc.so.6(GLIBC_2.3.4)(64bit) dependency: /bin/mktemp dependency: libdb-4.3.so()(64bit) dependency: sh-utils dependency: libcrypt.so.1(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.4)(64bit) dependency: libc.so.6()(64bit) dependency: liblber-2.3.so.0()(64bit) dependency: libz.so.1()(64bit) dependency: rtld(GNU_HASH) dependency: libpcre.so.0()(64bit) dependency: /usr/bin/find dependency: libcrypt.so.1()(64bit) dependency: libpthread.so.0()(64bit) dependency: libc.so.6(GLIBC_2.2.5)(64bit) dependency: libm.so.6(GLIBC_2.2.5)(64bit) dependency: libpthread.so.0(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.3)(64bit) dependency: libm.so.6()(64bit) dependency: libaprutil-1.so.0()(64bit) dependency: textutils dependency: /usr/share/magic.mime dependency: libapr-1.so.0()(64bit) dependency: libexpat.so.0()(64bit) dependency: libldap-2.3.so.0()(64bit) dependency: initscripts >= 8.36 dependency: /bin/mv dependency: libdl.so.2()(64bit) dependency: /usr/sbin/useradd dependency: libcrypto.so.6()(64bit) dependency: /bin/sh dependency: gawk dependency: /bin/rm dependency: libpcre.so.0()(64bit) dependency: /bin/bash dependency: libselinux.so.1()(64bit) dependency: libssl.so.6()(64bit) dependency: /sbin/chkconfig dependency: libc.so.6()(64bit) dependency: /etc/mime.types dependency: libc.so.6(GLIBC_2.3.4)(64bit) dependency: /bin/mktemp dependency: libdb-4.3.so()(64bit) dependency: sh-utils dependency: libcrypt.so.1(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.4)(64bit) dependency: config(httpd) = 2.2.3-85.el5.centos dependency: liblber-2.3.so.0()(64bit) dependency: libz.so.1()(64bit) dependency: rtld(GNU_HASH) dependency: /usr/bin/find dependency: libcrypt.so.1()(64bit) dependency: libpthread.so.0()(64bit) dependency: libc.so.6(GLIBC_2.2.5)(64bit) dependency: libm.so.6(GLIBC_2.2.5)(64bit) dependency: libpthread.so.0(GLIBC_2.2.5)(64bit) dependency: libc.so.6(GLIBC_2.3)(64bit) dependency: libm.so.6()(64bit) dependency: libaprutil-1.so.0()(64bit) dependency: textutils dependency: /usr/share/magic.mime dependency: libapr-1.so.0()(64bit)
Imaginen tener que instalar todos esos paquetes manualmente! Pero yum se encargará de hacerlo por nosotros 🙂
Yum se basa en el uso de repositorios de software para obtener los RPM que estén disponibles más allá de los que traen los sistemas operativos por defecto.
Vamos a comenzar viendo el tema de los repositorios.
Podemos listar los repositorios que tenemos disponibles filtrando entre habilitados, deshabilitados, o listar todos los repositorios:
yum repolist enabled Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.advancedhosters.com * epel: mirror.steadfast.net * extras: mirrors.loosefoot.com * remi: mirrors.mediatemple.net * updates: mirror.anl.gov repo id repo name status base CentOS-5 - Base 3,662 epel Extra Packages for Enterprise Linux 5 - x86_64 7,699 extras CentOS-5 - Extras 266 nginx nginx repo 65 remi Les RPM de remi pour Enterprise Linux 5 - x86_64 1,687 updates CentOS-5 - Updates 633 repolist: 14,012
yum repolist disabled Loaded plugins: fastestmirror repo id repo name C5.0-base CentOS-5.0 - Base C5.0-centosplus CentOS-5.0 - Plus C5.0-extras CentOS-5.0 - Extras C5.0-updates CentOS-5.0 - Updates C5.1-base CentOS-5.1 - Base C5.1-centosplus CentOS-5.1 - Plus C5.1-extras CentOS-5.1 - Extras C5.1-updates CentOS-5.1 - Updates C5.2-base CentOS-5.2 - Base C5.2-centosplus CentOS-5.2 - Plus C5.2-extras CentOS-5.2 - Extras C5.2-updates CentOS-5.2 - Updates C5.3-base CentOS-5.3 - Base C5.3-centosplus CentOS-5.3 - Plus C5.3-extras CentOS-5.3 - Extras C5.3-updates CentOS-5.3 - Updates C5.4-base CentOS-5.4 - Base C5.4-centosplus CentOS-5.4 - Plus C5.4-extras CentOS-5.4 - Extras C5.4-updates CentOS-5.4 - Updates C5.5-base CentOS-5.5 - Base C5.5-centosplus CentOS-5.5 - Plus C5.5-extras CentOS-5.5 - Extras C5.5-updates CentOS-5.5 - Updates C5.6-base CentOS-5.6 - Base C5.6-centosplus CentOS-5.6 - Plus C5.6-extras CentOS-5.6 - Extras C5.6-updates CentOS-5.6 - Updates C5.7-base CentOS-5.7 - Base C5.7-centosplus CentOS-5.7 - Plus C5.7-extras CentOS-5.7 - Extras C5.7-updates CentOS-5.7 - Updates C5.8-base CentOS-5.8 - Base C5.8-centosplus CentOS-5.8 - Plus C5.8-extras CentOS-5.8 - Extras C5.8-updates CentOS-5.8 - Updates C5.9-base CentOS-5.9 - Base C5.9-centosplus CentOS-5.9 - Plus C5.9-extras CentOS-5.9 - Extras C5.9-updates CentOS-5.9 - Updates c5-media CentOS-5 - Media centosplus CentOS-5 - Plus contrib CentOS-5 - Contrib debug CentOS-5 - Debuginfo epel-debuginfo Extra Packages for Enterprise Linux 5 - x86_64 - Debug epel-source Extra Packages for Enterprise Linux 5 - x86_64 - Source epel-testing Extra Packages for Enterprise Linux 5 - Testing - x86_64 epel-testing-debuginfo Extra Packages for Enterprise Linux 5 - Testing - x86_64 - Debug epel-testing-source Extra Packages for Enterprise Linux 5 - Testing - x86_64 - Source remi-debuginfo Les RPM de remi pour Enterprise Linux 5 - x86_64 - debuginfo remi-php55 Les RPM de remi de PHP 5.5 pour Enterprise Linux 5 - x86_64 remi-php55-debuginfo Les RPM de remi de PHP 5.5 pour Enterprise Linux 5 - x86_64 - debuginfo remi-php56 Les RPM de remi de PHP 5.6 pour Enterprise Linux 5 - x86_64 remi-php56-debuginfo Les RPM de remi de PHP 5.6 pour Enterprise Linux 5 - x86_64 - debuginfo remi-test Les RPM de remi en test pour Enterprise Linux 5 - x86_64 remi-test-debuginfo Les RPM de remi en test pour Enterprise Linux 5 - x86_64 - debuginfo repolist: 0
yum repolist all Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.advancedhosters.com * epel: mirror.steadfast.net * extras: centos.mbni.med.umich.edu * remi: mirrors.mediatemple.net * updates: mirror.anl.gov repo id repo name status C5.0-base CentOS-5.0 - Base disabled C5.0-centosplus CentOS-5.0 - Plus disabled C5.0-extras CentOS-5.0 - Extras disabled C5.0-updates CentOS-5.0 - Updates disabled C5.1-base CentOS-5.1 - Base disabled C5.1-centosplus CentOS-5.1 - Plus disabled C5.1-extras CentOS-5.1 - Extras disabled C5.1-updates CentOS-5.1 - Updates disabled C5.2-base CentOS-5.2 - Base disabled C5.2-centosplus CentOS-5.2 - Plus disabled C5.2-extras CentOS-5.2 - Extras disabled C5.2-updates CentOS-5.2 - Updates disabled C5.3-base CentOS-5.3 - Base disabled C5.3-centosplus CentOS-5.3 - Plus disabled C5.3-extras CentOS-5.3 - Extras disabled C5.3-updates CentOS-5.3 - Updates disabled C5.4-base CentOS-5.4 - Base disabled C5.4-centosplus CentOS-5.4 - Plus disabled C5.4-extras CentOS-5.4 - Extras disabled C5.4-updates CentOS-5.4 - Updates disabled C5.5-base CentOS-5.5 - Base disabled C5.5-centosplus CentOS-5.5 - Plus disabled C5.5-extras CentOS-5.5 - Extras disabled C5.5-updates CentOS-5.5 - Updates disabled C5.6-base CentOS-5.6 - Base disabled C5.6-centosplus CentOS-5.6 - Plus disabled C5.6-extras CentOS-5.6 - Extras disabled C5.6-updates CentOS-5.6 - Updates disabled C5.7-base CentOS-5.7 - Base disabled C5.7-centosplus CentOS-5.7 - Plus disabled C5.7-extras CentOS-5.7 - Extras disabled C5.7-updates CentOS-5.7 - Updates disabled C5.8-base CentOS-5.8 - Base disabled C5.8-centosplus CentOS-5.8 - Plus disabled C5.8-extras CentOS-5.8 - Extras disabled C5.8-updates CentOS-5.8 - Updates disabled C5.9-base CentOS-5.9 - Base disabled C5.9-centosplus CentOS-5.9 - Plus disabled C5.9-extras CentOS-5.9 - Extras disabled C5.9-updates CentOS-5.9 - Updates disabled base CentOS-5 - Base enabled: 3,662 c5-media CentOS-5 - Media disabled centosplus CentOS-5 - Plus disabled contrib CentOS-5 - Contrib disabled debug CentOS-5 - Debuginfo disabled epel Extra Packages for Enterprise Linux 5 - x86_64 enabled: 7,699 epel-debuginfo Extra Packages for Enterprise Linux 5 - x86_64 - Debug disabled epel-source Extra Packages for Enterprise Linux 5 - x86_64 - Source disabled epel-testing Extra Packages for Enterprise Linux 5 - Testing - x86_64 disabled epel-testing-debuginfo Extra Packages for Enterprise Linux 5 - Testing - x86_64 - Debug disabled epel-testing-source Extra Packages for Enterprise Linux 5 - Testing - x86_64 - Source disabled extras CentOS-5 - Extras enabled: 266 nginx nginx repo enabled: 65 remi Les RPM de remi pour Enterprise Linux 5 - x86_64 enabled: 1,687 remi-debuginfo Les RPM de remi pour Enterprise Linux 5 - x86_64 - debuginfo disabled remi-php55 Les RPM de remi de PHP 5.5 pour Enterprise Linux 5 - x86_64 disabled remi-php55-debuginfo Les RPM de remi de PHP 5.5 pour Enterprise Linux 5 - x86_64 - debuginfo disabled remi-php56 Les RPM de remi de PHP 5.6 pour Enterprise Linux 5 - x86_64 disabled remi-php56-debuginfo Les RPM de remi de PHP 5.6 pour Enterprise Linux 5 - x86_64 - debuginfo disabled remi-test Les RPM de remi en test pour Enterprise Linux 5 - x86_64 disabled remi-test-debuginfo Les RPM de remi en test pour Enterprise Linux 5 - x86_64 - debuginfo disabled updates CentOS-5 - Updates enabled: 633 repolist: 14,012
Podemos instalar paquetes desde repositorios que estén deshabilitados, para ello los habilitamos momentáneamente:
yum install --enablerepo=rawhide bro
En el ejemplo habilitamos el repositorio rawhide e instalamos el rpm bro
Veamos ahora un ejemplo de como añadir un repositorio nuevo:
Creamos el archivo de configuración del repositorio con un editor de texto:
nano /etc/yum.repos.d/nginx.repo
Añadimos la configuración del repositorio:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=1
En el ejemplo no tenemos habilitado el chequeo de la key de autenticación gpg, en caso de hacerlo (gpgcheck=1) deberemos instalarla.
Pasemos ahora a la gestión de paquetes RPM…
La sintaxis será la siguiente: yum [opciones] [comando] [paquete …]
Por ejemplo yum -y install httpd
De esa forma se instalará sin pedir confirmación el paquete http y sus correspondientes dependencias.
Principales comandos yum:
check-update Verifica la existencia de actualizaciones de paquetes clean Elimina los datos del caché deplist Muestra las dependencias que necesita un paquete downgrade desactualizar un paquete a una versión anterior erase Elimina uno o varios paquetes de su sistema groupinfo Muestra detalles acerca de un grupo de paquetes groupinstall Instala los paquetes en un grupo de su sistema grouplist Muestra los grupos de paquetes disponibles groupremove Elimina los paquetes de un grupo de su sistema help Muestra un mensaje de ayuda del uso history Mostrar, o utilizar, el historial de la transacción info Muestra detalles acerca de un paquete o de un grupo de paquetes install Instala uno o varios paquetes en su sistema list Muestra un paquete o grupos de paquete localinstall Instala un RPM local makecache Genera el caché de metadatos provides Localiza el paquete que ofrezca el valor indicado reinstall reinstalar un paquete repolist Muestra los repositorios de software configurados resolvedep Determina qué paquetes ofrecen la dependencia indicada search Busca detalles en los paquetes para la cadena indicada shell Ejecuta una shell de Yum interactiva update Actualiza uno o varios paquetes en su sistema upgrade Actualiza los paquetes tomando en cuenta los obsoletos version Muestra una versión para la máquina y/o los repositorios disponibles.
Principales Opciones:
-h, --help muestra este mensaje de ayuda y cierra -t, --tolerant sea tolerante con los errores -C se ejecuta completamente a partir del caché, pero no lo actualiza -c [config file] configurar ubicación de archivo -R [minutes] tiempo máximo de espera del comando -d [debug level] nivel de depuración de la salida --showduplicates muestra duplicados en los repositorios, y en los comandos para mostrar/buscar -e [error level] nivel de error de la salida -q, --quiet operación discreta -v, --verbose operación detallada -y responde "si" a todas las preguntas --version muestra la versión de Yum y finaliza --installroot=[path] define la raíz de instalación --enablerepo=[repo] activa uno o más repositorios (los comodines son permitidos) --disablerepo=[repo] desactiva uno o más repositorios (los comodines son permitidos) -x [package], --exclude=[package] excluya paquete(s) de acuerdo a su nombre o glob --disableexcludes=[repo] deshabilita la posibilidad de exclusión desde main, para un repositorio o para todos --obsoletes habilita el proceso de paquetes obsoletos durante las actualizaciones --noplugins deshabilita los complementos de Yum --nogpgcheck deshabilita la verificación de firmas GPG --disableplugin=[plugin] deshabilita complementos de acuerdo a su nombre --enableplugin=[plugin] habilita complementos de acuerdo a su nombre --skip-broken ignora paquetes con problemas de resolución de dependencias --color=COLOR controla la utilización de colores
Exclusiones de paquetes:
Podemos seleccionar una serie de paquetes para que no puedan ser actualizados mediante yum update:
yum --exclude=nginx\* --exclude=lighttpd\* update
En el ejemplo excluimos del update los paquetes nginx y lighttpd
También podemos dejar excluidos permanentemente estos paquetes añadiéndolos en el archivo de configuración /etc/yum.conf:
exclude=nginx* lighttpd*
Una vez hecho esto ya podemos ejecutar yum update sin más, ya que los paquetes excluidos no serán actualizados.
Yum es un excelente gestor de paquetes y tiene aún más para ofrecer que lo expuesto en este artículo.
Para saber más pueden recurrir al man desde la consola mediante
man yum