Tengo una aplicación foobar
para la que alguien ha escrito un parche para agregar una característica que me gusta. ¿Cómo puedo usar el parche?
fuente
Tengo una aplicación foobar
para la que alguien ha escrito un parche para agregar una característica que me gusta. ¿Cómo puedo usar el parche?
Los parches generalmente están contenidos en .diff
archivos, porque los parches se crean usando el diff
comando.
Un parche es una serie de inserciones y eliminaciones en el código fuente. Por esta razón, para usar el parche, debe compilar la aplicación (por ejemplo, "foobar") desde la fuente después de aplicar el parche. Entonces, en pasos:
1. Obtenga el paquete fuente para foobar .
La mayoría de las distribuciones de Linux (los parches nb no son exclusivos de Linux) tienen "paquetes fuente" que puede usar para este propósito, pero como son heterogéneos, aquí solo me referiré al formato de la fuente original. La fuente original no es parte de la distribución y puede ser difícil de encontrar. Un buen lugar para comenzar es Wikipedia, que tiene artículos para muchas aplicaciones populares, y el artículo debe contener un enlace a una página de inicio con una descarga de origen. También puedes buscar en Google, obviamente. El paquete fuente se llamará algo así foobar.0.1.tar.bz2
. Desempaquete esto: ahora tiene un directorio llamado foobar.0.1
.
2. Agregue el parche.
A veces, los parches son archivos únicos y, a veces, son un conjunto de varios archivos. Copie esos en foobar.0.1
y cd foobar.0.1
. A continuación, debe ejecutar el patch
comando. Esto se lee desde la entrada estándar, por lo que desea canalizar el .diff
archivo. La parte difícil es determinar qué usar para la -p
opción (si no hay instrucciones con el parche). Para hacer eso, debe mirar al principio del archivo de revisión. Por ejemplo:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
En este caso, comm.c
es el nombre del archivo fuente que se alterará. Sin embargo, observe que hay un directorio adjunto. Dado que estos no son el mismo directorio ("antiguo" frente a "nuevo"), esta es una gran pista de que esta parte de la ruta es basura (para nuestros propósitos). El propósito del -p
interruptor (ver man patch
) es eliminar este prefijo. Se necesita un número, que es el número de barras ( /
) para eliminar, con todo en el medio; en este caso, usaríamos -p1
para reducir la ruta a simple comm.c
.
Eso supone comm.c
que en realidad está en el mismo directorio, lo que será otra pista sobre si su interpretación es correcta. Si ambas líneas estaban src/comm.c
, y comm.c
realmente están en el src
subdirectorio de su árbol de construcción, entonces necesita usar -p0
, tenga en cuenta que si no usa -p
nada, eliminará TODAS las barras. Si el camino es absoluto (es decir, comienza con /
), eso es probablemente lo que desea. Ahora aplique el parche:
patch -p1 < patch.diff
La fuente ahora ha sido modificada. Si hay más .diff
archivos, aplíquelos de la misma manera.
3. Construir e instalar.
Este es el proceso normal que se vaya a través de construir algo de la fuente - primero ./configure
, a continuación make
, make check
, make install
. Antes de hacer la última, si ya tiene una instalación existente foobar
, decida si desea eliminar o sobrescribir eso o cómo va a lidiar con el conflicto de nombres. Probablemente quiera foobar
referirse a su nueva versión parcheada, y no a la anterior.