Anterior Siguiente Indice

6. Construyendo paquetes RPM

Construir paquetes RPM es algo realmente fácil de hacer, especialmente si puede conseguir que el software que intenta empaquetar pueda compilarse por sí mismo.

El procedimiento básico es el siguiente:

En general, RPM construirá tanto el paquete binario como el de los fuentes.

6.1 El fichero rpmrc

En lo sucesivo, la única configuración de RPM está disponible en el fichero /etc/rpmrc. Éste puede tener la siguiente apariencia:

require_vendor: 1
distribution: I roll my own!
require_distribution: 1
topdir: /usr/src/me
vendor: Mickiesoft
packager:  Mickeysoft Packaging Account <packages@mickiesoft.com>

optflags: i386 -O2 -m486 -fno-strength-reduce
optflags: alpha -O2
optflags: sparc -O2

signature: pgp
pgp_name: Mickeysoft Packaging Account
pgp_path: /home/packages/.pgp

tmppath: /usr/tmp

La línea require_vendor obliga a RPM a requerir una línea de vendor (distribuidor). Ésta puede venir o bien del propio fichero /etc/rpmrc o de la cabecera del fichero .spec. Para desactivar este parámetro debe cambiarse el número a 0. Esto también se aplica a las líneas require_distribution y require_group.

