Archives par étiquette : debian

PiTimeLapse – 13 – Premier retour d’expérience et améliorations

J’ai pu tester le dispositif pendant une semaine sur notre terrain. En mode commando avec une petite pelle et une lampe frontale, tout l’équipement dans un sac noir, je suis allé enterrer le paquet au fond du terrain un dimanche soir, et suis revenu le cherché le dimanche suivant.

IMG_5676J’ai imprimé une petite note explicative sur le dessus de la boite contenant le dispositif avec mes coordonnées, au cas où quelqu’un tomberait dessus…

Après avoir armé le système et synchronisé l’horloge du circuit d’alimentation, j’ai creusé un trou au fond du terrain pour y cacher la boite. La webcam est attachée sur une clôture à environ un mètre du sol. Il n’y a plus qu’à croiser les doigts pour que tout se passe bien… Le lendemain, je devrais recevoir les premières images sur le serveur de monitoring à partir de 8h. Bizarrement, je sens une légère angoisse en laissant tout ce matériel dans la nature :/

Continuer la lecture

10 – Module 7 – VPN

J’utilise un petit serveur VPN PPTP pour que mes amis et moi puissions facilement échanger des fichiers ou jouer ensemble en réseau 🙂 C’est très facile à mettre en place aussi bien coté serveur en installant le paquet pptpd, que coté client car c’est nativement supporté par Windows.

Ce module me permet d’afficher la liste des personnes qui sont connectées à mon serveur VPN PPTP.

jarvis_screenshot_VPNJe ne détail pas dans cet article comment installer et configurer PPTPD. Voici un tutoriel qui vous aidera à mettre en place ce type de VPN : https://help.ubuntu.com/community/PPTPServer

Le serveur pptpd étant installé sur ma gateway, il faut procéder de la même manière que pour le module graphique de la bande passante pour transférer les données sur le Pi en utilisant netcat. La seule chose de nouveau ici est la commande last qui permet de récuppérer les informations de connexion des clients du VPN.

Transférer les données vers le Pi

Côté Pi (serveur netcat) :

#!/bin/bash

### BEGIN INIT INFO
# Provides:          nc_vpn_srv
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: vpn for Jarvis
# Description:       Enable service provided by daemon.
### END INIT INFO

dst_port=12346
dst_dir=/home/jarvis/vpn
dst_file=vpn_oberon.log

nc_vpn()
{
  while [ "true" ]
  do
    nc -q 1 -u -l 12346 > $dst_dir/$dst_file < /dev/null
    sleep 5
  done
}

case "$1" in
        stop)
                echo " Stoping vpn for Jarvis..."
                killall vpn
                killall nc
                ;;
        start)
                echo " Starting vpn for Jarvis..."
                nc_vpn&
                exit 0
                ;;
        *)
                exit 1
                ;;
esac

exit 0

Côté gateway (client netcat) :

#! /bin/bash

### BEGIN INIT INFO
# Provides:          nc_vpn_clt
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: vpn for Jarvis
# Description:       Enable service provided by daemon.
### END INIT INFO

src_port=8889
dst_port=12346
dst_host=10.0.0.1

nc_vpn()
{
        while [ "true" ]
        do
                last | grep ppp | grep "logged in" | nc -q 1 -p $src_port -u $dst_host $dst_port
                sleep 5
        done
}

case "$1" in
        stop)
                echo " Stoping vpn for Jarvis..."
                killall vpn
                killall nc
                ;;
        start)
                echo " Starting vpn for Jarvis..."
                nc_vpn&
                exit 0
                ;;
        *)
                exit 1
                ;;
esac

exit 0

Excécutez ces scripts au démarrage du système en les placants dans le répertoire /etc/init.d puis exécutant la commande suivante :

update-rc.d nom_du_script.sh defaults

index.php

Une simple <div> suffit car nous voulons simplement afficher une liste d’utilisateurs :

<div id="vpn"></div>

style.css

Un petit peu de mise en forme pour faire joli 🙂

/* vpn */

div#vpn
{
  left              : 550px;
  bottom            : 10px;
  position          : absolute;
  overflow          : hidden;
  background-color  : rgba(0, 0, 0, 1);
  color : #FFF;
}

td.vpn
{
  text-align        : left;
  font-size         : 30px;
  padding           : 5px;
}

img.vpn
{
  width : 20px;
  height : 20px;
}

javascript.js

Une simple requête AJAX permet de récupérer les données à afficher.

/* VPN */

var vpn_timeout;

function vpn ()
{
  $.ajax({
    async : false,
    type: "GET",
    url: "./ajax.php",
    data: "block=vpn",
    success: function(html){
      $("#vpn").html(html);
    }
  });

  vpn_timeout = setTimeout("vpn()", 5000);
}

ajax.php

Rien de particulier pour ce module :

  /////////////////////////////////////////////////
  //  VPN PPTPD
  /////////////////////////////////////////////////

  if($block == 'vpn'){
    echo vpn();
  }

inc.php

Deux fonctions sont nécessaires pour ce module :

  • vpn_parseData() : parse le fichier envoyé à travers netcat
  • vpn() : créé un tableau HTML avec les noms des utilisateurs connectés
  /////////////////////////////////////////////////
  //  VPN PPTPD
  /////////////////////////////////////////////////

  function vpn () {

    $datas = vpn_parseData ("/home/jarvis/vpn/vpn_oberon.log");

    $html  = '';

    if(sizeof($datas) > 0){
      $html .= '<table cellspacing="0px">';
      foreach($datas as $data){
        $html .= '<tr>';
        $html .= '<td valign="middle"><img class="vpn" src="pict/vpn.png"></td><td class="vpn">'.$data[0].'</td>';
        $html .= '</tr>';
      }
      $html .= '</table>';
    }

    return $html;
  }

  function vpn_parseData ($stat_file) {
    $datas = array();
    if(filemtime($stat_file) < time()-10){return $datas;}
    $stats = fopen($stat_file, 'r');
    while (($line = fgets($stats)) !== false) {
      $explode_line = str_word_count($line, 1, "0123456789.");
      $datas[]  = $explode_line;
    }
    fclose($stats);
    return $datas;
  }

Et voilà pour ce dernier module qui s’avère très simple 🙂

6 – Raspbian

raspbian_logo

Cette page est consacrée à l’installation et à la configuration de l’OS sur le Pi. Raspbian est une distribution Linux qui convient parfaitement à l’usage que je souhaite en faire. Il s’agit en fait d’une Debian optimisée pour le Pi. Cependant, l’image fournis sur le site RaspberryPi.org contient énormément de choses inutiles…

Installation de Raspbian sur la carte SD

lecteur_carte_sdJe passe très rapidement sur ce point, car la procédure est très clairement décrite sur le site elinux.org. J’ai utilisé la méthode Copying an image to the SD card in Linux (graphical interface) depuis un PC sous Linux Mint, en utilisant un lecteur de carte multi format Kingston.

Configuration du système

La commande raspi-config permet d’ajuster un certain nombre de paramètres :

  • expand_rootfs : permet d’étendre la partition racine à la taille de la carte mémoire afin de pouvoir exploiter tout l’espace disponible
  • configure_keyboard : permet de sélectionner un clavier AZERTY
  • change_timezone : permet de choisir le fuseau horaire (GMT+1 Paris)
  • memory_split : permet de définir la mémoire allouée au chipset graphique (n’ayant besoin que d’une interface en ligne de commande, 16Mo suffiront)

Capture-piraspberrypi

Suppression des paquets superflux

Je n’ai besoin que du stricte minimum, je peux donc dégager tout ce qui concerne l’interface graphique et le son :

apt-get remove --purge alsa* alsa-base xserver* x11* x11-xfs-utils x11-xserver-utils xinit libsmbclient libx* lightdm openbox gtk* xdg-tools desktop-file-utils

Et pour finir le nétoyage :

apt-get autoremove

Enfin, pour être certain que tout soit à jour :

apt-get upgrade
apt-get update

Installation des paquets nécessaires

Je n’ai besoin que de trois soft qui ne sont pas installés par défaut sur la Raspbian.

  • streamer : pour capturer les images via la webcam
  • imagemagick : permet, entre autre, de redimensionner, convertir et compresser les images
  • wvdial : permet d’établir une connexion réseau avec le dongle 3G
apt-get install streamer imagemagick wvdial

Configuration des interfaces réseaux

Dans l’absolue, lorsque je voudrai récupérer les photos capturées, je mettrai directement la carte SD du Pi dans un lecteur de carte. Cependant, il peut être intéressant je pouvoir prendre la main sur le système lorsqu’il tourne afin de pouvoir faire des ajustements. C’est pourquoi je configure l’interface réseaux ethernet du Pi avec une adresse IP fixe. Un câble RJ45 croisé me permettra de me brancher dessus avec un PC portable.

Notez que je configure pas de passerelle par défaut, afin de m’assurer que le Pi utilisera l’interface montée par le dongle 3G pour surfer.

auto eth0
allow-hotplug eth0
iface eth0 inet static
	address 192.168.100.22
	netmask 255.255.255.0
	network 192.168.100.0
	broadcast 192.168.100.255

Et voilà, c’est tout pour le Pi 🙂