Página personal de Heliogabalo, sobre Linux Server.
Todo el mundo habla de los parches, los mods, plugins y, addons. ¿Pero qué son? Hoy nos ocuparemos de los parches y cómo aplicarlos sobre un código existente.
Los parches son modificaciones que se han hecho sobre archivos de código, para cambiar el comportamiento de una aplicación. Consiste en una variación del código original, guardada en un archivo a parte.
Es habitual encontrar en sistemas tipo Unix, aplicaciones para gestionar estos parches.
Comandos como patch
y diff
resultan útiles para un uso generalizado, sobre aplicaciones de
todo tipo, escritas en multitud de lenguajes de código.
nota: un DVCS(sistema de control de versión distribuido) como git, es otro ejemplo de aplicacion, que usa sus própios comandos, para llevar a cabo estas mismas tareas!
El comando patch
toma un archivo de parche patchfile conteniendo una lista de
diferencias producidas por el comando diff
, aplicando estas diferencias sobre uno o más
archivos originales, produciendo las versiones de parche. Normalmente estas versiones de
parche, reemplazan a los archivos originales.
$ git diff test.md diff --git a/Trash/test.md b/Trash/test.md index d9aaaea..3122702 100644 --- a/Trash/test.md +++ b/Trash/test.md @@ -1 +1 @@ -#esto es una prueba +### esto es una prueba
Son ejemplos escritos sobre una shell, en nuetro caso una bash:
$ patch < patch.file
$ patch foo.c < patch.diff
$ patch -pNum < /ruta/al/archivo
En el primer ejemplo es aplicado el parche patch.file
, escribiendo la instrucción tal cual,
sobre la cónsola. El segundo ejemplo muestra como aplicar una diferencias anteriormente
creada, sobre el código original; en este caso foo.c
.
La última línea de ejemplo determina la ruta que seguirá el comando patch
para llegar hasta
el archivo objetivo.
nota: ver página de manual.
Igualmente, los cambios pueden revertirse. Aunque será necesario en todo caso, ambos archivos. Esto es: archivo original y parche.
$ patch -R < /ruta/a/mi_archivo
En esta línea, nos encontramos dentro del directorio que contiene el parche que se ha aplicado
a mi_archivo
y explicitando la ruta que seguirá el comando hasta mi_archivo
, se deshacen
los cambios realizados con la bandera -R
.
Para crear un parche puede utilizarse el siguiente comando:
$ diff -u archivo-original nuevo > patch.diff
Comenzamos creando el archivo hola.c
#include<stdio.h> main(){ printf("Hello, world!\n"); }
A continuación se copia el archivo, con el comado cp
situaremos ésta copia del archivo
en el lugar conveniente, puede ser cualquier directorio -siempre que lo tengamos en cuenta.
$ cp hola.c hola-nuevo.c
Editando el archivo hola-nuevo.c
y añadiendo la línea return 0
, evitaremos algunas
advertencias por parte del compilador.
#include<stdio.h> int main(void){ printf("Hello, world!\n"); return 0; }
Ahora mediante la siguiente línea, será creado el archivo de parche, unificando las diferencias entre ambos archivos:
$ diff -u hola.c hola-nuevo.c > hola.patch
$ cat hola.patch
Volcamos el contenido del archivo con cat
sobre fd1, o lo que es lo mismo: por pantalla!
La salida es algo así:
--- hello.c 2014-04-29 17:59:49.000000000 +0530 +++ hello-new.c 2014-04-29 18:00:43.000000000 +0530 @@ -1,5 +1,6 @@ #include<stdio.h> -main(){ +int main(void){ printf("Hello, world!\n"); + return 0; }
... y aplicamos el parche:
### el archivo hola.patch conoce el nombre del archivo a ser parcheado ##
$ patch < hola.patch
La salida es algo así:
patching file hola.c
Nuevamente con un cat hola.c
imprimimos por pantalla, el contenido del archivo:
#include<stdio.h> int main(void){ printf("Hello, world!\n"); return 0; }
Conviene hacer una copia del directorio, antes de realizar ningún cambio.
$ cp -R mi-dir/ mi-nuevo-dir/
Una vez hecha la copia recursiva del directorio...
$ pwd yes, this is: mi-nuevo-dir, the directory you are searching for, but if not! -> cd /to/it
Finalmente creamos el parche para todo eldirectorio, de la siguiente manera:
$ diff -rupN mi-dir/ mi-nuevo-dir/ > my-dir.patch
Listo para parchear el directorio original sobre la misma máquina, o sobre cualquier otra que
contenga mi-dir
:
patch -p1 < my-dir.patch
Fuente:Vivek Gite
Hace varios años, leí un artículo sobre como crear enlaces de escritorio, para una aplicación que al instalarla, no lo crea. Dado que el mérito no es mio, he decidido colgar al final del post, el enlace a mi fuente.
Como de costumbre, aquí en Territorio Linux, tomamos un enfoque de cónsola, para resolver problemas; aunque leyendo el artículo original, aquellos que sólo usen ratón también podrán conseguir lo mismo.
Lo primero es abrir una terminal. Típico alt + F2
para llamar al lanzador de gnome
y el comando gnome-terminal
, a continuación pulsamos retorno de carro.
Aquí el que prefiera Gedit, desde la ventana que acaba de abrirse pude lanzarlo igualmente.
De cualquier otra forma, nano
es una alternativa disponible en cualquier máquina Linux.
Empezamos creando un archivo al que llamaremos por el nombre del binario y, añadiendo el
.desktop
:
$nano mozilla.desktop
Las siguientes líneas deben escribirse tal cuál. No es necesario modificar ninguna.
Obviamente para la versión del binario habrá que comprovarla antes. Con la bandera
de ayuda, obtendremos el formato adecuado para el comando que buscamos, habitualmente -h
.
[Desktop Entry]
Version=1.0
Type=Aplication
Terminal=false
n.d.e: si lo intentais com Mega(el directorio de 50Gb gratis en la nube), el lanzador es un desastre de proporciones cósmicas. Por lo general, cualquier aplicación de cónsola, por muy pequeña que sea, guarda un pequeño resumen de comandos, accedido desde la cónsola con
-h
o--help
. Por lo que si no sale nada o no funciona esto, hay que sospechar. De la aplicación, del lanzador y, del sitio web desde fue descargado. En nuestro caso la aplicación parece ser que guarda la clabe, en una caché que no se borra ni siquiera reiniciando sistema.
...Continuamos con el archivo:
Name=mozilla
Categories=Network;
Exec=/path/to/binary-file
Comment=Este es mi comentario/algo
Icon=/path/to/imagen.ico
Habrá que guardar el archivo. Las buenas prácticas, dictan hacer estas operaciones sobre un directorio temporal! Continuamos habilitando permisos de ejecución:
$ chmod +x mozilla.desktop
Como es lógico, es innecesario correr según que aplicaciones con permisos de administrador.
En función de esto, colocaremos el archivo donde toque.
Hay dos directorios donde podrá colocarse nuestro archivo:
1. /usr/sahre/applications
. Esta nunca es la primera opción, porque hay que ser un poco mas
meticuloso, ya que habrá que escribir sobre el directorio, con los permisos oportunos. Y
Después, comprobar que tanto los permisos de operación, como los usuarios vinculados al archivo,
son los correctos.
Así que lo ideal, es hacerlo en el directorio de usuario: $HOME/.local/share/applications
$ mv mozilla.desktop $HOME/.local/share/applications
Categorias | Variable |
---|---|
Accesorios | Categories=Utility; |
Gráficos | Categories=Graphics; |
Herramientas de sistema | Categories=System; |
Internet | Categories=Network; |
Juegos | Categories=Game; |
Oficina | Categories=Office; |
Sonido y video | Categories=AudioVideo; |
El archivo completo quedaría algo así:
[Desktop Entry]
Version=1.0
Type=Aplication
Terminal=false
Name=mozilla
Categories=Network;
Exec=/path/to/binary-file
Comment=Este es mi comentario/algo
Icon=/path/to/imagen.ico
Fuente: eldebiandepepe
Package: wnpp
Severity: wishlist
Package name : r-cran-cairo
Version : 1.5-9
Upstream Author : Simon Urbanek
URL : http://cran.r-project.org/web/packages/Cairo
License : GPL
Programming Lang: GNU R
Description :
Librería del dispositivo gráfico de GNU R, de alta calidad, para el desarrollo de mapa de bits (PNG, JPEG, TIFF), vector (PDF, SVG, PostScript) y salida visual por (X11 y Win32).
El dispositivo gráfico Cairo, puede ser usado para crear imágenes de alta calidad, en formato de vector (PDF, PostScriipt y SVG) salidas en mapa de bits(PNG, JPEG, TIFF) y renderización de imágenes con (X11 y Win32). Es utilizado el mismo marco de trabajo, para todas las salidas y, usa la tecnología WYSYWYG para la copia entre formatos.
Los archivos son creados sin dependencias sobre X11 o cualquier otro
programa externo.
El dispositivo soporta el canal alfa(dibujo semi transparente), como resultado
las imágenes pueden contener regiones transparentes o semi transparentes.
Es ideal para su uso dentro de entornos de servidor(salida de archivo) y
como reemplazo a otros dispositivos sin las capacidades de Cairo. Esto es
el canal alfa o anti-aliasing. El marco de trabajo es modular, soportando
otras aplicaciones compatibles.
N.D.T: WYSYWYG; What you see is what you get. Lo que ves es lo que hay.