La siguiente línea es la de distribution N.T.: distribución . Puede definirla bien aquí o bien en el fichero .spec. Cuando se empaqueta para una distribución en concreto, es buena idea asegurarse de que esta línea es correcta, incluso cuando no se requiera. La línea de vendor N.T.: distribuidor funciona de la misma manera, aunque puede contener cualquier cosa (ej.: Joe's Software and Rock Music Emporium).

RPM también soporta ahora el empaquetado de paquetes para múltiples arquitecturas. El fichero rpmrc puede incluir una variable de opciones (optflags) que contiene parámetros específicos a la arquitectura. Lea secciones posteriores para saber cómo usar esta variable.

En adición a las macros anteriores, hay disponibles unas cuantas más. Puede usar:

rpm --showrc

para saber cuál de sus etiquetas están configuradas y cuáles son los parámetros disponibles.

6.2 El fichero spec

Ahora hablaremos del fichero .spec. Estos ficheros son imprescindibles para construir un paquete. El fichero spec es una descripción del software acompañado con instrucciones sobre cómo construirlo y una lista de ficheros de todos los binarios instalados.

Debería nombrar a sus ficheros spec de acuerdo a una convención estándar. Tal como nombre de paquete-guión-número de versión-guión-número de publicación-punto-spec.

A continuación, un pequeño fichero spec (eject-1.4.spec):

Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.

%prep
%setup
%patch -p1
%patch1 -p1

%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1

%files
%doc README COPYING ChangeLog

/usr/bin/eject
/usr/man/man1/eject.1

6.3 La Cabecera

La cabecera tiene unos cuantos campos estándar que usted necesita rellenar. También hay unas cuantas advertencias. Los campos deben ser rellenados tal como sigue:

6.4 %prep

Esta es la segunda sección del fichero spec. Se usa para tener las fuentas listas para compilar. Aquí necesita hacer todo lo necesario para obtener los fuentes parcheadas y configuradas para ejecutar un make con ellas.

Una cosa a señalar: Cada una de estas secciones es sólo un lugar para ejecutar guiones de intérprete de comandos N.T.: shell scripts en el original. . Así podrá crear un script simple para sh y colocarlo tras la etiqueta %prep para desempaquetar y parchear sus fuentes. En cualquier caso, hemos creado unas macros para ayudar en esto.

La primera de estas macros es %setup. En su forma más simple (sin parámetros en la línea de comandos), se limita a desempaquetar los fuentes y cambiar el directorio actual al de los fuentes. Puede tener alguna de las siguientes opciones:

La siguiente de las macros disponibles es %patch. Esta macro ayuda a automatizar el proceso de aplicación de parches a los fuentes. Necesita de varios parámetros, listadas a continuación:

Estas deberían ser todas las macros que necesite. En cuanto las tenga claras, podrá crear cualquier otra configuración que necesite mediante guiones sh. Todo lo que incluya hasta la macro %build (discutida en la siguiente sección) es ejecutado vía sh. Busque en el ejemplo anterior el tipo de cosas que puede querer incluir allí.

6.5 %build

En realidad no hay ninguna macro en esta sección. Solamente debe incluir todos los comandos que necesitaría para construir y/o compilar el software una vez que haya desempaquetado y parcheado los fuentes, y se haya movido al directorio correcto. Es pues otra serie de comandos pasados a sh, así que cualquier comando aceptable por sh podrá ir aquí (incluidos los comentarios). El directorio actual es reajustado en cada una de estas secciones al de mayor nivel en el directorio de fuentes, así que téngalo en cuenta. Puede moverse a través de los subdirectorios si resultase necesario.

6.6 %install

En realidad no hay ninguna macro en esta sección. Básicamente debe incluir aquí cualquier comando necesario para instalar. Si el paquete a construir tiene disponible un comando make install, inclúyalo aquí. Si no, o bien puede parchear el fichero Makefile y añadirle la funcionalidad make install e incluir dicha sentencia en esta sección o bien instalarlo a mano mediante comandos sh. Puede considerar su directorio actual como el directorio superior del directorio de fuentes.

6.7 Guiones opcionales pre y post Install/Uninstall

Puede incluir guiones que serían ejecutados antes y después de la instalación o desinstalación de paquetes binarios. Una razón importante para esto es hacer cosas como ejecutar ldconfig tras la instalación o eliminar paquetes que contienen librerías compartidas. Las macros para cada uno de los guiones son:

Los contenidos de estas secciones deben ser solamente guiones sh, luego no resulta necesaria la línea #!/bin/sh.

6.8 %files

Esta es la sección donde debe listar los ficheros del paquete binario. RPM no tiene forma de saber qué ficheros binarios se han instalado tras ejecutar make install. NO hay forma de saberlo.

Algunos han sugerido ejecutar un comando find antes y después de la instalación del paquete. En un sistema multiusuario, esto es inaceptable ya que pueden crearse otros ficheros durante la construcción del paquete que no tienen nada que ver con el mismo.

También hay algunas macros disponibles para hacer cosas especiales. Son las listadas a continuación:

La mayor precacución que debe tener en cuenta en la lista de ficheros es la inclusión de directorios. Si por accidente incluye /usr/bin, su paquete binario contendrá todos los ficheros contenidos en el directorio /usr/bin en su sistema.

6.9 Construcción

``El Árbol de Directorios de los Fuentes''

Lo primero que necesita es un árbol de directorios de compilación configurado de forma apropiada. Esto se puede hacer mediante el fichero /etc/rpmrc. La mayoría de la gente sólo usará /usr/src.

Puede que necesite crear los siguientes directorios para organizar un árbol de construcción:

Prueba de construcción

Lo primero que querrá hacer es asegurarse que los fuentes se construyen adecuadamente sin usar RPM. Para ello, desempaquete los fuentes, sitúese en el directorio $NAME.orig. De nuevo desempaquete los fuentes. Use éstos para compilar. Vaya al directorio de los fuentes y siga las instrucciones para construirlo. Si necesita editar algo, necesitará un parche. Una vez que lo tenga compilado, limpie el directorio fuentes.

Asegúrese que borra todos los ficheros creados por algún guión de configuración. Haga entonces un cd hacia arriba, al directorio paterno. Deberá hacer algo como:

diff -uNr nombredirectorio.orig nombredirectorio > ../SOURCES/nombredirectorio-linux.patch

Lo que creará un parche que podrá usar en su fichero spec. Advierta que el ``linux'' que aparece en el nombre del parche es sólo un identificador. Usted probablemente querrá usar algo más descriptivo como ``config'' o ``bugs'' para describir el porqué del parche. También es buena idea examinar el fichero parche que ha creado antes de usarlo para asegurarse de que no se han incluido binarios por error.

Creación de la Lista de Ficheros

Ahora que tiene los fuentes listos para construir y sabe cómo hacerlo, constrúyalo e instálelo. Examine la salida de la secuencia de instalación y construya su lista de ficheros a partir de ahí para incluirla en el fichero spec. Normalmente nosotros construimos el fichero spec en paralelo a todos estos pasos. Usted puede crear uno inicial y rellenar las partes sencillas e ir rellenando el resto conforme vaya completando los diferentes pasos.

Construyendo el paquete con RPM

Una vez que tenga su fichero spec, está listo para intentar construir su paquete. La forma más útil de hacerlo es con un comando como el siguiente:

        rpm -ba foobar-1.0.spec

Hay otras opciones útiles con el parámetro -b tales como:

Hay varios modificadores para el parámetro -b. Son los siguientes:

6.10 Probándolo

Una vez que tenga los paquetes rpm binario y fuentes, necesitará probarlos. La mejor forma y la más sencilla es usar para el test una máquina completamente diferente de la que usó para la construcción. Después de todo, ha hecho un montón de make install en su máquina por lo que debería haber quedado instalado de forma aceptable.

Puede ejecutar un rpm -u nombredepaquete al paquete a probar, pero puede ser decepcionante porque en la construcción del paquete usted hizo un make install. Si se dejó algo fuera de la lista de ficheros, no será desinstalado. Reinstale entonces el paquete binario y su sistema estará completo de nuevo, aunque no el paquete rpm. Asegúrese y tenga en mente que sólo porque usted hace rpm -ba package; la mayoría de la gente instalará su paquete sólo con rpm -i package.

Asegúrese también de que no hace nada en las secciones build o install que necesite hacerse cuando los binarios se instalan por sí mismos.

6.11 Qué hacer con los nuevos paquetes RPM?

Una vez que ha hecho su propio RPM de algo (asumiendo que no ha sido empaquetado en RPM con anterioridad), puede contribuir con su trabajo a otras personas (asumiendo igualmente que el paquete en RPM es libremente distribuible). Para hacerlo, puede querer subirlo a ftp.redhat.com.

6.12 Y ahora qué?

Por favor mire las secciones anteriores sobre pruebas y qué hacer con los nuevos RPM. Queremos todos los paquetes RPM disponibles que podamos conseguir, y queremos que estén correctamente empaquetados. Por favor, tómese el tiempo de probarlos adecuadamente y de subirlos para el beneficio de todos.

También, por favor asegúrese de que no está haciendo llegar solamente software de libre disposición. Software comercial y shareware N.T.: Probar antes de comprar no deberían ser subidos a menos que esté claramente permitido en alguna cláusula de su licencia. Esto incluye el software de Netscape, ssh, pgp, etc.


Anterior Siguiente Indice