Bajamos de la nube

Pues eso… La nube, estuve mirando precios y se hacía bastante cara, así que, con un RaspberryPi y un adecuado particionado/uso de disco duro externo, creo que podré salir adelante.

Veamos cómo evoluciona y si esta aventura RaspberryPi llega a mejor puerto que la última, donde se me corrompió la SD un par de veces perdiéndose todo.

Extraño crecimiento de /usr

Desde hace algún tiempo, monitorizo el crecimiento de las particiones del servidor. Curiosamente, desde hace un par de semanas, /usr se ha ido incrementando considerablemente hasta 1GB de más, lo cual no comprendo del todo, pues dicha partición no se usa para “nada”, es decir, los logs, backups… van a otra, así pues, ¿qué puede ser?, ¿alguna idea?.

Por lo pronto ya la estoy vigilando de cerca, así que, en unos días espero saber cuál es la causa.

Detección de Movimiento (y III)

Ya hemos configurado Motion, nos envía alertas, pone las evidencias con un time-stamp y a salvo… ¿qué más nos puede hacer falta?.

Muy sencillo: ¿cómo lo activo?, ¿cada vez que salgo de casa me tengo que hacer root y ejecutar /etc/init.d/motion start?… Eso es mucho rollo, necesito algo automático.

Desde el principio, tengo un par de combinaciones secretas de teclas (en gnome, con el gconf_editor… buscad por ahí), una para activarlo y otra para desactivarlo. Evidentemente, la activación tiene un retardo, para que me dé tiempo a salir de casa sin prisa.

Este sistema, era útil, pero, necesitaba que todavía lo fuese más, es decir, activación automática. Sin embargo, ¿y la desactivación?. Prefiero que sea manual. Si alguien, mediante algún tipo de coacción (navaja en el cuello, pistola en la sien…) entra conmigo a casa, tendré evidencias de este suceso.

¿Cómo hago para activarlo automáticamente?… muy fácil, ¿qué es lo que siempre que sales de casa llevas encima?… ¿el móvil quizas?. A día de hoy, hasta los móviles más chapuceros tienen bluetooth… ¡ya lo tengo todo!

La idea es la siguiente: el móvil siempre tiene el bluetooth activado pero oculto, para que no me lo vean por “ahí”, pero, ¿entonces cómo interactúo con él?

Como la MAC bluetooth es conocida por mi (hcitool scan, eso sí, con el móvil visible sólo para esto) al igual que el “nombre” que le tengo puesto, consultando directamente a la MAC (hcitool info MAC) me dará ciertos datos, así que, tengo un sistema simple de detectar si están los móviles.

#!/bin/bash
MACS=( MAC_BT_DEL_MOVIL1 MAC_BT_DEL_MOVIL2 …. )
IDS=( NOMBRE_MOVIL1 NOMBRE_MOVIL2 …. )
INDICE=0
ESTA_EL_MOVIL=0
MOVILES=0
QUIEN_ESTA=
###########################

