Los comandos aplicados en este articulo fueron realizados en la distro Kali 1.0 (based in Debian)
Una de las ventajas de los programas (software) open source es que podemos descargar los paquetes fuentes de estos que son los que contienen todos los codigos fuentes. Con ellos podriamos, modificar el mismo y crear nuevas funcionalidades (features) o corregir algun fallo.
Para mantener un orden o integridad, es bueno que las modificaciones hechas al paquete fuente original, se realicen en un patch file. El patch file es un archivo que debe aplicarse al codigo fuente original utilizando el comando con el nombre patch.
Que contiene un archivo patch?
Contiene lineas de codigo fuente de uno o mas archivos contenidos en el paquete fuente original. La extension de un archivo patch es .patch
Consideraciones
Cosas que hasta el momento no encontre en la Web y que debes de saber de como aplicar un Patch son:
1. El patch se aplica al paquete fuente de la aplicacion que deseas aplicar (valga la redundancia) el patch. No al paquete binario, ni al software instalado.
2. Para que el patch file trabaje correctamente debe ser aplicado a la version del paquete fuente correcta. En este punto quiero ampliar. En mi deseo de aplicar un patch a un programa llamado Guake (drop-down Linux terminal emulator), experimente que el patch no se aplica correctamente, si este no encuentra las lineas de codigo que espera que el archivo original tenga en la posicion esperada por el patch file. Y por ello, mi conclusion de que no puedes aplicar el patch a una version para la cual no fue hecho, a menos de que por coincidencia del destino, la nueva version tenga las mismas lineas de codigo en la posicion esperada por el patch.
3. El comando patch puede aplicar el patch file a uno o mas archivos dentro del paquete fuente. Dependiendo de esto, sera como escribas el comando patch en tu terminal.
Ahora, pasemos a una serie de sentencias con el comando patch:
1. Para aplicar un patch a un solo archivo, debes ubicarte en la ruta o carpeta de ese archivo en tu computador y llama al comando patch de la siguiente manera:
# patch < foo.patch
2. Si dejamos de asumir que el patch esta distribuido en un formato unificado y que con ello debe automaticamente identificar a que archivo debe aplicar el patch, entonces puedes especificar el archivo fuente original, que es el archivo a quien se le aplicara el patch, de la siguiente manera:
# patch foo.txt < bar.patch
3. Aplicando el patch a un directorio entero (quizas el caso mas comun) es similar, pero debes guardar cuidado con el atributo -p (p level). Te explico, dentro de los patch files, los archivos a ser parchados (the files to be patched) son identificados por su ubicacion o ruta. Toma en cuenta que el patch file fue creado en otra computadora distinta a la tuya (a menos que tu seas quien creo el patch file) y es muy probable que la ruta sea distinta. Lo que hace el p level es decirle al patch que ignore ciertos niveles o partes de la ruta (path), para que asi este pueda identificar los archivos originales correctamente. Mi recomendacion es que al descomprimir el paquete fuente original te vayas a la carpeta donde colocaste el archivo comprimido que contenia el paquete fuente y ejecutes el comando patch de la siguiente manera (NO olvides copiar el patch file en esta misma ruta):
# patch -p1 < baz.patch
De no funcionarte esta instruccion debes abrir el patch file y ver su ruta. Si por ejemplo, llegase usted a encontrar algo como esto:
Fuentes de este Articulo:
1. http://jungels.net/articles/diff-patch-ten-minutes.html. El que mejor explica lo que es y hace un Patch. Tambien explica el comando Diff, que guarda mucha relacion con el command patch.
2. http://pascal.nextrem.ch/2010/05/06/build-ubuntudebian-packages-from-source-and-apply-a-patch/
Una de las ventajas de los programas (software) open source es que podemos descargar los paquetes fuentes de estos que son los que contienen todos los codigos fuentes. Con ellos podriamos, modificar el mismo y crear nuevas funcionalidades (features) o corregir algun fallo.
Para mantener un orden o integridad, es bueno que las modificaciones hechas al paquete fuente original, se realicen en un patch file. El patch file es un archivo que debe aplicarse al codigo fuente original utilizando el comando con el nombre patch.
Que contiene un archivo patch?
Contiene lineas de codigo fuente de uno o mas archivos contenidos en el paquete fuente original. La extension de un archivo patch es .patch
Consideraciones
Cosas que hasta el momento no encontre en la Web y que debes de saber de como aplicar un Patch son:
1. El patch se aplica al paquete fuente de la aplicacion que deseas aplicar (valga la redundancia) el patch. No al paquete binario, ni al software instalado.
2. Para que el patch file trabaje correctamente debe ser aplicado a la version del paquete fuente correcta. En este punto quiero ampliar. En mi deseo de aplicar un patch a un programa llamado Guake (drop-down Linux terminal emulator), experimente que el patch no se aplica correctamente, si este no encuentra las lineas de codigo que espera que el archivo original tenga en la posicion esperada por el patch file. Y por ello, mi conclusion de que no puedes aplicar el patch a una version para la cual no fue hecho, a menos de que por coincidencia del destino, la nueva version tenga las mismas lineas de codigo en la posicion esperada por el patch.
3. El comando patch puede aplicar el patch file a uno o mas archivos dentro del paquete fuente. Dependiendo de esto, sera como escribas el comando patch en tu terminal.
Ahora, pasemos a una serie de sentencias con el comando patch:
1. Para aplicar un patch a un solo archivo, debes ubicarte en la ruta o carpeta de ese archivo en tu computador y llama al comando patch de la siguiente manera:
# patch < foo.patch
2. Si dejamos de asumir que el patch esta distribuido en un formato unificado y que con ello debe automaticamente identificar a que archivo debe aplicar el patch, entonces puedes especificar el archivo fuente original, que es el archivo a quien se le aplicara el patch, de la siguiente manera:
# patch foo.txt < bar.patch
3. Aplicando el patch a un directorio entero (quizas el caso mas comun) es similar, pero debes guardar cuidado con el atributo -p (p level). Te explico, dentro de los patch files, los archivos a ser parchados (the files to be patched) son identificados por su ubicacion o ruta. Toma en cuenta que el patch file fue creado en otra computadora distinta a la tuya (a menos que tu seas quien creo el patch file) y es muy probable que la ruta sea distinta. Lo que hace el p level es decirle al patch que ignore ciertos niveles o partes de la ruta (path), para que asi este pueda identificar los archivos originales correctamente. Mi recomendacion es que al descomprimir el paquete fuente original te vayas a la carpeta donde colocaste el archivo comprimido que contenia el paquete fuente y ejecutes el comando patch de la siguiente manera (NO olvides copiar el patch file en esta misma ruta):
# patch -p1 < baz.patch
De no funcionarte esta instruccion debes abrir el patch file y ver su ruta. Si por ejemplo, llegase usted a encontrar algo como esto:
/users/stephen/package/src/net/http.c
Y te encuentras en el directorio que contiene net/http.c, entonces deberias ejeucutar la instruccion de la siguiente forma:
#patch -p5 < baz.patch
En general, el -p5 hara que no se tomen en cuenta de la ruta aquellas carpetas hacia arriba desde net (debes contar 5 caracteres slash desde el inicio de la ruta. Es decir que nuestra instruccion anterior solo tomara:
net/http.c
El slash es caracter separador de cada directorio
Para remover un patch debes agregar a tu sentencia el atributo -R, ejemplo:
#patch -p5 -R < baz.patch
Fuentes de este Articulo:
1. http://jungels.net/articles/diff-patch-ten-minutes.html. El que mejor explica lo que es y hace un Patch. Tambien explica el comando Diff, que guarda mucha relacion con el command patch.
2. http://pascal.nextrem.ch/2010/05/06/build-ubuntudebian-packages-from-source-and-apply-a-patch/
Comentarios
Publicar un comentario