Está en la página 1de 13

Formato del archivo spec

por Lucas Vieites

Este documento describe el formato de los archivos de especificaciones .spec necesarios para la creacin de paquetes rpm utilizados para la distribucin de software en sistemas Linux.

ndice de contenido
1 Introduccin...............................................................................................................................................................................................3 2 Comentarios...............................................................................................................................................................................................3 3 Tags o etiquetas.........................................................................................................................................................................................3 3.1 Etiquetas relativas al nombre del paquete.........................................................................................................................................4 3.1.1 Etiqueta name...........................................................................................................................................................................4 3.1.2 Etiqueta version........................................................................................................................................................................4 3.1.3 Etiqueta release........................................................................................................................................................................4 3.2 Etiquetas descriptivas.........................................................................................................................................................................4 3.2.1 Etiqueta %description...............................................................................................................................................................4 3.2.2 Etiqueta summary.....................................................................................................................................................................5 3.2.3 Etiqueta license.........................................................................................................................................................................5 3.2.4 Etiqueta vendor.........................................................................................................................................................................5 3.2.5 Etiqueta url................................................................................................................................................................................5 3.2.6 Etiqueta group...........................................................................................................................................................................5 3.2.7 Etiqueta packager.....................................................................................................................................................................5 3.3 Etiquetas de dependencias................................................................................................................................................................6 3.3.1 Etiqueta provides......................................................................................................................................................................6 3.3.2 Etiqueta requires.......................................................................................................................................................................6 3.3.3 Etiqueta conflicts.......................................................................................................................................................................6 3.4 Ejemplos.............................................................................................................................................................................................6 4 Scripts, la bestia de carga de RPM..........................................................................................................................................................7 4.1 Scripts de compilacin........................................................................................................................................................................7 4.1.1 Script %prep.............................................................................................................................................................................8 4.1.2 Script %build.............................................................................................................................................................................8 4.1.3 Script %install...........................................................................................................................................................................8 4.2 Scripts de instalacin y eliminacin....................................................................................................................................................8 4.2.1 Script %pre...............................................................................................................................................................................8 4.2.2 Script %post..............................................................................................................................................................................9 4.2.3 Script %preun...........................................................................................................................................................................9 4.2.4 Script %postun..........................................................................................................................................................................9 5 La lista de archivos %files........................................................................................................................................................................9 6 Directivas para la lista %files....................................................................................................................................................................9 6.1 Directivas relacionadas con archivos.................................................................................................................................................9 6.1.1 Directiva %doc........................................................................................................................................................................10 6.1.2 Directiva %config....................................................................................................................................................................10 6.1.3 Directiva %attr.........................................................................................................................................................................10 6.2 Directivas relacionadas con directorios............................................................................................................................................11 6.2.1 Directiva %docdir....................................................................................................................................................................11 6.2.2 Directiva %dir..........................................................................................................................................................................11 7 Directiva %package.................................................................................................................................................................................11 8 Condicionales...........................................................................................................................................................................................11 8.1 Condicional %ifarch..........................................................................................................................................................................11 8.2 Condicional %ifnarch........................................................................................................................................................................12 8.3 Condicional %ifos.............................................................................................................................................................................12 8.4 Condicional %ifnos...........................................................................................................................................................................12 8.5 Condicional %else............................................................................................................................................................................12 8.6 Condicional %endif...........................................................................................................................................................................12 9 Ejemplo de archivo spec.........................................................................................................................................................................13 10 Bibliografa.............................................................................................................................................................................................13

Pg. 2

Seccin: 1 Introduccin

