Archivo

Archivo para Marzo, 2011

Rsyslog5enRH5

Lunes, 14 de Marzo de 2011

Instalar Rsyslog 5.6.x en Red Hat 5

Red Hat 5 a partir de la versión 5.2 incluye el software rsyslog. Rsyslog es un sustituto del syslog tradicional de los sistemas Unix que incorpora funcionalidad nueva (envio de logs mediante TCP, a una BBDD,…). Sin embargo, la versión que se incluye con la distribución (3.22.x) es bastante antigua y tiene limitaciones.

En mi caso concreto me encontré con un error en el módulo imfile (módulo de rsyslogpara la lectura de fichros de logs). Este error ocasionaba que bajo determinadas circunstancias, en ficheros grandes, rsyslog perdiera el punto donde se encontraba leyendo el fichero y volviera a empezar desde el principio, con la consiguiente duplicación de mensajes.

Por este motivo decidí proceder a la instalación de una versión más reciente de rsyslog (la rama estable a fecha de este documento 5.6.x). Dado que esto lo debía hacer en varios servidores, en lugar de compilar en software en cada uno de ellos, me decidí por la opción de generar un RPM binario para luego instalar el software en los diferentes servidores.

Generar un RPM binario con la nueva versión de RSYSLOG para RH5

En primer lugar nos descargamos el SourceRPM del paquete rsyslog del RawHide de Fedora (a fecha de este documento este source era para la versión 5.6.2 de rsyslog). También nos descargamos el código fuente de Rsyslog.

En principio a partir de un Source RPM es fácil generar los RPMS binarios, pero en este caso a partir de Fedora 11 se ha cambiado el algoritmo resumen a la hora de generar los RPMs por lo que no podemos usar directamente ese Source RPM, tenemos que volver a generarlo.

Para volver a generar el Source RPM en primer lugar extraemos los ficheros del mismo:

# rpm2cpio rsyslog-5.6.2-2.fc15.src.rpm | cpio -idmv
cpio: rsyslog-5.6.2.tar.gz not created: newer or same age version exists
rsyslog-5.6.2.tar.gz
rsyslog.conf
rsyslog.init
rsyslog.log
rsyslog.spec
rsyslog.sysconfig
4451 blocks

Además de regenerar el source RPM vamos a actualizar la versión del paquete RPM. Para eso copiamos los ficheros rsyslog.conf, rsyslog.init, rsyslog.log y rsyslog.sysconfig extraidos anteriormente a la carpeta ~/SOURCES del rpmbuild (ver creación de un RPM binario). También copiamos a esta carpeta el fichero con el código fuente de RSYSLOG que nos hemos descargado (rsyslog-5.6.4.tar.gz).

Modificamos el fichero ~/SOURCES/rsyslog.log y lo dejamos como sigue (si no hacemos esto, al instalar el RPM se producirá un conflicto en el fichero /etc/logrotate.d/syslog con el paquete sysklogd de la distribución de Red Hat y eso nos complicará – aunque no de forma insalvable – la instalación de la nueva versión de rsyslog):

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
 sharedscripts
 postrotate
 /bin/kill -HUP catvarrunsyslogd.πd2>devνll 2> /dev/null || true
 /bin/kill -HUP catvarrunrsyslogd.πd2>devνll 2> /dev/null || true
 endscript
}

A continuación editamos el fichero rsyslog.spec y cambiamos las líneas 8 y 9:

Version: 5.6.2
Release: 2%{?dist}

por

Version: 5.6.4
Release: 1%{?dist}

Para generar el RPM binario necesitamos instalar una serie de dependencias. Para ello instalamos los siguientes paquetes:

# yum install mysql-devel postgresql-devel krb5-devel librelp-devel gnutls-devel net-snmp-devel

El paquete librelp-devel lo encontraremos en el repositorio EPEL.

Ahora procedemos a reconstruir el source RPM con:

# rpmbuild -bs rsyslog.spec

Una vez regenerado el source RPM procedemos a compilarlo para generar los binarios (vamos a necesitar el gcc). Lo hacemos con:

# rpmbuild --rebuild ~/SRPMS/rsyslog-5.6.4-1.src.rpm

Si todo va bien se nos habrán creado los RPMs binarios en ~/RPMS. Estos binarios son dependientes de la arquitectura por lo que habrá que generarlos en un servidor de 32 bits para las maquinas de 32 bits y en un servidor de 64 bits para las maquinas de 64 bits.

Estos RPMs ya están listos para ser instalados. Para facilitar este proceso se han movido al repositorio EHURepo.

Linux , , , ,