Un serveur Nabaztag/tag maison avec le Raspberry Pi

Si vous êtes lecteurs régulier, vous savez sûrement que j’ai des Nabaztag à la maison (huit…), et que les lapins demandent des serveurs pour fonctionner. Le problème, c’est que les serveurs de Violet sont assez foireux (genre 10 minutes de décalage sur l’heure) et que les serveurs OJN ne sont pas toujours pérennes. La solution ? Monter un serveur à la maison. J’ai pris un Raspberry Pi pour cet usage précis, pour plusieurs raisons : ce n’est pas très cher, ça consomme peu, c’est accessible quand on connaît un peu l’informatique.

J’ai utilisé le serveur OJN (OpenJabNab), une solution open source qui permet de monter un serveur maison pour les Nabaztag/tag (le modèle avec un nombril). C’est une solution assez efficace qui permet pas mal de choses, même si dans mon cas je me limite à l’heure et aux humeurs. Plusieurs serveurs publics utilisent cette solution, j’ai préféré l’utiliser en local.

J’ai trouvé pas mal d’informations sur le forum des lapins, je vous conseille d’y aller si vous avez un souci, je me suis pas mal inspiré de certains sujets pour ce tuto.

Matériel nécessaire :

Il faudra au minimum le matériel suivant :

  • Un Raspberry Pi
  • Une carte SD de 4 Go
  • Un câble Micro USB et un chargeur d’iPhone

Dans mon cas, j’ai utilisé un Raspberry Pi modèle A avec un adaptateur Ethernet vers USB Apple qui était dans un tiroir. On a aussi besoin d’un clavier USB, d’un téléviseur/écran avec une prise HDMI (et son câble) et éventuellement d’un hub USB pendant quelques minutes.

J’ai aussi utilisé une horloge RTC (un truc capable de garder l’heure) parce que mon projet est de rendre le serveur totalement indépendant et utilisable sans accès à Internet, et donc sans possibilité de se synchroniser pour garder l’heure.

Mon serveur

Mon serveur

On va commencer par aller télécharger une image de Raspbian et un petit programme pour installer le système sur une carte SD.

Lancez le programme, sélectionnez l’image à installer, la carte SD de 4 Go et attendez. Ca prend quelques minutes.

Une fois que c’est fait, branchez le Raspberry Pi à un écran, avec sa sortie HDMI, branchez aussi un clavier et l’Ethernet. Il va falloir configurer l’appareil, c’est assez simple.

Il faut donc choisir expand_rootfs (pour tirer parti des 4 Go de mémoire), changer le mot de passe, régler l’heure, changer la taille de la mémoire vidéo en mettant 16 Mo uniquement, activer l’accès SSH et désactiver le lancement de l’interface graphique au boot.

Normalement, que ce soit avec un modèle B (Ethernet intégré) ou un modèle A (via USB), le Raspberry Pi se connecte au net. Il suffit de faire ping google.com pour le vérifier.

On va maintenant fixer l’adresse IP du Raspberry Pi, on en aura besoin plus tard.

sudo nano /etc/network/interfaces

Il faut remplacer iface eth0 inet dhcp par les valeurs suivantes, en fonction de vos choix. Dans mon cas, l’adresse IP du Raspberry Pi sera 192.168.1.61.

iface eth0 inet static
address 192.168.1.61
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.61

Vous sauvez (ctrl + o), vous quittez (ctrl + x), vous redémarrez.

sudo reboot

Vous pouvez ranger le clavier, l’écran, etc.

Passez sur votre Mac, lancez le terminal et tapez la commande suivante.

ssh pi@adresse_ip

Maintenant, tapez les commandes suivantes.

sudo apt-get update
sudo apt-get upgrade

On va installer un service Bonjour open source pour simplifier la gestion du Raspberry Pi depuis un Mac.

sudo apt-get install avahi-daemon
sudo update-rc.d avahi-daemon defaults

sudo nano /etc/avahi/services/ssh.service

On colle ça dans le fichier.

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h SSH</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>

Maintenant, on change le nom, par exemple NabzPi.

