miércoles, 6 de junio de 2012

Sincronizando con INCRON

y ayudando a mi padre ... con mi RaspberryPi


Hace como ¿20 años? mi padre empezó a coleccionar botijos, y a los pocos años le regalé una web para que pudiera lucir su colección: www.elbotijero.com os la recomiendo si os gustan los botijos, búcaros y cerámica en general. Hoy os voy a comentar como usando un poco de magia linuxera consigo ayudar a que mi padre mantenga la web ... cómo no, con ayuda de mi RaspberryPi.

La web la tengo alojada en un servidor italiano desde hace, pues eso, mucho. No tiene wordpress, ni blog, ni nada, solo alojamiento de php y mysql, eso si, muy barato. El caso es que cuando hace fotos a los nuevos botijos, las hace a chorrotocientos megapixeles y la web tardaría un siglo en cargar, así que le hago una primera redimensión a un tamaño medio y luego otro a una miniatura. Enseñé a mi padre a convertir las fotos y subirlas desde un linux que le instalé, pero ya no está y paso de hacerle eso en un windows, asi que lo que se me ha ocurrido:

  1. Mi padre hace las fotos
  2. Las copia a una carpeta determinada, y ya está

Luego mi RaspberryPi, automáticamente:

  1. Comprueba que hay una foto nueva
  2. Crea dos imágenes redimensionadas
  3. Las sube a la web
  4. Borra los archivos temporales
Para ello, necesito instalar en mi RaspberryPi:
apt-get install ftpd curl imagemagick incron
La clave está en el incron, funciona con el inode del kernel de linux, es como el cronttab, pero actúa sobre cambios, en lugar de ser periódico. En este enlace tenéis más info.
Empecemos:
echo root >> /etc/incron.allow 
Para lo siguiente es bueno que useis el ejemplo para localizar el evento concreto que os interesa, en mi caso es IN_CLOSE_WRITE, por lo que:
incrontab -e
y añado:
/home/juanmol/botijos IN_CLOSE_WRITE /bin/bash /usr/local/bin/subefotobotijo.sh $@ $#
Esto viene a ser que cuando el evento IN_CLOSE_WRITE se registre en el directorio /home/botijos/botijos se ejecute el script con parámetro1, la ruta del archivo que provocó el evento y como parámetro2, el archivo en si mismo.
A continuación:
incrontab -d
Y se actualizan los cambios.
El script es:
#!/bin/bash
mkdir -p /tmp/elbotijero/mini >> /tmp/log

convert -resize 1280x -quality 50 $1/$2 /tmp/elbotijero/$2
convert -resize 63x -quality 50 $1/$2 /tmp/elbotijero/mini/$2

curl -T /tmp/elbotijero/$2 -u USER@SERVER:CLAVE ftp://RUTA/imagenes/
curl -T /tmp/elbotijero/mini/$2 -u USER@SERVER:CLAVE ftp://RUTA/mini/

rm $1/$2
rm /tmp/elbotijero/$2
rm /tmp/elbotijero/mini/$2
Fácil ¿verdad? Ahora en el windows, monto una carpeta que apunte al ftp del Raspberry y listo :)

No hay comentarios:

Publicar un comentario