19 enero 2016

Diario (I)

Voy a intentar crear un servidor de paginas web desde la raspberry pi. Tengo una ip estática lo que facilitará bastante el tema. Si consigo que todo vaya ok, luego intentaré hacerlo con ip dinámica. Si no estoy equivocado, ya instalé un servidor apache en la raspberry. Lo compruebo introduciendo la ip local de la misma en el navegador web. Todo ok. De todas formas si lo quisiera instalar de nuevo sólo debo seguir estas instrucciones Compruebo también si tomcat esta instalado. No lo está, de momento no lo necesito. Como hace bastante que no usaba esta raspberry, voy a actualizar el sistema con los clásicos:
sudo apt-get update sudo apt-get upgrade
Mientras la raspberry trabaja, voy mirando documentación de apache. Lo básico que hay que saber es que el directorio por defecto es en /var/www ( en la documentación de raspberry explica que en las nuevas versiones es una diferente, habrá que acordarse de esto en el futuro.
He copiado algunos archivos a un subdirectorio de /var/www lo he llamado web. Voy a 192.168.1.XXX/web. Todo ha funcionado perfectamente.
Llegados a este punto me gustaría que una raspberry que tengo en otro sitio me enviase algunos datos con cierta periodicidad, entre ellos y el más importante la última dirección IP pública ya que es dinámica y no puedo crear un tunel con ella salvo que lo sepa, lo cual me obliga a estar enviando whatsapps cada vez que necesito algo.
Voy a modificar un poco el código que escribí en la entrada Cómo acceder a un Linux desde internet. El código definitivo es:
#!/bin/bash
# Este archivo lo llamamos ipp.sh

# curl es un comando para cargar el código de una páguina web, -s es para el el silent mode (aunque no aprecio diferencia entre una y otra, tal vez debería leer la documentación (otro dia)). La web icanhazip nos devuelve nuestra ip publica. Lo guardo en la variable actualIP.
actualIP=$(curl -s icanhazip.com)

# detengo el script 30 segundos para dar tiempo a que se cargue
sleep 30

# guardo la ultima línea del archivo ipp.txt (si en vez de 1 hubiese puesto 2 hubiese guardado las dos ultimas lineas)
ultimaLinea=$(tail -n 1 ipp.txt)

# entre las comillas simples esta la siguiente expresión regular .*ipp \(.*\) la cual significa . --> cualquier carácter; * --> repetido 0 o más veces; ipp --> literalmente ipp y un espacio; \( --> la barra invertida es para escapar el paréntesis ya que es un carácter reservado de bash, los paréntesis es para capturar ese grupo, es decir que el comando expr devolverá lo que hay entre paréntesis, que es .* --> cualquier caracter aparecido 0 o más veces.
ultimaIP=$(expr match "$ultimaLinea" '.*ipp \(.*\)')

#comparamos las dos variables, si son diferentes actuamos.
if [ "$actualIP" != "$ultimaIP" ];
then
#lo primero es añadir una linea al fichero ipp.txt con la siguiente estructura, la fecha, la cadena ipp y luego la ip.
echo $(date) "ipp" $a >&gt ipp.txt
#lo siguiente es enviar el archivo por scp a la otra direccion ip, la que nos hace de servidor. Otra opcion que se me ocurre es crear un servidor php en la ip estatica y enviarle los datos mediante post.

Hasta aquí por hoy, no puedo dedicarle más tiempo. Continuo otro día, al final del cual dejaré el código pelado para usar.