miércoles, 15 de febrero de 2017

Recreacion del sistema de backup online usando el Resilio Sync y una Cubietruck (Cubieboard 3)

Finalidad del artículo

La finalidad inicial del artículo ha sido la de cómo actualizar el linux de la Cubietruck y después migrar de Bittorrent Sync a Resilio Sync, pero por descuido no he creado una copia de seguridad de la tarjeta y actualizando el linux éste ha dejado de funcionar. Por tanto el artículo he tenido que cambiarlo de una actualización y migración a una creación total de la máquina desde cero, pero en este caso he añadido, además del Resilio Sync, el monitor creado con AngularJs y NodeJs para controlar la máquina.
Por si a alguien le interesa y desea intentar actualizar el linux indico a continuación los pasos que he seguido, hasta que me ha fallado, pero le recomiendo encarecidamente que haga una copia de seguridad de la tarjeta por si acaso le pasa lo mismo que a mí.

Actualización del linux:

Antes que nada indicar que hace tiempo pude hacer una actualización del sistema operativo y ejecuté los siguientes pasos:
  • Primero actualicé las librerías a su última versión.
sudo apt-get update
sudo apt-get upgrade
  • Depués actualicé el gestor de paquetes apt.
apt-get check
apt-get install apt
  • Por último subí la versión del linux.
do-release-upgrade

apt update
apt dist-upgrade
Esta última vez he seguido los siguientes pasos.
  • Primero he actualizado las librerías a su última versión:
sudo apt-get update
sudo apt-get upgrade
  • Después he subido la versión del linux.
do-release-upgrade
La ejecución del anterior paso me ha dado como resultado el siguiente error: The required dependency 'apt (>= 1.0.1ubuntu2.13)' is not installed..
Para solucionarlo he bajado el paquete deb que pide desde la siguiente url: https://launchpad.net/ubuntu/trusty/armhf/apt/1.0.1ubuntu2.13.
wget http://launchpadlibrarian.net/254525360/apt_1.0.1ubuntu2.13_armhf.deb
Una vez descargado el fichero lo he instalado ejecutando el siguiente comando.
dpkg -i apt_1.0.1ubuntu2.13_armhf.deb
  • He vuelto a ejecutar el comando de actualización:
do-release-upgrade
He vuelto a obtener otro error, en este caso ha sido el siguiente: Error: The required dependency 'dpkg (>= 1.17.5ubuntu5.6)' is not installed.
Para solucionarlo he bajado el paquete deb que pide desde la siguiente url: https://launchpad.net/~ubuntu-security/+archive/ubuntu/ppa/+build/9631646
wget https://launchpad.net/~ubuntu-security/+archive/ubuntu/ppa/+build/9631646/+files/dpkg_1.17.5ubuntu5.6_armhf.deb
Una vez descargado el fichero lo he instalado ejecutando el siguiente comando.
dpkg -i dpkg_1.17.5ubuntu5.6_armhf.deb
  • He vuelto a ejecutar el comando de actualización:
do-release-upgrade
Si después de ejecutar el comando anterior y reiniciar la máquina, esta arranca (en mi caso no lo ha hecho), se han de ejecutar los siguientes comandos para actualizar las librerías a la versión final.
apt update
apt dist-upgrade

Consideraciones iniciales sobre el artículo

En este artículo se detallan los pasos seguidos para instalar el Lubuntu Server en una Cubietruck (Cubieboard 3) y el Resilio Sync.
Los pasos detallados son los que yo he seguido y que a mí me han funcionado.
En mi caso en la tarjeta SD está el sistema operativo y las aplicaciones, en el disco duro sólo se encuentran los ficheros del BitTorrent Sync.
He aprovechado para instalar el Linaro Server y no el Linaro, como tenía la máquina anterior, de esta forma he conseguido que ocupe menos en la tarjeta sd.

Instalación del sistema operativo en la SD

Desde su página oficial y partir de esta ruta Home › Model › cubieboard3(cubietruck) he descargado la siguiente imagen: linaro-server-ct-card0-hdmi&vga-v1.0.img.7z
Después de descargarla la he grabado en la tarjeta SD.

Configuración del sistema operativo

Para la configuración del sistema operativo he seguido los siguientes pasos.

Configuración del teclado en español:

Para esto ejecutamos el siguiente comando:
sudo dpkg-reconfigure keyboard-configuration
Este comando se encarga de lanzar la aplicación de reconfiguración del teclado.
Seleccionamos Generic 105 key (Intl PC), el idioma Spanish y luego las opciones predeterminadas con OK.

Configuración de red:

En mi caso no la he tocado, ya que uso el DHCP, que es la configuración que viene por defecto.

Configuración de la zona horaria:

Para esto ejecutamos el siguiente comando:
sudo dpkg-reconfigure tzdata
Este comando se encarga de lanzar la aplicación de reconfiguración de la zona horaria.
Seleccionamos la zona geográfica Europe y la zona horaria Madrid.

Cambio del nombre a la cubieboard:

Para esto tenemos que crear/modificar el fichero /etc/hosts y añadir el nombre que deseemos que tenga la cubieboard.
Para ello ejecutaremos el siguiente comando:
sudo vi /etc/hosts
Y cambiaremos los nombres de la máquina en las siguientes líneas, quedando de la siguiente forma:
127.0.0.1       CUBIEBOARD
127.0.1.1       CUBIEBOARD
y el fichero /etc/hostname
sudo vi /etc/hostname
Cambiando el nombre que allí se encuentra por el de la máquina:
CUBIEBOARD

Montado del disco duro:

En mi caso el disco duro es /dev/sda1.
El disco duro se va a montar sobre la carpeta /media/hdd.
Para montar el disco duro y que la configuración se guarde entre arranques del sistema operativo se ha de modificar el fichero /etc/fstab, usando el siguiente comando:
sudo vi /etc/fstab
Para ello añadiremos la siguiente línea a dicho fichero.
/dev/sda1 /media/hdd ext4 defaults 0 2

Actualización del sistema operativo

Para actualizar los paquetes del sistema operativo se han ejecutado los siguientes comandos:
sudo apt-get update
sudo apt-get upgrade

Instalación de Resilio Sync

Para instalar el programa desde apt-get, he seguido la información del siguiente enlace: https://www.resilio.com/blog/official-linux-packages-for-sync-now-available

Preparación del repositorio

Para preparar el repositorio se crea el fichero /etc/apt/sources.list.d/resilio-sync.list, ejecutando el siguiente comando:
sudo vi /etc/apt/sources.list.d/resilio-sync.list
Se añade la siguiente linea:
wget -qO - https://linux-packages.resilio.com/resilio-sync/key.asc | sudo apt-key add -

Instalación

Para instalar la aplicación se ejecuta el siguiente comando.
sudo apt-get update
sudo apt-get install resilio-sync

Configuración

Para configurar el Resilio Sync y poder aprovechar lo que ya tenía del Bittorrent Sync he realizado los siguientes pasos:
  • Nos movemos a la carpeta de configuración del Resilio Sync.
cd /etc/resilio-sync
  • Creamos variables del sistema para ayudarnos en este proceso:
config="/etc/resilio-sync/config.json"
user="root"
  • Extraemos el fichero de configuración por defecto del Resilio Sync:
rslsync --dump-sample-config > $config
  • Reconfiguramos el fichero de configuración por defecto. Para ello se lanzan los siguientes comandos.
sed -i 's/"device_name"\s*:\s*"My Sync Device"/"device_name": "CUBIEBOARD"/g' $config
sed -i 's/"storage_path"\s*:\s*"\/home\/user\/\.sync"/"storage_path": "\/media\/hdd\/btsync"/g' $config
sed -i 's/"login"\s*:\s*"admin",//g' $config
sed -i 's/"password"\s*:\s*"password"//g' $config
sed -i 's/:8888",/:8888"/g' $config
  • Después editamos el fichero de configuración por defecto
vi /etc/resilio-sync/config.json
y descomentamos las líneas que contengan device_name y storage_path si estaban comentadas en el fichero.

Uso datos anteriores de BitTorrnent Sync

Para que pueda tener acceso al disco duro anterior hay que cambiar que el usuario que arranca el servicio, en nuestro caso es root y no rslsync, para ello hay que modificar el fichero /etc/init.d/resilio-sync.
vi /etc/init.d/resilio-sync
y cambiamos
SYNC_USER=rslsync
por
SYNC_USER=root
y además cambiamos
start-stop-daemon --start --quiet -b -o -c $SYNC_USER -u $SYNC_USER --exec $DAEMON --umask 0002 -- --config $CONFIG
por
start-stop-daemon --start --quiet -b -o -c $SYNC_USER -u $SYNC_USER --exec $DAEMON --umask 0007 -- --config $CONFIG
Después de esto ya podemos reiniciar la cubietruck.
sudo shutdown -h 0

Información adicional

Instalación del monitor basado en AngularJs y NodeJs

Basándome en el siguiente artículo Monitor basado en AngularJs y NodeJs para la Cubietruck (Cubieboard 3) he instalado el monitor.

Software instalado

Git

Este es el cliente usado para descargar la web desde github.
Para la instalación he ejecutado los siguientes comandos:
sudo apt-get install git

NodeJS

Para la instalación de NodeJS he elegido la última versión (en el momento de escribir el artículo es la 6.x) y he ejecutado los siguientes comandos:
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
Información adicional

Librerías adicionales que he instalado en la Cubieboard para poder realizar la monitorización

lm-sensors

Para poder detectar la temperatura de la CPU he usado la herramienta lm-sensors.
Los pasos que he seguido para instalarla han sido los siguientes:
Primero he ejecutado el siguiente comando para instalarla:
sudo apt-get install lm-sensors
Una vez instalada he ejecutado los siguientes comandos para configurarla y arrancarla:
sudo sensors-detect
sudo service kmod start
Información adicional

smartmontools

Para obtener la información de los discos se puede utiliar el paquete smartmontools:
apt-get install smartmontools

hddtemp

Para obtener la información de los discos se puede utilizar el paquete hddtemp:
apt-get install hddtemp

Instalación de la web de monitorización

Instalación de la web

Los pasos para instalar el proyecto en la Cubieboard son los siguientes:
  • Configurar git, sólo la primera vez:
git config --global user.email "correo"
git config --global user.name "usuario"
  • Bajar el proyecto desde github a la carpeta ~/cubieboard-monitor:
cd
git clone https://github.com/juaalta/cubieboard-monitor.git cubieboard-monitor
  • Entrar en la carpeta en la que se ha descargado e instalar las dependencias necesarias:
cd cubieboard-monitor

npm install
Una vez seguidos los pasos anteriores, si queremos probar la aplicación sólo tenemos que lanzar el siguiente comando:
nodejs server.js
También puede ejecutarse:
npm start

miércoles, 1 de febrero de 2017

Step detection system by a way with Arduino

Description

The purpose of the project is to detect the passing of cars and people at the entrance to an orchard and a warning beep inside this house.
For this project it consists of 2 modules:
  • Module detection step, either of people or cars.
  • Module warning step.
The requirements are:
  • The step detection module, being in the garden, must have a separate power supply, in this case we have put a solar panel and a battery.
  • The module must sound warning when the detection module warn you.
  • The detection module is at the entrance of the garden.
  • The warning module is inside the house.
Detection module with solar panel

Instructions

Components used

The components used have been:

Assembly of the circuit

The Fritzing scheme is as follows:
  • Detection module
Detection module

In this scheme has not been added to the connection part of the Lipo Rider Pro, battery and solar panel, I not to have the designs for Fritzing.
  • Warning module
Warning module

Images of the system mounted inside the laboratory:
  • Detection module
Solar panel with Lipo Rider Pro and battery
Detection module mounted on a breadboard with initial ultrasound detector
Detection module mounted on a breadboard with final ultrasound detector
Top of the PCB detection module without connected components
Top of the PCB detection module with connected components
Detection module inside his waterproof case

  • Warning module
    Warning module mounted on a breadboard
Top of the PCB warning module without connected components

Top of the PCB warning module with connected components

Warning module inside his waterproof case

Software

The libraries used have been:
The code of the Arduino is the following:
  • Detection module
/*
  Título: Modulo_RF_APC220 --> Puerto serie
*/

#include <Ultrasonic.h>

//Pins ultrasonido
const int TRIG_PIN = 12;
const int ECHO_PIN = 13;

Ultrasonic ultrasonic(TRIG_PIN, ECHO_PIN);

void setup()
{
  Serial.begin(9600); // Establecemos la velocidad del puerto serie (Igual que APC220)
}

void loop()
{

  float cmMsec;
  long microsec = ultrasonic.timing();
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);

  Serial.print(int(cmMsec));
  Serial.println("=");

  delay(1000);

}
  • Warning module

// create notes for our song
int C = 131;
int D = 147;
int E = 165;
int F = 175;
int G = 196;

// create an array to hold note values
int songNotes[] = {E, E, E, E, E, E, E, G, C, D, E, F, F, F, F, F, E, E, E, G, G, F, D, C};
// create another array to hold note lengths
int noteDurations[] = {4, 4, 2, 4, 4, 2, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1};

byte byteRead;  //Datos leídos por el puerto serie
long longitud;  //Longitud recibida por el puerto serie

long longitudMaxima = 100;

String inString = "";                          //This string is used to store the incoming data
unsigned int pitch;                            //This is the variable we will use to store the buzzers p

void setup()
{
  Serial.begin(9600);

  longitud = 0;
}

void loop()
{

  while (Serial.available() > 0)
  {
    byteRead = Serial.read();

    //listen for numbers between 0-9
    if (byteRead > 47 && byteRead < 58) {
      //number found
      longitud = (longitud * 10) + (byteRead - 48);
    }

    if (byteRead == 61)
    {
      Serial.println(longitud);

      if (longitud <= longitudMaxima)
      {
        melodia();
      }

      longitud = 0;
    }

  }

}

void melodia()
{
  // iterate through arrays to play each note for its duration
  // plays our jingle once
  for (int i = 0; i < 24; i ++)
  {
    // calculate note duration
    // 1 second divided by note length
    // adjusting value of 1000 can change tempo
    int noteDuration = 1000 / noteDurations[i];
    // sends tone to pin 8
    tone(8, songNotes[i], noteDuration);

    // pause between notes a little to hear them better
    // this can also be used to adjust tempo
    int pauseBetweenNotes = noteDuration * 1.3;
    delay(pauseBetweenNotes);
    // once note is done, stop playing it
    noTone(8);
  }
}