# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

rhn_register y yum a través de un proxy


En el caso de necesitar registrar un sistema RHEL en la Red Hat Network y el equipo no tenga salida a Internet porque se encuentra en una red privada, existe la posibilidad de habilitar el acceso vía proxy. Para ello usamos el comando rhn_register como siempre, pero añadiendo el proxy como parámetro:

# rhn_register --nox --proxy=proxy:puerto
# rhn_register --nox --proxy=10.0.0.100:8080

Si el proxy requiere autenticación usamos los parámetros –proxyUser=PROXYUSER y –proxyPassword=PROXYPASSWORD.

Por otra parte, también necesitaremos utilizar yum para instalar aplicaciones o parchear el sistema una vez registrado. Para ello únicamente tenemos que especificar el proxy en el fichero de configuración de yum /etc/yum.conf:

proxy=http://10.0.0.100:8080/
proxy_username=usuario
proxy_password=password

La barra final parece ser necesaria, a mí no me funcionaba sin ella.

Cómo crear un repositorio local de yum


YumHay circunstancias en las que puede ser recomendable disponer de repositorios de yum locales para la actualización e instalación de paquetes en sistemas CentOS, RHEL, Fedora, etc, sobre todo si manejamos una gran cantidad de servidores y queremos disponer de mayor velocidad, seguridad y centralización. Vamos a ver los pasos necesarios para crear un repositorio local.

Lo primero que tenemos que hacer es elegir la ruta del repositorio y crear la estructura de carpetas, vamos a crear la misma estructura que en los repositorios oficiales, en este caso para la versión 5.6 de CentOS i386:

mkdir -p /repo_local/centos/5.6/os/i386/CentOS/

Antes de crear el repositorio debemos instalar una utilidad de yum llamada createrepo:

# yum install createrepo

Una vez instalado podemos crear el repositorio con el siguiente comando:

# createrepo repo_local

Saving Primary metadata
Saving file lists metadata
Saving other metadata

Nota: Este comando hay que ejecutarlo cada vez que añadimos, eliminamos o hacemos algún cambio en los rpm del repositorio.

Una vez creado podemos sincronizar nuestro repositorio con uno de los mirror oficiales de CentOS por rsync o añadir nuestros propios RPM. De momento vamos a hacer la prueba añadiendo un único rpm al repositorio:

# cd /repo_local/centos/5.6/os/i386/CentOS
# wget ftp://ftp.udl.es/pub/centos/5.6/os/i386/CentOS/perl-5.8.8-32.el5_5.2.i386.rpm

Antes de empezar a trabajar con él tenemos que activar el repositorio, para ello creamos un nuevo fichero con la configuración del mismo en /etc/yum.repos.d/repo_local.repo (el fichero debe tener la extensión .repo):

[repo_local]
name=Repositorio_local_CentOS
baseurl=file:///repo_local/
enabled=1
gpgcheck=0

La estructura es sencilla, indicamos el nombre del repositorio, su ruta (podría ser SMB, NFS, HTTP…), si está activado y si usa algún tipo de llave gpg (en este caso no). Ahora ya podemos hacer consultas contra este repositorio, instalar rpm’s, etc. Vamos a consultar el único rpm que hemos metido (perl-5.8.8-32.el5_5.2.i386.rpm). En el comando que veis deshabilito el repositorio base para evitar problemas de prioridades, etc:

# yum --enablerepo=repo_local --disablerepo=base info perl
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * addons: centos.mirror.xtratelecom.es
 * extras: centos.mirror.xtratelecom.es
 * rpmforge: fr2.rpmfind.net
 * updates: centos.mirror.xtratelecom.es
addons                                                                                                                                                         |  951 B     00:00
extras                                                                                                                                                         | 2.1 kB     00:00
repo_local                                                                                                                                                     |  951 B     00:00
rpmforge                                                                                                                                                       | 1.1 kB     00:00
updates                                                                                                                                                        | 1.9 kB     00:00
Excluding Packages in global exclude list
Finished

