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.