Les notes de Clément

Spécialiste de rien // Partageur de tout
Billets avec le mot-clé web

Projet « Sur les épaules de Darwin »

J’ai déjà parlé de cette superbe émission dans un précédent article, Sur les épaules de Darwin, de Jean-Claude Ameisen, et je ne le referai donc pas ici. J’avais également parlé de la page que j’ai créé pour suivre cette émission, et surtout pourvoir ré-écouter ou télécharger des épisodes : http://www.clementgrimal.fr/darwin/. Mais surtout, j’avais promis de partager la recette qui se cache derrière cette page !

Pour créer cette page, j’utilise plusieurs scripts écrits en Python, qui utilisent eux-mêmes un fichier base de données pour stocker toutes les informations sur les épisodes (titre, date de diffusion, …). Afin de facilement les partager avec tout le monde, j’ai donc créé un projet sur le site GitHub : https://github.com/cgrimal/darwin. Maintenant, rien ne vous empêche de récupérer intégralement ces scripts, pour vous même créer une page web autour de l’émission (merci de me prévenir quand même, ça me fera plaisir !), et même de télécharger les épisodes en mp3.

Non seulement je pense que c’est une bonne chose de partager ce genre de projet car je ne compte pas faire de l’argent avec, mais en plus, cela m’a permis de m’initier à git, qui est un système de gestion de version bien pratique !

Comment télécharger les fichiers mp3 de l’émission ?

En fait, je pense que beaucoup de gens se posent la question, et si vous êtes dans ce cas, je pense modestement pouvoir vous aider. Cependant, pour mieux répondre, il me faut vous poser la question suivante : êtes-vous un informaticien/geek/python-gourou ?

  • Si oui, vous n’avez surement pas besoin de moi, mais si vous ne voulez pas ré-inventer la roue, servez-vous de mon code : darwin_create_database.py pour récupérer les informations (dont les liens directs vers les fichiers mp3), puis darwin_download.py pour télécharger les fichiers.
  • Sinon, vous pouvez cliquer sur les liens « Télécharger » pour télécharger les émissions une par une, ou alors me demander dans les commentaires ou directement par mail (clement.grimal@gmail.com) de l’aide !

Raspberry Pi : installation d’un serveur web

Dans ce billet, je vais décrire comment j’ai installé un serveur web sur mon Raspberry Pi, mais surtout comment j’ai configuré mon installation sachant que mon fournisseur d’accès est SFR.

Dans la première moitié, je décris l’installation du serveur et la configuration minimale pour tester. Et dans la seconde partie, je décris comment s’en sortir sans adresse IP fixe (comme c’est le cas chez SFR).

MODIFICATION : j’ai finalement réussi à utilisé un service de DNS dynamique, qui me permet de ne pas forcément utiliser mon script compliqué : voir ce billet

Installation du serveur et configuration minimale

Installation du serveur

On va installer un serveur web, communément appelé LAMP, pour Linux / Apache / MySQL / PHP. Avec ça vous aurez de quoi faire tourner un petit site web, avec base de données et pages dynamiques. Il suffit d’installer les paquets suivants :

	sudo apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql

La racine de votre site se situe alors dans le dossier /var/www/ et si vous allez sur la page localhost:80, vous devriez voir la page par défaut d’Apache qui dit « It Works! ».

Trouver son adresse IP externe

Il y a plusieurs façon de faire : vous pouvez vous rendre sur l’interface de votre box 192.168.1.1 et l’adresse IP est alors visible en haut à droite. Vous pouvez également utiliser un site web tel que ipogre.com (nous l’utiliserons d’ailleurs dans la seconde partie).

Mais si vous donner cette adresse IP à quelqu’un pour qu’il puisse voir le site web hebergé sur votre Raspberry, cela ne marchera pas car il « atterrira » sur la box ! On va donc voir comment la paramétrer dans la suite.

Paramètrer sa box

Par défaut, lorsqu’un nouvel équipement se connecte à la box (wifi ou ethernet), elle lui attribue une adresse IP locale aléatoire du type 192.168.1.XX. Pour que le Raspberry soit toujours à la même adresse (ce sera mieux pour le retrouver), on va demander à la box de lui attribuer une IP locale fixe. Il faut aller sur l’interface de la box (localhost:80), dans l’onglet DHCP de la section Réseau. Regarder l’aide de SFR à ce sujet qui est très bien faire : Héberger son site web à la maison avec sa box.

Maintenant, il faut rediriger le port 80 (celui du serveur web) vers votre Raspberry. C’est aussi expliqué sur la page d’aide de SFR, et il suffit d’ajouter une règle NAT. D’ailleurs, vous pouvez en profiter pour ajouter d’autres règles. En redirigeant également le port 22, vous pourrez vous connecter en ssh à votre Raspberry depuis n’importe où !

