jeudi 1 octobre 2009

Cluster Tricks: copie en masse

Dans un cluster, la vitesse des disques ou du réseau peut être un facteur limitant critique pour la performance. Considérons le scénario suivant, qui a été rencontré en pratique au Lacal:
  1. Une première phase de calcul est lancée sur chaque noeud, et produit plusieurs GB de données par noeud (stockées dans l'espace de travail sur le disque local)
  2. Une deuxième phase de calcul est lancée, et elle a besoin de toutes les données précalculées sur tous les autres noeuds.
Les disques sont assez gros pour acueillir chacun une copie du dataset intermédiaire complet (quelques centaines de GB). Mais comment les distribuer efficacement ?

Evidemment, un bête SCP ferait l'affaire, mais il serait impensable de le lancer a la main entre les différentes machines suivant un ordonnancement précis (ou alors, trop emmerdant, et pas assez réutilisable).

Un bête scp de toutes les machines vers un noeud "principal", puis de ce noeud vers les autres, ferait aussi l'affaire. Mais terriblement lent.

Au moment ou je suis intervenu sur le problème, la copie sur un noeud maître avait déja été faite, mais le scp séquenciel était hors de question (trop lent).

Une première solution intéressante s'est révélée en Bittorrent. Les outils pour cela sont disponible dans portage (nous avons utilisé BitTornado, qui est un peu plus pratique que le client original "mainline" tout en étant très similaire d'utilisation). Une fois le hash initial accompli sur le noeud maitre (ce qui prend toutefois beaucoup de temps), la copie s'est faite relativement efficacement.

Mais on est encore très en dessous du maximum théorique, ce qui m'a amené a découvrir la solution idéale pour le job: uftp (http://www.tcnj.edu/~bush/uftp.html), un système ftp-like over udp, supportant le multicast.

Avec le multicast, chaque noeud peut envoyer un seul paquet de données au switch, le paquet sera répété sur toutes les interfaces (ou seulement sur les interfaces utiles si le switch gère le Multicast Snooping, ce qui n'était pas notre cas), et chaque machine pourra réceptionner le paquet simultanément, ce qui génère un gain très appréciable de vitesse (dans notre cas, vitesse de copie globale d'environ 400MB/s, au lieu des 6MB/s offerts par scp, et des 150MB/s offerts par bittorrent.)

L'utilisation est très simple, même si manquant un peu de flexibilité. Le recepteur est un daemon tournant sur chaque machine, qui stockera tous les fichiers reçus dans un répertoire public sur le disque local. L'émetteur est un client lancé par un utilisateur, qui prendra simplement un nom de fichier en argument.

Evidemment, ce système est totalement abusable et n'intègre absolument aucune sécurité. et ne doit être employé qu'a l'intérieur d'un réseau de confiance. L'ebuild est disponible ici (https://xolus.net/~max/uftp-ebuild.tar.gz) en attendant qu'elle fasse son chemin dans Sunrise.

mardi 9 juin 2009

Contrôler le crédit sur une carte SIM avec Nagios

Il est inutile de présenter Nagios, un système de monitoring très populaire et flexible.

J'ai la chance d'avoir a disposition, depuis mon serveur Nagios, un modem GSM très pratique pour envoyer des SMS d'alerte en cas de problème sur un service quelconque. Pour l'envoi de SMS, j'utilise SMSTools, qui s'installe sous la forme d'un daemon prenant le contrôle
du modem, et d'un répertoire de spooling (/var/spool/sms) dans lequel on dépose les messages sortants, au format adéquat.

Pour rendre la chose plus facile, il existe également un script d'envoi simple (sendsms) qui a l'avantage d'éviter les problèmes classiques aux répertoires de spool (conditions de course, etc..). Nagios se configure très simplement pour envoyer des notifications:

define command{
command_name notify-host-sms
command_line /usr/local/sbin/sendsms $CONTACTPAGER$ "'Host $HOSTNAME$ is $HOSTSTATE$'"
}

define command{
command_name notify-service-sms
command_line /usr/local/sbin/sendsms $CONTACTPAGER$ "'Service $SERVICEDESC$ @ $HOSTALIAS$ is $SERVICESTATE$'"
}


C'est parfait, tout va bien. Mais la carte SIM installée dans le modem est une carte prépayée. Comment faire si le crédit sur cette carte s'épuise ? nous allons justement utiliser Nagios pour surveiller le crédit sur la carte, et émettre un avertissement s'il tombe trop bas.

