Nabaztag:tag sur Raspberry B r2

Le 13 janvier 2009 Fozzgog est arrivé, non sans mal. Et quelques années plus tard il se tût… Violet ayant fait faillite, racheté, re-faillite, abandonné et la communauté à réussi à obtenir les codes sources et le domaine nabaztag.com.

Je vous passes les détails de l’histoire, c’est long et internet en est gorgé. La question est, après autant de temps, puis-je encore le faire fonctionner comme « avant » ou presque ?

La réponse est « oui » !

En cherchant je suis tombé sur le tuto de Pierre Dandumont utilisant OpenJabNab avec l’aide de la communauté. L’article est déjà vieux et n’est plus tout à fait à jour, j’ai du bricoler un peu, d’où cet article pour en faire la mise à jour.

Je vais essentiellement reprendre ses étapes et retirer/ajouter la différence. Principalement je ne suis pas sous mac et n’utiliserais pas le service Bonjour. L’OS de base n’est plus tout à fait le même non plus.

Mon idée est de pouvoir promener mon lapin chez moi et en dehors moyennant une prise de courant. Il est quand même la mascotte de la Famille du Band Bleu 🙂

Mon matos :

  • Un Raspberry B (r2), alim etc.
  • Carte SD 4Go
  • Mon Nabaztag:tag, alim etc
  • Un routeur WI-FI
  • Clavier, souris, écran HDMI (ou adaptateur etc. dans mon cas)

Sur la carte SD j’ai mis une version de Raspian Jessie Lite, pour n’avoir que le nécessaire et sans interface graphique. J’ai essayé Noobs mais sur la 4Go, la mise à jour n’avait pas assez de place. Après de toute façon il ne nous faut que de la console :).

J’ai utilisé win32diskimager pour mettre l’image sur ma carte SD.

On branche et on allume. Oubliez pas que le login/pw de base sont pi/raspberry.

IMG_20160201_204545

Config de base

Un fois connectez on va mettre les bonne conditions de départ, tapez sudo raspi-config, vous aurez un bel écran d’interface avec un tas d’options :).

Activez SSH s’il ne l’est pas, réglez votre langue et étendez le file system à toute la carte. Dans notre cas on est déjà console, pas besoin de désactiver l’interface graphique au boot. Mais vous pouvez régler la mémoire vidéo à 16Mo.

Dans les options avancées il y a aussi hostname, ne l’oubliez pas, donnez un nom à votre terrier :). Ça évite de toucher aux fichiers (hosts, hostname) manuellement par la suite.

Là normalement vous pouvez ping, mais non ! Dans cette version il y a une erreur connue. Vous devrez d’abord exécuter : sudo chmod u+s /bin/ping .

Ensuite tentez un ping vers ce que vous voulez pour vérifier votre connexion réseau.

Maintenant qu’on a du réseau on met à jour.

sudo apt-get update
sudo apt-get upgrade

IMG_20160202_210457

Ensuite on fixe son IP. Dans mon projet de promener l’installation ça a d’autant plus d’importance.

sudo nano /etc/network/interfaces

Mon réseau est en 192.168.1.x, vous devrez adapter les configs selon votre cas. Vous devez modifier la ligne iface eth0 inet dhcp en :

auto eth0
iface eth0 inet static
address 192.168.1.150
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.150

On sudo reboot, on débranche clavier souris etc, on laisse juste alim et réseau. On retourne a son bureau, on s’installe confortablement, on prend putty et on se connecte :

ssh pi@192.168.1.150

Serveur DNS

Comme le dit le tuto de Pierre, le truc chiant c’est que le lapin a besoin d’un nom de domaine pour se connecter au serveur. Donc il nous faut notre propre serveur DNS local.

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

C’est parti pour plein de config. Perso j’ai eu du mal sur cette partie du fait des mises en pages des contenus. Pour infos je me suis basé sur mes configs de domaines, le tuto de Pierre et une doc.

On va créer notre nom de domaine : terrier.loc avec son sous domaine ojn.terrier.loc .

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

Attention la deuxième partie est l’envers de notre réseau.

zone "terrier.loc" {
  type master;
  file "/etc/bind/db.terrier.loc";
};

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

Maintenant il nous faut les 2 fichiers précisés.

sudo nano /etc/bind/db.terrier.loc
$TTL 604800
@ IN SOA ojn.terrier.loc. root.terrier.loc. (
  1 ; serial
  604800 ; refresh
  86400 ; retry
  2419200 ; expire
  604800 ) ; negative cache TTL
;
@ IN NS ojn.terrier.loc.
@ IN A 192.168.1.150
;
ojn IN A 192.168.1.150
;192.168.1.150 IN A 192.168.1.150

Et l’autre.

sudo nano /etc/bind/db.192.168.1.inv
$TTL 604800
@ IN SOA ojn.terrier.loc. root.localhost. (
  2 ; serial
  604800 ; refresh
  86400 ; retry
  2419200 ; expire
  604800 ) ; negative cache TTL
;
        NS ojn.terrier.loc.
150     PTR ojn.terrier.loc.

Maintenant il faut dire au Rasp de l’utiliser.

sudo nano /etc/resolv.conf
# Generated by resolvconf
domain home
nameserver 192.168.1.1
nameserver 192.168.1.150

Particularités ici, si vous avez un soucis d’accès lors de test du domaine, commenté la 1.1. Si vous rebootez elle sera décommentée.

Enfin, on active le serveur de cache pour accéder au net. On décommente la partie forwarders et on met l’ip de la passerelle.

