mercredi 15 mai 2013

mongodb sur raspberry pi

Ça y est ! J'ai réussi. Il m'aura fallu une semaine d'essais divers mais j'y suis arrivé. Faire tourner habitrpg sur mon raspberry pi, petit défi que je m'était lancé en découvrant cette todolist plutôt originale. Dans les faits, ça ne semble pas si compliqué puisque d'après le dépôt github, il suffit de mongodb et node.js pour faire tourner l'application. C'est là que les choses se compliquent...

J'ai utilisé pour mon expérience un Raspberry Pi 256 Mo avec un archlinux ARM (histoire de changer de debian). Le principal soucis a été de réussir à faire tourner mongodb, d'où ce billet. Vous trouverez probablement d'autres billets parlant du sujet (voir les références plus bas) mais aucun n'ayant fonctionné pour moi.

MongoDB

ou comment compiler pendant 3 jours

logo de mongdodb
J'imaginais au début que je pouvais me contenter d'aller sur le site de mongodb et télécharger les binaires tranquilou. Idée plutôt naïve de ma part, digne d'une poire en fait. Ne comptez pas trouver de version compatible avec votre framboise préférée de cette manière, et ce pour une raison simple et logique. MongoDB est avant toute chose fait pour tourner sur une machine, puissante d'une part et multi-coeurs d'autre part. Autant dire que le processeur ARM monocoeur à 700 MHz ne remplit pas exactement la description.

Les petits malins auront remarqué que sur Archlinux ARM, un version de mongodb est présente dans les dépots. Sauf que cette version plante au démarrage chez moi (et chez un certain nombre de gens). Reste une solution... compiler soi même mongodb dans une version compatible ARM.

Avant toute chose, sachez que la maigre mémoire d'un raspberry 256Mo ne lui permettra pas de compiler sans swap. J'ai donc créé un fichier de swap de 500 Mo en suivant le wiki d'archlinux. Je conseille fortement d'avoir une carte SD d'au moins 16 Go (j'ai une 32 pour ma part en ce moment).

J'ai pas mal trainé sur la toile avant de trouver une méthode qui marche. Il y a plusieurs recettes avec notamment 2 dépots github qui ressortent ( https://github.com/RickP/mongopi et https://github.com/skrabban/mongo-nonx86). C'est au final un mélange de différentes méthodes que je vais décrire ici vues sur certains blogs qui a fonctionné pour moi.

compilons !

J'ai pris comme base le dépot mongo-nonx86 :

git clone git://github.com/skrabban/mongo-nonx86.git
cd mongo-nonx86

Ensuite une bidouille pour régler un problème dû à la bibliothèque boost. Pour résumer (et d'après ce que j'en ai compris) cette (excellente) bibliothèque C++, dans la version utilisée dans le dépot, déclare une macro qui entre en collision avec une autre macro définie dans la version actuelle de la bibliothèque standard. Du coup, on va juste en changer le nom ainsi que toutes ses références.

Bref, un coup de script pour changer renommer les occurences de cette macro et le tour est joué.

for i in `grep -lr TIME_UTC`; do
sed -i s/TIME_UTC/TIME_UTC_/ $i;
done


La compilation nécessite le programme scons présent dans les dépots (pacman -S scons ou apt-get install scons selon votre gestionnaire de paquet). Comptez plusieurs heures (je dirais 4 heures pour la première compil et 3 pour la seconde) avant d'installer tout ça. Personnellement je m'envoyais un mail à la fin des compilations pour savoir que c'était terminé.

scons all
sudo scons --prefix=/opt/mongo install

Remplacez /opt/mongo par l'endroit où vous voulez installer mongodb. Ensuite histoire d'avoir un truc propre, on peut ajouter quelques lignes à la fin du fichier /etc/profile histoire d'avoir mongodb dans le path :

PATH=$PATH:/opt/mongo/bin
export PATH 

Comme ça il sera possible de lancer mongodb juste en tapant mongod dans la console.

références :

Un long billet parlant de l'installation d'une base mongodb sur plusieurs raspberry pi, de l'installation du système à la mise en réseau des raspis. : 
Deux billets parlant du sujet et expliquant les différents obstacles à la compilation :

Pour finir

Pour ceux qui serait intéressés par installer habitrpg, il vous reste à installer Node.js. Pas de problème particuliers dans la mesure où il est présent dans les dépots. Pour la petite histoire, ça me donnait une 404 quand j'essayais de le télécharger, en conséquence de quoi j'ai également recompilé node.js sans trop de problèmes. Normalement nous avons tout ce dont nous avons besoin pour faire tourner habitrpg. J'ai suivi les instructions de cette page. Pensez bien à mettre l'option --recursive lorsque vous clonez le dépot git car ce dernier référence lui même d'autres dépots github.

Cependant, ne vous attendez pas à des miracles : la génération de page est extrêmement lente (je suppose que l'application revérifie tous les fichiers de l'arborescence à la requête, d'où la lenteur). Par contre, une fois la page affichée, la communication entre le navigateur et le serveur se fait par des websockets donc pas de soucis de lenteur (je crois qu'on aime bien les websockets chez pear programming).

Aucun commentaire:

Enregistrer un commentaire