You are on page 1of 22

How to create an RPM package/es - FedoraProject

1 de 22

http://fedoraproject.org/w/index.php?title=How_to_create_a...

How to create an RPM package/es
< How to create an RPM package
In other languages: Deutsch (de) (https://fedoraproject.org/wiki/How_to_create_an_RPM_package/de)
English (en) (https://fedoraproject.org/wiki/How_to_create_an_RPM_package)

Español (es)

Italiano (it) (https://fedoraproject.org/wiki/How_to_create_an_RPM_package/it)
Português (pt) (https://fedoraproject.org/wiki/How_to_create_an_RPM_package/pt)
Русский (ru) (https://fedoraproject.org/w/index.php?title=How_to_create_an_RPM_package/ru&&action=edit)
中文(中国大陆) (zh-cn) (https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn)
中文(台灣) (zh-tw) (https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-tw)
[edit (https://fedoraproject.org/w/index.php?title=Template:Lang/How_to_create_an_RPM_package&action=edit) ]

Introducción
Esta página describe detalladamente cómo crear un paquete RPM y en particular, cómo crear un archivo
SPEC. A diferencia de otras guías RPM, esta página explica los detalles de Fedora con enlaces a los
lineamientos específicos de Fedora. Dado que es mantenida a través de la Wiki de Fedora, es probable
que esté más al día que otras guías. A pesar del enfoque en Fedora, la mayor parte de este documento se
aplica a otras distribuciones basadas en RPM. Si está impaciente, puede comenzar por mirar el más breve
Cómo crear un paquete RPM GNU Hola.
Tenga en cuenta que estos no son los lineamientos del paquete oficial de Fedora, que puede verse en los
Lineamientos de empaquetado y Lineamientos de nombrado de paquetes. Dicho esto, esta página debe
ser compatible con ellos.
Si va a crear un paquete RPM para el repositorio de Fedora, siga el procedimiento para unirse a los
mantenedores de la colección de paquetes.

Preparando su sistema
Antes de crear paquetes RPM en Fedora, necesita instalar algunas herramientas básicas de desarrollo y
configurar la(s) cuenta(s) que va a utilizar:
# yum install @development-tools
# yum install fedora-packager

Puede crear un usuario ficticio (dummy) específicamente para crear paquetes RPM por si el proceso de
construcción sale mal no podrá destruir sus archivos o enviar sus claves privadas al mundo.
Usted nunca debe crear los paquetes como usuario root.

Crear un nuevo usuario con el nombre
contraseña e ingresar como usuario:

makerpm,

agregar el usuario al grupo 'mock', establecer una

# /usr/sbin/useradd makerpm
# usermod -a -G mock makerpm
# passwd makerpm

Una vez que ha iniciado la sesión como un usuario build/dummy, crear la estructura de directorios
necesaria en su directorio home ejecutando:
$ rpmdev-setuptree

El programa rpmdev-setuptree creará el directorio ~/rpmbuild y una serie de subdirectorios (por ejemplo SPECS y
BUILD), que va a usar para crear sus paquetes. También se crea el archivo ~/.rpmmacros, que puede utilizarse
para configurar diversas opciones.
Los lineamientos de empaquetado recomiendan preservar los datos del archivo; usted puede hacer esto
automáticamente si usa wget o curl para obtener los archivos fuentes. Si utiliza wget para obtener los
archivos fuentes, añada el texto «timestamping = on» a ~/.wgetrc. Si usa curl, agregue el texto «-R» a ~/.curlrc.
Normalmente, no necesitará volver a realizar estos pasos.

30/01/13 23:09

How to create an RPM package/es - FedoraProject

2 de 22

http://fedoraproject.org/w/index.php?title=How_to_create_a...

Los fundamentos de la construcción de paquetes RPM
Para crear un paquete RPM, necesitará crear un archivo de texto « .spec» que suministre la información
acerca del software que será empaquetado. Luego podrá ejecutar el comando rpmbuild sobre dicho archivo
SPEC, lo que provocará ejecutar una serie de pasos para producir sus paquetes.
Normalmente, deberá colocar sus fuentes originales (prístina), archivos tales como .tar.gz provistos por
los desarrolladores originales, en el directorio ~/rpmbuild/SOURCES. deberá colocar su archivo .spec en el
directorio ~/rpmbuild/SPECS y asignarle el nombre «NOMBRE.spec», donde NOMBRE es el nombre base del
paquete. Para crear ambos paquetes, tanto el binario como el fuente, cambie al directorio ~/rpmbuild/SPECS
y ejecute:
$ rpmbuild -ba NOMBRE.spec

Cuando rpmbuild es invocado de esta manera, leerá el archivo .spec y recorrerá en orden las etapas listadas
a continuación. Los nombres que comienzan con % son macros predefinidas (vea la siguiente tabla).
Etapa

%prep

%build

%check

Lee

%_sourcedir

%_builddir

%_builddir

Escribe

Acción

%_builddir

Esta lee los archivos fuentes y parches en el directorio de fuentes
%_sourcedir. Se desempaquetan los archivos fuentes al subdirectorio
dentro del directorio de construcción %_builddir y se aplican los parches.

%_builddir

Esta compila los archivos dentro del directorio de construcción %_builddir.
Esto se hace a menudo implementando alguna variación de « ./configure
&& make».

%_builddir

Verifica que el software funciona correctamente. Esto es usualmente
implementado ejecutando alguna variación de « make test». Muchos
paquetes no implementan esta etapa.
Esta lee los archivos dentro del directorio de construcción %_builddir y
escribe a un directorio dentro del directorio raíz de construcción
%_buildrootdir.

%install %_builddir

%_buildrootdir

Los archivos que son escritos son los que se supone serán
instalados cuando el paquete binario sea instalado por el usuario final.
Tenga cuidado con esta terminología algo extraña: El directorio raíz de
construcción no es lo mismo que el directorio de construcción. Esta
etapa usualmente se implementa ejecutando «make install».

bin

%_buildrootdir %_rpmdir

Este lee los archivos dentro del directorio raíz de construcción
%_buildrootdir para crear los paquetes RPM binarios dentro del directorio
RPM %_rpmdir. Adentro del directorio RPM hay un directorio para cada
arquitectura, y un directorio "noarch" para los paquetes que se aplican a
cualquier arquitectura. Estos archivos RPM son los paquetes para que
instalen los usuarios.

src

%_sourcedir

Este crea un paquete fuente RPM (.src.rpm) dentro del directorio fuente
RPM %_srcrpmdir. Estos archivos son necesarios para revisar y actualizar
los paquetes.

%_srcrpmdir

Como podrá notar, algunos directorios tienen ciertos propósitos específicos en
Nombre de la
macro
%_specdir

Nombre
Directorio de
especificación

Usualmente

~/rpmbuild/SPECS

rpmbuild.

Estos son:

Propósito

Archivos de especificaciones RPM (.spec).

30/01/13 23:09

fedoraproject. Ver Packaging:Guidelines#Legal. /SOURCES ~/rpmbuild/BUILD ~/rpmbuild /BUILDROOT Los archivos fuentes son desempaquetados y compilados en un subdirectorio dentro de este. %_srcrpmdir Directorio RPM fuente ~/rpmbuild/SRPMS Los RPM fuente son creados y almacenados bajo este directorio. Obviamente. o Apache 2.FedoraProject 3 de 22 http://fedoraproject. Lea el manual de instrucciones para la instalación de su programa. asegúrese de que no está empaquetando algo que ya ha sido empaquetado. Reemplace «18» con la versión de Fedora que desee y descargue el paquete ... Compruebe también las Solicitudes de revisión en progreso y la lista de Paquetes retirados. en general no es aceptable comenzar con un código precompilado. todos los binarios y bibliotecas incluidos en los paquetes de Fedora deben construirse desde el código fuente que se incluye en el paquete fuente.org/pkgdb/) . En cambio.rpm que necesita.org/publiclist) dentro del directorio releases/18/Everything/source/SRPMS. Puede utilizar los Repositorios de paquetes Git de Fedora (http://pkgs.How to create an RPM package/es . Los archivos son instalados bajo este directorio durante la etapa %install. tendrá que revisar la salida para ver por qué falló y deberá cambiar el archivo (u otra entrada) cuando sea necesario. ~/rpmbuild Paquete fuente prístina (por ejemplo. Si hay bibliotecas incluidas. A menudo es una buena idea hacer un «simulacro» construyendo manualmente el programa antes de intentar hacerlo a través de RPM. BSD-new. %_sourcedir Directorio fuente %_builddir Directorio de construcción %_buildrootdir Directorio raíz de construcción %_rpmdir Directorio RPM binario ~/rpmbuild/RPMS Los RPM binarios son creados y almacenados bajo este directorio. Encontrará una lista de los paquetes existentes en la Colección de paquetes de Fedora en la Base de datos de paquetes de Fedora (https://admin.0). debe empaquetar los fuentes prístina (originales). Al empaquetar un programa para el repositorio de Fedora. . Si falla alguna etapa.org/w/index. Licensing:Main y Packaging:LicensingGuidelines. En general. asegúrese de que también son OSS. sólo empaquete software que sea lanzado como software de código abierto (OSS) utilizando una licencia OSS aprobada (tales como las licencias GPL. Concesión de licencias Sólo empaquete software que sea legal en su paquete. MIT/X.tar. Dividir el programa El código fuente de la aplicación es a menudo liberado con el código fuente de otras bibliotecas externas «incluido» en ellos. instale dichos programas y anote los que son. junto a los parches y las instrucciones de construcción. archivos README. Puede descargar los SRPMS utilizando un programa desde el paquete yum-utils: $ yum -y install yum-utils $ yumdownloader --source nombre-paquetefuente Alternativamente. Reutilizar la información del paquete existente Trate de reutilizar lo que se pueda.org/cgit) directamente para ver los archivos SPEC (y parches). verificar in situ los encabezados del código fuente.php?title=How_to_create_a. Asegúrese de que el software realmente tiene licencia de esta manera (por ejemplo. Instale el archivo con la fuente original (usualmente un archivo . No junte bibliotecas externas con la aplicación principal en un solo paquete. tarballs) y parches. LGPL.).spec Preparándose a empaquetar un programa específico Si se requieren programas especiales para construir o ejecutar el programa que está empaquetando. puede obtener el código fuente manualmente desde la página http/ftp de un espejo de Fedora (http://mirrors. divídalos en paquetes separados. Con unas pocas excepciones.fedoraproject.fedoraproject. etc.gz) en el directorio ~/rpmbuild/SOURCES (de la cuenta de usuario para construcción de RPM). 30/01/13 23:09 .src.

~/rpmbuild: $ rpm -ivh nombre-paquetefuente*. Puede instalar SRPMS de otros sistemas de la misma forma que para los de Fedora.src. puede localizar los archivos de paquetes fuentes (no los binarios . instalarlo en http://fedoraproject. Si eso falla.tar.src.org/pub/FreeBSD /ports/ports/ports.spec He aquí un ejemplo de lo que se verá como plantilla (Nota: la plantilla que se ofrece no necesariamente cumple con los Lineamientos de empaquetado de Fedora): Name: Version: Release: Summary: Group: License: URL: Source0: BuildRoot: 1%{?dist} %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: Requires: %description %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %clean rm -rf %{buildroot} %files %defattr(-. esto a veces no es útil para todos. Sin embargo.org/distrib/packages) (los archivos de paquetes fuentes son tarballs estándar con un subdirectorio «debian/»). Debería nombrarlo de acuerdo al nombre del programa (por ejemplo «program.How to create an RPM package/es .rpm | cpio -i Algunas veces es más fácil comenzar con un paquete existente y luego limpiarlo y prepararlo para Fedora.root.FedoraProject 4 de 22 Una vez que tiene el SRPM. Si la colección de ports FreeBSD (http://www.debian. vim o emacs crearán automáticamente una plantilla para usted: $ cd ~/rpmbuild/SPECS $ vim program.com/) o Debian (http://www.ubuntu.-) %doc 30/01/13 23:09 .root.org/ports /installing.gz) y ver si la información de empaquetado existente le ayuda como punto de partida./NOMBREDEPROGRAMA-*. Plantillas de SPEC Al crear un archivo SPEC por primera vez. Creando un archivo SPEC Ahora necesita crear un archivo SPEC en el directorio ~/rpmbuild/SPECS.rpm También puede desempaquetar el SRPM en un directorio usando rpm2cpio: $ mkdir NOMBREDEPROGRAMA_src_rpm $ cd NOMBREDEPROGRAMA_src_rpm $ rpm2cpio .php?title=How_to_create_a..freebsd.net/) puede ayudarle a encontrar RPM para sistemas diferentes a Fedora.. Las diferentes distribuciones tienen diferentes reglas y lo que hacen en algunos casos puede ser inapropiado para Fedora. RPM Find (http://rpmfind. Use donde se pueda el nombre de archivo o el nombre publicado por el autor del software. pero asegúrese de seguir los Lineamientos de nombres de paquetes.deb) en Ubuntu (http://packages.spec»). podría descargarlo del FreeBSD ports tarball (ftp://ftp.html) lo tiene..org/w/index.freebsd.

1-verbose.1.patch http://www.. para crear un nuevo archivo SPEC para un módulo python: DE-NUEVO-PAQUETE cd ~/rpmbuild/SPECS rpmdev-newspec python-antigravity vi python-antigravity.How to create an RPM package/es .patch eject-timeout.com/~tranter s390 s390x gettext libtool %description The eject program allows the user to eject removable media (typically CD-ROMs.org/w/index. o puede especificarle una plantilla en particular.5 21%{?dist} GPLv2+ System Environment/Base %{name}-%{version}.1. floppy disks or Iomega Jaz or Zip disks) using software control.patch eject-2.patch eject-2./bin/eject %{buildroot}/%{_sbindir} %find_lang %{name} %files -f %{name}. Por ejemplo. Vea las plantillas disponibles en /etc/rpmdevtools/spectemplate-*.lang %doc README TODO COPYING ChangeLog %{_bindir}/* %{_sbindir}/* %{_mandir}/man1/* 30/01/13 23:09 . %prep %setup -q -n %{name} %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 %build %configure make %{?_smp_mflags} %install make DESTDIR=%{buildroot} install install -m 755 -d %{buildroot}/%{_sbindir} ln -s .gz eject-2. adaptado a varios tipos de paquetes.FedoraProject 5 de 22 http://fedoraproject.. Eject can also control some multi-disk CD changers and even some devices' auto-eject features.patch eject-2.spec. y consulte rpmdev-newspec --help para más información.patch eject-2. Install eject if you'd like to eject removable media using software control..1.5-opendevice. %changelog Puede usar $RPM_BUILD_ROOT en lugar de consistente. Ambos son aceptables.1.5-lock. Adivinará también qué tipo de plantilla utilizar basándose en el nombre del paquete. rpmdev-newspec NOMBREpuede crear un archivo SPEC inicial para un nuevo paquete.tar.1.spec Ejemplo de SPEC He aquí un ejemplo simple que muestra un archivo SPEC de Fedora 16 para el programa Summary: Name: Version: Release: License: Group: Source: Patch1: Patch2: Patch3: Patch4: Patch5: Patch6: URL: ExcludeArch: BuildRequires: BuildRequires: eject: A program that ejects removable media using software control eject 2.php?title=How_to_create_a.pobox.5-spaces.5-umount.1. pero sólo para ser más También puede usar el comando rpmdev-newspec para crear un archivo SPEC para usted. %{buildroot}.

URL: La dirección URL completa para obtener más información sobre el programa (por ejemplo. Debe seguir los Lineamientos de nombres de paquetes y generalmente estar en minúsculas.html) License: La licencia. cambiar la etiqueta Version para igualar y restablecer el número de Release a 1. las macros se actualizan automáticamente para utilizar el nuevo valor. Utilizar una abreviatura estándar (por ejemplo « GPLv2+») y ser específico (por ejemplo use «GPLv2+» para la GPL versión 2 o superior en lugar de simplemente « GPL» o «GPLv2» cuando sea cierto). pero evite las macros (comienzan con %) que sean potencialmente multilíneas (las que se expanden primero).org/max-rpm-snapshot/) tiene la información más completa.html) describe cómo escribir un archivo SPEC. Vea la Sección etiqueta de versión en los lineamientos de empaquetado. Group: Este tiene que ser un grupo pre-existente.5-21 .com/developerworks/ssa/linux/library/l-rpm2/) .com/developerworks /ssa/linux/library/l-rpm1/) ..com> 2.com/developerworks/ssa/linux/library/l-rpm3/) . Summary: Un breve. Consulte Preámbulo de referencia del archivo Spec (http://docs.1/html/Packagers_Guide /chap-Packagers_Guide-Spec_File_Reference-Preamble. Insertar los comentarios con el primer carácter «#». No usar la antigua etiqueta Copyright. Cuando una nueva versión de desarrollo es liberada.fedoraproject.2.1. Release: El valor inicial normalmente debería ser 1%{?dist}. %{release} Name: El nombre (base) del paquete.fedoraproject. Las principales etiquetas se enumeran a continuación. Vea la Sección etiqueta de versión en los lineamientos de empaquetado. Incremente el número cada vez que libere un nuevo paquete para la misma versión de software. La etiqueta opcional Dist podría ser útil. debe ser una licencia de software de código abierto. doble los signos de porcentaje (%%). y Lineamientos de revisión de paquetes. considere usar números de versión con la forma yy.FedoraProject 6 de 22 http://fedoraproject. Si el desarrollo utiliza fechas completas para distinguir las versiones. sumario del paquete en una línea.org/en-US/Fedora_Draft_Documentation/0. Las series de IBM «Empaquetado de software con RPM» Parte 1 (http://www.05). puede que necesite incluir caracteres no numéricos adicionales en la etiqueta Release.php?title=How_to_create_a. Use inglés americano.1.org> . Version y Release respectivamente. Nota: Esta no es de donde proviene el código fuente original que sirve para la etiqueta Source0 de abajo. Maximum RPM (http://rpm. Nota: Esta etiqueta está en desuso desde Fedora 17. Tenga en cuenta que las macros %{name}.How to create an RPM package/es .handle multi-partition devices with spaces in mount points properly (#608502) Resumen del archivo SPEC Otras guías útiles: Guía RPM (http://docs. ejecute « less /usr/share/doc/rpm-*/GROUPS» para ver la lista completa.ibm. Y no termine con un punto. Si está comentando una línea.5-20 . Lineamientos de empaquetado. Cuando cambia la etiqueta. Si la versión contiene etiquetas que no son numéricas (contiene etiquetas que no son números). y Parte 3 (http://www. como «Applications/Engineering».ibm. que debe coincidir con el nombre del archivo SPEC. Version: El número de versión de desarrollo. pero es anticuado.1/html/RPM_Guide /ch-creating-rpms. Consulte Licensing y los Lineamientos de licencias.org/wiki/Fedora_15_Mass_Rebuild * Fri Jul 02 2010 Kamil Dudka <kdudka@redhat.fedoraproject. Parte 2 (http://www. Use el grupo «Documentation» para los sub-paquetes (por ejemplo kernel-doc) que contienen documentación. la página web del proyecto). Usted deberá seguir los lineamientos Fedora: Lineamientos de nombres de paquetes.ibm. %changelog * Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.mm[dd] (por ejemplo 2008-05-01 se convierte en 8.Rebuilt for https://fedoraproject. Usted puede listar múltiples licencias combinándolas con «and» y «or» (por ejemplo «GPLv2 and BSD»). %{version} y pueden utilizarse para hacer referencia a las etiquetas Name.org/w/index.org/en-US/Fedora_Draft_Documentation/0. Evite también los comentarios inline en la misma línea como un comando de script. 30/01/13 23:09 ..

Source0: La dirección URL completa para el archivo comprimido que contiene el código fuente (original) prístina. Una copia de cada una de estas fuentes serán incluídas en cualquier SRPM que cree. usted debe incluir todo lo necesario para construir el programa. Use inglés americano. además de las fuentes originales. o es posible que no sean detectados automáticamente. Consulte la sección %prep de abajo para más detalles.. Típicamente es sólo « %setup -q». así los cambios en cualquiera de ellas irá al lugar adecuado. Puede especificar una versión mínima si es necesario (por ejemplo «ocaml >= 3. control de revisión). Todas las líneas deben ser de 80 caracteres o menos. Algunos paquetes comunes se pueden omitir. BuildRoot: Esta es dónde los archivos serán «instalados» durante el proceso %install (después del proceso %build). liberado como desarrollo. El programa debe venir con instrucciones de cómo hacerlo.. archivos de datos). Consulte Guía RPM (http://docs.How to create an RPM package/es . una variación común es «%setup -q -n NOMBRE» si el archivo fuente se desempaqueta en NOMBRE. scripts de shell. puede que desee resaltar algunos paquetes específicos cuando sea necesario. normalmente con una fuente de ancho fijo. determinar el paquete que lo posee mediante la ejecución de «rpm -qf `which EGGS`». Vea Source URL para obtener más información sobre los casos especiales (por ejemplo. La arquitectura para el RPM binario será entonces «noarch». su nombre base será utilizado cuando se busque en el directorio SOURCES. nómbrelos como Source1. debe editar los archivos y guardar sus diferencias como un archivo «patch» en su directorio ~/rpmbuild/SOURCES. Patch0: El nombre del primer parche para aplicar al código fuente. Algunos programas de instalación de la interfaz gráfica de usuario reformatearán los párrafos. «Source» es sinónimo de «Source0». en estos casos deberá incluir los paquetes adicionales. De forma predeterminada. Mantener las dependencias al mínimo (por ejemplo use sed en vez de perl si realmente no necesita las capacidades de perl). Estos se ejecutan entre los 30/01/13 23:09 . BuildArch: Si está empaquetando archivos que son independientes de la arquitectura (por ejemplo. la raíz de construcción se coloca en « %{_topdir}/BUILDROOT/». Si existe más de un archivo fuente. lístelos como fuentes después de las fuentes prístinas. %build: Comandos de script para «construir» el programa (por ejemplo. un paquete puede estar en una lista o en ambas. pero tenga en cuenta que algunas aplicaciones desactivan funciones permanentemente si la dependencia asociada no está presente.html) . mientras que la etiqueta Requires lista lo que se requiere para la instalación/ejecución del programa. agregar « BuildArch: noarch». insertar %{name} y %{version}. rpmbuild detecta automáticamente las dependencias por lo que la etiqueta Requires no siempre es necesaria. Si va a añadir nuevos archivos completos. En muchos casos.FedoraProject 7 de 22 http://fedoraproject.org/drafts /rpm-guide-en/ch09s03. %prep: Comandos de script para «preparar» el programa (por ejemplo. Tenga en cuenta que la etiqueta BuildRequires lista lo que se necesita para construir el RPM binario. descripción multilínea del programa. para compilarlo) y prepararlo para la instalación.08»). las líneas que comienzan con un espacio en blanco se tratan como texto preformateado y se mostrarán tal cual. Los parches deben hacer sólo un cambio lógico cada uno. así que es muy posible tener varios archivos de parches. a menos que específicamente le indique lo contrario. Si necesita el archivo /EGGS. determinar el paquete que lo posee mediante la ejecución de «rpm -qf /EGGS». Preservar los datos al descargar archivos fuentes. Requires: Una lista separada por comas de los paquetes que se requieren cuando se instala el programa. %check: Comandos de script para «probar» el programa. tal como gcc. Estas dependencias no son determinadas automáticamente. Si necesita el programa EGGS. Esta es ahora redundante en Fedora y sólo es necesaria para EPEL5. Vea la sección %build de abajo para más detalles. Si es posible. El paquete auto-buildrequires (https://admin. Sin embargo.org/pkgdb/acls/name/auto-buildrequires) puede ser útil. Este campo se puede (y lo es comúnmente) repetir en varias líneas.fedoraproject. Las líneas en blanco indican un nuevo párrafo.org/w/index. %description: Una más larga. Source2 y así sucesivamente. BuildRequires: Una lista separada por comas de paquetes requeridos para la construcción (compilar) del programa.php?title=How_to_create_a.fedoraproject. Si necesita parchear los archivos después de que hayan sido descomprimidos. para descomprimirlo) y que pueda estar listo para la construcción. Si usted da una dirección URL completa (y debería).

Estos se denominan «scriptlets». A menudo simplemente contiene «make test» o «make check». esto incluye los comandos « %setup» y «%patch» con referencia a las líneas Source0 (y Source1. Típicamente. este modificador puede utilizarse para especificar el nombre del directorio correcto. procedimientos %build e %install... -c nombre : Si el archivo tarball Fuente se desempaqueta en varios directorios en lugar de un solo directorio. Normalmente esto sólo contiene: rm -rf %{buildroot} %files: La lista de archivos que serán instalados. %changelog: Cambios en el paquete.org/w/index. -n nombre : Si el archivo tarball Fuente se desempaqueta en un directorio cuyo nombre no es el nombre del RPM. Las macros %{patches} y %{sources} están disponibles desde RPM 4. Esto es aparte de %build para que las personas puedan omitir la comprobación automática si lo desean. este modificador puede utilizarse para crear un directorio llamado nombre y luego -q 30/01/13 23:09 .). tenga en cuenta que el uso de estas hará a su SPEC incompatible con los RPMS utilizados en RHEL y otras distribuciones basadas en RPM. Consulte la sección %files de abajo para más detalles. construye o funciona correctamente en una arquitectura en particular.FedoraProject 8 de 22 http://fedoraproject.php?title=How_to_create_a. liste esas arquitecturas bajo esta etiqueta. Vea la sección %install de abajo para más detalles. Sección %prep: comando %setup El comando «%setup» desempaqueta un paquete fuente. Secciones del archivo SPEC explicadas Sección %prep La sección %prep describe cómo desempaquetar los paquetes comprimidos para que puedan ser construidos.How to create an RPM package/es . así que debe colocarlo allí si tiene esta sección. RPM también soporta la creación de varios paquetes (llamados subpaquetes) desde un único archivo SPEC.html) para más detalles. done Sin embargo. Vea la sección %setup y %patch en Maximum RPM (http://rpm. No use estas etiquetas: Packager Vendor Copyright No cree un paquete «relocalizable». Por ejemplo. que sólo hace una pseudo-instalación a la raíz de construcción).. que no agrega valor en Fedora y hace las cosas más complicadas. do . %clean: Instrucciones para limpiar la raíz de construcción. Este es comúnmente utilizado. y se utilizan generalmente para actualizar el sistema en ejecución con información del paquete. ExcludeArch: Si el paquete no compila. %install: Comandos de script para «instalar» el programa. Los modificadores incluyen: : Suprime la salida innecesaria. Utilice de ejemplo el formato anterior. Consulte la sección «Scriptlets» de abajo para más detalles. use « %setup -q -n FOO». Puede agregar secciones para que el código se ejecute cuando los paquetes sean instalados o removidos en el sistema real (en lugar de sólo ejecutar el script %install. como los paquetes name-libs y name-devel.4.org/max-rpmsnapshot/s1-rpm-inside-macros. etc. %{buildroot}.2 y son útiles si usted tiene una gran lista de parches o fuentes: for p in %{patches}. si el archivo tarball se desempaqueta en el directorio FOO.. Tenga en cuenta que esta sección es ahora redundante en Fedora y sólo es necesaria para EPEL. Los comandos deben copiar los archivos desde el directorio de CONSTRUCCIÓN %{_builddir} al directorio raíz de construcción.

How to create an RPM package/es . Si es exclusivo de Fedora.patch» (aunque a veces se omite la versión). todos los parches deben tener un comentario sobre ellos en el archivo SPEC sobre su estado de desarrollo. un método fácil es copiar el subdirectorio completo debajo de BUILD y luego hacer diffs por subdirectorio. 30/01/13 23:09 ./ . Sección %prep: Archivos sin modificar A veces.orig . Como se explica en Packaging/PatchUpstreamStatus. puede usar «gendiff» (en el paquete rpm-build) para crear un parche con las diferencias. muchas ediciones . -T Inhabilitar el desempaquetado automático del archivador.orig vim foo/bar diff -u foo/bar.%{version} .17-env. etc. Los nombres de los archivos parche usualmente lucen como « telnet-0../NOMBREDEPAQUETE. Las más importantes son: -a número Sólo desempaquetar la directiva Fuente del número dado después de cambiar de directorio (por ejemplo «–a 0» para Source0). lo cual es especialmente útil si está creando subpaquetes (ver más abajo).RAZÓN./NOMBREDEPAQUETE. > ~/rpmbuild/SOURCES/NOMBRE. descomprimir en él. El valor por omisión de «fuzz» es «0».orig» antes de editarlos. Trate de asegurarse que el parche coincida exactamente con el contexto. que requiere coincidencia para ser exacto.FedoraProject 9 de 22 http://fedoraproject.. La usual opción «-pNUMERO» se aplica.. número Sólo desempaquetar la directiva Fuente del número dado antes de cambiar de directorio (por ejemplo «–b 0» para Source0).patch Si va a editar muchos archivos.patch Si edita muchos archivos en un parche.). diff -u . Este es un procedimiento típico para crear un parche para un solo archivo: cp foo/bar foo/bar. Sección %build La sección «%build» es a veces complicada. Luego. debe mencionar por qué es único. haga lo siguiente: cp -pr ..org/w/index.org/max-rpm-snapshot /s1-rpm-inside-macros.orig foo/bar > ~/rpmbuild/SOURCES/NOMBREDEPAQUETE.php?title=How_to_create_a.. Puede solucionar esto añadiendo « %global _default_patch_fuzz 2» para volver al valor encontrado en las versiones anteriores de RPM en Fedora. también puede copiar los archivos originales mediante alguna terminación consistente como «.RAZÓN.html) . uno o más de los archivos Fuente no necesitarán ser descomprimidos. -D No eliminar el directorio antes de desempaquetar. consulte PackageMaintainers/WhyUpstream para ver la importancia de esto. Usted puede «prep» esos archivos en un directorio de construcción como este (donde SOURCE1 se refiere al archivo Fuente correspondiente): cp -p %SOURCE1 .. la que pasa ese argumento al patch en el programa. si hace esto desde el subdirectorio ~/rpmbuild/BUILD entonces no tendrá que especificar un nivel -p posterior.RAZÓN.orig/ . Hay más opciones %spec si está desempaquetando múltiples archivos (http://rpm.patch». Los parches son el método habitual de realizar los cambios necesarios en el código fuente para el empaquetamiento. Después de cambiar al directorio « ~rpmbuild/BUILD/NOMBRE». pero en general se recomienda evitar hacer esto. El proyecto Fedora intenta no desviarse del desarrollo. Los archivos parche son típicamente el resultado de «diff -u». aquí usted configura y compila/construye los archivos a ser instalados.. que es el formato «%{name} . -b Sección %prep: comando %patch El comando «%patch0» aplica el Parche0 (y %patch1 aplica Parche1.. Este debe documentar el desarrollo que incluye los errores/correo electrónico (incluyendo la fecha).

DESTDIR. Si el programa no admite DESTDIR (y sólo si). una variación de «make install» se lleva a cabo aquí: %install rm -rf %{buildroot} make DESTDIR=%{buildroot} install La eliminación de %{buildroot} ya no es necesaria. Ya que configure de GNU es tan común. Alguna variación de esto a menudo funciona: %configure make %{?_smp_mflags} Para sustituir variables en el makefile. La compilación se produce en el primer directorio. Configure. ya que redirige las instalaciones del archivo al directorio especificado y es exactamente lo que queremos que ocurra durante la sección %install.pdf) . A menudo.html) si el programa lo admite. Deben colocarse en la sección %check (que sigue inmediatamente a la sección %build) en lugar de dentro de la sección %build. Las bibliotecas deben instalarse bien sea en /usr/lib o /usr/lib64 dependiendo de la arquitectura.org/autobook/) y «Open Source Development Tools: An Introduction to Make. por lo general es una buena idea incluirlas. copiar los archivos relevantes desde %{_builddir} a %{buildroot} (que por lo general significa desde ~/rpmbuild/BUILD a ~/rpmbuild/BUILDROOT) y la creación de directorios dentro de %{buildroot} según sea necesario. Sección %check Si las pruebas automáticas están disponibles. Ver Packaging/cmake.org/w/index. cambiar el prefijo a /usr). consulte «GNU autoconf.FedoraProject 10 de 22 http://fedoraproject.de/~sh/automake/automake. Autoconf» por Stefan Hundhammer (http://www. pero sólo se ejecuta cuando se crea un paquete. Muchos programas siguen el enfoque configure de GNU (o alguna variación). Parte de la terminología que puede inducir a error: El «directorio de construcción». la macro «%configure» se puede utilizar para invocar automáticamente las opciones correctas (por ejemplo. como usted está empaquetándolo. mientras que los archivos a ser empaquetados son copiados desde el primero al último. también conocido como %{_builddir} no es el mismo que el «raíz de construcción».gnu. De forma predeterminada. es posible la solución en una de las varias formas (inferiores): Parchar el makefile así es compatible con necesario y enviar el parche a desarrollo.org/prep/standards/html_node/DESTDIR. también conocido como %{buildroot}. automake. Idealmente debe usar DESTDIR=%{buildroot} (http://www. Algunos programas usan cmake. Normalmente. cambiará el prefijo a « /usr». excepto para EPEL 5.. que es el subdirectorio dentro de %{_builddir} creado durante la etapa de %prep. de modo que puedan ser fácilmente omitidas cuando sea necesario.How to create an RPM package/es . Esto suele ser algo como ~/rpmbuild/BUILD /%{name}-%{version}. esta sección contiene: make test Sección %install Esta sección incluye comandos de script para «instalar» el programa. and libtool» (http://sourceware. Durante la sección de %build. que es razonable para los archivos desempaquetados.. pasarlas como parámetros a make: make %{?_smp_mflags} CFLAGS="%{optflags}" BINDIR=%{_bindir} Más información. Crear directorios dentro de DESTDIR cuando sea 30/01/13 23:09 . se instalarán con un prefijo de «/usr/local».suse. Sin embargo. Automake. el directorio actual comenzará en %{buildsubdir}.php?title=How_to_create_a. La sección %install no no se ejecuta cuando el paquete RPM binario es instalado por el usuario final.