sudo nano /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                192.168.1.1;
        };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

Redémarrez et testez, ping google.com, ping ojn.terrier.loc. Cf. ma remarque d’avant avec les ligne nameserver.

Vous pouvez également tester depuis votre poste en modifiant votre connexion réseau et en précisant le serveur DNS à 192.168.1.150.

dns-win

Le serveur

On y est, on va mettre le serveur en place et on va utiliser un Apache, comme dit Pierre, il y aura pas des milliers de lapins.

sudo apt-get install apache2 php5 libapache2-mod-php5
sudo /bin/hostname -F /etc/hostname
sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart

Ensuite OpenJabNab, il nous faudra Git.

sudo apt-get install git
cd /var/www
sudo git clone https://github.com/OpenJabNab/OpenJabNab.git

Et c’est reparti pour un peu de config.

sudo nano /etc/apache2/sites-available/000-default.conf

Là aussi j’ai du adapter la conf directement dans le default. j’ai retiré les commentaires.

<VirtualHost *:80>
        DocumentRoot /var/www/OpenJabNab/http-wrapper

        <Directory /var/www/OpenJabNab/http-wrapper>
                Options -Indexes +FollowSymLinks
                AllowOverride All
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

default est déjà actif par défaut, un simple apache restart devrait suffire, sinon comme le tuto de Pierre :

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

Tapez l’ip de votre OJN (dans mon cas 192.168.1.150) pour y accéder. Vous devriez avoir le message « Problem with OpenJabNab ! » signe que tout va bien 🙂 Si vous avez une page d’index c’est que votre mod rewrite n’est pas activé.

Maintenant c’est compilation ! Yeah 🙂

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

On configure, encore et toujours 🙂

sudo cp openjabnab.ini-dist bin/openjabnab.ini
sudo nano bin/openjabnab.ini
[Config]
httpListener = true
httpApi = true
httpVioletApi = true
xmppListener = true
RealHttpRoot = /var/www/OpenJabNab/http-wrapper/ojn_local/
HttpRoot = ojn_local
HttpPluginsFolder = plugins
StandAloneAuthBypass = true
AllowAnonymousRegistration=true
AllowUserManageBunny=true
AllowUserManageZtamp=true
SessionTimeout=300
TTS=acapela
MaxNumberOfBunnies=64
MaxBurstNumberOfBunnies=72

[OpenJabNabServers]
PingServer=ojn.terrier.loc
BroadServer=ojn.terrier.loc
XmppServer=ojn.terrier.loc
ListeningHttpPort=8080
ListeningXmppPort=5222

[Log]
LogFile=openjabnab.log
LogFileLevel=Debug
LogScreenLevel=Warning
DisplayCronLog=false

On change le RealHttpRoot, on met true à StandAloneAuthBypass et les 3 suivants, on change my.domain.com en ojn.terrier.loc.

Au tour des plugins :

sudo nano bin/plugins/plugin_auth.ini
[global]
authMethod=full

On donne les accès en écriture :

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

On ajoute les voix et 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

Et on lance !

sudo ./bin/openjabnab

Techniquement ça devrait démarrer sans erreur. Du coup on va dans l’admin du terrier 192.168.1.150/ojn_admin.

terrierloc-01En bas de page on peut voir les infos, ce qui montre ce qui a été chargé, preuve que ça fonctionne.

Il vous faudra créer un compte, le premier sera mit en admin automatiquement.

Le lapin

Ensuite il faut ajouter le lapin, dans account, donnez lui un nom en suivant les contraintes et entrez sa mac.

Prenez votre lapin, allumez le en appuyant sur son bouton de tête, il devient bleu. Connectez vous à son Wi-Fi et rendez-vous sur son ip 192.168.0.1.

IMG-20160203-WA0072

Le lapin a du mal à se connecter en Wi-Fi (peut-être mon lapin), déjà le WPA il a du mal mais y arrive parfois (nabaztag:tag), le v1 lui ne sait faire que du WEP. Je n’ai pas envie de chipoter, j’ai un routeur, une connexion invisible, ça suffira, j’ai désactivé la sécurité. Faites en fonction de votre projet et de votre lapin !

Dans la config avancée, désactivez le DHCP, donnez lui une IP fixe (192.168.1.151) ensuite renseignez le serveur ojn.terrier.loc/vl.

On sauve, le lapin redémarre et si tout va bien ça s’allume ! Le lapin bouge les oreilles et vous sautez dans tous les sens, votre lapin se reconnecte !

IMG-20160203-WA0070

Lancement automatique

J’ai essayé en vain la solution du daemon. Je n’ai peut-être pas trouvé de solution suffisamment à jour. J’ai donc utilisé la solution barbare mais fonctionnelle de Pierre :

sudo nano /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

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

exit 0

Le lien déjà mentionné de la doc en parle.

Fin

IMG_20160203_173847

Fozzgog est prêt à reconquérir le monde… ou pas 🙂

Dans les possibilités de suites, car OJN ne gère pas/plus les chorégraphies ça serait de développer le plugin le permettant, tout à l’air d’être à disposition pour y arriver. Il n’y a quasi pas de doc donc ça sera empirique mais pourquoi pas essayer.

En local TTS et Taïchi fonctionnent bien. L’API pour le coucher, lever, TTS aussi. C’est déjà une bonne base pour redévelopper avec. Reste à voir si il peut le faire en autonomie.

Affaire à suivre 🙂