Avec mon opérateur téléphonique, on peut contrôler son crédit restant depuis le téléphone, en entrant une commande de service au clavier: *130#. Le téléphone répond avec un message indiquant le crédit restant.

Quelques recherches sur google indiquent que ce type de commandes s'envoie au modem au moyen de la commande AT CUSD. On teste immédiatement avec minicom:

AT+CUSD=1,*130#,15
OK

+CUSD: 2,"Credit actuel: CHF -0,44; 25 SMS gratuits jusqu'au 01.10.2009",15


Reste a interagir correctement avec le modem, ce qui n'est pas totalement trivial a cause de quelques détails pratiques. J'utilise pour piloter le terminal un obscur outil appelé comgt, un équivalent de "chat" (le système de script utilisé par ppp) mais en plus flexible. Voila le script (a mettre dans /etc/comgt/credit):

set com 115200n81
set senddelay 0.05
send "AT+CUSD=1,*130#,15^m"
waitfor 60 "+CUSD:"
get 10 "^m" $s
print "Reply: ",$s,"\n"


On teste avec comgt:

gate # comgt -d /dev/ttyS0 credit
SIM ready
Waiting for Registration..(120 sec max)
Registered on Home network: "Swisscom"
Signal Quality: 21,99
Got: " 2,"Crdit actuel: CHF -0,44; Xtra-liberty: 25 SMS gratuits jusqu'au 01.11.2009.",15


Reste à traiter la sortie pour l'envoyer vers nagios (exercice pour le lecteur parce que je suis paresseux).

lundi 25 mai 2009

Gare au Hadophishing !

J'ai discuté récemment avec un internaute français, téléchargeur occasionnel, qui était persuadé d'avoir reçu un mail d'avertissement Hadopi.

Le mail en question est arrivé sur la mailbox de son ISP, "contre-signé par la gendarmerie", et incluait des prétendues preuves sous la forme d'une liste de téléchargements avec dates et heures.

J'ai hésité un instant. Pour autant que je sache, l'infrastructure Hadopi est loin d'être opérationnelle, cet e-mail était donc selon toute vraisemblance une tentative de phishing.

Comment la liste de téléchargements a-elle été produite ? Etait-ce simplement une liste aléatoire de titres populaires ? Comment un phisher pourrait-il relier une liste de téléchargements à une mailbox d'ISP ? Il est sûrement assez facile de moissonner des adresses IP sur un réseau P2P public, mais le lien avec les mailboxes correspondantes ne devrait être connu de personne hormis l'ISP.

Faut-il donc voir une brèche de sécurité chez son ISP ? un employé mécontent aurait-il pu revendre ces informations à un phisher ? ou pire, l'attaque pourrait-elle directement émaner d'un insider ?