Il faut changer dans deux fichiers.

sudo nano /etc/hosts
sudo nano /etc/hostname

Enfin, on redémarre et on peut se connecter en tapant la commande suivante.

ssh pi@NabzPi.local

Maintenant, on va passer à un truc énervant. Le Nabaztag/tag a besoin d’un nom de domaine pour se connecter à OJN. On a donc besoin d’un serveur DNS maison (ou, mais c’est moins pratique, d’un vrai nom de domaine).

sudo apt-get install bind9
sudo /etc/init.d/bind9 start

Créons le nom de domaine (utilisé uniquement en local) ojn.raspberry.pi.

sudo nano /etc/bind/named.conf.local

On ajoute ça dans le fichier. Attention, la deuxième partie est votre réseau à l’envers, donc 1.168.192 si vous avez des adresses en 192.168.1.x.

zone "raspberry.pi"{
type master;
file "/etc/bind/db.raspberry.pi";
};
zone "1.168.192.in-addr.arpa"{
type master;
file "/etc/bind/db.192.168.1.inv";
};

On crée le premier fichier.

sudo nano /etc/bind/db.raspberry.pi

Pensez à utiliser votre adresse IP.

$TTL 604800
@ IN SOA ojn.raspberry.pi. root.raspberry.pi. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ojn.raspberry.pi.
ojn IN A 192.168.1.61
192.168.1.61 IN A 192.168.1.61

On ajoute le second fichier.

sudo nano /etc/bind/db.192.168.1.inv

Le nombre sur la dernière ligne est la dernière partie de l’IP du Raspberry Pi.

$TTL 604800
@ IN SOA ojn.raspberry.pi. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ojn.raspberry.pi.
61 IN PTR ojn.raspberry.pi.

Maintenant, on oblige le raspberry Pi à utiliser son serveur DNS local.

sudo nano /etc/resolv.conf

Il faut ajouter l’adresse IP.

nameserver 192.168.1.61

Enfin, on active le serveur de cache pour que le Raspberry accède au net.

sudo nano /etc/bind/named.conf.options

Dans ce fichier, il faut décommenter forwarders et les lignes suivantes et utiliser les DNS de votre FAI (ou à défaut votre routeur).

forwarders {
80.10.246.1;
};

On redémarre le tout et on teste le DNS. Les deux commandes doivent donner un résultat.

ping google.com
ping ojn.raspberry.pi

On peut enfin passer au serveur lui-même.

Premièrement, il faut un serveur web. Vu que le serveur ne devrait pas accueillir des milliers de lapin, on va prendre un classique Apache.

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

On a quelques modifications à faire.

sudo /bin/hostname -F /etc/hostname
sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart

Maintenant, on s’occupe d’OpenJabNab.

sudo apt-get install git

cd /var/www
sudo git clone https://github.com/OpenJabNab/OpenJabNab.git

On configure Apache.

sudo nano /etc/apache2/sites-available/default

Il faut modifier DocumentRoot /var/www par DocumentRoot /var/www/OpenJabNab/http-wrapper.
Il faut remplacer les deux premiers AllowOverride None par AllowOverride All

Maintenant, 3 commandes.

sudo a2dissite default
sudo a2ensite default
sudo /etc/init.d/apache2 restart

Vus pouvez vérifier que ça fonctionne en tapant l’adresse IP du Raspberry Pi dans votre navigateur. Vous aurez un message (normal) Problem with OpenJabNab ! si tout se passe bien.

On va maintenant compiler, prévoyez un peu de temps, la compilation peut prendre plusieurs dizaines de minutes.

sudo apt-get install qt4-qmake qt4-qtconfig qt4-designer qt4-dev-tools libqwt5-qt4-dev build-essential
cd /var/www/OpenJabNab/server
sudo qmake -r
sudo make

Quand c’est fait, un peu de configuration.

sudo cp openjabnab.ini-dist bin/openjabnab.ini
sudo nano bin/openjabnab.ini