Available Packages
Name       : perl
Arch       : i386
Epoch      : 4
Version    : 5.8.8
Release    : 32.el5_5.2
Size       : 12 M
Repo       : repo_local
Summary    : El lenguaje de programación Perl.
URL        : http://www.perl.org/
License    : Artistic or GPL
Description: Perl es un lenguaje de programación de alto nivel derivado
           : del lenguaje C, de sed, de awk y de los script de la shell. Es adecuado
           : para la gestión de procesos, de ficheros y en particular de
           : ficheros de texto. Perl es un lenguaje sencillo y eficaz. Se utiliza
           : normalmente para la creación de utilidades de administración del sistema
           : y para la programación de sitios Web. Gran parte de los scripts CGI de la
           : web están escritos en Perl. Es necesario que instale el paquete perl en su
           : sistema si desea gestionar los scripts de Perl.
           :
           : Instale este paquete si desea programar en Perl o habilitar  su sistema
           : para gestionar los scripts Perl.

Si el repositorio lo quisierais además de para vuestros RPM personalizados para los oficiales de CentOS, deberíais sincronizarlo periódicamente con un mirror oficial y ejecutar después el createrepo. Podéis hacerlo en un cron, siendo el comando algo así:

# rsync -avz centos.mirror.xtratelecom.es::CentOS/5.6 /repo_local/centos/ && createrepo repo_local

Nota: no todos los repositorios aceptan rsync, en la lista de mirrors de CentOS veréis los que sí que lo permiten. El que uso en el ejemplo sí.

6 trucos útiles del gestor de paquetes yum


YumPara una primera toma de contacto con Yum os aconsejo leer el artículo que publiqúe hace ya un tiempo: Gestión de paquetes en Linux con Yum, posteriormente estos trucos os pueden ser de utilidad.

En qué paquete se encuentra un determinado fichero

A través del parámetro whatprovides podemos consultar en la base de datos de yum qué paquete contiene un determinado fichero. Esto es realmente útil por ejemplo si necesitamos saber en qué paquete se encuentra una determinada librería que necesitamos por dependencias, un fichero de configuración, etc.

Aquí por ejemplo necesitamos saber el paquete que contiene la librería libssl3.so, gracias a whatprovides vemos que se trata de nss-3.12.8-4.el5_6:

# yum whatprovides libssl3.so
46 packages excluded due to repository priority protections

Other       : libssl3.so

nss-3.12.8-4.el5_6.i386 : Network Security Services
Repo        : updates
Matched from:
Other       : libssl3.so

Instalar únicamente actualizaciones de seguridad

Instalando (a través de yum por supuesto) el paquete yum-security activamos en nuestro sistema la posibilidad de instalar únicamente aquellas actualizaciones relacionadas con la seguridad. Primero lo instalamos:

# yum install yum-security

Una vez instalado podemos lanzar una consulta para examinar las actualizaciones de seguridad pendientes en el sistema:

# yum list-security

Y finalmente para instalarlas:

# yum update --security

Hacer downgrade de un paquete instalado

Para poder bajar de versión un paquete instalado por yum también tendremos que instalar un plugin extra ya que por defecto no está permitido. El paquete es yum-allowdowngrade. Procedemos a instalarlo:

# yum install yum-allowdowngrade

Una vez instalado podemos hacer downgrade de la versión del paquete que queramos del siguiente modo:

# yum --allow-downgrade install mysql

También podemos verificar antes las versiones disponibles para instalar/downgrade:

# yum --allow-downgrade info mysql

Ver las dependencias de un paquete

A través de la opción deplist podemos verificar las dependencias que se instalarán junto con el paquete que queremos instalar.

# yum deplist httpd

package: httpd.i386 2.2.3-45.el5.centos.1
dependency: libz.so.1
provider: zlib.i386 1.2.3-3
dependency: /bin/mv
provider: coreutils.i386 5.97-23.el5_4.2
provider: coreutils.i386 5.97-23.el5_6.4
provider: coreutils.i386 5.97-23.el5_6.3
dependency: liblber-2.3.so.0
provider: openldap.i386 2.3.43-12.el5_5.3
provider: openldap.i386 2.3.43-12.el5_6.7
provider: openldap.i386 2.3.43-12.el5_6.5
...
...

Instalar un RPM y que yum instale las dependencias

Mediante la opción localinstall podemos instalar un paquete rpm local de modo que si fuera necesaria la instalación de otro paquete por dependencias sería yum quien revisara en sus repositorios si existen y en casi afirmativo los instalaría.