Tout ceci fait réfléchir aux implications du processus prévu par la loi Hadopi. Les mails de phishing de ce genre sont une deuxième attaque évidente contre ce processus (la première est l'envoi de plaintes arbitraires et invérifiables a l'encontre d'inconnus)

jeudi 10 avril 2008

Threads perl avec Gentoo - Beware !

Je viens de perdre deux bonnes heures avec un problème bien tordu.

A PolyLAN X, il semblerait que la cause du gros foirage de l'authentification soit dû non pas au dimensionnement du nombre de transactions autorisé, comme je l'ai d'abord pensé, mais au fait que l'interpréteur Perl n'était pas threadé, et que par conséquent un seul login simultané pouvait avoir lieu pour le serveur radius.

Après un "echo dev-lang/perl ithreads >>/etc/portage/package.use ; emerge perl", radiusd s'est retrouvé incapable de démarrer, se plaignant d'un symbole manquant dans le module rlm_perl.

Ré-emerger freeradius n'a bien entendu rien donné.

Le problème était qu'a la compilation, freeradius à utilisé les headers de perl pour compiler son module, mais au lancement, il se liait dynamiquement à la libperl. Sous Gentoo, l'interpréteur perl et la libperl sont deux packages séparés, et je n'avais pas réinstallé la libperl.


De manière générale, plein de problèmes de linking sont apparus. Ces problèmes auraient du être résolus par perl-cleaner; malheureusement, si perl threadé et non threadé sont considérées comme des versions différentes, avec des répertoires séparés pour les libs, perl-cleaner les considère comme une seule et même version, et ne déclenche pas la reconstruction par défaut. Il fallait donc utiliser "perl-cleaner allmodules" plutot que "perl-cleaner modules".

dimanche 30 mars 2008

PolyLAN XI, Topologie Réseau

Voici le plan pour la topologie du réseau PolyLAN XI (en admettant que nous recevions bien le 6248 à temps)

Places: 216

Couche Physique :

Au centre, le 6242 en haut du rack. Fifi, Riri, Loulou sur ports 1,2,3.
ports 27-48 trunkés par paires, donc 11 trunks (9 zones joueurs, 2 zones admin)
ports 4-26 pour serveurs de jeu.

Couche Ethernet :

Vlan 1: réseau de production. Vlan par défaut, untagged partout sauf ports 2 et 3
Vlan 10: réseau administratif. Tagged sur tous les trunks et sur port 1 (fifi)
Vlan 20: réseau passerelle vers internet. Untagged sur ports 2 et 3.

Couche IP:

Réseau administratif: 10.0.4.0/24 sur Vlan 10.
Fifi: 10.0.4.10

Réseau passerelle: 10.0.8.0/24 sur Vlan 20.
Core: 10.0.8.1
Adresse de routage flottante: 10.0.8.2
Loulou (primaire): 10.0.8.3
Riri (secours): 10.0.8.2

Réseau production: 10.0.0.0/22 sur Vlan 1
10.0.0.0/24 : Services réseau
10.0.0.1: Core
10.0.0.2: Fifi
10.0.1.0/24 : Serveurs & Admins
10.0.2.0/23 : Joueurs


Pfew.... un vrai jeu d'enfant, comparé à PolyLAN X :D

C'est pas demain que j'aurai ma license...

... Vu que la personne qui s'occupe de ça a l'OFCOM a pris des vacances. Du coup, va falloir attendre encore un peu... frustration frustration

mardi 11 mars 2008

Diplôme, HAM-Radio, LACAL, Polylan

Ca y est, je suis "Officiellement autorisé à porté le titre d'ingénieur en systèmes de communication", avec le petit papier qui va bien. Je ne suis donc plus un bon a rien d'étudiant, yesss !

Petite geulante contre l'administration de l'EPFL: c'est bien d'avoir une gestion automatique des droits, avec un bel annuaire LDAP et tout. Mais quand le lendemain de la réception de la jolie enveloppe, on se retrouve avec tous les accès physiques et une bonne partie des accès éléctroniques coupés, ça fait un peu l'effet d'un bon coup de pied au cul... et c'est pas franchement pratique pour finaliser les projets encore en cours.

Mercredi, j'ai passé l'examen de radio-amateur CEPT. J'attends de recevoir la concession. En attendant, j'ai fait l'acquisition d'un IC-271E en excellent état pour le 145MHz, et une antenne GP qui va avec. J'ai posé l'antenne sur le balcon du toit d'INJ en attendant de pouvoir faire mon premier QSO légal. J'ai aussi une superbe antenne magnétique pour la HF, qui venait avec un tuner automatique et SWR-mètre intégré. Malheureusement je n'ai pas (encore) de transceiver HF.

Je suis sur le point d'être engagé par le LACAL avec pour mission officielle de mettre en place le cluster de playstations. Nous avons gardé le front-end que j'avais configuré il y a trois mois, mis au point un schéma d'allocation d'adresses et de noms. Dans un premier temps, il n'y aura pas de scheduler, les noeuds seront directement accessibles en SSH depuis le front-end. Nous allons probablement acheter une meilleure machine pour le front-end, et reconvertir l'ancien en station de gestion réseau. Aujourd'hui, Dag Arne a enfin obtenu les droits administratifs de resp. technique du labo, ce qui nous à permis d'obtenir une adresse fixe pour ce foutu front-end. L'objectif est de pouvoir lancer les premiers calculs à la fin de la semaine prochaine.

PolyLAN XI aura lieu le w-end du 12-13 Avril, au hall du SG à l'EPFL. Ceci risque d'être ma dernière ou avant-dernière édition :( Grâce au soutien technique de Dell, nous allons pouvoir acquérir à prix préférentiel un superbe PC6248 tout neuf, ce qui couvrira nos besoins pour cette édition en terme d'interconnexions Gigabit. La performance niveau ARP devrait rester bonne puisque nous gardons un routeur matériel, et il n'y aura plus de trunk limitant au milieu qui coupe la salle en deux.