Explicando un tunel ssh

Que mejor manera de explicar un tunel ssh que con un dibujito?
(Me he dejado las puppets en casa)

A veces parece increíble que a un ingeniero diplomado le cueste entender el concepto de “cerca”, “lejos” y “saltar a través” que supone un tunel.

Personalmente siempre me ha gustado la explicación con ascii art:

+----------+<--port 22-->+----------+<--port 80-->o-----------+
|SSH Client|-------------|ssh_server|-------------| host |
+----------+ +----------+ o-----------+
localhost:8888 computer www.linuxhorizon.ro:80

En el que basta con explicar que “www.linuxhorizon.ro:80” no es accesible desde “SSH Client” y mediante el tunel ssh a través de “ssh_server” QUE SÍ TIENE ACCESO, te traes el puerto :80 a tu ordenador en el puerto 8888.
Todo esto con una linea tan simple como:

SSH Client$ ssh -L 8888:www.linuxhorizon.ro:80 ssh_server

Os dejo el maravilloso dibujo con el que puede ser que me haya entendido “mi” usuario ;-)

Parallel rsync’ing a huge directory tree

Some days ago I was on the chance to transfer a huge directory.

Huge means ~50TB with +10million files and a deep of only 6 folders under the parent one.
As I must do that kind of transfer more than 10 times with the same amount of folders… I decided to implement some kind of parallel function which launch parallel rsync’s at a given deep of my choose.

The ressult was that “pure bash” little script (the only dependency is “screen”)… You’ll notice that the main function “sync_this()” will run alone in your script only changing 2 or 3 variables ;-)
Continue reading “Parallel rsync’ing a huge directory tree”

UUID’s, pupets, redhat y ¿¿ubuntu??

Supongo que a cualquier linuxero le hacen mucha gracia los UUID’s, sobre todo cuando después de particionar el disco duro planchado por un sistema de imaging (pupet) te cambian los UUID’s sin tú darte cuenta…
Y claro, arranca tu el sistema después si quieres ¬¬
Asi que nada, arrancando con la shell mínima (init=/bin/sh) a cambiar todas las entradas del fstab por algo que todos entendemos, es decir /dev/sda* y pa’lante.

Lo curioso de todo esto es cuando intetas hacer un “init 6” y el redhat modificado de turno te responde con esto:
Ubuntu en redhat?

Problem redhat? ;-)

Linux tree

Impresionante recreación del árbol de linux’es (linux flavours) que hay en la wikipedia inglesa, ni lo he mirado en la española…
Para mi es asombrosa la variedad de sabores que tenemos para elegir.
En algunos momentos es un poco desesperante por que empiezas a escribir en la consola:
yum search
apt-cache search
pacman -Ss paquete

En combinaciones varias dependiendo de donde te encuentres si tienes diferentes linux montados y cual es el último con el que has interactuado :-P

Pero una cosa sí que tengo clara y es que SIEMPRE encontrarás una distribución con la que te vas a encontrar como en casa y la harás tuya. Y que luego vendrá archlinux y le dará la vuelta a la casa … ;-)

Que levante la mano el linuxero que no ha probado al menos 10 distros ;-)

La linea del día

Hoy toca party hard por que el servidor que hace repositorio local se está quedando sin espacio asi que a riesgo de que romper algo y volver a tener que replicar Dag me he puesto a borrar todos los paquetes que tienen varias versiones dentro del repositorio…
El resultado como one-liner es interesante:
[cc lang=”bash”]
ls -1 | awk ‘BEGIN{FS=”-[0-9]”}{print $1}’ | uniq -c | egrep -v “^[[:space:]]{1,}1 ” | awk ‘{print $2}’ | while read LINE ; do let x=0 ; for i in $(find . -name “${LINE}-[0-9]*”) ; do ARRAY[$x]=$i ; let x++ ; done ; for ((j=0; j<$((${#ARRAY[@]}-1)); j++)) ; do rm -f "${ARRAY[$j]}" ; done ; unset ARRAY ; done [/cc] Aunque es un poco heavy para ser una one-line pura xD al verla después hay que soltar poco menos que un WTF.

Mysql Database creation script

Two days ago one of my client dev’s requested me to be able to create db’s on their MySQL instance.
Of course, I won’t give him the “GRANT GRANT WITH GRANT OPTION” :-P, in that case I will simply give him root password :-P
As i didn’t find anything that solves my problem over Internet, I just did mine, as allways..
Here’s he result.

Prereqs:

  • Create a Mysql user with the following grants:
    [cc lang=”bash”]
    GRANT CREATE, RELOAD, SHOW DATABASES, CREATE USER ON *.* TO ‘database_creator’@’localhost’ IDENTIFIED BY ‘YOUR_PASSWORD’ ;
    GRANT INSERT ON `mysql`.`db` TO ‘database_creator’@’localhost’ ;
    [/cc]
  • That will allow us to create databases, users, make some checks and reload privs, while we don’t create a new “root”…

You can download the script code from the wiki, also you’ll find additional information there.