Ahora puede usarse RPM para construir paquetes para Intel i386, Digital
Alpha ejecutando Linux y Sparc. También se ha informado de su
funcionamiento en estaciones de trabajo SGI y HP. Hay varias
características que hacen que la construcción de paquetes para todas las
plataformas sea fácil.
La primera de éstas es la directiva ``optflags
'' del fichero
/etc/rpmrc
. Puede usarse para asignar las opciones usadas durante
la construcción del software con valores específicos de cada arquitectura.
Otras son las macros ``arch
'' en el fichero spec. Pueden usarse para
diferentes cosas, en función de la arquitectura para la que se está
construyendo. Otra más, es la directiva ``Exclude
'' de la cabecera.
El siguiente es parte del fichero spec para el paquete ``fileutils
''.
Está configurado para compilar en Alpha e Intel.
Summary: GNU File Utilities
Name: fileutils
Version: 3.16
Release: 1
Copyright: GPL
Group: Utilities/File
Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
Source1: DIR_COLORS
Patch: fileutils-3.16-mktime.patch
%description
These are the GNU file management utilities. It includes programs
to copy, move, list, etc, files.
The ls program in this package now incorporates color ls!
%prep
%setup
%ifarch alpha
%patch -p1
autoconf
%endif
%build
configure --prefix=/usr --exec-prefix=/
make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s
%install
rm -f /usr/info/fileutils*
make install
gzip -9nf /usr/info/fileutils*
.
.
.
Optflags
En este ejemplo puede ver cómo se usa la directiva ``optflags
'' desde
el fichero /etc/rpmrc
. En función de la arquitectura para la que
está construyendo, el valor adecuado lo proporciona RPM_OPT_FLAGS
.
Debe parchear el fichero Makefile
de su paquete para usar esta
variable en lugar de las directivas normales que puede usar (como
-m486
y -O2
). Tendrá una mejor perspectiva de lo que necesita
hacer instalando este paquete de fuentes, desempaquetando el fichero tar
con los fuentes y examinando el fichero Makefile
. Examine el parche
para el Makefile
y compruebe qué cambios son necesarios realizar.
La macro %ifarch
es muy importante para todo esto. La mayoría
de las veces necesitará hacer un parche o dos específicos para una sóla
arquitectura. En ese caso, RPM le permitirá aplicar ese parche sólo para
una arquitectura.
En el ejemplo anterior, fileutils
tiene un parche para máquinas de 64
bits. Obviamente, sólo tiene aplicación en Alpha, por el momento.
Entonces, añadimos una macro %ifarch
al parche de 64 tal como:
%ifarch axp
%patch1 -p1
%endif
Esto asegurará que el parche no es aplicado en cualquier arquitectura excepto en Alpha.
A la vez que puede tener fuentes RPM en un sólo directorio para todas las plataformas, hemos implementado la posibilidad de ``excluir'' paquetes para que no sean construidos en ciertas arquitecturas. Debido a esto, puede hacer cosas como:
rpm --rebuild /usr/src/SRPMS/*.rpm
y conseguir construir los paquetes adecuados. Si todavía no ha portado una aplicación a una determinada plataforma, todo lo que tiene que hacer es añadir una línea como:
ExcludeArch: axp
a la cabecera del fichero spec del paquete de fuentes. Reconstruya entonces el paquete sobre la plataforma para la que está preparado. Como resultado tendrá disponible un paquete compilable sobre Intel pero que es fácilmente omitible sobre Alpha.
Usar RPM para crear paquetes para múltiples arquitecturas es generalmente más sencillo de hacer que conseguir que el paquete compile por sí mismo en todos los casos. Como siempre, la mejor ayuda disponible cuando uno se queda bloqueado al construir un paquete RPM es examinar un paquete de fuentes similar.