Test

Vous pouvez maintenant donner votre adresse IP externe à votre fameux ami qui meurt d’envie de voir le site web que vous hébergez sur votre Raspberry. Disons que cette adresse est A.B.C.D, s’il se rend à l’adresse A.B.C.D sur son navigateur, il atterrira sur votre site ! Si vous testez de chez vous, vous arriverez sur l’interface de la box, ce qui est moins intéressant, utilisez l’adresse IP locale de votre raspberry.

 

Script pour ne pas utiliser DynDNS

Chez SFR, l’adresse IP de votre box change régulièrement, et il est possible de souscrire à un service de DNS dynamique pour que l’adresse mon-rpi.dyndns.fr redirige toujours vers votre box. Seulement je n’ai pas réussi ! Il faut normalement aller dans l’onglet DynDNS de la section Réseau de l’interface de la box, mais le dervide dyndns.fr n’est pas présent, et donc j’ai préféré m’en passer pour l’instant.

Pour ne pas être bloqué, on m’a soufflé l’idée suivante : faire un script qui vérifie si l’adresse IP a changée, si oui le script doit m’envoyer un mail avec la nouvelle adresse IP. Puis il suffit de faire s’exécuter ce script automatiquement à intervalles réguliers.

Le script

On va mettre le script dans le répertoire /usr/local/bin/ipcheck.sh :

#!/bin/bash
IPFILE=/etc/ipaddress

CURRENT_IP=$(curl ipogre.com)

MAIL_TO=votre_adresse@domaine.fr

if [ -f $IPFILE ]; then
	KNOWN_IP=$(cat $IPFILE)
	else
	KNOWN_IP=
fi

if [ "$CURRENT_IP" != "$KNOWN_IP" ]; then
	echo $CURRENT_IP > $IPFILE

	MAIL_SUBJECT="L'adresse IP du RPI a changé !"
	MAIL_BODY="C'est maintenant $CURRENT_IP"

	echo $MAIL_BODY | mail -s "$MAIL_SUBJECT" $MAIL_TO
	logger -t ipcheck -- Nouvelle adresse IP : $CURRENT_IP
else
	logger -t ipcheck -- Même adresse IP.
fi

Donc l’adresse IP va être stockée dans le fichier /etc/ipaddress et on utilise le site ipogre.com pour récupérer l’adresse externe. Puis on compare l’ancienne adresse avec la courante, et si ce n’est pas la même, on envoie le mail. Voyons maintenant ce qu’il faut installer et configurer pour que tout marche bien.

Installation curl

Je ne sais plus s’il est installé de base dans Raspbian, dans le doute :

	sudo apt-get install curl

Envoi de mail

La partie qui risque de poser problème concerne l’envoi de mail. Car la commande mail ne fait qu’appeler le MTA installé localement. J’ai opté pour ssmtp qui est très simple à installer et configurer :

sudo apt-get install ssmtp

Je l’ai configurer pour utilisé mon compte Gmail pour les envois. Il faut alors éditer le fichier /etc/ssmtp/ssmtp.conf pour modifier les lignes suivantes :

mailhub=smtp.gmail.com:587
UseTLS=Yes
UseSTARTTLS=Yes
AuthUser=votre_login_gmail
AuthPass=votre_mot_de_passe_gmail

Attention, votre mot de passe Gmail n’est pas crypté, il faut donc s’assurer que le fichier ne sera pas lisible par n’importe qui ! :

sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chown root:mail /etc/ssmtp/ssmtp.conf

Cron du script

On va « croner » ce script pour qu’il s’exécute automatiquement toutes les heures. Comme il n’y a que l’utilisateur root (cf. le chown à l’étape précédente), il faut ajouter la tâche en sudo :

	sudo crontab -e

Et ajouter la ligne suivante :

0 * * * * /usr/local/bin/ipcheck.sh >/dev/null 2>&1

Voilà ! Maintenant, toutes les heures, votre RPi vérifiera que son adresse IP externe n’a pas changée. Si elle a en effet changée, il vous enverra un e-mail pour vous donner la nouvelle adresse. Vous pourrez également voir le log dans le fichier /var/log/user.log, en utilisant la commande tail par exemple.

Conclusion

Bien sûr, le gros problème avec cette solution (sans DNS dynamique), est qu’il vous faudra prévenir vos amis à chaque changement d’adresse IP ! Ce n’est bien sûr pas une solution viable pour un vrai site (mais fait uniquement pour partager avec des amis), et il faudra alors songer à acheter un vrai nom de domaine, associé à une solution de DNS dynamique.

N’hésitez pas à me faire part de toute remarques / corrections / erreurs !