Empaquetar software en formato RPM

RPM es un formato de paquete usado por Redhat, Fedora, Mandriva y otras distribuciones para distribuir software. Permite declarar versiones, dependencias de unos paquetes con otros, etc.

En este artículo vamos a ver como empaquetar el software dconf de Dag Wieers en formato RPM para que sea posible instalarlo de forma sencilla y homogénea. He elegido este paquete al ser un software que tiene
pocas dependencias y no es necesario compilar código (es un script Python).

ATENCIÓN: este paquete sólo se debe instalar en RedHat Enterprise Linux 5 ó 6. En versiones recientes de Fedora (p.e.: 17) ya existe un paquete llamado dconf que NO es este. Deberemos cambiar el nombre de nuestro paquete para no conflictar con el que ya provee la distribución.

Lo primero de todo, será bajar el paquete desde su fuente. En este caso, desde un repositorio git albergado en GitHub:

dconf@rhel6 : ~ $ sudo yum install -y git

dconf@rhel6 : ~ $ git clone https://github.com/dagwieers/dconf.git  
Initialized empty Git repository in /home/dconf/dconf/.git/  
remote: Counting objects: 291, done.  
remote: Compressing objects: 100% (105/105), done.  
remote: Total 291 (delta 192), reused 282 (delta 183)  
Receiving objects: 100% (291/291), 97.16 KiB, done.   
Resolving deltas: 100% (192/192), done.

dconf@rhel6 : ~ $ ls -l  
total 4  
drwxr-xr-x. 7 dconf dconf 4096 Jul 14 17:31 dconf

Una vez realizado esto, deberemos bajar las herramientas de RPM para crear paquetes, así como inicializar una serie de directorios que nos servirán para futuras construcciones de paquetes:

dconf@rhel6 : ~ $ sudo yum install -y rpm-build  
dconf@rhel6 : ~ $ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS,TMP}  
dconf@rhel6 : ~ $ mkdir -p ~/rpmbuild/RPMS/{x86_64,i386,i586,i686,noarch}

rpmbuild espera encontrar un fichero ".spec" (especificaciones) de cómo construir el paquete. Típicamente se almacenan en ~/rpmbuild/SPECS . Además, según el fichero que proporciona el mantenedor de dstat espera encontrar el código en un directorio llamado "dconf-${version}", y no en "dconf" a secas generado por Git. Para solventar esto :

dconf@rhel6 : ~ $ mv ~/dconf/dconf.spec ~/rpmbuild/SPECS/  
dconf@rhel6 : ~ $ mv dconf dconf-0.6svn  
dconf@rhel6 : ~ $ tar -cjf /home/dconf/rpmbuild/SOURCES/dconf-0.6svn.tar.bz2 dconf  
dconf@rhel6 : ~ $ rpmbuild -bb rpmbuild/SPECS/dconf.spec  
[...]

¡Ya tenemos nuestro RPM generado! Ahora solo nos falta instalarlo y probarlo :

dconf@rhel6 : ~ $ ls -l rpmbuild/RPMS/noarch/  
total 44  
-rw-rw-r--. 1 dconf dconf 43118 Jul 14 17:43 dconf-0.6svn-1.noarch.rpm
dconf@rhel6 : ~ $ sudo rpm -i rpmbuild/RPMS/noarch/dconf-0.6svn-1.noarch.rpm
dconf@rhel6 : ~ $ sudo dconf -o dconf.txt -v  
Reading config file /etc/dconf.conf  
Reading config file /etc/dconf.d/redhat.conf  
Building file: dconf.txt

Finalmente, un poco de información sobre el RPM . Todos estos datos son modificables mediante el fichero .spec original.

dconf@rhel6 : ~ $ rpm -qi dconf  
Name : dconf Relocations: (not relocatable)  
Version : 0.6svn Vendor: (none)  
Release : 1 Build date: Sat 14 Jul 2012 05:43:09 PM CEST  
Install date: Sat 14 Jul 2012 05:44:22 PM CEST Build Host: rhel6  
Group : System Environment/Base Source RPM: dconf-0.6svn-1.src.rpm  
Size : 128551 License: GPL  
Signature : (none)  
URL : http://dag.wieers.com/home-made/dconf/  
Summary : Create a system's hardware and software configuration snapshot  
Description :  
Dconf is a tool to collect a system's hardware and software configuration.  
It allows to take your system configuration with you on the road, compare  
identical systems (like nodes in a cluster) to troubleshoot HW or SW  
problems.

Dconf is also useful in projects where you have to manage changes as a  
team. Dconf can send out system changes to a list of email addressesso  
that they can be revised and discussed in group.

You can customize your dconf configuration for specific needs, likemaking  
a profile of your laptop's hardware or copy specific software configuration  
files to send out or compare with other systems.

Hay un excelente documento con más detalle sobre las distintas posibilidades de rpmbuild en el sitio Linux Para Todos.