Professional Documents
Culture Documents
1 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Espaol (es)
Introduccin
Esta pgina describe detalladamente cmo crear un paquete RPM y en particular, cmo crear un archivo
SPEC. A diferencia de otras guas RPM, esta pgina explica los detalles de Fedora con enlaces a los
lineamientos especcos de Fedora. Dado que es mantenida a travs de la Wiki de Fedora, es probable
que est ms al da que otras guas. 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 ms breve
Cmo crear un paquete RPM GNU Hola.
Tenga en cuenta que estos no son los lineamientos del paquete ocial de Fedora, que puede verse en los
Lineamientos de empaquetado y Lineamientos de nombrado de paquetes. Dicho esto, esta pgina 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 coleccin de paquetes.
Preparando su sistema
Antes de crear paquetes RPM en Fedora, necesita instalar algunas herramientas bsicas de desarrollo y
congurar la(s) cuenta(s) que va a utilizar:
# yum install @development-tools
# yum install fedora-packager
Puede crear un usuario cticio (dummy) especcamente para crear paquetes RPM por si el proceso de
construccin sale mal no podr destruir sus archivos o enviar sus claves privadas al mundo.
Usted nunca debe crear los paquetes como usuario root.
makerpm,
# /usr/sbin/useradd makerpm
# usermod -a -G mock makerpm
# passwd makerpm
Una vez que ha iniciado la sesin 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. Tambin se crea el archivo ~/.rpmmacros, que puede utilizarse
para congurar diversas opciones.
Los lineamientos de empaquetado recomiendan preservar los datos del archivo; usted puede hacer esto
automticamente si usa wget o curl para obtener los archivos fuentes. Si utiliza wget para obtener los
archivos fuentes, aada 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
2 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Cuando rpmbuild es invocado de esta manera, leer el archivo .spec y recorrer en orden las etapas listadas
a continuacin. Los nombres que comienzan con % son macros predenidas (vea la siguiente tabla).
Etapa
%prep
%build
%check
Lee
%_sourcedir
%_builddir
%_builddir
Escribe
Accin
%_builddir
%_builddir
%_builddir
%install %_builddir
%_buildrootdir
Los archivos que son escritos son los que se supone sern
instalados cuando el paquete binario sea instalado por el usuario nal.
Tenga cuidado con esta terminologa algo extraa: El directorio raz de
construccin no es lo mismo que el directorio de construccin. Esta
etapa usualmente se implementa ejecutando make install.
bin
%_buildrootdir %_rpmdir
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
Nombre
Directorio de
especicacin
Usualmente
~/rpmbuild/SPECS
rpmbuild.
Estos son:
Propsito
30/01/13 23:09
3 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
~/rpmbuild
%_sourcedir
Directorio fuente
%_builddir
Directorio de
construccin
%_buildrootdir
Directorio raz de
construccin
%_rpmdir
Directorio RPM
binario
~/rpmbuild/RPMS
%_srcrpmdir
Directorio RPM
fuente
~/rpmbuild/SRPMS
/SOURCES
~/rpmbuild/BUILD
~/rpmbuild
/BUILDROOT
Si falla alguna etapa, tendr que revisar la salida para ver por qu fall y deber cambiar el archivo
(u otra entrada) cuando sea necesario.
.spec
Dividir el programa
El cdigo fuente de la aplicacin es a menudo liberado con el cdigo fuente de otras bibliotecas externas
incluido en ellos. No junte bibliotecas externas con la aplicacin principal en un solo paquete. En
cambio, divdalos en paquetes separados.
Concesin de licencias
Slo empaquete software que sea legal en su paquete. Ver Packaging:Guidelines#Legal, Licensing:Main y
Packaging:LicensingGuidelines. En general, slo empaquete software que sea lanzado como software de
cdigo abierto (OSS) utilizando una licencia OSS aprobada (tales como las licencias GPL, LGPL, BSD-new,
MIT/X, o Apache 2.0). Asegrese de que el software realmente tiene licencia de esta manera (por ejemplo,
vericar in situ los encabezados del cdigo fuente, archivos README, etc.). Si hay bibliotecas incluidas,
asegrese de que tambin son OSS.
Alternativamente, puede obtener el cdigo fuente manualmente desde la pgina http/ftp de un espejo de
Fedora (http://mirrors.fedoraproject.org/publiclist) dentro del directorio releases/18/Everything/source/SRPMS.
Reemplace 18 con la versin de Fedora que desee y descargue el paquete .src.rpm que necesita.
30/01/13 23:09
4 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
~/rpmbuild:
rpm2cpio:
$ mkdir NOMBREDEPROGRAMA_src_rpm
$ cd NOMBREDEPROGRAMA_src_rpm
$ rpm2cpio ../NOMBREDEPROGRAMA-*.src.rpm | cpio -i
Algunas veces es ms fcil comenzar con un paquete existente y luego limpiarlo y prepararlo para
Fedora. RPM Find (http://rpmnd.net/) puede ayudarle a encontrar RPM para sistemas diferentes a Fedora.
Puede instalar SRPMS de otros sistemas de la misma forma que para los de Fedora. Si eso falla, puede
localizar los archivos de paquetes fuentes (no los binarios .deb) en Ubuntu (http://packages.ubuntu.com/)
o Debian (http://www.debian.org/distrib/packages) (los archivos de paquetes fuentes son tarballs estndar
con un subdirectorio debian/). Si la coleccin de ports FreeBSD (http://www.freebsd.org/ports
/installing.html) lo tiene, podra descargarlo del FreeBSD ports tarball (ftp://ftp.freebsd.org/pub/FreeBSD
/ports/ports/ports.tar.gz) y ver si la informacin de empaquetado existente le ayuda como punto de
partida. Sin embargo, esto a veces no es til para todos. Las diferentes distribuciones tienen diferentes
reglas y lo que hacen en algunos casos puede ser inapropiado para Fedora.
Plantillas de SPEC
Al crear un archivo SPEC por primera vez, vim o emacs crearn automticamente una plantilla para usted:
$ cd ~/rpmbuild/SPECS
$ vim program.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(-,root,root,-)
%doc
30/01/13 23:09
5 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
%changelog
%{buildroot}.
Tambin puede usar el comando rpmdev-newspec para crear un archivo SPEC para usted. rpmdev-newspec NOMBREpuede crear un archivo SPEC inicial para un nuevo paquete, adaptado a varios tipos de
paquetes. Adivinar tambin qu tipo de plantilla utilizar basndose en el nombre del paquete, o puede
especicarle una plantilla en particular. Vea las plantillas disponibles en /etc/rpmdevtools/spectemplate-*.spec,
y consulte rpmdev-newspec --help para ms informacin. Por ejemplo, para crear un nuevo archivo SPEC para
un mdulo python:
DE-NUEVO-PAQUETE
cd ~/rpmbuild/SPECS
rpmdev-newspec python-antigravity
vi python-antigravity.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:
%description
The eject program allows the user to eject removable media (typically
CD-ROMs, floppy disks or Iomega Jaz or Zip disks) using software
control. Eject can also control some multi-disk CD changers and even
some devices' auto-eject features.
Install eject if you'd like to eject removable media using software
control.
%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 ../bin/eject %{buildroot}/%{_sbindir}
%find_lang %{name}
%files -f %{name}.lang
%doc README TODO COPYING ChangeLog
%{_bindir}/*
%{_sbindir}/*
%{_mandir}/man1/*
30/01/13 23:09
6 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
%changelog
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.1.5-21
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Fri Jul 02 2010 Kamil Dudka <kdudka@redhat.com> 2.1.5-20
- handle multi-partition devices with spaces in mount points properly (#608502)
%{release}
Name: El nombre (base) del paquete, que debe coincidir con el nombre del archivo SPEC. Debe seguir
los Lineamientos de nombres de paquetes y generalmente estar en minsculas.
Version: El nmero de versin de desarrollo. Vea la Seccin etiqueta de versin en los lineamientos de
empaquetado. Si la versin contiene etiquetas que no son numricas (contiene etiquetas que no son
nmeros), puede que necesite incluir caracteres no numricos adicionales en la etiqueta Release. Si el
desarrollo utiliza fechas completas para distinguir las versiones, considere usar nmeros de versin con
la forma yy.mm[dd] (por ejemplo 2008-05-01 se convierte en 8.05).
Release: El valor inicial normalmente debera ser 1%{?dist}. Incremente el nmero cada vez que libere un
nuevo paquete para la misma versin de software. Cuando una nueva versin de desarrollo es liberada,
cambiar la etiqueta Version para igualar y restablecer el nmero de Release a 1. Vea la Seccin etiqueta
de versin en los lineamientos de empaquetado. La etiqueta opcional Dist podra ser til.
Summary: Un breve, sumario del paquete en una lnea. Use ingls americano. Y no termine con un
punto.
Group: Este tiene que ser un grupo pre-existente, como Applications/Engineering; ejecute less
/usr/share/doc/rpm-*/GROUPS para ver la lista completa. Use el grupo Documentation para los
sub-paquetes (por ejemplo kernel-doc) que contienen documentacin. Nota: Esta etiqueta est en
desuso desde Fedora 17. Consulte Prembulo de referencia del archivo Spec
(http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide
/chap-Packagers_Guide-Spec_File_Reference-Preamble.html)
License: La licencia, debe ser una licencia de software de cdigo abierto. No usar la antigua etiqueta
Copyright. Utilizar una abreviatura estndar (por ejemplo GPLv2+) y ser especco (por ejemplo use
GPLv2+ para la GPL versin 2 o superior en lugar de simplemente GPL o GPLv2 cuando sea cierto).
Consulte Licensing y los Lineamientos de licencias. Usted puede listar mltiples licencias combinndolas
con and y or (por ejemplo GPLv2 and BSD).
URL: La direccin URL completa para obtener ms informacin sobre el programa (por ejemplo, la
pgina web del proyecto). Nota: Esta no es de donde proviene el cdigo fuente original que
sirve para la etiqueta Source0 de abajo.
30/01/13 23:09
7 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Source0: La direccin URL completa para el archivo comprimido que contiene el cdigo fuente (original)
prstina, liberado como desarrollo. Source es sinnimo de Source0. Si usted da una direccin URL
completa (y debera), su nombre base ser utilizado cuando se busque en el directorio SOURCES. Si es
posible, insertar %{name} y %{version}, as los cambios en cualquiera de ellas ir al lugar adecuado.
Preservar los datos al descargar archivos fuentes. Si existe ms de un archivo fuente, nmbrelos como
Source1, Source2 y as sucesivamente. Si va a aadir nuevos archivos completos, adems de las fuentes
originales, lstelos como fuentes despus de las fuentes prstinas. Una copia de cada una de estas
fuentes sern includas en cualquier SRPM que cree, a menos que especcamente le indique lo
contrario. Vea Source URL para obtener ms informacin sobre los casos especiales (por ejemplo, control
de revisin).
Patch0: El nombre del primer parche para aplicar al cdigo fuente. Si necesita parchear los archivos
despus de que hayan sido descomprimidos, debe editar los archivos y guardar sus diferencias como un
archivo patch en su directorio ~/rpmbuild/SOURCES. Los parches deben hacer slo un cambio lgico cada
uno, as que es muy posible tener varios archivos de parches.
BuildArch: Si est empaquetando archivos que son independientes de la arquitectura (por ejemplo,
scripts de shell, archivos de datos), agregar BuildArch: noarch. La arquitectura para el RPM binario ser
entonces noarch.
BuildRoot: Esta es dnde los archivos sern instalados durante el proceso %install (despus del
proceso %build). Esta es ahora redundante en Fedora y slo es necesaria para EPEL5. De forma
predeterminada, la raz de construccin se coloca en %{_topdir}/BUILDROOT/.
BuildRequires: Una lista separada por comas de paquetes requeridos para la construccin (compilar)
del programa. Este campo se puede (y lo es comnmente) repetir en varias lneas. Estas dependencias
no son determinadas automticamente, usted debe incluir todo lo necesario para construir el programa.
Algunos paquetes comunes se pueden omitir, tal como gcc. Puede especicar una versin mnima si es
necesario (por ejemplo ocaml >= 3.08). Si necesita el archivo /EGGS, determinar el paquete que lo posee
mediante la ejecucin de rpm -qf /EGGS. Si necesita el programa EGGS, determinar el paquete que lo
posee mediante la ejecucin de rpm -qf `which EGGS`. Mantener las dependencias al mnimo (por ejemplo
use sed en vez de perl si realmente no necesita las capacidades de perl), pero tenga en cuenta que
algunas aplicaciones desactivan funciones permanentemente si la dependencia asociada no est
presente; en estos casos deber incluir los paquetes adicionales. El paquete
auto-buildrequires
(https://admin.fedoraproject.org/pkgdb/acls/name/auto-buildrequires) puede ser til.
Requires: Una lista separada por comas de los paquetes que se requieren cuando se instala el
programa. Tenga en cuenta que la etiqueta BuildRequires lista lo que se necesita para construir el RPM
binario, mientras que la etiqueta Requires lista lo que se requiere para la instalacin/ejecucin del
programa; un paquete puede estar en una lista o en ambas. En muchos casos, rpmbuild detecta
automticamente las dependencias por lo que la etiqueta Requires no siempre es necesaria. Sin
embargo, puede que desee resaltar algunos paquetes especcos cuando sea necesario, o es posible
que no sean detectados automticamente.
%description: Una ms larga, descripcin multilnea del programa. Use ingls americano. Todas las
lneas deben ser de 80 caracteres o menos. Las lneas en blanco indican un nuevo prrafo. Algunos
programas de instalacin de la interfaz grca de usuario reformatearn los prrafos; las lneas que
comienzan con un espacio en blanco se tratan como texto preformateado y se mostrarn tal cual,
normalmente con una fuente de ancho jo. Consulte Gua RPM (http://docs.fedoraproject.org/drafts
/rpm-guide-en/ch09s03.html) .
%prep: Comandos de script para preparar el programa (por ejemplo, para descomprimirlo) y que
pueda estar listo para la construccin. Tpicamente es slo %setup -q; una variacin comn es %setup -q
-n NOMBRE si el archivo fuente se desempaqueta en NOMBRE. Consulte la seccin %prep de abajo para ms
detalles.
%build: Comandos de script para construir el programa (por ejemplo, para compilarlo) y prepararlo
para la instalacin. El programa debe venir con instrucciones de cmo hacerlo. Vea la seccin %build de
abajo para ms detalles.
%check: Comandos de script para probar el programa. Estos se ejecutan entre los
30/01/13 23:09
8 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
procedimientos %build e %install, as que debe colocarlo all si tiene esta seccin. A menudo
simplemente contiene make test o make check. Esto es aparte de %build para que las personas puedan
omitir la comprobacin automtica si lo desean.
%install: Comandos de script para instalar el programa. Los comandos deben copiar los archivos
desde el directorio de CONSTRUCCIN %{_builddir} al directorio raz de construccin, %{buildroot}. Vea la
seccin %install de abajo para ms detalles.
%clean: Instrucciones para limpiar la raz de construccin. Tenga en cuenta que esta seccin es ahora
redundante en Fedora y slo es necesaria para EPEL. Normalmente esto slo contiene:
rm -rf %{buildroot}
%les: La lista de archivos que sern instalados. Consulte la seccin %les de abajo para ms detalles.
%changelog: Cambios en el paquete. Utilice de ejemplo el formato anterior.
ExcludeArch: Si el paquete no compila, construye o funciona correctamente en una arquitectura en
particular, liste esas arquitecturas bajo esta etiqueta.
Puede agregar secciones para que el cdigo se ejecute cuando los paquetes sean instalados o removidos
en el sistema real (en lugar de slo ejecutar el script %install, que slo hace una pseudo-instalacin a la
raz de construccin). Estos se denominan scriptlets, y se utilizan generalmente para actualizar el
sistema en ejecucin con informacin del paquete. Consulte la seccin Scriptlets de abajo para ms
detalles.
RPM tambin soporta la creacin de varios paquetes (llamados subpaquetes) desde un nico archivo
SPEC, como los paquetes name-libs y name-devel.
No use estas etiquetas:
Packager
Vendor
Copyright
No cree un paquete relocalizable; que no agrega valor en Fedora y hace las cosas ms complicadas.
Sin embargo, 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.
Seccin %prep: comando %setup
El comando %setup desempaqueta un paquete fuente. Los modicadores incluyen:
: Suprime la salida innecesaria. Este es comnmente utilizado.
-n nombre : Si el archivo tarball Fuente se desempaqueta en un directorio cuyo nombre no es el nombre
del RPM, este modicador puede utilizarse para especicar el nombre del directorio correcto. Por
ejemplo, si el archivo tarball se desempaqueta en el directorio FOO, use %setup -q -n FOO.
-c nombre : Si el archivo tarball Fuente se desempaqueta en varios directorios en lugar de un solo
directorio, este modicador puede utilizarse para crear un directorio llamado nombre y luego
-q
30/01/13 23:09
9 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
descomprimir en l.
Hay ms opciones %spec si est desempaquetando mltiples archivos (http://rpm.org/max-rpm-snapshot
/s1-rpm-inside-macros.html) , lo cual es especialmente til si est creando subpaquetes (ver ms abajo).
Las ms importantes son:
-a
nmero
Slo desempaquetar la directiva Fuente del nmero dado despus de cambiar de directorio (por
ejemplo a 0 para Source0).
nmero
Slo desempaquetar la directiva Fuente del nmero dado antes de cambiar de directorio (por
ejemplo b 0 para Source0).
-D
-T
-b
Si va a editar muchos archivos, un mtodo fcil es copiar el subdirectorio completo debajo de BUILD y
luego hacer dis por subdirectorio. Despus de cambiar al directorio ~rpmbuild/BUILD/NOMBRE, haga lo
siguiente:
cp -pr ./ ../NOMBREDEPAQUETE.orig/
... muchas ediciones ...
diff -u ../NOMBREDEPAQUETE.orig . > ~/rpmbuild/SOURCES/NOMBRE.RAZN.patch
Si edita muchos archivos en un parche, tambin puede copiar los archivos originales mediante alguna
terminacin consistente como .orig antes de editarlos. Luego, puede usar gendiff (en el paquete
rpm-build) para crear un parche con las diferencias.
Trate de asegurarse que el parche coincida exactamente con el contexto. El valor por omisin de fuzz
es 0, que requiere coincidencia para ser exacto. Puede solucionar esto aadiendo %global
_default_patch_fuzz 2 para volver al valor encontrado en las versiones anteriores de RPM en Fedora, pero
en general se recomienda evitar hacer esto.
Como se explica en Packaging/PatchUpstreamStatus, todos los parches deben tener un comentario sobre
ellos en el archivo SPEC sobre su estado de desarrollo. Este debe documentar el desarrollo que incluye los
errores/correo electrnico (incluyendo la fecha). Si es exclusivo de Fedora, debe mencionar por qu es
nico. El proyecto Fedora intenta no desviarse del desarrollo; consulte PackageMaintainers/WhyUpstream
para ver la importancia de esto.
Seccin %prep: Archivos sin modicar
A veces, uno o ms de los archivos Fuente no necesitarn ser descomprimidos. Usted puede prep esos
archivos en un directorio de construccin como este (donde SOURCE1 se reere al archivo Fuente
correspondiente):
cp -p %SOURCE1 .
Seccin %build
La seccin %build es a veces complicada; aqu usted congura y compila/construye los archivos a ser
instalados.
30/01/13 23:09
10 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Muchos programas siguen el enfoque configure de GNU (o alguna variacin). De forma predeterminada, se
instalarn con un prejo de /usr/local, que es razonable para los archivos desempaquetados. Sin
embargo, como usted est empaquetndolo, cambiar el prejo a /usr. Las bibliotecas deben instalarse
bien sea en /usr/lib o /usr/lib64 dependiendo de la arquitectura.
Ya que configure de GNU es tan comn, la macro %configure se puede utilizar para invocar
automticamente las opciones correctas (por ejemplo, cambiar el prejo a /usr). Alguna variacin de esto
a menudo funciona:
%configure
make %{?_smp_mflags}
make:
cmake.
Ver Packaging/cmake.
Seccin %check
Si las pruebas automticas estn disponibles, por lo general es una buena idea incluirlas. Deben
colocarse en la seccin %check (que sigue inmediatamente a la seccin %build) en lugar de dentro de la
seccin %build, de modo que puedan ser fcilmente omitidas cuando sea necesario.
A menudo, esta seccin contiene:
make test
Seccin %install
Esta seccin incluye comandos de script para instalar el programa, copiar los archivos relevantes desde
%{_builddir} a %{buildroot} (que por lo general signica desde ~/rpmbuild/BUILD a ~/rpmbuild/BUILDROOT) y la
creacin de directorios dentro de %{buildroot} segn sea necesario.
Parte de la terminologa que puede inducir a error:
El directorio de construccin, tambin conocido como %{_builddir} no es el mismo que el raz de
construccin, tambin conocido como %{buildroot}. La compilacin se produce en el primer directorio,
mientras que los archivos a ser empaquetados son copiados desde el primero al ltimo.
Durante la seccin de %build, el directorio actual comenzar en %{buildsubdir}, que es el subdirectorio
dentro de %{_builddir} creado durante la etapa de %prep. Esto suele ser algo como ~/rpmbuild/BUILD
/%{name}-%{version}.
La seccin %install no no se ejecuta cuando el paquete RPM binario es instalado por el usuario nal,
pero slo se ejecuta cuando se crea un paquete.
Normalmente, una variacin de make
install
%install
rm -rf %{buildroot}
make DESTDIR=%{buildroot} install
La eliminacin de
%{buildroot}
DESTDIR
DESTDIR.
DESTDIR
cuando sea
30/01/13 23:09
11 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Usar la macro %makeinstall. Este mtodo podra funcionar, pero puede conducir a fallas sutiles. Se
expande a algo as como make prefix=%{buildroot}%{_prefix} bindir=%{buildroot}%{_bindir} ... install, lo cual
puede resultar que en algunos programas no funcione correctamente. Crear directorios dentro de
%{buildroot} cuando sea necesario.
Considerar la posibilidad de usar el paquete auto-destdir. Para ello es necesario BuildRequires:
y cambiar make install por make-redir DESTDIR=%{buildroot} install. Esto slo funciona bien
si la instalacin utiliza slo ciertos comandos comunes para instalar los archivos, como cp e install.
auto-destdir,
Realizar la instalacin a mano. Esto implicara crear los directorios necesarios debajo de %{buildroot} y
copiar los archivos desde %{_builddir} a %{buildroot}. Tenga especial cuidado con las actualizaciones, que a
menudo contienen nombres de archivos nuevos o modicados. Un ejemplo de este procedimiento:
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_bindir}/
cp -p mycommand %{buildroot}%{_bindir}/
Seccin %les
Esta seccin declara que los archivos y directorios son propiedad del paquete, por lo tanto los archivos y
directorios se colocan en el RPM binario.
Conceptos bsicos de %les
La %defattr establece los permisos de archivo por defecto, y se encuentra a menudo en el inicio de la
seccin %files. Tenga en cuenta que esto ya no es necesario a menos que los permisos deban modicarse.
El formato de esta es:
%defattr(<permisos de achivo>, <usuario>, <grupo>, <permisos de directorio>)
%defattr(-,root,root,-),
donde - signica
A continuacin, debe listar todos los archivos y directorios a ser propiedad del paquete. Utilizar macros
para los nombres de directorio donde sea posible, que pueden verse en Packaging:RPMMacros (por
ejemplo, utilice %{_bindir}/mycommand en lugar de /usr/bin/mycommand). Si el patrn comienza con una / (o
cuando se expande desde la macro) entonces se toma desde el directorio %{buildroot}. De lo contrario, se
presume que el archivo est en el directorio actual (por ejemplo dentro de %{_builddir}, como los archivos
de documentacin que desee incluir). Si su paquete slo instala un nico archivo /usr/sbin/mycommand, la
seccin %files simplemente puede ser:
%files
%{_sbindir}/mycommand
Para hacer que su paquete sea menos sensible a los cambios, declare que todos los archivos dentro de un
directorio sean propiedad del paquete con una coincidencia de patrn:
%{_bindir}/*
Tenga en cuenta que %{_bindir}/* no reclama que este paquete sea propietario del directorio /usr/bin, pero
slo de los archivos contenidos en l. Si usted lista un directorio, entonces usted est reclamando que
este paquete sea dueo de ese directorio y de todos sus archivos y subdirectorios contenidos en l. Por lo
tanto, no liste el %{_bindir} y tenga cuidado con los directorios que puedan ser compartidos con otros
paquetes.
30/01/13 23:09
12 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
%{buildroot}
no ha sido listado
Tambin es posible excluir archivos de una coincidencia anterior utilizando el glob %exclude. Esto puede ser
til para incorporar a casi todos los archivos incluidos por una coincidencia de patrn diferente, pero
tenga en cuenta que tambin fallar si no coincide con algo.
Prejos de %les
Puede que tenga que agregar uno o ms prejos a las lneas en la seccin %files; separados con un
espacio. Ver Max RPM section on %les directives (http://www.rpm.org/max-rpm/s1-rpm-inside-leslist-directives.html) .
Por lo general, %doc se utiliza para listar los archivos de documentacin dentro de %{_builddir} que no se
copiaron a %{buildroot}. Usualmente se incluyen los archivos README e INSTALL. Sern colocados en el
directorio /usr/share/doc/%{name}-%{version}, cuya propiedad no necesita ser declarada.
Nota: Si se especica una entrada %doc, entonces usted no puede copiar los archivos en el directorio de
documentacin durante la seccin %install. Si, por ejemplo, desea un subdirectorio ejemplos dentro del
directorio de documentacin, no utilice %doc, pero en cambio cree los directorios y copie los archivos
manualmente en %{buildroot}%{_defaultdocdir}/%{name}-%{version} durante la seccin %install. Sern marcados
correctamente como documentacin. Asegrese de incluir %{_defaultdocdir}/%{name}-%{version}/ como una
entrada en la seccin %les.
Los archivos de conguracin deben ser colocados en /etc y normalmente son especicados como esto (lo
que hace es asegurarse de que al actualizar no se sobrescriban los cambios hechos por el usuario):
%config(noreplace) %{_sysconfdir}/foo.conf
%attr(mode, user, group) puede ser utilizado para un mayor control sobre los permisos, donde un -
signica utilizar el valor predeterminado:
%attr(0644, root, root) FOO.BAR
%lang
para asentarlo:
%lang(de) %{_datadir}/locale/de/LC_MESSAGES/tcsh*
Los programas que utilizan archivos Locale deben seguir el mtodo recomendado para el manejo de
archivos de i18n:
encontrar los nombres de archivo en la etapa
%install:
%find_lang ${name}
%license
gettext
%readme.
/opt
/usr/local.
Desafortunadamente, muchos programas no siguen el FHS por defecto. En particular, las bibliotecas
independientes de la arquitectura se encontrarn en /usr/lib en lugar de /usr/share. El primero es para las
30/01/13 23:09
13 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Bsqueda de duplicados
Puede listar los duplicados de dos paquetes binarios haciendo:
cd ~/rpmbuild/RPMS/ARCH # Sustituir ARCH por su arquitectura
rpm -qlp PACKAGE1.*.rpm | sort > ,1
rpm -qlp PACKAGE2.*.rpm | sort > ,2
comm -12 ,1 ,2
Scriptlets
Cuando un usuario nal instala el RPM, es posible que desee ejecutar algunos comandos. Esto se puede
lograr a travs de scriptlets. Consulte Packaging/ScriptletSnippets.
Los scriptlets se pueden ejecutar:
antes (%pre) o despus (%post) de instalar un paquete
antes (%preun) o despus (%postun) de desinstalar un paquete
al inicio (%pretrans) o al nal (%posttrans) de una transaccin
Por ejemplo, cada paquete RPM binario que almacena archivos de las bibliotecas compartidas en
cualquiera de las rutas de acceso predeterminadas del enlazador dinmico, debe llamar a ldconfig en %post
y %postun. Si el paquete tiene varios subpaquetes con bibliotecas, cada subpaquete tambin debe realizar
las mismas acciones.
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
Si tan slo ejecuta un solo comando, entonces la opcin -p ejecuta el comando adyacente sin invocar el
shell. Sin embargo, para varios comandos, omita esta opcin e incluya los comandos de shell debajo.
Si ejecuta cualquier programa dentro de los scriptlets, debe especicar los requisitos en la forma
Requires(CONTEXTO) (por ejemplo Requires(post)).
%pre, %post, %preun,
y %postun ofrecen el argumento $1, que es el nmero de paquetes de este nombre que
quedar en el sistema cuando la accin se complete. No comparar a la igualdad con 2, pero en cambio
comprobar si es mayor o igual a 2. Para %pretrans y %posttrans, $1 es siempre 0.
Por ejemplo, si el paquete instala un manual de informacin, entonces el ndice del manual de
informacin debe ser actualizado con install-info del paquete info. En primer lugar, no hay ninguna
garanta de que el paquete info estar disponible a menos que lo declaremos explcitamente como
necesario, y en segundo lugar, no queremos fracasar completamente si se produce un error en
install-info:
Requires(post): info
Requires(preun): info
...
%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :
%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
30/01/13 23:09
14 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
fi
Hay otros fallos tcnicos relacionados con la instalacin de los manuales de informacin. El comando
install-info actualizar el directorio de informacin, por lo que debemos eliminar el directorio inservible
vaco de %{buildroot} durante la seccin %install:
rm -f %{buildroot}%{_infodir}/dir
Otra capacidad tipo-scriptlet son los triggers, que se pueden ejecutar con su paquete cuando otros
paquetes sean instalados o desinstalados. Ver RPM Triggers (http://rpm.org/api/4.4.2.2/triggers.html) .
Macros
Las macros son texto en el formato de
Macro
%{string}.
Macros tpicas:
Expansin
tpica
Signicado
%{_bindir}
/usr/bin
%{_builddir}
~/rpmbuild/BUILD
%{buildroot}
%{buildsubdir}
~/rpmbuild
/BUILDROOT
%{_builddir}/%
{name}
%setup.
%{_datadir}
/usr/share
Directorio compartido.
%{_defaultdocdir}
/usr/share/doc
%{dist}
.fcNUMERO
%{fedora}
NUMERO
%{_includedir}
/usr/include
%{_infodir}
/usr/share/info
%{_initrddir}
/etc/rc.d/init.d
%{_libdir}
/usr/lib
%{_libexecdir}
/usr/libexec
%{_localstatedir}
/var
%{_mandir}
/usr/share/man
%{name}
%{_sbindir}
/usr/sbin
%{_sharedstatedir} /var/lib
%{_sysconfdir}
%{version}
/etc
30/01/13 23:09
15 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
usarlos. (Las deniciones de macro pueden referirse a otras macros.) Por ejemplo:
%global date 2012-02-08
Use la opcin -E de
rpmbuild
Otras etiquetas
Adems de las etiquetas Requires y BuildRequires, tambin se pueden utilizar estas para controlar las
dependencias:
Provides: lista de nombres de paquetes virtuales que este paquete ofrece. Por ejemplo, puede haber un
paquete foo que exige una funcionalidad bar particular de otro programa. Si hay varios paquetes
que pueden satisfacer esa demanda, esos paquetes se pueden especicar Provides: bar y el paquete
foo se puede especicar Requires: foo. Tambin puede utilizar el sistema de alternativas
(http://dailypackage.fedorabook.com/index.php?/archives/6-Wednesday-Why-The-AlternativesSystem.html) , pero evitar si varios usuarios en el mismo sistema quieren diferentes valores
predeterminados, ya que estos ajustes son para todo el sistema. Use rpm -q --provides NOMBREDEPAQUETE
para ver lo que un determinado paquete proporciona. Algunos ejemplos de paquetes virtuales en Fedora:
MTA: Usado para el Agente de Transferencia de Correo, tal como sendmail.
tex(latex): Usado para latex.
Obsoletes: eliminar los otros paquetes nombrados cuando estos paquetes sean instalados. Utilizar
cuando cambia el nombre del paquete o cuando reemplaza totalmente a un paquete diferente.
Conicts: estado de otros paquetes que no se pueden instalar al mismo tiempo con ste. Evite esto si
puede. Vea Packaging/Conicts.
BuildConicts: estado de los paquetes que no se pueden instalar en la construccin de ste paquete.
Evite esto si puede.
Para administrar arquitecturas diferentes, hay dos etiquetas:
ExcludeArch: para excluir una arquitectura en la que el paquete no se construye. Por ejemplo:
ExcludeArch: ppc
ExclusiveArch: para incluir slo la arquitectura especicada. Evitar esto a menos que sea
absolutamente correcto.
Las arquitecturas vlidas estn listadas en Arquitecturas.
Subpaquetes
Un archivo SPEC puede denir ms de un paquete binario. En otras palabras, un archivo SRPM con un
SPEC pueden resultar en varios RPMS. Tenga en cuenta que todava hay slo un proceso de creacin
(%prep, %build, %install, etc.). Los subpaquetes name-doc y name-devel son comunes para los archivos de
documentacin y desarrollo respectivamente.
Use la directiva
%package
%package subpackage_name
Despus de cada directiva %package, liste las etiquetas para el subpaquete. Esta debe incluir por lo menos
las etiquetas Summary y Group, as como las directivas %description subpackage_name y %files subpackage_name:
Cualquier cosa no especicada por el subpaquete ser heredado de su padre.
30/01/13 23:09
16 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Por omisin, si el nombre del paquete es foo y el nombre del subpaquete es bar, entonces el
subpaquete resultante ser foo-bar. Usted puede anularlo con la opcin -n (pero tambin tendr que
usarla en todas las dems directivas si la especica aqu):
%package -n new_subpackage_name
Condicionales
Puede insertar sentencias condicionales, por ejemplo para probar, si usted est creando un binario para
una arquitectura determinada:
%ifarch ARCHITECTURE_NAME
o la condicional ms general:
%if TRUE_OR_FALSE
Hay una seccin %else opcional; todos estas son cerradas con %endif.
Varios consejos
Packaging/FrequentlyMadeMistakes tiene informacin sobre errores cometidos con frecuencia. Tambin
hay algunas recomendaciones y trucos controversiales en PackageMaintainers/Packaging Tricks.
Trate de escribir sus archivos SPEC para que pueda trabajar cuando se realice una nueva versin de
desarrollo, sin cambios aparte de subir el nmero de versin y actualizacin de los archivos fuentes. Por
ejemplo, si contiene archivos *.txt con bits de ejecucin, en lugar de hacer
chmod a-x Filename1.txt Filename2.txt Filename3.txt
considere hacer esto, lo que se encargar de los nuevos nombres de archivos que utilizan la misma
convencin de denominacin de archivos:
chmod a-x *.txt
Si quiere ver muchos ejemplos de scriptlets, pueden verse todos los scriptlets de los programas instalados
mediante:
30/01/13 23:09
17 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
No intente interactuar con el usuario; RPM est diseado para soportar instalaciones de procesamiento
por lotes. Si una aplicacin necesita mostrar una EULA, debe ser parte de la ejecucin inicial, no de la
instalacin.
Usted podra no querer iniciar los servicios, ya que en una instalacin grande podra retrasar las cosas. Si
instala un script init o systemd, considere usar chkconfig o systemctl para organizar que el servicio sea
iniciado/detenido en el siguiente reinicio. Antes de desinstalar, debera normalmente intentar detener los
servicios si se estn ejecutando.
La desinstalacin debe revertir la mayora de los cambios realizados durante la instalacin, pero no
eliminar los archivos creados por el usuario.
Normalmente, si hay ejecutables binarios, se eliminan los smbolos de depuracin de los paquetes
binarios normales y se colocan en un subpaquete name-debug. Si esto no sucede, puede deshabilitar la
creacin y remocin 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 remocin es posible que tenga que hacer esto en la seccin
%install:
export DONT_STRIP=1
Una forma de vericar la versin de Fedora en un archivo SPEC para la construccin condicional es:
%if 0%{?fedora} <= <version>
El ? provoca que la macro evale ponerse en blanco si %fedora no est denida. Esto hace que el resultado
nal sea 0 (que es un nmero y por lo tanto aceptable), mientras que no interera con el resultado si hay
realmente un valor para %fedora. (Tenga en cuenta que este truco no funciona en Koji scratch builds,
donde %fedora se establece durante la creacin del SRPM.)
Los programas de la GUI deben tener una entrada desktop para que la gente pueda invocarla desde el
men grco de escritorio. Para los archivos .desktop, consulte Lineamientos de empaquetado de Fedora
para archivos desktop y entrada desktop en spec (http://standards.freedesktop.org/desktop-entryspec/latest/) . Para los iconos dentro de /usr/share/icons, consulte tema de cono en spec
(http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html) .
rpmlint
$ rpmlint program.spec
Si el error reportado no tiene sentido, ejecutarlo de nuevo con la opcin -i para mensajes ms largos.
Trate de no tener errores, pero a veces rpmlint informa falsos positivos. Los Lineamientos de
empaquetamiento de Fedora explica cules ignorar.
~/rpmbuild/RPMS
y SRPMS dentro de
~/rpmbuild/SRPMS.
Si no, vaya al directorio correspondiente y mire lo que queda. Para ayudar a depurar, puede saltarse las
30/01/13 23:09
18 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
etapas anteriores que tuvieron xito con la opcin --short-circuit. Por ejemplo, para reiniciar en la etapa
de %install (saltando etapas anteriores), haga lo siguiente:
$ rpmbuild -bi --short-circuit program.spec
%prep
%build
Pruebe los programas de diferentes maneras para ver si todo funciona correctamente. Si se trata de una
herramienta de GUI, asegrese de que aparece en el men del escritorio, de lo contrario la entrada
.desktop ser errnea.
Desinstalar los paquetes ms 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 vaco. Esto puede revelar si tiene las dependencias de construccin
adecuadas. Si esto falla, entonces se olvid de incluir algo en BuildRequires. Consulte Usando Mock para
probar las construcciones de paquetes. Una vez que su cuenta sea miembro del grupo mock, 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, algunos de
los cuales puede que no tenga. PackageMaintainers/Join y PackageMaintainers/UsingKoji tienen ms
informacin acerca de Koji. Una vez que est instalado, 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 versin posterior de Fedora, pero no use dist-rawhide. Recuerde que los
valores de %fedora, %fc9 y as sucesivamente, no sern correctos para un scratch build, por lo que estos no
funcionarn si el archivo SPEC hace algo diferente, basndose en esos valores.
Sus construcciones Koji slo pueden depender de los paquetes que se encuentran actualmente en el
repositorio de distribucin TARGET. En consecuencia, no puede construir con Koji para distribuciones
liberadas si su paquete depende de otros paquetes nuevos que Bodhi no ha liberado todava. Si necesita
construir en contra de un paquete que no es todava una liberacin estable actualizada, puede presentar
un ticket con rel-eng en: https://fedorahosted.org/rel-eng/newticket y solicitar que dicho paquete sea
aadido como un buildroot override.
30/01/13 23:09
19 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Herramientas tiles
El paquete
instala.
rpmdevtools
-qil rpmdevtools
le mostrar lo que
El paquete
yum-utils
yumdownloader
El paquete auto-buildrequires tiene un par de buenas herramientas para ayudar a descifrar las entradas de
BuildRequires. Despus de instalar este paquete, reemplace rpmbuild con auto-br-rpmbuild y ver una
lista de BuildRequires generada automticamente.
Es posible que encuentre til a RUST (http://rust.sourceforge.net/) (GPL), aunque no crea archivos SPEC
de la calidad adecuada para los paquetes de Fedora. Alien (http://kitenet.net/~joey/code/alien/) convierte
entre formatos de paquetes. No producir SRPMS limpios, pero la conversin de un paquete existente
podra proporcionar cierta informacin til.
Lineamientos y reglas
Al crear los paquetes, deber seguir las siguientes reglas y lineamientos:
Cmo unirse a los Mantenedores de la coleccin de paquetes de Fedora
Lineamientos de empaquetamiento
Lineamientos de nombrado de paquetes
Lineamientos de licenciamiento de paquetes
Lineamientos de la etiqueta Dist
Lineamientos de revisin de paquetes
Hay muchas pautas ociales que le ayudarn con circunstancias especcas (por ejemplo, programas
Java, OCaml, GNOME, etc.). Puede aprender ms desde las secciones SIGs y Maintenedores de paquetes.
Tambin puede ver la lista de todas las pginas Wiki sobre el empaquetamiento (https://fedoraproject.org
/wiki/Special:Prexindex/Packaging) para ver si alguna es aplicable.
En su defecto, puede que encuentre algunas recomendaciones tiles en los Borradores de
empaquetamiento (https://fedoraproject.org/wiki/Special:Search?ns0=1&search=PackagingDrafts%2F&
searchx=Search) no ociales y en Borradores de empaquetamiento para hacer.
30/01/13 23:09
20 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
30/01/13 23:09
21 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
pgina de un fork de RPM mantenido por Je Johnson. El RPM utilizado por Fedora (y Novell/SuSE) se basa
ms bien en rpm.org (http://www.rpm.org) . lwn.net tiene un breve artculo (http://lwn.net/Articles
/236029/) acerca de esto.
Retrieved from "https://fedoraproject.org/w/index.php?title=How_to_create_an_RPM_package
/es&oldid=315883"
Categories:
How to Package Maintainers Spanish translations
30/01/13 23:09
22 de 22
http://fedoraproject.org/w/index.php?title=How_to_create_a...
Copyright 2013 Red Hat, Inc. and others. All Rights Reserved. For comments or queries, please contact us.
The Fedora Project is maintained and driven by the community and sponsored by Red Hat. This is a community maintained site. Red Hat
is not responsible for content.
This page was last modied on 25 December 2012, at 23:37. Content is available under Attribution-Share Alike 3.0 Unported.
Sponsors
Legal
Trademark Guidelines
30/01/13 23:09