# yum localinstall /home/alex/xxxxxxxxxx.rpm

Actualizar un paquete instalado por yum mediante un RPM

Muy similar a localinstall, pero en este caso la opción localupdate nos permite actualizar un paquete que hemos instalado previamente con yum a través de un rpm local. Al igual que en la anterior opción, si es necesario, yum resolverá las dependencias.

# yum localupdate /home/alex/xxxxxxxxxx.rpm

¿Qué es mejor, compilar o usar yum/apt?


La respuesta es: depende…

A raíz del anterior artículo en el que explico cómo compilar Apache y PHP en Linux me ha apetecido escribir esta entrada en la que definir los pros y contras de compilar frente a usar gestores de paquetes precompilados tipo yum (rpm) o apt (.deb).

Es mejor compilar si…

  • Necesitamos tener instalada una versión reciente de la aplicación, y tener la opción de actualizarla en el momento que una nueva versión o parche de seguridad aparezca.
  • Necesitamos poder personalizar al 100% la aplicación. Compilando puedes definir una gran cantidad de parámetros, configuraciones y módulos. Esta flexibilidad te permite adaptar la aplicación a tus requerimientos. Los paquetes utilizados por los gestores de descargas añaden el mayor número de extras posibles para una mayor aceptación general.
  • No nos importa perder un poco de tiempo al principio (durante la instalación), ya que se requiere más tiempo que la instalación de un paquete precompilado (escasos segundos).
  • Probablemente lograremos un mejor rendimiento ya que adaptamos la aplicación a nuestros requerimientos.

Es mejor usar yum, rpm, apt, deb si…

  • Necesitamos hacer la instalación de forma rápida y sencilla. Los paquetes precompilados .rpm, .deb, etc se instalan en escasos segundos y automáticamente buscan las dependencias de cada paquete para evitar tener que instalarlas de forma manual como pasaría con la compilación.
  • No es crítico disponer de la última versión de la aplicación. Los repositorios por lo general no se actualizan a la misma velocidad que salen nuevas versiones (ni por asomo), por ejemplo RHEL y CentOS actualmente tienen en su repositorio la versión 5.1.6 de PHP y la estable es la 5.3.6.
  • Instalar el paquete precompilado no te permitirá personalizar la instalación del mismo como puedes hacerlo compilando. Normalmente se peca de exceso y se añaden módulos y extras en las aplicaciones que probablemente no necesites.
  • Siguiendo con el punto anterior, ese exceso de extras puede provocar peor rendimiento que el que te da la instalación por compilación ya que no has podido reducir el peso de la instalación o adecuarlo a tus necesidades.

Estos son, en mi humilde opinión, los pros y contras de cada una de estas formas de instalación en Linux (y en Unix en general).

Yum atascado en “Setting up Update Process”


En este caso, yum dejaba de responder en el punto de “Setting up Update Process“, pero puede pasar en cualquier momento de su ejecución. Para encontrar el problema podemos seguir los siguientes pasos:

  1. Revisar el log de yum en /var/log/yum.log en busca de errores
  2. Comprobar que no hay otra instancia de yum corriendo en el sistema (ps aux | grep yum)
  3. Hacer debug del proceso atascado con el comando strace (strace -p PID)
  4. Hacer un yum clean all.

Si pese a esos tres puntos seguís sin encontrar el fallo,es muy probable (era mi caso) que la base de datos de yum tenga algún tipo de corrupción. Para regenerarla hacemos lo siguiente:

# rm -f /var/lib/rpm/__db*
# rpm --rebuilddb
# yum clean all

Ahora podemos volver a intentar ejecutar yum de nuevo y comprobar si funciona correctamente.

Instalar php-mcrypt y php-mbstring para PHP 5.2.10 con yum


Hace unos meses vimos como Instalar php 5.2.10 a través de YUM en CentOS. Ahora necesitamos instalar un par de extensiones, php-mcrypt y php-mbstring que no están disponibles en el repositorio para esta versión en concreto. Si instalamos las del repositorio base nos encontraremos con errores e incompatibilidades (son para la rama 5.1.X).

La solución es recurrir al repositorio testing de Centos 5, donde podemos instalar las versiones disponibles para 5.2.9 y 5.2.10 respectivamente que sí que son compatibles.

Instalar php-mcrypt con yum:

# yum --enablerepo=c5-testing install php-mcrypt

Instalar php-mbstring con yum:

# yum --enablerepo=c5-testing install php-mbstring



Instalar yum en contenedor (máquina virtual) parallels virtuozzo


Si la plantilla del sistema RHEL/CentOS/Fedora que usamos en nuestra máquina virtual con Parallels Virtuozzo no tiene instalado yum tenemos la posibilidad de instalarlo de un modo realmente sencillo desde el nodo Hardware en el que se encuentre la máquina virtual.

Para ello utilizaremos la utilidad “vzpkg” junto con el ID de nuestro contenedor. La forma de instalarlo sería así:

# vzpkg install -p <id de máquina virtual> yum

En el caso de que quisieramos instalarlo en la máquina virtual con ID 200:

# vzpkg install -p 200 yum

Una vez terminado ya podríamos utilizar yum dentro de la máquina virtual para la gestión de aplicaciones y paquetes.

Instalar php 5.2.10 a través de YUM en CentOS


Una de las formas más cómodas de instalar servicios y aplicaciones en CentOS es a través del gestor de paquetes YUM. Esto tiene sus desventajas, porque muchas veces las versiones de las aplicaciones no son todo la actuales que necesitamos.

En el caso de php, en CentOS 5.4 sigue instalandose la rama 5.1 con los repositorios por defecto. Podríamos instalar la nueva versión con paquetes RPM precompilados o compilando a mano pero yo soy partidario de unificar todo con un mismo sistema para evitar problemas y simplificar el funcionamiento de el conjunto de aplicaciones. La idea del repositorio testing la encontré en un comentario de este artículo en inglés.

El repositorio que tiene esta versión actualizada de PHP es CentOS-5 Testing así que solamente tendremos que instalarlo. Para ello creamos el fichero correspondiente en la carpeta de repositorios:

# vim /etc/yum.repos.d/centos-test.repo

El contenido:

[c5-testing]
name=CentOS-5 Testing
baseurl=http://dev.centos.org/centos/5/testing/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing

Ahora si hacemos un yum info de php veremos que podemos instalar la versión 5.2.10 (en este caso pone que ya está instalada porque yo ya lo hice):

# yum info php
Loaded plugins: fastestmirror, priorities
Determining fastest mirrors
 * addons: sunsite.rediris.es
 * base: sunsite.rediris.es
 * extras: sunsite.rediris.es
 * updates: sunsite.rediris.es
addons                                                   |  951 B     00:00
base                                                     | 2.1 kB     00:00
c5-testing                                                                                                                                                     | 1.9 kB     00:00
extras                                                                                                                                                         | 2.1 kB     00:00
updates                                                                                                                                                        | 1.9 kB     00:00
450 packages excluded due to repository priority protections
Installed Packages
Name       : php
Arch       : i386
Version    : 5.2.10
Release    : 1.el5.centos
Size       : 3.1 M
Repo       : installed
Summary    : The PHP HTML-embedded scripting language
URL        : http://www.php.net/
License    : PHP
Description: PHP is an HTML-embedded scripting language. PHP attempts to make it
           : easy for developers to write dynamically generated webpages. PHP also
           : offers built-in database integration for several commercial and
           : non-commercial database management systems, so writing a
           : database-enabled webpage with PHP is fairly simple. The most common
           : use of PHP coding is probably as a replacement for CGI scripts.
           :
           : The php package contains the module which adds support for the PHP
           : language to Apache HTTP Server.

Así que solo queda instalarlo:

# yum install php

Recomiendo una vez hecho esto activar las prioridades de repositorios para evitar que otros paquetes que no sean php se instalen a través de este repositorio. Vamos a dar preferencia al repositorio base de centos.

# yum install yum-priorities

Una vez instalado damos al repositorio de centos base prioridad 10 y al testing 20. Añadimos lo siguiente a cada uno de los apartados entre corchetes del fichero /etc/yum.repos.d/CentOS-Base.repo

 /etc/yum.repos.d/CentOS-Base.repo

Ejemplo:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority=10

Y para el repositorio de Testing:

/etc/yum.repos.d/centos-test.repo
[c5-testing]
name=CentOS-5 Testing
baseurl=http://dev.centos.org/centos/5/testing/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
priority=20