Archivo

Entradas Etiquetadas ‘rpm’

RPMBinario

Lunes, 23 de mayo de 2011

Creación de RPMs binarios

El propósito de este documento es detallar los pasos que se han seguido para crearnos nuestro primer RPM. Como es el primero seguramente el proceso es notoriamente mejorable, pero por algo hay que empezar.

Necesitamos instalarlos la herramienta rpmbuild

# yum install rpm-build

Nos creamos un directorio donde crearemos los ficheros:

# mkdir /root/misrpms

Dentro de este directorio nos cremos otros: SPECS, BUILD, RPMS, SRPMS, SOURCES

# cd /root/misrpms
# mkdir SPECS BUILD RPMS SRPMS SOURCES

Nos cremos un fichero ~/.rpmmacros con el siguiente contenido:

%_topdir /root/misrpms
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS

Ahora nos creamos el fichero spec del RPM a construir que contiene los datos necesarios para construir el RPM ~/misrpms/SPECS/aspell-eu.spec:

Name:           aspell-eu
Version:        20081029
Release:        1%{?dist}.el5
Summary:        Basque dictionary for aspell
Group:          Applications/Text
License:        GPL

%description
Basque dictionary for aspell 0.60. Files obtained from .deb package.

%prep

%build

%install

%clean

%files
%defattr(-,root,root,-)
/usr/lib/aspell-0.60/eu.multi
/usr/lib/aspell-0.60/eu.rws
/usr/lib/aspell-0.60/eu.dat
/usr/lib/aspell-0.60/euskera.alias
/usr/lib/aspell-0.60/eu_affix.dat

%doc

%changelog
* Mon Nov  8 2010  David Fernanez <david.fernandez@ehu.es>
- Initial version

Una vez creado este fichero ya procedemos a generar el RPM:

# rpmbuild -bb SPECS/aspell-eu.spec

En este comando podemos especificar la arquitectura para la que se crea el paquete con –target (pe. noarch, i386,…). Si no se específica se usará la del servidor donde se construye el paquete.

Y ya tenemos nuestro RPM en ~/misrpms/RPMS/noarch/aspell-eu-20081029-1.el5.noarch.rpm

Linux ,

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 , , , ,

CreacionRepositorioYUM

Miércoles, 10 de noviembre de 2010

Creación de un repositorio YUM para Red Hat 4 y 5

En este documento pretendo explicar una forma rápida y sencilla de crearnos nuestro propio repositorio de paquetes RPM. El acceso al repositorio será vía web.

Crearemos un repositorio distinto por cada versión de SO (4 y/o 5) y arquitectura (32 bits y/o 64 bits). Los repositorios para Red Hat 4 serán accesibles mediante la herramienta up2date y los de Red Hat 5 mediante yum.

Para crear los repositorios necesitamos instalarnos las herramientas:

  • createrepo: es la encargada de generar los repositorios para YUM
  • repoview: genera unas páginas HTML indice con el contenido del repositorio. Estas páginas se generan dentro de una carpeta repoview y nos permite navegar por los paquetes del repositorio y obtener información sobre ellos.
  • yum-arch: esta herramienta la necesitamos para Red Hat 4 para generar unos ficheros .hdr que usa up2date.

Dado que el repositorio va a ser accesible vía web, también necesitamos un servidor web, en este caso yo voy a utilizar el servidor Apache.

Los repositorios se van a crear en un servidor con Red Hat 5 con el repositorio EPEL configurado (en este repositorio están disponibles las herramientas mencionadas con anterioridad).

La instalación de estas herramientas la hacemos con el siguiente comando:

yum install createrepo repoview yum-arch

A continuación nos creamos los directorios que albergarán el repositorio. Estos directorios deberán ser accesibles vía web.  Crearemos un directorio por cada repositorio.

Una vez creados los directorios hemos de copiar dentro de ellos los diferentes paquetes RPM que queremos dejar disponibles en el repositorio.

Nota:  Si tenemos activado SELinux, hemos de revisar el contexto de los ficheros *.rpm copiados, ya que por defecto se les asigna uno que los deja inaccesibles para el Apache.

Una vez copiados los RPMs que nos interesen y cada vez que se haga una modificación ejecutaremos los siguientes comandos para generar/actualizar el repositorio:

createrepo -d $dir
repoview $dir

siendo $dir el directorio del repositorio.

Además, en el caso de actualizar los repositorios de Red Hat 4 también ejecutaremos:

yum-arch $directorio

Al ejecutar esta herramienta obtenemos un aviso de que esta deprecated, pero es la forma que he encontrado para crear el repositorio en Red Hat 4.

Configuración del repositorio en los clientes

El activar el repositorio en los clientes depende de si vamos a usar Red Hat 4 (up2date) o Red Hat 5 (yum).

Red Hat 4 (up2date)

Nos hemos de crear un fichero /etc/yum.repos.d/myRepo.repo con el siguiente aspecto:

[myRepo]
name=myRepo Repository for Enterprise Linux 4 - $basearch
baseurl=http://$urlrepositorio
enabled=1
gpgcheck=0

Además hemos de dar de alta el repositorio en la configuración de los sources de up2date (/etc/sysconfig/rhn/sources) añadiendo las siguientes líneas al fichero mencionado con anterioridad:

#BEGIN myRepo
yum myRepo http://$urlrepositorio
#END myRepo

Con esto ya está dado de alta el repositorio en nuestro cliente.

Nuestro repositorio no tiene activado el uso de GPG. En caso de querer utilizar paquetes firmados con GPG hay que hacer más cosas, pero eso se escapa de los objetivos de esta documentación. Para poder utilizar este repositorio no firmado  es necesario pasar el parámetro –nosig al up2date para que no compruebe la firma GPG. Se podriá desactivar esta comprobación de forma global para todos los repositorios RPM, pero esto puede ser demasiado radical.

Red Hat 5 (Yum)

Nos hemos de crear un fichero /etc/yum.repos.d/myRepo.repo con el siguiente aspecto:

[myRepo]
name=myRepo Repository for Enterprise Linux 5 - $basearch
baseurl=http://$urlrepositorio
enabled=1
gpgcheck=0

A semejanza del repositorio EPEL (y supongo que otros) se podría crear un paquete RPM que se encargara de configurar el nuevo repositorio en nuestros clientes.

Linux , , , ,

Red Hat Linux: instalación repositorio EPEL

Lunes, 1 de marzo de 2010

EPEL (Extra Packages for Enterprise Linux) es un repositorio de paquetes para Red Hat Enterprise Linux 4 y 5.  Son paquetes que complementan la distribución original de Red Hat.  Es un repositorio mantenido dentro del proyecto Fedora.

La instalación de este repositorio la haremos de la siguiente forma:

Red Hat 4 32 bits:

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-9.noarch.rpm
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL

(si no importamos la clave GPG, al instalar los paquetes con up2date nos dará error)

Red Hat 5 64 bits:

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

Una vez instalado el repositorio, ya tendremos acceso a sus paquetes con los comandos up2date (Red Hat 4) y yum (Red Hat 5).

Linux , ,