ELEMENTOS=${#MACS[@]}

while [ “$INDICE” -lt “$ELEMENTOS” ]
do
ESTA_EL_MOVIL=`hcitool info ${MACS[$INDICE]} 2>/dev/null | grep -v “Requesting information …” | grep ${IDS[$INDICE]} | wc -l`
if [ $ESTA_EL_MOVIL -gt 0 ]
then
let “MOVILES = $MOVILES + 1”
# echo “Detectado móvil ${IDS[$INDICE]}”
QUIEN_ESTA[$INDICE]=${IDS[$INDICE]}
else
QUIEN_ESTA[$INDICE]=”nadie”
fi

let “INDICE = $INDICE + 1”
done

if [ $MOVILES -eq 0 ]
then
#Como no hay móviles, encendemos la alarma
logger “Enciendo la camara porque no hay nadie en casa”
# echo $MOVILES
beep -f 880 -l 100 -r 10 -d 100
/etc/init.d/motion start
else
logger “Estan en casa ${QUIEN_ESTA[0]} y ${QUIEN_ESTA[1]}”
fi
exit 0;

Bueno, creo que ya lo tenemos todo… cualquier sugerencia, mejor de los scripts será bienvenida.

P.S: Los scripts son GNU y como se suele decir, no me responsabilizo. Llevo un par de años usándolos (unos más que otros según he ido actualizando) y hasta ahora sin problemas.

P.S.2: Lo sé, picar código no es lo mío y es posible que haya barbaridades en los scripts, pero una vez más, a mi me funcionan.

Detección de Movimiento (II)

Ya tenemos instalado Motion, nos genera chorrocientas imágenes cada vez que hay un cambio, pero, siguen en local y no tenemos ni idea cuándo pasa algo.

Para solucionar esto, se me ocurrió usar un directorio para las fotos y vídeos nuevos que genera. Dicho directorio será limpiado cada vez que arranque, para evitar tener morralla que no sirve. Para ello, el inicio lo he modificado del siguiente modo:

#!/bin/bash
#
# motion      Capturador de movimiento por webcam
#
# chkconfig: 2345 90 30
# description: Montion es un programa para capturar movimiento con
#              dispositivos v4l.
# processname: motion
# config: /etc/motion/motion.conf

start() {

ACTIVO=`ps -ef | grep motion | grep -v grep | grep -v init | wc -l`
if [ $ACTIVO == 0 ]
then
#    echo “Motion NO Esta activo”

RUTA=”RUTA A LAS FOTOS NUEVAS”
RUTA2=”RUTA AL DIRECTORIO DE BACKUP/LIMPIEZA”
VIEJAS=-2
FOTO=0

LISTA=`ls -tr $RUTA/ | cut -d  -f1`

for i in $LISTA
do
if [ “$i” == “foto.jpg” ]
then
FOTO=1
fi

if [ !$FOTO ]
then
if [ “$1” != “foto.jpg” ]
then
VIEJAS=`expr $VIEJAS + 1`
fi
fi

done

if [ $VIEJAS -gt 0 ]
then
FOTOS_VIEJAS=`ls -tr $RUTA/20* | head -n $VIEJAS | cut -d  -f1`

for i in $FOTOS_VIEJAS
do

mv $i $RUTA2
#echo “-a $i ” >> $TEMPORAL

done
fi

#ACTIVO=`ps -ef | grep motion | grep -v grep | wc -l`

#if [ !$ACTIVO ]
#then
/usr/bin/motion
echo “1” > /tmp/sms
fi
exit 1

}

stop() {

pkill motion

exit 1

}

backup() {

VIEJAS=-2
FOTO=0

LISTA=`ls -tr $RUTA/ | cut -d  -f1`

for i in $LISTA
do
if [ “$i” == “foto.jpg” ]
then
FOTO=1
fi

if [ !$FOTO ]
then
if [ “$1” != “foto.jpg” ]
then
VIEJAS=`expr $VIEJAS + 1`
fi
fi

done

if [ $VIEJAS -gt 0 ]
then
FOTOS_VIEJAS=`ls -tr $RUTA/20* | head -n $VIEJAS | cut -d  -f1`

for i in $FOTOS_VIEJAS
do

mv $i $RUTA2
#echo “-a $i ” >> $TEMPORAL

done
fi

exit 1
}

case “$1” in
start)
start
;;
stop)
stop
backup
;;
backup)
backup
;;
restart)
stop
start
;;
*)
echo “Usage: motion {start|stop|restart|backup}”
exit 1
esac

Con un directorio que sé que está vacío en cada nueva ejecución, sólo tengo que periódicamente comprobar si aparecen nuevas fotos, o lo que es lo mismo, se genera un “evento” (provocando las fotos y vídeos).

Bien, ya sabemos detectar eventos, pero, ¿cómo me avisan?. Para ello, el aviso será a una cuenta de correo electrónico, en el que además, adjuntamos las fotos. Esto tiene tres ventajas:

a) Sacamos las evidencias fuera del servidor, así que, si sufrimos un robo o incendio, tendremos seguridad de no perder esos valiosos datos.

b) De algún modo, podremos certificar, gracias al servidor externo de correo, un time-stamp, que, con un buen peritaje, no creo que un Juez se niegue a aceptarlo.

c) Un modo rudimentario de alertas, aunque por e-mail, lo que no es inmediato, pero en determinados entornos puede que no nos quede otra.

Vale, ya he sacado las fotos fuera, pero, ¿y las alertas?. Para ello, generalmente los operadores de telefonía móvil suelen dar una cuenta de correo asociada a un número de móvil, de tal modo que te das de alta en ese servicio (gratuito en todos los casos que conozco) y cuando te llega un mail el operador, envía un SMS con, al menos, el remitente y sin coste alguno. Antiguamente también enviaban el subject, pero eso lo convertía en una forma interesante de recibir SMS gratis.

Para todo ello, tengo un script en el crontab que hace todo esto:

