La magia de los RPM es que en un solo fichero SPEC se incluyen todas las instrucciones para construir un paquete. Eso sí, primero hay que entenderlo, y a veces no es fácil… |
¿Qué es el fichero SPEC?
Básicamente, es el fichero en el que se indica cómo construir, instalar y desinstalar el paquete.
Las instrucciones que vayamos a darle se dividen por etapas, que a su vez son macros. Estas son las etapas básicas que hay:
- %prep: Se descomprimen las fuentes y se le aplican los parches.
- %build: Se compilan los binarios.
- %check: Se comprueba que se haya compilado bien.
- %install: Se realiza el simulacro de instalación.
- %files: Lista todos los archivos que aparecerán en el paquete. Se suele usar también para asignar atributos. Si hay algún fichero que no está listado, no se construirá.
Algunos SPEC puede que no tengan algunas de las etapas. No son de uso obligatorio.
Hay otras etapas que se llaman scriptlets. son especiales porque no se ejecutan en el momento de construir el paquete, sino cuando se instala o desinstala. Incluso puedes programar que se ejecute un trigger cuando se instale otro paquete. Esta es una de las grandes ventajas que tiene RPM sobre los ficheros DEB.
El gran lío de los RPM es que tiene la misma sintaxis para todo. Es decir, todas estas palabras especiales precedidas de un signo de porcentaje (%) son macros de RPM, pero hay macros de todo tipo:
- Funciones (%setup, %configure, %patch…)
- Variables predefinidas (%_bindir, %dist…)
- Variables definidas en el propio SPEC (%buildroot, %name, %version…)
- Secciones estáticas (%description, %changelog…)
- Etapas (%build, %install…)
- Triggers (%triggerin, %triggerpostun…)
- Scriptlets (%pretrans, %postun…)
Para saber cómo se usa una determinada macro, la única forma es consultar la documentación. Bueno, en realidad siempre puedes usar otros trucos como fijarse en cómo está hecho un SPEC de un paquete parecido al tuyo, o el método de prueba y error. Un par de comandos prácticos:
rpmbuild --showrc # Muestra todas tus macros
rpmbuild --eval="%nombre_macro" # Muestra la macro expandida
Las macros son lo mismo si llevan un corchete alrededor. Si después del corchete hay un signo de interrogación, quedará en blanco si no hay nada que expandir. Por ejemplo, 1%{?dist} se expandirá a 1.fc16 en Fedora 16, pero en otra distro se quedará como 1.
Abriendo el apetito
Ya vamos por la segunda entrega de este tutorial y todavía no sabéis lo que empaquetaremos, así que ahí va el vídeo para que abráis boca: