2.4. Software de parcheo


En esta sección se explica cómo parchear el software.

En el empaquetado RPM, en lugar de modificar el código fuente original, lo conservamos y utilizamos parches sobre él.

Un parche es un código fuente que actualiza otro código fuente. Se formatea como un diff, porque representa lo que es diferente entre dos versiones del texto. Un diff se crea con la utilidad diff, que luego se aplica al código fuente con la utilidad de parche.

Nota

Los desarrolladores de software suelen utilizar sistemas de control de versiones como git para gestionar su base de código. Estas herramientas proporcionan sus propios métodos para crear diffs o parchear el software.

El siguiente ejemplo muestra cómo crear un parche a partir del código fuente original utilizando diff, y cómo aplicar el parche utilizando patch. El parcheado se utiliza en una sección posterior al crear un RPM; véase Sección 3.2, “Trabajar con archivos SPEC”.

Este procedimiento muestra cómo crear un parche a partir del código fuente original de cello.c.

Procedimiento

  1. Conservar el código fuente original:

    $ cp -p cello.c cello.c.orig
    Copy to Clipboard

    La opción -p se utiliza para conservar el modo, la propiedad y las marcas de tiempo.

  2. Modifique cello.c según sea necesario:

    #include <stdio.h>
    
    int main(void) {
        printf("Hello World from my very first patch!\n");
        return 0;
    }
    Copy to Clipboard
  3. Genere un parche utilizando la utilidad diff:

    $ diff -Naur cello.c.orig cello.c
    --- cello.c.orig        2016-05-26 17:21:30.478523360 -0500
    + cello.c     2016-05-27 14:53:20.668588245 -0500
    @@ -1,6 +1,6 @@
     #include<stdio.h>
    
     int main(void){
    -    printf("Hello World!\n");
    +    printf("Hello World from my very first patch!\n");
         return 0;
     }
    \ No newline at end of file
    Copy to Clipboard

    Las líneas que empiezan por - se eliminan del código fuente original y se sustituyen por las líneas que empiezan por .

    Se recomienda utilizar las opciones Naur con el comando diff porque se ajusta a la mayoría de los casos de uso habituales. Sin embargo, en este caso particular, sólo es necesaria la opción -u. Las opciones particulares garantizan lo siguiente:

    • -N (o --new-file) - Maneja los archivos ausentes como si fueran archivos vacíos.
    • -a (o --text) - Trata todos los archivos como texto. Como resultado, los archivos que diff clasifica como binarios no son ignorados.
    • -u (o -U NUM o --unified[=NUM]) - Devuelve el resultado en forma de salida NUM (por defecto 3) líneas de contexto unificado. Este es un formato fácilmente legible que permite una coincidencia difusa al aplicar el parche a un árbol de fuentes modificado.
    • -r (o --recursive) - Compara de forma recursiva los subdirectorios encontrados.

      Para más información sobre los argumentos habituales de la utilidad diff, consulte la página del manual diff.

  4. Guarda el parche en un archivo:

    $ diff -Naur cello.c.orig cello.c > cello-output-first-patch.patch
    Copy to Clipboard
  5. Restaurar el original cello.c:

    $ cp cello.c.orig cello.c
    Copy to Clipboard

    El original cello.c debe conservarse, porque cuando se construye un RPM, se utiliza el archivo original, no el modificado. Para más información, consulte Sección 3.2, “Trabajar con archivos SPEC”.

El siguiente procedimiento muestra cómo parchear cello.c utilizando cello-output-first-patch.patch, construir el programa parcheado y ejecutarlo.

  1. Redirige el archivo de parches al comando patch:

    $ patch < cello-output-first-patch.patch
    patching file cello.c
    Copy to Clipboard
  2. Compruebe que el contenido de cello.c refleja ahora el parche:

    $ cat cello.c
    #include<stdio.h>
    
    int main(void){
        printf("Hello World from my very first patch!\n");
        return 1;
    }
    Copy to Clipboard
  3. Construya y ejecute el parche cello.c:

    $ make clean
    rm cello
    
    $ make
    gcc -g -o cello cello.c
    
    $ ./cello
    Hello World from my very first patch!
    Copy to Clipboard
Volver arriba
Red Hat logoGithubredditYoutubeTwitter

Aprender

Pruebe, compre y venda

Comunidades

Acerca de la documentación de Red Hat

Ayudamos a los usuarios de Red Hat a innovar y alcanzar sus objetivos con nuestros productos y servicios con contenido en el que pueden confiar. Explore nuestras recientes actualizaciones.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a reemplazar el lenguaje problemático en nuestro código, documentación y propiedades web. Para más detalles, consulte el Blog de Red Hat.

Acerca de Red Hat

Ofrecemos soluciones reforzadas que facilitan a las empresas trabajar en plataformas y entornos, desde el centro de datos central hasta el perímetro de la red.

Theme

© 2025 Red Hat