Dentro de la tareas de preparar un paquete RPM mediante la creación del fichero SPEC que define los pasos necesarios para compilar correctamente un código, está la de preparar y aplicar parches al código original para que se adapte bien a nuestro sistema. Esta «chuleta» resumen los pasos y sintaxis necesarios. Para obtener una descripción detallada de cómo preparar un fichero SPEC recomiendo consultar el manual de Fedora.
Preparar el parche
$ tar xvzf example-1.0.0.tar.gz
$ mv example-1.0.0 example-1.0.0-orig
$ tar xvzf example-1.0.0.tar.gz
Haz los cambios que quieras realizar en los ficheros del directorio name-version. Al acabar se prepara el parche con el comando:
$ diff -uNr example-1.0.0-orig example-1.0.0 > a-patch-name.patch
Aplicar manualmente el parche
Suponiendo que los ficheros example-1.0.0.tar.gz y a-patch-name.patch residen en el mismo directorio:
$ tar xvzf example-1.0.0.tar.gz
$ cd example-1.0.0
$ patch -p1 < ../a-patch-name.patch
Especificar el parche en el fichero SPEC
En el fichero Spec incluiremos el parche mediante la etiqueta Patch: y en la sección donde se dan las instrucciones de preparación del directorio de compilación del código, se indica que se aplique el código. Por ejemplo, el fichero example.spec podría contener algo como esto:
Name: example
Version: 1.0.0
...
Patch: a-patch-name.patch
%description
Bla, bla.
%prep
%setup -q
%patch -p1
...
Especificar varios parches en el fichero SPEC
Name: example
Version: 1.0.0
...
Patch0: a-patch-name-1.patch
Patch1: a-patch-name-2.patch
%description
Bla, bla.
%prep
%setup -q
%patch0 -p1
%patch1 -p1
...
Aplicar todos los parches del fichero SPEC
Podríamos aplicarlo uno a uno con el comando patch. Pero la forma más rápida será utilizar el propio fichero SPEC y el comando rpmbuild para que el mismo aplique los parches conforme indique la sección %prep.
$ rpmbuild -bp example.spec
Y el código, descomprimido y parcheado quedará (normalmente) en el directorio
- $HOME/rpmbuild/BUILD/example-1.0.0
aunque esta es ruta se puede configurar en el equipo de desarrollo y en el propio fichero SPEC.