twister sur ARM

J’utilise depuis quelques mois twister un projet opensource basé sur le moteur de bitcoin, mais dans le but de proposer un microblogging alternatif. Pour éviter la redondance voici 2 articles :

Ici l’idée est de tester ce logiciel sur la nouvelle plateforme de cloud physique de Online. Cette offre propose des serveurs ARM conçus en interne (bravo), instanciables immédiatement via une API. Aucune idée du tarif, sauf que les serveurs sont disponible gratuitement pendant le beta test. Ce blog donne plus d’informations sur le matériel : Benchs and specs of Online’s cloud preview from inside

Première chose, Golang n’est pas encore disponible sur ARM officiellement, même s’il le sera d’après cette roadmap pour la version 1.5. Cependant Ubuntu propose un port de la 1.2 sur ARM, certains outils comme camlistore nécessite la 1.3 mais Hugo, le serveur de page web statiques en markdown, se compile et fonctionne très bien avec.

UPDATE : finalement Go Version Manager (gvm) arrive très bien à compiler Golang 1.3.3 sur ARMv7. Il est donc fortement conseillé d’utiliser gvm pour être à jour des dernières releases de Go plutôt que d’utiliser les paquets Ubuntu.

Pulse en Golang (ex syncthing) propose un binaire pour ARMv7 qui fonctionne très bien.

Enfin twister. Voici la doc de compilation sur Linux, mais attention pour ARM le configure nécessite quelques paramètres particuliers sous peine d’échouer :

./configure --enable-sse2=no --with-boost-libdir=/usr/lib/arm-linux-gnueabihf

puis

make -j2

malgré les 4 coeurs du processeur il vaut mieux compiler sur 2 coeurs uniquement, avec un -j4 on risque de saturer les 2Go de RAM du serveur :

virtual memory exhausted: Cannot allocate memory

Une fois la compilation terminée, qui est plutôt longue, on lance :

twisterd --debug -rpcuser=monuser -rpcpassword=monpass -rpcallowip=127.0.0.1

le --debug permet de consulter les logs via un tail -f .twister/debug.log

Il est important de mettre un vrai login/pass et surtout pas le user/pwd proposé dans la doc, car twister sera accessible à tout Internet contraitement à votre instance locale. Ensuite il écoute sur l’IP de loopback, on pourrait sans doute mettre celle publique, mais il me parait plus sérieux de mettre en frontal un reverse proxy. Voici ma config basique avec nginx :

/etc/nginx/conf.d/twister.conf

upstream twister {
server 127.0.0.1:28332; # Default twister port
}

server {
listen       80;
server_name  IP; # IP ou domaine
server_tokens off;     # don't show the version number, a security best practice

access_log  /var/log/nginx/twister-proxy-access;
error_log   /var/log/nginx/twister-proxy-error;

include proxy.include;

 location / {
proxy_redirect     off;

proxy_set_header   X-Forwarded-Proto $scheme;
proxy_set_header   Host              $http_host;
proxy_set_header   X-Real-IP         $remote_addr;

proxy_pass http://twister;
  }
}

/etc/nginx/proxy.include

proxy_set_header   Host $http_host;
proxy_set_header   X-Real-IP $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto $scheme;

client_max_body_size       10m;
client_body_buffer_size    128k;

proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;

proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 64k;

Une fois connecté à l’interface d’admin vous pouvez soit créer un compte soit vous connectez si vous avez bien sauvegardé la clé secrète du compte.

Pour finir j’ai lancé la génération de blocs pour stresser le matériel et comparer :

ARMv7              Current hash rate: 16189
VPS cloud1 OVH     Current hash rate: 38794
Core i5 sous OSX   Current hash rate: 82417

Malheureusement twister ne permet pas pour l’instant d’utiliser plusieurs core même si l’option est présente. La génération de bloc sur cet ARM sert un peu à rien, cependant l’interface web de twister et la machine reste très réactive.
Subsiste un dernier bug, l’instance de twister sur cet ARM chez Online n’affiche aucun avatar, j’essaye de voir si cela proviendrait d’une éventuelle configuration réseau chez Online, le stockage des avatars étant stockés dans la DHT et récupéré de manière particulière :

avatar requires fragmentation of IP packets. It is possible (although unlikely) that some router would have problem with that

Une doc un peu plus avancée sur l’hébergement de twister sur un serveur :

http://wiki.twister.net.co/w/using:howto:twister_on_your_self-host_server

Malgré sa jeunesse et ses bugs, twister est un excellent outil, amené à évoluer et à devenir une solution crédible de réseau social libre en P2P. Un développeur a publié un outil web qui permet de consulter les messages des utilisateurs stockés dans la DHT : https://twisterio.com/timeline/fredix