Remplacer RealHttpRoot = ../../http-wrapper/ojn_local/ par RealHttpRoot = /var/www/OpenJabNab/http-wrapper/ojn_local/
Mettre ojn.raspberry.pi comme domaine.
Mettre les quatre paramètres suivants à true.

StandAloneAuthBypass=true
AllowAnonymousRegistration=true
AllowUserManageBunny=true
AllowUserManageZtamp=true

sudo nano bin/plugins/plugin_auth.ini

Ajouter dans le fichier.

[global]
authMethod=full

sudo chmod 777 /var/www/OpenJabNab/http-wrapper/ojn_admin/include

Maintenant, on lance OpenJabNab.

sudo ./bin/openjabnab

Une fois lancé (et sans erreur), on se connecter sur IP/ojn_admin dans le navigateur.

Il faut créer un compte utilisateur et vérifier que ça marche, normalement vous devriez avoir le texte suivant en bas de la page.

Bunnies » 0/1 • Ztamps » 0 • Plugins » 28/28

Si ça fonctionne, vous pouvez fermer le programme (ctrl + c).

Maintenant, on va ajouter un service Bonjour pour un accès plus simple.

sudo nano /etc/avahi/services/ojn.service

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>Serveur Nabaztag</name>
<service>
<type>_http._tcp</type>
<port>80</port>
<txt-record>path=/ojn_admin/</txt-record>
</service>
</service-group>

sudo service avahi-daemon restart

Si ça marche, le serveur est accessible depuis Signets -> Bonjour dans Safari.

Enfin, on va ajouter les voix des Nabaztag/tag pour les humeurs.

cd /var/www/OpenJabNab/http-wrapper/ojn_local/plugins/
sudo wget http://down.dandu.be/nabaz-lang-mp3-fr.tar.gz
sudo wget http://down.dandu.be/nabaz-ojn-mp3-fr.tar.gz
sudo tar xvfz nabaz-lang-mp3-fr.tar.gz
sudo tar xvfz nabaz-ojn-mp3-fr.tar.gz

Maintenant, on relance le serveur, on se connecte et on va ajouter un lapin.

sudo /var/www/OpenJabNab/server/bin/openjabnab

Sur le serveur

Dans Account, donnez un nom au lapin et entrez son adresse MAC, elle est sous le lapin. Pas besoin des majuscules et des « : » dans l’adresse.

Sur le lapin

Allumer le lapin en pressant sa tête, il passe au bleu.
Connectez-vous en Wi-Fi sur le lapin (Nabaztag suivi d’un nombre).
Tapez l’adresse 192.168.0.1 dans le navigateur.
Click here to start -> Advanced configuration.
Il faut désactiver le DHCP et donner une IP fixe au lapin, mais surtout lui donner l’adresse IP du Raspberry Pi comme serveur DNS.
Enfin, il faut mettre ojn.raspberry.pi/vl comme serveur.
Cliquez sur Update and Start et attendez.

Si ça marche, le lapin va bouger ses oreilles.

Maintenant, vous pouvez aller configurer le lapin dans OpenJabNab.

Pour les voix : activer le plug-in Clock et configurez-le pour utiliser les voix Violet.
Activer ensuite le plug-in Send random mp3 at random intervals et configurez-le pour utiliser les voix Violet.

Pour le reste des options, je vous laisser chercher dans OpenJabNab, c’est assez complet.

Lancement automatique

Enfin, on va lancer le programme au boot du Raspberry Pi.

J’ai eu quelques soucis en le lançant via init.d, et le plus simple — étant donné que le Raspberry Pi ne sert qu’à ça dans mon cas — est de placer la ligne suivante dans rc.local, juste avant le exit 0. Pour ceux qui veulent un truc plus propre, le tutorial disponible là explique comment lancer le serveur en tant que daemon.

sudo nano /etc/rc.local
sudo /var/www/OpenJabNab/server/bin/openjabnab

Maintenant, il suffit de redémarrer le Raspberry Pi et vérifier que ça fonctionne.

Pour la maintenance, le serveur est accessible via Bonjour, ou — au pire — via une session en SSH. Dans mon cas, il tourne depuis une semaine environ, avec deux lapins connectés en permanence.