in node.js A20-OLinuXino redis serveur ~ read.

Serveur Node.js + Redis A20-OLinuXino

A20-OLinuXino-MICRO-4GB

Retour sur mon dernier article relatif à l'emploi d'un petit serveur de dev à partir d'un A20-OLinuXino.

Dans mon premier article sur le sujet, j'ai quelque peu essuyé les platres sur les difficultés qu'un n00b comme moi peu rencontrer en s'essayant à la manoeuvre.
Cet article était donc surtout destiné aux petits geeks confrontés à des problèmes similaires à ceux que j'ai pu rencontrés. Il devrait donc permettre de comprendre le pourquoi de certains de ces soucis, et partager mes pistes de recherches et trouvailles.

Ce nouvel article a un objectif différent. Il s'agit cette fois, fort de cette expérience, de constituer plutôt la recette de cuisine "optimisée" pour atteindre l'objectif que je m'étais fixé : le paramétrage de mon A20-OLinuXino en serveur Node.js (+ le déploiement d'un forum NodeBB, mais ça je vais le développer dans le prochain article).

J'ai intitulé le premier article Serveur dev A20-OLinuXino parce qu'au départ, pour moi il, s'agit surtout d'un petit serveur que je destine à la réalisation de petits développements persos.
Dans ce nouvel opus, je change un petit peu le titre. Heureux et fier de voir ronronner mes premiers forums NodeBB @home, je me gonfle un peu d'ambition. Et c'est donc, carrément, un tuto que je vous propose pour réaliser votre petit serveur Node.js avec un A20-OLinuXino !

Bien... une fois passé ce petit moment d'orgeuil, de joie et de crânerie légère, je vais redescendre les pieds sur terre.
Ce petit tuto ne sera sans doute pas parfait au premier jet. Aussi n'hésitez pas à me faire part de vos remarques, suggestions et propositions d'améliorations par ici. J'enrichirai et corrigerai avec grand plaisir cette belle recette, sans omettre de citer les contributions allant en ce sens.
Je n'ai pas non plus vraiment terminé mes explorations. Aussi j'ai bien l'intention de revenir par içi pour compléter avec ce que j'aurai également pu trouver.

Bon, passons aux choses sérieuses !

Prérequis

Pour attaquer ce tuto, ce qu'il vous faut :

  • l'OLinuXino A20 à 55 € (ou la version avec Nand 4GB à 65 €)
  • son alimentation à 6,95 €
  • (+ les frais de port)
  • la carte micro SD (9,95 €) avec la Debian mise à disposition par Olimex (que vous pouvez flasher vous-même sur une micro SD Card achetée ou récupérée par ailleurs - classe 10 recommandée - 4GB mini)
  • un cable Ethernet pour relier l'OLiXi à votre réseau @home
  • votre PC connecté à ce réseau @home
  • que votre réseau @home soit connecté au net, of course

Etablir la connexion SSH

Comme il s'agit d'utiliser la carte en serveur, c'est par le biais d'une connexion SSH que nous allons essentiellement dialoguer avec elle.

Petit hic. Dans une des versions de la Debian mise à disposition, l'Ethernet était détecté et initialisé lors du boot, occasionnant de longs délais pour le démarrage s'il n'y avait pas notamment de câble branché sur la carte. L'activation de ce périphérique a donc été retiré de la séquence de boot.

A défaut donc d'une des version antérieures de cette Debian, il vous faudra donc brancher la carte à un écran via le HDMI, ainsi qu'un clavier/souris.
Via le terminal les commandes suivantes vous permettront d'activer l'Ethernet :
ifconfig -a dhclient eth0

Vous pourrez alors établir une connexion SSH avec la carte.
ssh root@[ip de la carte sur votre réseau]

Mot de passe : olimex

Après avoir changé le mot de passe du compte root (passwd root), afin que l'ethernet soit automatiquement actif lors de tout reboot de la carte, il faut modifier le fichier /etc/network/interfaces. Ajoutez :
auto eth0 iface eth0 inet dhcp
[merci encore GuiGui ;-)]

Problème du load average

En cette date du 13 juin (date de rédaction de ce paragraphe), l'image de la Debian mise à disposition par Olimex présente un autre petit soucis, au niveau du load average.

Qu'est-ce-que le load average : voir par ici.

En gros c'est une moyenne de la charge système, elle mesure la quantité de travail de celui-ci sur des périodes données.

Comment le visualiser : la commande top.
Descriptif sur les informations que nous donne cette commande top : par ici.

Le port USB ODB de cette OLinuXino est à l'origine d'une charge processeur excessive, en permanence à 1 minimum. Pour régler ce problème, le meilleur remède que j'ai pu trouver, pour le moment, nous vient de GuiGui, solution qu'il a lui-même trouvé sur le forum Olimex.
Il s'agit tout simplement de désactiver ce port. Pour l'usage en serveur ca n'est pas pénalisant.
On peut avoir plusieurs appréciations de la chose selon les besoins que l'on peut avoir dans l'utilisation du dit serveur.
Cela dit si quelqu'un trouve mieux, je prends :-).

La recette à GuiGui :

Récupérer les sunxi-tools :
git clone https://github.com/linux-sunxi/sunxi-tools

Les compiler :
cd sunxi-tools make
La compilation va échouer pour des problèmes de dépendances. Mais ce n'est pas grave : les outils dont nous avons besoin, bin2fex et fex2bin, ont été compilés avec succès.

On transforme le fichier script.bin qui se trouve sur la première partition de votre carte SD (dans /media) en fichier humainement compréhensible :
./bin2fex /path/to/SD/card/script.bin > /path/to/SD/card/script.fex

On effectue les modifications. Pour rappel, ces modifications sont (le reste de la section « [usbc0] » reste inchangée) :

[usbc0] usb_port_type = 1
usb_detect_type = 0
usb_host_init_state = 1

On fait une copie de sauvegarde puis on crée le nouveau script.bin :

cp /path/to/SD/card/script.bin ~/script.bin.save
./fex2bin /path/to/SD/card/script.fex > /path/to/SD/card/script.bin

En bootant l'OLinuXino, on se rend compte que le load average n'est plus bloqué à 1 mais qu'il est largement inférieur.
Je constate en particulier que le bureau et l'écran de veille sont particulièrement consommateurs, ce qui me conduit au paragraphe suivant sur l'optimisation des paquets.

Optimisation des paquets

Il s'agit d'utiliser notre OLinuXino en serveur. Certains paquets consomment inutilement de la ressource CPU (le bureau par exemple utilise environ 35% de ressource CPU une fois la modif du load average appliquée), d'autres mobilisent inutilement de la ressource sur la carte SD, et d'autres pour finir peuvent présenter à un moment donné une faille de sécurité.

Je suis encore très loin d'avoir fini d'explorer cette partie du tuto.
Je pars de la proposition de GuiGui sur laquelle j'ai un petit soucis parce qu'un des paquets désinstallés comprend la commande dhclient. Or sans l'execution de cette commande après un boot du serveur, je ne peux plus le connecter au réseau (pour le moment du moins).

Pour le moment donc, je désinstalle ces paquets :
apt-get autoremove --purge gnome-* xserver-* desktop-*

Plus à venir à mesure que j'avance sur ce sujet.

Installation de Node.js

Nous y voici, nous y voilà.

J'ai trouvé plusieurs recettes pour l'installation de Node.js. Je vous propose ici celle que j'ai appliquée. Lire mon premier article sur le sujet pour comprendre pourquoi je ne fais pas simplement :
sudo apt-get install nodejs

Si vous avez plus simple, et qui fonctionne avec l'OLinuXino, je prends et met à jour ce paragraphe ;-) !

Pour installer Node.js V0.10.29 (remplacer le numéro par celui de la dernière stable).
$ sudo apt-get install build-essential $ wget http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz $ tar -xzf node-v0.10.29.tar.gz $ cd node-v0.10.29 $ ./configure --without-snapshot $ make $ sudo make install

Le make est long... mais ça abouti !

Pour vérifier faite un check de version de node et de npm :
node -v npm -v
Cela doit vous renvoyer les numéros de node et de npm.

Installation de Redis

La recette suivie pour une installe de la 2.8.13 (remplacer par le numéro de la dernière version stable).

Note : build-essential déjà mis en place lors de l'installation de node.js.

sudo apt-get install tcl8.5 wget http://download.redis.io/releases/redis-2.8.13.tar.gz
tar xzf redis-2.8.13.tar.gz
cd redis-2.8.13
make
sudo make install
cd utils
sudo ./install_server.sh
sudo service redis_6379 start
sudo service redis_6379 stop

6379 est le port par défaut. Il peut être différent selon ce que vous aurez paramétré pendant l'installation (install_server.sh).

Pour que Redis soit lancé automatiquement au démarrage :
sudo update-rc.d redis_6379 defaults

Conclusion

Nous voici donc avec notre belle A20-OLinuXino qui tourne avec Node.js et Redis.
Un prochain article, bien plus court, décrira l'installation on ne peut plus simple de NodeBB.
Un autre encore suivra pour la confection du boitier réalisé via impression 3D - avec les fichiers disponibles pour imprimer chez vous ;-).

Osez le jeu ! :-)

Commentaires

comments powered by Disqus