Empaquetado RPM. Parte 2: teoría de los ficheros SPEC

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:

  1. %prep: Se descomprimen las fuentes y se le aplican los parches.
  2. %build: Se compilan los binarios.
  3. %check: Se comprueba que se haya compilado bien.
  4. %install: Se realiza el simulacro de instalación.
  5. %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.

Las macros se expanden incluso en los comentarios. Para evitar que se expanda, usa dos porcentajes seguidos. Por ejemplo, %%setup quedará como %setup literalmente al expandirse.

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:

El juego que vamos a empaquetar es altamente adictivo. Recomiendo no completar el tutorial en caso de que no tengáis tiempo después de perder unas cuantas horas de vuestra vida jugando a esto…


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.