De fois il est utile de pouvoir surveiller un endroit à distance. Un webcam est adapté à cette tâche.
Attention: Dans les sections suivantes, N indique le numéro total de webcams et “…” représente les répétitions nécessaires pour tous les entiers entre le dernier entier et le suivant.
Exempli gratia:
testlol0-1.go testlol1-1.go ... testlolN-1.go
Si N=4, le code précédent est équivalent au suivant:
testlol0-1.go testlol1-1.go testlol2-1.go testlol3-1.go testlol4-1.go
On a un serveur avec une distro style Debian. Ce qui facilite l'installation de logiciels. Il faut un programme pour interfacer avec les webcams.
À l'aide de notre $SHELL préféré on lance les commandes nécessaires. Nota Bene: la première commande est pour devenir root… ceci n'est pas une bonne pratique en général. L'alternative serait de lancer toute commande qui requiert des pouvoirs root-esques en la préfixant d'un sudo.
sudo su apt-get install webcam nologin curl
On décide de permettre qu'un utilisateur spécial (dummy) exécute les commandes nécessaires.
useradd -G video -s /usr/sbin/nologin -m dummy su -s $SHELL dummy
La dernière commande nous permet d'agir comme si l'on était dummy.
Maintenant il faut créer les configurations nécessaires.
$EDITOR ~/.webcamrc.0 $EDITOR ~/.webcamrc.1 ... $EDITOR ~/.webcamrc.N
Voici un exemple du fichier de configuration. Entre deux fichiers de configuration, les champs device et input peuvent varier selon les webcams ainsi que les tailles des images.
[grab] device = /dev/videoN input = Camera 1 driver = libv4l text = PMClab %Y-%m-%d %H:%M:%S fg_red = 255 fg_green = 255 fg_blue = 255 width = 640 height = 480 delay = 0 wait = 0 rotate = 0 top = 0 left = 0 bottom = -1 right = -1 quality = 100 trigger = 1 once = 1 [ftp] dir = /home/dummy/webcam file = pmc3tvN.jpg tmp = uploadN.jpg passive = 1 debug = 0 auto = 0 local = 1 ssh = 0
À cause des contraintes particulières de notre serveur au PMClab, il faut un serveur proxy SOCKS pour pouvoir accéder au serveur contenant le site. Les options SSH et FTP du logiciel de webcam ne sont pas utilisées.
On suppose que notre machine a un serveur SOCKS et écoute sur le port 3128. Le script suivant permet de transmettre les images résultantes du serveur webcam au serveur du site.
$EDITOR ~/webcam.sh
#!/bin/bash for (( ; ; )) do webcam ~/.webcamrc.0 > /dev/null 2>&1 & webcam ~/.webcamrc.1 > /dev/null 2>&1 & ... webcam ~/.webcamrc.N > /dev/null 2>&1 & sleep N curl --socks5-hostname localhost:3128 --upload-file "/home/dummy/webcam/pmc3tv{0,1,...,N}.jpg" ftp://dummy-ftp:secret@pmclab.fr/ done
Pour que la dernière ligne marche comme attendu, il faut que l'utilisateur dummy-ftp1) ait comme racine le répertoire qui contiendra le site web final.
Pour des raisons de sécurité (webcam.sh contient un mot de passe en clair), seul dummy (ou un administrateur) aura accès aux documents pertinents.
chmod -R 700 ~/*webcam*
Finalement, il faut que notre script soit lancé au boot (ou programmé à des horaires précis à l'aide d'un cron)
exit echo "su -s /bin/bash dummy -c '~/webcam.sh'" >> /etc/rc.local
Les dernières commandes servent à sortir du $SHELL temporaire de dummy et de rajouter le lancement du script au démarrage de la machine.
Finalement tout est mis en place avec un
reboot
Dans un répertoire (comme pmc3tv) on met tout ce qu'il faut pour afficher les images obtenues précédemment:
Comme notre serveur est de type Apache, on écrit un fichier .htaccess pour contrôler l'accès et pour servir un fichier html:
DirectoryIndex index.html AuthType Basic AuthName "Quelle est la phrase magique?" AuthUserFile /pmc3tv/.htpasswd require valid-user
Le fichier .htpasswd2) contient les noms d'utilisateur et les mots de passe correspondants offusqués par un hachage md5:
banana:gbCkWSXpcr/uw
À fin d'identifier facilement notre page parmi une multitude d'onglets ouverts ainsi que canaliser un instinct artistique autrement caché, on dessine un petit favicon de 16×16 pixels.
Et finalement on écrit la page html.
<head> <title>PMC³TV</title> <meta http-equiv=refresh content="5" charset="utf-8"> <link rel "shortcut icon" href="eye.ico"> <link rel "icon" href="eye.ico"> </head> <body> <h1>PMC<sup>3</sup>TV (PMC<sub>lab</sub>CCTV)</h1> <img src="pmc3tv0.jpg" alt="cctv 0"> <img src="pmc3tv1.jpg" alt="cctv 1"> ... <img src="pmc3tvN.jpg" alt="cctv N"> </body>
Pour avoir une adresse agréable, on crée un sous-domaine (tv.pmclab.fr3), par exemple) et on fait que sa racine soit le répertoire pmc3tv.