#!/bin/bash
#Definimos las variables
RUTA=”RUTA CON LAS IMÁGENES NUEVAS”
REMITENTE=”DIRECCIÓN DE EMAIL QUE GENERA LAS ALERTAS”
MENSAJE=”SUBJECT DEL EMAIL”
TEMPORAL=”/tmp/VARIABLE_TEMPORAL”
DESTINATARIOS=( CORREO1@DOMINIO CORREO2@DOMINIO …)
COMODIN=”foto.jpg”
SMS=”/tmp/sms”
UMBRAL=10
#EJECUCION
###############################

COMPRUEBA=`echo $EMAIL`
if [ “$COMPRUEBA” != “$REMITENTE” ]
then
export EMAIL=”$REMITENTE”
fi

#export

LISTA=`ls -tr $RUTA/ | cut -d  -f1`
NUEVAS=-1
TOKEN=`cat $SMS`

for i in $LISTA
do
if [ “$i” == “$COMODIN” ]
then
FOTO=1
fi

if [ $FOTO ]
then
NUEVAS=`expr $NUEVAS + 1`
fi

done

if [ $NUEVAS -gt 0 ]
then
FOTOS_NUEVAS=`ls -tr $RUTA/20* | tail -n $NUEVAS | cut -d  -f1`

for i in $FOTOS_NUEVAS
do
echo “-a $i ” >> $TEMPORAL
done

ADJUNTOS=`cat $TEMPORAL`

rm -f $TEMPORAL

ELEMENTOS=${#DESTINATARIOS[@]}
INDICE=0

while [ “$INDICE” -lt “$ELEMENTOS” ]
do
echo “$MENSAJE” | mutt -s “$MENSAJE” $ADJUNTOS ${DESTINATARIOS[$INDICE]}
logger “Envio mail a ${DESTINATARIOS[$INDICE]}”
let “INDICE = $INDICE + 1”
done

logger “ALERTA: DETECTADO MOVIMIENTO”

ULTIMA=`ls -tr $RUTA/20* | tail -n 1 | cut -d  -f1`
cp $ULTIMA $RUTA/foto.jpg -f

#Si hay mas de 8 fotos, enviamos SMS
if [ $NUEVAS -gt 8 ]
then

TOKEN=`expr $TOKEN + 1`
echo “$TOKEN” > $SMS

if [ $TOKEN -eq 1 ]
then
echo “$MENSAJE” | mutt -s “$MENSAJE” $CORREO
logger “SMS: SE ENVIA SMS”
fi
fi

fi

Bueno, con esto ya tenemos casi todo… ¿o no?

Detección de Movimiento (I)

Como ya sabéis algunos, en casa tengo un sistema de detección de movimiento con alertas.

Al comienzo de venir a vivir al piso de alquiler, como el portero tenía también las llaves, sospechaba que pudiese entrar, como pasó una vez para “quitarme” un ambientador a pilas que tenía… el hombre se excusaba en que pensaba que era del casero.

Con estos antecedentes, tenía claro que necesitaba algo que me avisase si algo pasa, así que, me puse manos a la obra.

Antiguamente, usaba Camorama con Apache, lo que permitía refrescar cada cierto tiempo una imagen en un servidor web. Este sistema, para ver un nido de pájaros puede estar bien, o para ver si hay nieve en la sierra, o mi habitación como hacía, pero no es válido para vigilar.

Busqué, por aquel entonces, algún software que detectase movimiento con una webcam (básicamente, que capturase una imagen, capturase otra pasado cierto tiempo y que haga un resta). Realmente no es complejo hacerlo, pero, ya había alguien que lo había hecho: Motion.

Motion está bien, no es tan completo como otras soluciones actuales, pero hace un par de años no encontré nada mejor.

Tiene dos formas de configurarse: a pelo, editando el fichero de configuración motion.conf, o bien, si consigues que arranque, a través de la interfaz web en el puerto 8082.

Una vez que está arrancado me surgió un problema: ¿cómo hago que me avise?

No sólo de Linux vive el "friki"

Pues sí, no sólo me “alimento” de Linux, sino que he descubierto una afición nueva: el Fimo

¿Qué es el FIMO?: Es una especie de pasta, como plastilina, pero que al meterlo al horno, endurece. Hay de todos los colores y con todos los “efectos” (con jaspeados, brillos…).

Alicia, en su afición con los abalorios, me descubrió este tipo de modelado, pues en ese “mundo” se usa bastante. Evidentemente, no me voy a poner a hacer pendientes, pero sí pequeñas esculturas y lo que vaya surgiendo, como piezas “custom” para el arduino (como por ejemplo, sujetar la webcam y cosas así).

Por lo pronto, he cambiado el llavero. Antes llevaba uno de RedHat que me dieron en un curso y ahora…

Calavera de FIMO