. Usar la macro «%makeinstall». Si su paquete sólo instala un único archivo /usr/sbin/mycommand.How to create an RPM package/es .org/w/index. De lo contrario. Realizar la instalación a mano. pero sólo de los archivos contenidos en él. tratar de preservar las marcas de tiempo de los archivos si el makefile permite sobrescribir comandos: make INSTALL="install -p" CP="cp -p" DESTDIR=%{buildroot} install Sección %files Esta sección declara que los archivos y directorios son propiedad del paquete. Un ejemplo de este procedimiento: %install rm -rf %{buildroot} mkdir -p %{buildroot}%{_bindir}/ cp -p mycommand %{buildroot}%{_bindir}/ Como se indica en Packaging:Guidelines#Timestamps.. <grupo>. <permisos de directorio>) El cuarto parámetro se omite a menudo. la sección %files simplemente puede ser: %files %{_sbindir}/mycommand Para hacer que su paquete sea menos sensible a los cambios.root. pero puede conducir a fallas sutiles. y se encuentra a menudo en el inicio de la sección %files. lo cual puede resultar que en algunos programas no funcione correctamente. Este método podría funcionar.php?title=How_to_create_a. Conceptos básicos de %files La %defattr establece los permisos de archivo por defecto. Crear directorios dentro de %{buildroot} cuando sea necesario. como cp e install.root. 30/01/13 23:09 . Se expande a algo así como «make prefix=%{buildroot}%{_prefix} bindir=%{buildroot}%{_bindir} . no liste el %{_bindir} y tenga cuidado con los directorios que puedan ser compartidos con otros paquetes. entonces usted está reclamando que este paquete sea dueño de ese directorio y de todos sus archivos y subdirectorios contenidos en él. donde «-» significa A continuación. debe listar todos los archivos y directorios a ser propiedad del paquete. El formato de esta es: %defattr(<permisos de achivo>. que a menudo contienen nombres de archivos nuevos o modificados. declare que todos los archivos dentro de un directorio sean propiedad del paquete con una coincidencia de patrón: %{_bindir}/* Para incluir un solo directorio: %{_datadir}/%{name}/ Tenga en cuenta que %{_bindir}/* no reclama que este paquete sea propietario del directorio /usr/bin. Si el patrón comienza con una «/» (o cuando se expande desde la macro) entonces se toma desde el directorio %{buildroot}. por lo tanto los archivos y directorios se colocan en el RPM binario. install». Tenga en cuenta que esto ya no es necesario a menos que los permisos deban modificarse.FedoraProject 11 de 22 http://fedoraproject. que pueden verse en Packaging:RPMMacros (por ejemplo. se presume que el archivo está en el directorio actual (por ejemplo dentro de %{_builddir}. %defattr(-. <usuario>. Para ello es necesario «BuildRequires: y cambiar «make install» por «make-redir DESTDIR=%{buildroot} install». Usualmente se utiliza use los permisos predeterminados. Considerar la posibilidad de usar el paquete auto-destdir. Si usted lista un directorio.-). Utilizar macros para los nombres de directorio donde sea posible.. Esto implicaría crear los directorios necesarios debajo de %{buildroot} y copiar los archivos desde %{_builddir} a %{buildroot}. Esto sólo funciona bien si la instalación utiliza sólo ciertos comandos comunes para instalar los archivos. utilice %{_bindir}/mycommand en lugar de /usr/bin/mycommand). Por lo tanto. como los archivos de documentación que desee incluir).. auto-destdir». Tenga especial cuidado con las actualizaciones.