1 Introduccin
La creacin de paquetes rpm para la distribucin de software en sistemas Linux se realiza mediante el comando rpmbuild. ste utiliza un archivo de configuracin en el que se indican las acciones que debe realizar el paquete para instalar el software en cuestin. Este archivo de especificaciones (en ingls specifications file) es el archivo spec; un archivo de texto que se puede modificar con un editor de texto corriente (vi, gedit, kate, etc.). Un archivo spec se compone de varios tipos de entradas de las cuales algunas son de uso obligatorio, y otras son opcionales segn lo requiera el tipo de paquete que queramos generar. Los diferentes tipos de entrada son: Comentarios: Anotaciones aclaratorias, ignoradas por RPM Tags o etiquetas: Definicin de datos. Scripts: Contienen comandos que se deben ejecutar en momentos puntuales. Macros: Permiten la ejecucin de varios comandos con facilidad La lista de archivos %files: Una lista de archivos que se incluirn en el paquete Directivas: Utilizadas en la lista %files para indicar a RPM que trate a ciertos archivos de un modo especfico. Condicionales: Permiten el preprocesamiento del archivo spec segn el tipo de arquitectura o sistema operativo.

2 Comentarios
Los comentarios son un modo de hacer que RPM ignore una lnea del archivo. El contenido de los comentarios depende completamente de la persona que escriba el archivo y normalmente se utilizan para realizar anotaciones que mejoren la comprensin de las acciones indicadas. Para crear un comentario, simplemente escriba el signo almohadilla (#) al inicio de la lnea. Cualquier texto entre este signo y el fin de lnea ser ignorado por RPM.
# Esto es el archivo spec para el programa talycual

Los comentarios se pueden colocar en cualquier lugar del archivo spec.

3 Tags o etiquetas
Las etiquetas se utilizan para marcar un conjunto de datos. Estos datos se agrupan al inicio del archivo spec en una seccin denominada prembulo. La etiquetas se separan de sus datos mediante dos puntos : y no son sensibles a la capitalizacin, es decir; se pueden escribir en letras maysculas, minsculas o una mezcla de ambas, por ejemplo:
Name: Version: Release: Summary: talycual 1.0.0 1 Un programa de prueba

Es tambin notable que el espaciado entre la etiqueta y sus datos es irrelevante. Teniendo en cuenta estas reglas podemos decir que el siguiente ejemplo tiene el mismo resultado que el anterior:
NAME: version:1.0.0 ReLEasE: suMMarY: talycual 1 Un programa de prueba

A continuacin describiremos diferentes tipos de etiquetas.

Pg. 3

Tags o etiquetas

3.1 Etiquetas relativas al nombre del paquete


3.1.1 Etiqueta name

La etiqueta name se utiliza para indicar el nombre del software que se va a empaquetar. El nombre que se indique en esta etiqueta debe ser idntico al nombre del paquete. 3.1.2 Etiqueta version

La etiqueta version define la versin del software que se va a empaquetar. El nmero de versin indicado debe ser lo ms parecido posible al formato original de la versin del software. En la mayora de los casos, esto no es problemtico, sin embargo hay una restriccin; no se puede utilizar el carcter guin (-) en la versin. Los espacios tambin son problemticos, ya que RPM ignorar todo lo que haya despus del primer espacio. NOTA: Case al uso de caracteres alfanumricos y puntos y nunca tendr que preocuparse.

3.1.3

Etiqueta release

Se puede pensar en la etiqueta release como en la versin del paquete. El nmero de release normalmente es un nmero entero. Por ejemplo: cuando se empaqueta una versin en concreto de un software por primera vez, el nmero de release deber ser 1. Si es necesario volver a empaquetar esa misma versin del software el nmero de release se deber incrementar. Cuando aparezca una nueva versin del software, el nmero de release se deber reiniciar a 1.

3.2 Etiquetas descriptivas


Estas etiquetas proporcionan informacin a quien desee saber ms acerca del paquete y acerca de quin lo ha producido. Son parte del paquete y se mostrarn mediante el comando rpm -qi nombre_paquete. 3.2.1 Etiqueta %description

Mediante esta etiqueta se proporciona una descripcin en profundidad del software empaquetado. Esta descripcin puede ser de varias lneas que contengan la suficiente informacin para que un usuario desinformado comprenda qu hace el software. La etiqueta %description es distinta de las dems etiquetas de prembulo. En primer lugar va precedida del smbolo de porcentaje (%). La otra diferencia es que los datos que contiene pueden abarcar varias lneas y adems se pueden formatear de una forma muy precaria. Si una lnea comienza por un espacio, RPM la mostrar tal cual. Si no comienza con un espacio, se asumir que es parte de un prrafo y se formatear como tal. Hasta es posible mezclar lneas formateadas y sin formatear:
%description Es un pjaro. Es un avin. Es un software excepcional que no tiene comparacin. Al usar la frecuencia de bytes del flujo integral recibido, realiza la transformacin especular inversa al 20% de la muestra. De esta forma se genera una calidad de defraccin indita.

El ejemplo anterior no contiene informacin explcita de formato. RPM formatear el texto como un prrafo nico, partiendo las lneas segn sea necesario.
Pg. 4

Seccin: 3.2 Etiquetas descriptivas

El siguiente ejemplo es distinto:


%description Es un pjaro. Es un avin. Es un software excepcional que no tiene comparacin. Al usar la frecuencia de bytes del flujo integral recibido, realiza la transformacin especular inversa al 20% de la muestra. De esta forma se genera una calidad de defraccin indita.

Las tres primeras lneas se mostrarn tal cual, el resto del texto se formatear como un solo prrafo. 3.2.2 Etiqueta summary

Esta etiqueta se utiliza para proporcionar una descripcin de una sola lnea del software empaquetado. A diferencia de %description, el contenido de summary est restringido a una sola lnea. 3.2.3 Etiqueta license

En versiones ms antiguas de RPM, esta etiqueta se llamaba copyright. Se utiliza para indicar qu tipo de licencia rige el uso y distribucin del software empaquetado y qu derechos tiene el usuario. En muchos casos el contenido de esta etiqueta ser simplemente el siguiente:
License: GPL

3.2.4

Etiqueta vendor

La etiqueta vendor se utiliza para indicar el nombre de la entidad responsable de empaquetar el software. Normalmente es el nombre de una organizacin o empresa:
Vendor: PSA Peugeot-Citron

3.2.5

Etiqueta url

Indica una direccin on-line en la que se puede obtener informacin adicional acerca del software. 3.2.6 Etiqueta group

La etiqueta group se utiliza para agrupar paquetes segn el tipo de funcionalidad que proporcionan. El formato utilizado es similar a una ruta de un sistema de archivos y tiene una funcin similar. Por ejemplo, un paquete que contenga un editor de textos podra tener el siguiente grupo:
Group: Applications/Editors

Esta informacin se utiliza principalmente en programas con interfaz grfica para mostrar los paquetes de forma jerrquica. Para que la ordenacin por grupos sea lo ms efectiva posible es necesario que todos los constructores de paquetes sean consistentes en el uso de los nombres de grupos. Las distribuciones de Suse Linux se apoyan en la gua de empaquetado (SUSE Package Conventions), en cuyo segundo captulo se encuentra un listado completo de los grupos utilizados en sus paquetes. 3.2.7 Etiqueta packager

La etiqueta packager contiene el nombre y la informacin de contacto de la persona o personas que han construido el paquete.

Pg. 5

Tags o etiquetas

3.3 Etiquetas de dependencias


3.3.1 Etiqueta provides

La etiqueta provides se utiliza para indicar el nombre de un paquete virtual que el software empaquetado pone disponible cuando sea instalado. Normalmente se utiliza esta etiqueta cuando diferentes paquetes proporcionan servicios equivalentes. Por ejemplo, cualquier paquete que permita a un usuario editar un archivo de texto podra proporcionar el paquete virtual text-editor, el software instalado puede ser cualquier editor (vi, gedit, kate, etc.). Otro paquete que depende de que haya un editor de textos instalado podr requerir que est instalado el paquete editor-textos para instalarse sin problemas.
Provides: text-editor

3.3.2

Etiqueta requires

La etiqueta requires se utiliza para alertar a RPM de que el paquete necesita que haya ciertos requisitos disponibles para poder funcionar correctamente. Estos requisitos se refieren al nombre de otro paquete, o a un paquete virtual, proporcionado por uno o ms paquetes que utilicen la etiqueta provides. En la etiqueta requires se pueden utilizar operadores para la comparacin de versiones y releases. Por ejemplo, en la siguiente etiqueta se indica que el paquete necesita que est instalada la versin 1.5.0 o superior del software JRE.
Requires: jre >= 1.5.0

3.3.3

Etiqueta conflicts

La etiqueta conflicts es el complemento lgico de requires. Mientras que requires indica qu software debe estar instalado para que el paquete funcione, conflicts indica qu software no puede estar instalado si queremos que este paquete funcione correctamente.

3.4 Ejemplos
A continuacin algunos ejemplos de software con licencia privativa y GPL en la distribucin Novell SLED 10 (esta informacin se obtiene con el comando rpm -qi nombre_paquete): Sun Microsystems JRE
# rpm -qi jre Name : jre Relocations: /usr/java Version : 1.5.0_11 Vendor: Sun Microsystems, Inc. Release : fcs Build Date: vie 15 dic 2006 13:34:48 CET Install Date: jue 18 oct 2007 10:38:23 CEST Build Host: tiger-linux Group : Development/Tools Source RPM: jre-1.5.0_11-fcs.src.rpm Size : 41275304 License: Sun Microsystems Binary Code License (BCL) Signature : (none) Packager : Java Software <jre-comments@java.sun.com> URL : http://java.sun.com/ Summary : Java(TM) 2 Platform Standard Edition Runtime Environment Description : The Java 2 Platform Standard Edition Runtime Environment (JRE) contains everything necessary to run applets and applications designed for the Java platform. This includes the Java virtual machine, plus the Java platform classes and supporting files.

Pg. 6

Seccin: 3.4 Ejemplos

The JRE is freely redistributable, per the terms of the included license. Distribution: (none)

Adobe Reader
# rpm -qi acroread Name : acroread Relocations: (not relocatable) Version : 7.0.9 Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany Release : 1.2 Build Date: vie 19 ene 2007 19:24:43 CET Install Date: jue 18 oct 2007 10:37:01 CEST Build Host: eisler.suse.de Group : Productivity/Publishing/PDF Source RPM: acroread-7.0.9-1.2.nosrc.rpm Size : 115216999 License: Commercial (all types) Signature : DSA/SHA1, vie 19 ene 2007 19:29:21 CET, Key ID a84edae89c800aca Packager : http://bugs.opensuse.org URL : http://www.adobe.com/products/acrobat/readermain.html Summary : Adobe Reader for PDF Files Description : The Adobe Reader is proprietary binary-only software. Normally the Adobe Reader is used to display PDF files on the screen. For this purpose at least the minimum graphical system must be installed (the packages that provide the RPM capability [...]

Kernel
# rpm -qi kernel-default Name : kernel-default Relocations: (not relocatable) Version : 2.6.16.46 Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany Release : 0.14 Build Date: jue 14 jun 2007 01:14:18 CEST Install Date: jue 18 oct 2007 12:29:57 CEST Build Host: nepomuk.suse.de Group : System/Kernel Source RPM: kernel-default-2.6.16.46-0.14.nosrc.rpm Size : 48749856 License: GNU General Public License (GPL) Signature : DSA/SHA1, jue 14 jun 2007 01:20:43 CEST, Key ID a84edae89c800aca Packager : http://bugs.opensuse.org URL : http://www.kernel.org/ Summary : The Standard Kernel Description : The standard kernel.

Source Timestamp: 2007/05/17 14:00:09 UTC CVS Branch: SLES10_SP1_BRANCH Distribution: SUSE Linux Enterprise 10 (i586)

4 Scripts, la bestia de carga de RPM


Entre las partes ms variables e interesantes del archivo spec se encuentran los scripts que RPM utiliza para controlar el proceso de construccin. Muchos archivos spec tambin utilizan scripts que realizan gran variedad de acciones durante la instalacin o eliminacin del paquete. El inicio de cada script se marca con una palabra clave. Por ejemplo, la palabra %build marca el inicio del script que RPM ejecutar al compilar el cdigo del software que se empaquetar. En el sentido estricto de la palabra estas partes del archivo spec no son realmente scripts, es decir; no empiezan con la tradicional invocacin de una shell. Sin embargo el contenido de cada seccin de script se copia a un archivo y se ejecuta como un script de pleno derecho. Esto es parte de la potencia de RPM; todo lo que se puede hacer en un script lo puede hacer RPM.

4.1 Scripts de compilacin


Los scripts utilizados por RPM durante la construccin de un paquete siguen los pasos conocidos por todos los

Pg. 7

Scripts, la bestia de carga de RPM

desarrolladores de software: Desempaquetar los fuentes Compilar el software Instalar el software Limpieza 4.1.1 Script %prep

El script %prep es el primero que RPM ejecuta durante la construccin. Antes de ejecutar este script RPM ya ha realizado una serie de comprobaciones preliminares, como por ejemplo si la etiqueta source apunta a archivos que realmente existen. Justo antes de pasar el control al contenido del script %prep, RPM cambia de directorio al rea de construccin que, por defecto, es /usr/src/packages/. En este punto es responsabilidad del script: Crear el directorio de compilacin. Desempaquetar los archivos de fuentes en el directorio de compilacin. Aplicar los parches al cdigo, si es necesario. Realizar cualquier otra accin necesaria para que los fuentes se encuentren en un estado listo para compilar. 4.1.2 Script %build

El script %build toma el testigo de %prep para realizar la compilacin del software. Normalmente consiste simplemente del comando make, algn script de configuracin y poco ms. 4.1.3 Script %install

El entorno en el que se ejecuta el script %install es idntico al que utilizan %prep y %build. Tal y como implica su nombre, el objetivo de este script es instalar el software recin compilado. En la mayora de los casos esto simplemente significa ejecutar el comando make install o unos cuantos comandos que copien archivos y creen directorios.

4.2 Scripts de instalacin y eliminacin


El otro tipo de script presentes en el archivo spec son aquellos que se utilizan solamente cuando el paquete se instala o elimina del sistema (desinstala). Hay cuatro scripts, cada uno de los cuales se ejecutar en un momento distinto de la vida del paquete: Antes de la instalacin Despus de la instalacin Antes de la desinstalacin Despus de la desinstalacin 4.2.1 Script %pre

El script %pre se ejecuta justo antes de la instalacin del paquete. Este script se utiliza en muy escasas ocasiones (de hecho en la distribucin SLED 10 solamente lo usan una escasa docena de paquetes).

Pg. 8

Seccin: 4.2 Scripts de instalacin y eliminacin

4.2.2

Script %post

El script %post se ejecuta justo despus de la instalacin del paquete. Una de las razones ms comunes por la que utilizarlo es ejecutar el comando ldconfig para actualizar la lista disponible de bibliotecas compartidas despus de instalar una. Si un paquete utiliza un script %post para realizar alguna funcin es comn que tambin incluya un script

%postun que realiza las operaciones inversas del %post, despus de eliminar el paquete.
4.2.3 Script %preun

Cualquier cosa que un paquete debe hacer antes de desaparecer del sistema lo debe hacer en el script

%preun. Por ejemplo, asegurarse de que cualquier servicio que hay iniciado est detenido.
4.2.4 Script %postun

Despus de que el paquete haya sido desinstalado se ejecuta el script %postun. Es la ltima oportunidad para realizar una limpieza, por ejemplo; ejecutar ldconfig para eliminar bibliotecas compartidas de ld.so.cache.

5 La lista de archivos %files


La lista %files le indica a RPM qu archivos del entorno de compilacin se deben empaquetar. La lista consta de un archivo por lnea y cada archivo puede ir precedido de una o ms directivas. Estas directivas proporcionan informacin adicional acerca del archivo. En el caso de que un paquete contenga una gran cantidad de archivos puede llegar a ser muy tedioso mantener actualizada la lista %files. Para facilitar esta situacin, si se indica la ruta de un directorio RPM empaquetar automticamente todos los archivos y subdirectorios contenidos en l de modo recursivo. El uso de comodines (al estilo shell) tambin est permitido.

6 Directivas para la lista %files


Las directivas utilizadas en la lista %files tienen los siguientes objetivos: Identificar archivos de documentacin y configuracin. Asegurar que un archivo posee los permisos y propietarios adecuados. Controlar qu aspectos de un archivo se deben comprobar durante la verificacin de un paquete. Es posible indicar ms de una directiva en una sola lnea, separada por espacios, delante de uno o ms nombres de archivo del siguiente modo:
%dir %defattr /ruta/al/archivo

6.1 Directivas relacionadas con archivos


A pesar de que RPM procesa archivos de diferente forma segn su tipo no dispone de ningn mecanismo para determinar automticamente el tipo de archivo con el que est tratando. Por eso es responsabilidad del constructor del paquete marcar los archivos de la lista %files adecuadamente. Esto se hace mediante las directivas que se describen ms abajo. Tenga en cuenta que no todos los archivos deben ser marcados, de hecho solamente se utilizan estas
Pg. 9

Directivas para la lista %files

directivas en casos muy concretos. En la mayora de los paquetes la mayor parte de los archivos de la lista %files no necesita ser marcado. 6.1.1 Directiva %doc

La directiva %doc precede a los archivos que son documentacin. RPM mantiene informacin en su base de datos acerca de los archivos de documentacin para que un usuario pueda encontrarla fcilmente. Adems, RPM puede crear un directorio especial para documentacin durante la instalacin y copiar archivos en l. Si se usa o no esta capacidad depende de cmo se especifica un archivo:
%doc LEEME %doc /usr/local/miprograma/LEEME

En el primer caso el archivo LEEME existe en el directorio superior del software durante la compilacin y se incluye en el paquete. Cuando se instala dicho paquete, RPM crea un directorio con el mismo nombre que el paquete (p.ej.: <programa>-<version>-<release>) en el directorio de documentacin del sistema y copia dentro el archivo

LEEME. El directorio de documentacin predeterminado del sistema se define en el archivo rpmrc mediante la entrada defaultdocdir (vase Apndice B del libro Maximum RPM)
En el segundo caso el archivo /usr/local/miprograma/LEEME se instal en ese directorio durante la compilacin y est incluido en el paquete. Al instalar el paquete el archivo

LEEME se copia en

/usr/local/miprograma/ y se marca en la base de datos RPM como documentacin.


6.1.2 Directiva %config

La directiva %config se utiliza para marcar el archivo indicado como archivo de configuracin. RPM realiza procedimientos adicionales con los archivos de configuracin durante la instalacin o actualizacin. Esto es debido a la naturaleza de los archivos de configuracin; a menudo son modificados durante la vida del software y esos cambios no se deben perder. En este caso solamente se puede indicar un solo nombre de archivo en cada lnea que contenga la directiva %config. Tenga tambin en cuenta que es necesario indicar la ruta completa del archivo:
%config /etc/mi_archivo.conf

6.1.3

Directiva %attr

Esta directiva proporciona el control sobre los atributos de los archivos: Los permisos o modo del archivo El ID de usuario del archivo El ID de grupo del archivo La directiva %attr tiene el siguiente formato:
%attr (<modo>, <usuario>, <grupo>) nombre_archivo

El modo se indica mediante el tradicional formato numrico, mientras que el usuario y el grupo se indican mediante una cadena de texto como, por ejemplo, root:
%attr (755, root, root) mi_archivo.conf

Si no es necesario indicar alguno de los atributos porque ya son correctos en el momento de la instalacin, stos se pueden sustituir por el carcter guin.
%attr (755, -, root) mi_archivo.conf

Pg. 10

Seccin: 6.1 Directivas relacionadas con archivos

La principal razn para utilizar la directiva %attr es la de permitir a usuarios sin permisos root compilar paquetes.

6.2 Directivas relacionadas con directorios


6.2.1 Directiva %docdir

Esta directiva le indica a RPM que el directorio que le sucede contiene documentacin. Solamente indica esta circunstancia, por lo que igualmente es necesario aadir el directorio en la lista %files para que sea empaquetado.
%docdir /var/opt/miprograma/docs /var/opt/miprograma/docs/

En este ejemplo se incluir todo el directorio /var/opt/miprograma/docs/ en el paquete y al consultar los documentos contenidos en el paquete se mostrarn todos los archivos contenidos en l, aunque no hayamos usado la directiva %doc ni hayamos incluido los archivos uno por uno en la lista %files:
# rpm -qlp miprograma-1.0-1.i586.rpm ... /var/opt/miprograma/docs/LEEME.txt /var/opt/miprograma/docs/manual.pdf ...

6.2.2

Directiva %dir

Ya se ha mencionado anteriormente que si se indica la ruta de un directorio en la lista %files, se empaquetar todo su contenido, incluidos los subdirectorios. Aunque esta capacidad puede resultar til, tambin puede causar problemas innecesarios. Para evitar estos inconvenientes se utiliza la directiva %dir. Al aadir esta directiva a la lnea que contiene la ruta del directorio, RPM empaquetar solamente el directorio, sin tener en cuenta los archivos o subdirectorios que pueda contener.

7 Directiva %package
Mientras que todas las directivas comentadas hasta ahora se utilizan dentro de la lista %files, la directiva

%package es diferente; se utiliza para la creacin de ms de un paquete por archivo spec y puede aparecer en
cualquier lugar del ste. Puesto que la creacin de subpaquetes no es del mbito de este documento, solamente indicaremos el formato de esta directiva:
%package: nombre_del_paquete

8 Condicionales
En ocasiones surge la necesidad de compilar un paquete para varias arquitecturas diferentes. Cada una de estas arquitecturas puede requerir distintos archivos o scripts, por lo que la solucin obvia sera la creacin de diferentes archivos spec. Sin embargo esta solucin plantea serios problemas de mantenimiento y evolucin. RPM proporciona para estos casos varias sentencias condicionales que a continuacin resumiremos:

8.1 Condicional %ifarch


Se utiliza al inicio de una seccin que es especfica de una o varias arquitecturas. En el siguiente ejemplo el contenido del bloque condicional solamente se ejecutar si la arquitectura es Intel x86 o Sun SPARC
%ifarch i386 sparc

Pg. 11

Condicionales ... %endif

8.2 Condicional %ifnarch


Esta condicional es similar a la anterior pero en este caso la lgica es inversa. El contenido del bloque condicional se ejcutar si la arquitectura no coincide con las indicadas.

8.3 Condicional %ifos


La condicional %ifos se utiliza para controlar el proceso del archivo spec basado en el sistema operativo del sistema de compilacin.
%ifos linux ... %endif

8.4 Condicional %ifnos


La condicional %ifnos es el complemento lgico de %ifos, es decir, si una lnea comienza con la condicional

%ifnos irix, el contenido del bloque no se ejecutar si el sistema operativo de la mquina es Irix.

8.5 Condicional %else


La condicional %else se coloca entre una condicional de tipo %if y su correspondiente %endif. Se utiliza para crear dos bloques de sentencias de los cuales solo uno se ejecutar de acuerdo con la condicin indicada.
%ifarch alpha make RPM_OPT_FLAGS="$RPM_OPT_FLAGS -I *" %else make RPM_OPT_FLAGS="$RPM_OPT_FLAGS -I *" %endif

8.6 Condicional %endif


Un %endif se utiliza para finalizar un bloque condicional. Puede aparecer despus de una condicional de tipo

%if o detrs de un %else.

Pg. 12

Seccin: 9 Ejemplo de archivo spec

9 Ejemplo de archivo spec


# # Plantilla para la creacin de archivos .spec # Name: nombre_paquete Version: Release: Summary: Group: License: URL: Vendor: Packager: Source: Patch: BuildRoot: %{_tmppath}/%{name}-root Provides: Requires: Conflicts: %description %prep %setup -c 'nombre_paquete-%{version}' %patch %build %install %__cp -a . "${RPM_BUILD_ROOT-/}" %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT" %pre %post %preun %postun %files %defattr(-,root,root) %dir /usr/ %dir /usr/local/ %dir /usr/local/ %changelog * Thu Jul 19 2007 nombre del empaquetador - Version 0.0.1

10 Bibliografa
Maximum RPM, Taking the RPM Package Manager to the Limit Edward C. Bailey, Paul Nasrat, Matthias Saou, Ville Skytt (http://www.rpm.org)

Pg. 13