Se producirá un error si: una coincidencia de patrón no coincide con algún archivo o directorio un archivo o directorio está listado o coincide más de una vez un archivo o directorio en la %{buildroot} no ha sido listado También es posible excluir archivos de una coincidencia anterior utilizando el glob %exclude.How to create an RPM package/es . Usualmente se incluyen los archivos README e INSTALL. Serán colocados en el directorio /usr/share/doc/%{name}-%{version}.php?title=How_to_create_a. Los ejecutables van en /usr/bin. Desafortunadamente. pero tenga en cuenta que también fallará si no coincide con algo. use %lang para asentarlo: %lang(de) %{_datadir}/locale/de/LC_MESSAGES/tcsh* Los programas que utilizan archivos Locale deben seguir el método recomendado para el manejo de archivos de i18n: encontrar los nombres de archivo en la etapa %install: %find_lang ${name} añadir las dependencias de construcción necesarias: BuildRequires: utilizar los nombres de archivos encontrados: %files -f ${name}.pathname. group)» puede ser utilizado para un mayor control sobre los permisos. los archivos de configuración global en /etc.rpm. lo que se conoce como %{_libexecdir}/%{name}.com /fhs/) . no utilice %doc. No instalar los archivos en /opt o /usr/local. Serán marcados correctamente como documentación. entonces usted no puede copiar los archivos en el directorio de documentación durante la sección %install. %files y Estándar de jerarquía del sistema de archivos (FHS) Usted debería seguir el Estándar de jerarquía del sistema de archivos (FHS) (http://www. En particular. Si.html) . por ejemplo. Los archivos de configuración deben ser colocados en /etc y normalmente son especificados como esto (lo que hace es asegurarse de que al actualizar no se sobrescriban los cambios hechos por el usuario): %config(noreplace) %{_sysconfdir}/foo. pero en cambio cree los directorios y copie los archivos manualmente en %{buildroot}%{_defaultdocdir}/%{name}-%{version} durante la sección %install. Hay una excepción: los ejecutables que no deberían ser ejecutados directamente por los usuarios o administradores deben ir en el subdirectorio /usr/libexec.lang Estos prefijos no son válidos en Fedora: %license y gettext %readme. donde un « -» significa utilizar el valor predeterminado: %attr(0644. Ver Max RPM section on %files directives (http://www. separados con un espacio. root) FOO.conf Si la actualización utiliza un formato de configuración no compatible con versiones anteriores. El primero es para las 30/01/13 23:09 .org/w/index. root. muchos programas no siguen el FHS por defecto.BAR Si un archivo está en un idioma natural en particular. Por lo general. Asegúrese de incluir %{_defaultdocdir}/%{name}-%{version}/ como una entrada en la sección %files.conf «%attr(mode. user. desea un subdirectorio «ejemplos» dentro del directorio de documentación.FedoraProject 12 de 22 http://fedoraproject. las bibliotecas independientes de la arquitectura se encontrarán en /usr/lib en lugar de /usr/share. cuya propiedad no necesita ser declarada. Esto puede ser útil para incorporar a casi todos los archivos incluidos por una coincidencia de patrón diferente... Prefijos de %files Puede que tenga que agregar uno o más prefijos a las líneas en la sección %files. las bibliotecas en /usr/lib (o /usr/lib64) y así sucesivamente.org/max-rpm/s1-rpm-inside-fileslist-directives. «%doc» se utiliza para listar los archivos de documentación dentro de %{_builddir} que no se copiaron a %{buildroot}. entonces especificarlo de la siguiente manera: %config %{_sysconfdir}/foo. Nota: Si se especifica una entrada %doc.

Esto se puede lograr a través de scriptlets. cada subpaquete también debe realizar las mismas acciones. $1 es siempre 0. Para %pretrans y %posttrans. no queremos fracasar completamente si se produce un error en install-info: Requires(post): info Requires(preun): info . es posible que desee ejecutar algunos comandos.How to create an RPM package/es . No comparar a la igualdad con 2. Ejemplo de %files He aquí un ejemplo simple de una sección %files: %files %doc README LICENSE %{_bindir}/* %{_sbindir}/* %{_datadir}/%{name}/ %config(noreplace) %{_sysconfdir}/*. debe especificar los requisitos en la forma «Requires(CONTEXTO)» (por ejemplo Requires(post)). si el paquete instala un manual de información. %post /sbin/install-info %{_infodir}/%{name}.. pero en cambio comprobar si es mayor o igual a 2. Consulte Packaging/ScriptletSnippets.info %{_infodir}/dir || : %preun if [ $1 = 0 ] .org/w/index. y %postun ofrecen el argumento $1. Si ejecuta cualquier programa dentro de los scriptlets. omita esta opción e incluya los comandos de shell debajo. para varios comandos. then /sbin/install-info --delete %{_infodir}/%{name}.. y en segundo lugar.1 .*.php?title=How_to_create_a.1 rpm -qlp PACKAGE2.2 comm -12 . Hay muchas excepciones en Fedora (como Python y Perl).conf Búsqueda de duplicados Puede listar los duplicados de dos paquetes binarios haciendo: cd ~/rpmbuild/RPMS/ARCH # Sustituir «ARCH» por su arquitectura rpm -qlp PACKAGE1. mientras que el segundo es para las bibliotecas independientes de la arquitectura. %preun. Si el paquete tiene varios subpaquetes con bibliotecas..*.info %{_infodir}/dir || : 30/01/13 23:09 . entonces la opción « -p» ejecuta el comando adyacente sin invocar el shell. En primer lugar.rpm | sort > . %pre. entonces el índice del manual de información debe ser actualizado con install-info del paquete info.2 Scriptlets Cuando un usuario final instala el RPM. lo que significa que los sistemas con arquitecturas de CPU diferentes pueden compartir en /usr/share. debe llamar a ldconfig en %post y %postun. Los scriptlets se pueden ejecutar: antes (%pre) o después (%post) de instalar un paquete antes (%preun) o después (%postun) de desinstalar un paquete al inicio (%pretrans) o al final (%posttrans) de una transacción Por ejemplo. Por ejemplo. %post.rpm | sort > . Sin embargo. %post -p /sbin/ldconfig %postun -p /sbin/ldconfig Si tan sólo ejecuta un solo comando. bibliotecas dependientes de la arquitectura. que es el número de paquetes de este nombre que quedará en el sistema cuando la acción se complete. no hay ninguna garantía de que el paquete info estará disponible a menos que lo declaremos explícitamente como necesario..FedoraProject 13 de 22 http://fedoraproject. rpmlint generalmente se quejará si usted pone algo más que archivos ELF en /usr/lib. cada paquete RPM binario que almacena archivos de las bibliotecas compartidas en cualquiera de las rutas de acceso predeterminadas del enlazador dinámico. pero Fedora aplica esta regla más estrictamente que algunas distribuciones.

FedoraProject 14 de 22 http://fedoraproject. fi Hay otros fallos técnicos relacionados con la instalación de los manuales de información. También use rpm --showrc para mostrar los valores que RPM va a utilizar en las macros (modificados por los archivos de configuración de macros y rpmrc). Macros típicas: Expansión típica Significado %{_bindir} /usr/bin Directorio binario: donde se almacenan normalmente los ejecutables. %{buildroot} %{buildsubdir} ~/rpmbuild /BUILDROOT %{_builddir}/% {name} Raíz de construcción: donde los archivos son «instalados» durante la etapa de %install.d %{_libdir} /usr/lib %{_libexecdir} /usr/libexec %{_localstatedir} /var %{_mandir} /usr/share/man Nombre del paquete.2/triggers. Macros Las macros son texto en el formato de Macro %{string}. por lo que debemos eliminar el directorio inservible vacío de %{buildroot} durante la sección %install: rm -f %{buildroot}%{_infodir}/dir Otra capacidad tipo-scriptlet son los «triggers».d/init.) Subdirectorio de construcción: un subdirectorio dentro de %{_builddir} donde se compilan los archivos durante la etapa de %build. que copia los archivos desde un subdirectorio de %{_builddir} a un subdirectorio de %{buildroot}. Puede establecer sus propios valores de macro usando %global. %{buildroot} estaba en «/var/tmp/». Ver RPM Triggers (http://rpm. %{dist} . pero asegúrese de definirlos antes de 30/01/13 23:09 .org/api/4. %{_builddir} ~/rpmbuild/BUILD Directorio de construcción: archivos que son compilados en un subdirectorio del directorio de construcción.. definido por Name: etiqueta %{name} %{_sbindir} /usr/sbin %{_sharedstatedir} /var/lib %{_sysconfdir} %{version} /etc Versión del paquete.org/w/index. que se pueden ejecutar con su paquete cuando otros paquetes sean instalados o desinstalados.php?title=How_to_create_a. especialmente /usr/lib/rpm/macros. El comando install-info actualizará el directorio de información..fc9») %{fedora} NUMERO Número de liberación de Fedora (por ejemplo «9») %{_includedir} /usr/include %{_infodir} /usr/share/info %{_initrddir} /etc/rc. %{_defaultdocdir} /usr/share/doc Directorio predeterminado de documentación.2. Ver %buildsubdir.html) .How to create an RPM package/es . Se establece después de %setup.fcNUMERO Distribución+nombre corto de versión (por ejemplo « . definido por Version: etiqueta Aprenda más sobre las macros mirando en /etc/rpm/* y /usr/lib/rpm. %{_datadir} /usr/share Directorio compartido.4. (Históricamente.

Los subpaquetes name-doc y name-devel son comunes para los archivos de documentación y desarrollo respectivamente. etc. Tenga en cuenta que todavía hay sólo un proceso de creación (%prep.) Por ejemplo: %global date 2012-02-08 Use la opción «-E» de rpmbuild para encontrar el valor de una macro en un archivo SPEC: rpmbuild -E '%{_bindir}' myfile.php?title=How_to_create_a. %build. Obsoletes: eliminar los otros paquetes nombrados cuando estos paquetes sean instalados.. También puede utilizar el sistema de «alternativas» (http://dailypackage.fedorabook. %install.org/en-US /Fedora_Draft_Documentation/0. Evite esto si puede. esos paquetes se pueden especificar « Provides: bar» y el paquete «foo» se puede especificar «Requires: foo». (Las definiciones de macro pueden referirse a otras macros.com/index. puede haber un paquete «foo» que exige una funcionalidad «bar» particular de otro programa.html) .spec Ver también Packaging/RPMMacros y Capítulo 9 de la guía RPM (http://docs. Por ejemplo: ExcludeArch: ppc ExclusiveArch: para incluir sólo la arquitectura especificada. Esta debe incluir por lo menos las etiquetas Summary y Group. Use « rpm -q --provides NOMBREDEPAQUETE» para ver lo que un determinado paquete proporciona. Vea Packaging/Conflicts. Evite esto si puede..fedoraproject. Por ejemplo. un archivo SRPM con un SPEC pueden resultar en varios RPMS. BuildConflicts: estado de los paquetes que no se pueden instalar en la construcción de éste paquete. así como las directivas %description subpackage_name y %files subpackage_name: Cualquier cosa no especificada por el subpaquete será heredado de su padre. Evitar esto a menos que sea absolutamente correcto.org/w/index. ya que estos ajustes son para todo el sistema.FedoraProject 15 de 22 http://fedoraproject. liste las etiquetas para el subpaquete. Algunos ejemplos de paquetes virtuales en Fedora: MTA: Usado para el Agente de Transferencia de Correo. tal como sendmail. usarlos. Si hay varios paquetes que pueden satisfacer esa demanda.php?/archives/6-Wednesday-Why-The-AlternativesSystem. pero evitar si varios usuarios en el mismo sistema quieren diferentes valores predeterminados. Las arquitecturas válidas están listadas en Arquitecturas. 30/01/13 23:09 . tex(latex): Usado para latex. hay dos etiquetas: ExcludeArch: para excluir una arquitectura en la que el paquete no se construye. Utilizar cuando cambia el nombre del paquete o cuando reemplaza totalmente a un paquete diferente.).How to create an RPM package/es .1/html/RPM_Guide/ch09s07. Para administrar arquitecturas diferentes. Otras etiquetas Además de las etiquetas Requires y BuildRequires. Conflicts: estado de otros paquetes que no se pueden instalar al mismo tiempo con éste. Use la directiva %package para iniciar la definición de un subpaquete: %package subpackage_name Después de cada directiva %package. Subpaquetes Un archivo SPEC puede definir más de un paquete binario. En otras palabras. también se pueden utilizar estas para controlar las dependencias: Provides: lista de nombres de paquetes virtuales que este paquete ofrece.html) .

Usted puede anularlo con la opción «-n» (pero también tendrá que usarla en todas las demás directivas si la especifica aquí): %package -n new_subpackage_name Vea la sección subpaquetes de la Guía RPM (http://docs. otras maneras de encontrar ayuda específica de la aplicación son: El comando 'SEARCH' en Fedoraproject. Lineamientos específicos de la aplicación Existen muchos lineamientos específicos de las aplicaciones que pueden ayudarle (por ejemplo.1/html/RPM_Guide/ch10s04.org/wiki/Special:PrefixIndex/Packaging) Varios consejos Packaging/FrequentlyMadeMistakes tiene información sobre errores cometidos con frecuencia. si el nombre del paquete es «foo» y el nombre del subpaquete es «bar».txt considere hacer esto.How to create an RPM package/es . Trate de escribir sus archivos SPEC para que pueda trabajar cuando se realice una nueva versión de desarrollo.txt Si quiere ver muchos ejemplos de scriptlets..txt Filename3. Muchos de ellos están listados como parte de los Lineamientos específicos de la aplicación de empaquetamiento/directrices.org/en-US /Fedora_Draft_Documentation/0. si contiene archivos *. todos estas son cerradas con « %endif». sin cambios aparte de subir el número de versión y actualización de los archivos fuentes..org/w/index. Condicionales Puede insertar sentencias condicionales. si usted está creando un binario para una arquitectura determinada: %ifarch ARCHITECTURE_NAME la versión negada con: %ifnarch ARCHITECTURE_NAME o la condicional más general: %if TRUE_OR_FALSE Hay una sección «%else» opcional.html) para obtener más información. en lugar de hacer chmod a-x Filename1. entonces el subpaquete resultante será «foo-bar».txt con bits de ejecución.FedoraProject 16 de 22 http://fedoraproject.php?title=How_to_create_a. Por ejemplo. Por omisión. lo que se encargará de los nuevos nombres de archivos que utilizan la misma convención de denominación de archivos: chmod a-x *.fedoraproject. También hay algunas recomendaciones y trucos controversiales en PackageMaintainers/Packaging Tricks. bibliotecas y sistemas de construcción).txt Filename2. pueden verse todos los scriptlets de los programas instalados mediante: 30/01/13 23:09 . por ejemplo para probar. Ejemplos de lineamientos específicos de la aplicación son aquellos para: Cmake Emacs En su defecto. aplicaciones.org PackagingDrafts Un Grupo de interés especial (SIG) Páginas wiki con el prefijo 'Packaging' (http://fedoraproject. para lenguajes de programación específicos.

mientras que no interfiera con el resultado si hay realmente un valor para %fedora. ya que en una instalación grande podría retrasar las cosas. Trate de no tener errores. pero no eliminar los archivos creados por el usuario. puede deshabilitar la creación y remoción de este subpaquete poniendo esto en la parte superior de su SPEC: %global _enable_debug_package 0 %global debug_package %{nil} %global __os_install_post /usr/lib/rpm/brp-compress %{nil} Para evitar la remoción es posible que tenga que hacer esto en la sección %install: export DONT_STRIP=1 Una forma de verificar la versión de Fedora en un archivo SPEC para la construcción condicional es: %if 0%{?fedora} <= <version> El ? provoca que la macro evalúe ponerse en blanco si %fedora no está definida.freedesktop. Usted podría no querer iniciar los servicios.. Si no. Si instala un script init o systemd. Si una aplicación necesita mostrar una EULA.freedesktop. Esto hace que el resultado final sea 0 (que es un número y por lo tanto aceptable). RPMS se creará dentro de ~/rpmbuild/RPMS y SRPMS dentro de ~/rpmbuild/SRPMS..) Los programas de la GUI deben tener una entrada desktop para que la gente pueda invocarla desde el menú gráfico de escritorio. si hay ejecutables binarios. Normalmente. ejecutarlo de nuevo con la opción « -i» para mensajes más largos. Si esto no sucede. Crear un RPMS binario desde el archivo SPEC Una vez que haya creado su archivo SPEC.spec Si el error reportado no tiene sentido. vaya al directorio correspondiente y mire lo que queda. ejecute construir algo con él: rpmlint en su archivo SPEC antes de intentar $ rpmlint program. no de la instalación.desktop. se eliminan los símbolos de depuración de los paquetes binarios normales y se colocan en un subpaquete name-debug. RPM está diseñado para soportar instalaciones de procesamiento por lotes. debe ser parte de la ejecución inicial. consulte tema de ícono en spec (http://standards.spec Si tiene éxito.org/desktop-entryspec/latest/) . construir el SRPM y el RPMS binario ejecutando esto: $ rpmbuild -ba program. consulte Lineamientos de empaquetado de Fedora para archivos desktop y entrada desktop en spec (http://standards.FedoraProject 17 de 22 http://fedoraproject.html) . pero a veces rpmlint informa falsos positivos.org/w/index. puede saltarse las 30/01/13 23:09 . La desinstalación debe revertir la mayoría de los cambios realizados durante la instalación. debería normalmente intentar detener los servicios si se están ejecutando.How to create an RPM package/es . Para los archivos . Los Lineamientos de empaquetamiento de Fedora explica cuáles ignorar. (Tenga en cuenta que este truco no funciona en Koji «scratch» builds. Construcción del paquete binario Prueba con rpmlint Para detectar a tiempo muchos errores comunes.org/icon-theme-spec/icon-theme-spec-latest. Para los iconos dentro de /usr/share/icons. rpm -qa --queryformat "\n\nPACKAGE: %{name}\n" --scripts | less No intente interactuar con el usuario.php?title=How_to_create_a. Para ayudar a depurar. considere usar chkconfig o systemctl para organizar que el servicio sea iniciado/detenido en el siguiente reinicio. Antes de desinstalar. donde %fedora se establece durante la creación del SRPM.

asegúrese de que aparece en el menú del escritorio. puede probar su SRPM en una variedad de plataformas ejecutando comandos como: $ koji build --scratch dist-f9 path_to_source_RPM Reemplace dist-f9 con cualquier versión posterior de Fedora. de lo contrario la entrada .php?title=How_to_create_a. haga lo siguiente: $ rpmlint NOMBRE. ejecute esto: rpmbuild -bs program./RPMS/*/NOMBRE*.rpm Introduzca el directorio ~/rpmbuild/RPMS en el subdirectorio de la arquitectura.org/w/index. por lo que estos no funcionarán si el archivo SPEC hace algo diferente. En consecuencia.FedoraProject 18 de 22 http://fedoraproject. Si esto falla. PackageMaintainers/Join y PackageMaintainers/UsingKoji tienen más información acerca de Koji. etapas anteriores que tuvieron éxito con la opción « --short-circuit». Una vez que está instalado. haga lo siguiente: $ rpmbuild -bi --short-circuit program.spec . pero no use dist-rawhide. Desinstalar los paquetes más tarde haciendo: # rpm -e package1 package2 package3 Mock y Koji Mock es una potente herramienta que utiliza el SRPM que usted ha creado para construir paquetes binarios dentro de un ambiente casi vacío. instalarlos como root: # rpm -ivp package1. Consulte Usando Mock para probar las construcciones de paquetes. Vea rápidamente sus archivos y permisos (para comprobar si son correctos) haciendo: $ rpmls *..rpm . Esto puede revelar si tiene las dependencias de construcción adecuadas.How to create an RPM package/es . %fc9 y así sucesivamente. Encontrará algunos RPMS binarios. Es necesario para eliminar o corroborar las advertencias antes de publicar un paquete. Una vez que su cuenta sea miembro del grupo « mock»./SRPMS/NOMBRE*. RPMS y SRPMS para comprobar si hay errores. no serán correctos para un scratch build. Si necesita construir en contra de un paquete que no es todavía una liberación estable actualizada.org/rel-eng/newticket y solicitar que dicho paquete sea añadido como un buildroot override. Por ejemplo. no puede construir con Koji para distribuciones liberadas si su paquete depende de otros paquetes nuevos que Bodhi no ha liberado todavía.spec Pruebas de RPMS binarios con rpmlint rpmlint se puede ejecutar en archivos SPEC. Si se trata de una herramienta de GUI. 30/01/13 23:09 .spec Si lo que desea es crear un SRPM (que no ejecuta la %prep o %build u otras etapas). Pruebe los programas de diferentes maneras para ver si todo funciona correctamente..rpm package2. puede presentar un ticket con rel-eng en: https://fedorahosted. algunos de los cuales puede que no tenga.. puede ejecutar comandos como este para hacer pruebas locales: $ mock -r fedora-9-i386 rebuild path_to_source_RPM Puede utilizar Koji (que usa mock) para realizar construcciones en muchos sistemas diferentes.rpm package3... Recuerde que los valores de %fedora. basándose en esos valores..rpm Si esto luce bien.rpm . entonces se olvidó de incluir algo en BuildRequires.desktop será errónea. para reiniciar en la etapa de %install (saltando etapas anteriores). Si usted está en el directorio SPECS. Sus construcciones Koji sólo pueden depender de los paquetes que se encuentran actualmente en el repositorio de distribución TARGET.

aunque no crea archivos SPEC de la calidad adecuada para los paquetes de Fedora. deberá seguir las siguientes reglas y lineamientos: Cómo unirse a los Mantenedores de la colección de paquetes de Fedora Lineamientos de empaquetamiento Lineamientos de nombrado de paquetes Lineamientos de licenciamiento de paquetes Lineamientos de la etiqueta Dist Lineamientos de revisión de paquetes Hay muchas pautas oficiales que le ayudarán con circunstancias específicas (por ejemplo.tldp.sourceforge. Fedora N-1).net/~joey/code/alien/) convierte entre formatos de paquetes. Mantenimiento del paquete Una vez que su paquete ha sido aceptado. libere para Fedora N. «rpm -qil rpmdevtools» le mostrará lo que : resalta la etiqueta de la versión en el archivo spec y añade un comentario en el registro de cambios con el formato de fecha y versión correctos: rpmdev-bumpspec rpmdev-bumpspec --comment=COMENTARIO --userstring=NOMBRE+CORREOELECTRONICO_STRING SPECFILES El paquete yum-utils yumdownloader también tiene algunas herramientas útiles: : descargar el SRPM del paquete ejecutando: yumdownloader --source NOMBREDEPAQUETE El paquete auto-buildrequires tiene un par de buenas herramientas para ayudar a descifrar las entradas de BuildRequires. Herramientas útiles El paquete instala. El sistema presume que las versiones más recientes de Fedora poseen la misma o más recientes versiones de los programas. luego una vez aceptado. Puede aprender más desde las secciones SIGs y Maintenedores de paquetes.How to create an RPM package/es . programas Java.org/prep/standards/html_node/ManagingReleases.org /wiki/Special:Prefixindex/Packaging) para ver si alguna es aplicable.org/w/index. Alentar a los desarrolladores principales a utilizar las convenciones estándar en la liberación del código fuente. Para obtener más información. No producirá SRPMS limpios.dwheeler. etc. OCaml.org/HOWTO/Software-Release-Practice-HOWTO/) 30/01/13 23:09 .php?title=How_to_create_a. Alien (http://kitenet. consulte: Releasing Free/Libre/Open Source Software (FLOSS) for Source Installation (http://www. GNOME.. Usando las convenciones estándar hace que el empaquetamiento sea mucho más fácil. Si actualiza la versión en varias liberaciones de Fedora. Después de instalar este paquete.html) Software Release Practice HOWTO (http://en. puede que encuentre algunas recomendaciones útiles en los Borradores de empaquetamiento (https://fedoraproject.html) (un resumen rápido) GNU Coding Standards release process (http://www.gnu.com /essays/releasing-floss-software. Ver CÓMO actualizar paquetes y Lineamientos de actualización de paquetes. usted y sus co-mantenedores tendrán que mantenerlo.)..net/) (GPL). rpmdevtools contiene una serie de herramientas útiles. reemplace « rpmbuild» con «auto-br-rpmbuild» y verá una lista de BuildRequires generada automáticamente.FedoraProject 19 de 22 http://fedoraproject. hágalo hacia atrás en el tiempo (por ejemplo. En su defecto. Lineamientos y reglas Al crear los paquetes. pero la conversión de un paquete existente podría proporcionar cierta información útil. También puede ver la lista de todas las páginas Wiki sobre el empaquetamiento (https://fedoraproject. Es posible que encuentre útil a RUST (http://rust.org/wiki/Special:Search?ns0=1&search=PackagingDrafts%2F& searchx=Search) no oficiales y en Borradores de empaquetamiento para hacer.

org/Problems) Nota: El sitio rpm5.html) Creating RPMS slides (http://www.org/Build_Service /cross_distribution_package_how_to) tiene consejos si usted está construyendo un RPM para muchas distribuciones.com/fhs/) Packaging Unix software (http://offog. pero señala que «El proceso de construcción de RPM es mucho más sencillo que la creación de paquetes para Solaris. pero en algunos casos antigua/obsoleta RPM Guide.pathname.org/) tiene algunas informaciones útiles.1/html/RPM_Guide/ch-creating-rpms. y la posibilidad de agregar toda la información de su software en un archivo de especificación. consulte: How to build RPM packages on Fedora (http://www..org/wiki/Building_RPM_packages_%2820090405%29 Fedora Packager's Handbook (http://koti..PDF) de Guru Labs The fight.csx.mandriva. (http://freshrpms.php?title=How_to_create_a.html) When Sally met Eddie (http://www. Filesystem Hierarchy Standard (FHS) (http://www.welho. porque cambiaría sus hashes criptográficos. All you need to know about RPM (http://fedoranews. haciendo algo más compacto (y más fácil de modificar o reproducir) el sistema de empaquetamiento de software».ibm.redhatmagazine.fedoraproject.información más completa. Menos pasos.uk/talks/rpmbuild/rpmbuild.html) es otra breve introducción.ac.html) .org/en-US/Fedora_Draft_Documentation /0. Mandriva Rpm HowTo (en) (http://wiki.ibm.com/developerworks/ssa/linux/library/l-rpm2/) .pdf) es una presentación sobre la creación de RPM básicos RPM HOWTO: RPM at Idle by Donnie Barnes (http://en. que es la 30/01/13 23:09 .com/en/Development/Howto/RPM) es un tutorial de RPM.com/vskytta/packagers-handbook/packagershandbook.muy breve repaso Empaquetado de software con RPM (developerWorks) Part 1 (http://www.eu/2006/04/05/how-to-build-rpm-packageson-fedora/) .com /2008/03/creating-your-own-linux-rpms-initial.rpm. pero pocos detalles Maximum RPM Book (http://rpm. Nota: En Fedora. y CÓMO actualizar paquetes describe cómo actualizar un paquete existente que usted ya mantenga en Fedora.cam.org/max-rpm-snapshot/) . Creating Your Own Linux RPM's . section on building RPMs (http://docs.fnal. aunque para Mandriva (no Mandrake). fuera de la Wiki de Fedora.un cuento simple.org/articles/packaging/) Para obtener más información La página Mantenedores de paquetes enlaza a muchas otras páginas de interés..opensuse.com/GURULABS-RPM-LAB/GURULABS-RPM-GUIDE-v1.com/2008/02/28/when-sally-met-eddie-the-fedorapackage-story/) .The Initial Software Build (http://linuxshellaccount. section on creating RPMs (http://docs. pero no depende de él.gurulabs.esta tiene un montón de buena información y es un poco más actualizada.html) RPM HowTo by Dawson (http://home. no no recomprimir los archivos tarballs originales.0.tldp. Para obtener más información. pero es un proyecto Developer's guide.html) Cross-distribution package HOWTO (http://en.FedoraProject 20 de 22 http://fedoraproject.rpm. my first attempt to make a readable rpm package building introduction. y Part 3 (http://www.net /docs/fight/) Cambridge RPM tutorial (http://www-uxsup.gov/~dawson/rpms/howto/index.com/developerworks/ssa/linux/library/l-rpm3/) Fedora Classroom tuvo una sesión de IRC en empaquetamiento y puede consultar los registros en https://fedoraproject.ibm.blogspot.org/alex/tutorial/rpm/) (más sobre la instalación de paquetes que de crearlos) La Wiki de rpm.How to create an RPM package/es .org (http://rpm5.org (http://wiki.org/w/index. tal como la lista de problemas RPM conocidos (http://wiki.com/developerworks /ssa/linux/library/l-rpm1/) .. como sugiere Mandriva. Part 2 (http://www.org/developers-guide/chrpm-building.fedoraproject.g-loaded.org/) tiene alguna documentación.org/HOWTO/RPM-HOWTO/index.

página de un fork de RPM mantenido por Jeff Johnson.org (http://www.php?title=How_to_create_an_RPM_package /es&oldid=315883" Categories: How to Package Maintainers Spanish translations 30/01/13 23:09 .net tiene un breve artículo (http://lwn.org/w/index..org/w/index.php?title=How_to_create_a. lwn.How to create an RPM package/es ..FedoraProject 21 de 22 http://fedoraproject.rpm.net/Articles /236029/) acerca de esto. Retrieved from "https://fedoraproject. El RPM utilizado por Fedora (y Novell/SuSE) se basa más bien en rpm.org) .

FedoraProject 22 de 22 http://fedoraproject. For comments or queries.0 Unported. please contact us. and others... Red Hat is not responsible for content.php?title=How_to_create_a.How to create an RPM package/es .org/w/index. Inc. This page was last modified on 25 December 2012. The Fedora Project is maintained and driven by the community and sponsored by Red Hat. Copyright © 2013 Red Hat. All Rights Reserved. at 23:37. Sponsors Legal Trademark Guidelines 30/01/13 23:09 . This is a community maintained site. Content is available under Attribution-Share Alike 3.