Le petit coin de Nicolas

Aller au contenu | Aller au menu | Aller à la recherche

Trucs de geek

Le mal est à la racine

Pour se changer les idées et s'occuper en cette période chaude, un petit coup de Polar-Geek :-)

Le téléphone sonna. Je sortais de ma torpeur post déjeuner :
"Tu peux venir immédiatement dans mon bureau ?"
"Euh, oui, j'arrive..."

Damn, si le Grand Chef m'appelle et précise un "immédiatement" c'est que cela doit être grave. Que s'est-il passé encore ? Malgré ce "immédiatement", je pris quelques secondes pour faire le tour des consoles de monitoring. A priori, ce n'était pas un problème système. Déjà ça de pris. Je fonçais donc vers l'ascenceur pour monter au 6ème étage. Quand il s'ouvrit, je me dirigeai droit vers la salle du fond en remarquant une grande quantité de chaises vides. Soit tout le monde était parti mais c'était un peu tôt, soit c'était la catastrophe du siècle. En rentrant dans le bureau du Grand Chef, je fus fixé. Tous les chefs de département de la DSI étaient réunis. Apparemment, cela devait durer depuis quelques heures au vu de la chaleur ambiante, du paperboard barbouillé dans tous les sens et des gobelets de café qui s'entassaient.

Le Grand Chef, assis dans un coin de la salle, m'annonça :

"Merci pour ta promptitude. Je suppose que tu as regardé le monitoring avant de monter. Tu sais donc déjà que le problème n'est pas là. Si je t'ai fait venir, c'est parce que cette nuit, à quelques heures du lancement de notre nouvelle éponge, quelqu'un de chez nous a volontairement saboté l'application Kicifrot. Nous nous en sommes aperçus à 9h en arrivant pour un dernier et ultime contrôle, même si tout avait été validé officiellement hier soir. Le saboteur a utilisé notre outil de déploiement pour envoyer sur notre plateforme de production une version antérieure à celle prévue. Depuis 9h, deux actions ont été menées :

  • Mise en place d'une nouvelle infrastructure pour redéployer la version finale de Kicifrot et être prêt pour le lancement du produit à midi.
  • Analyse de la version déployée cette nuit pour voir qu'en plus d'un bug qui a été corrigé par la suite, cette version contenait un backdoor permettant de planter l'application dans sa globalité d'une part et d'autre part de collecter les informations bancaire de nos clients.

La situation est maintenant corrigée et tout est opérationnel..."

Le Grand Chef laissa planer un moment de silence et alla se chercher un verre d'eau. J'en profitais pour digérer les informations communiquées : la catastrophe semblait avoit été évitée et tout semblait sous contrôle. Mais qu'est-ce que j'ai à faire là-dedans moi ? La réponse n'allait pas tarder à venir...

"Nous avons isolé les machines impactées par le sabotage. Je veux que tu me trouves notre saboteur ! Messieurs, vous vous mettrez à la disposition de notre petit camarade et considérez que toutes ses demandes sont à considérer comme si c'étaient les miennes" dit-il aux chefs des départements. "Personne ici, ni de vos équipes, ne rentre chez lui tant que le saboteur n'est pas trouvé ; Week-end prolongé ou pas. Allez, circulez et allez prévenir vos équipes !"

Les chefs des départements s'exécutèrent et quittèrent la salle. Alors que je commençais à me retourner pour rejoindre mon antre, une voix me dit : "Je veux ce fumier, tu m'entends ? Tu as carte blanche et tu peux bloquer tous les employés de la société le temps qu'il faudra... Maintenant, sache aussi que ma fille fête son anniversaire ce week-end et qu'il n'est pas prévu que je le rate. Bonne chance...."

Ah sa fille. Le bien le plus précieux du Grand Chef. Son point faible. 5 ans et espiègle comme tout. Elle fera souffrir des garçons celle-la. Il me restait donc 6 heures pour trouver le saboteur ou alors cela sentirai le roussis pour tout le monde si le Grand Chef devait ne pas assister à l'anniversaire de sa fille... Je retournais fissa dans mon bureau. Je venais de recevoir un mail des Admin Sys m'indiquant les nouvelles IP des serveurs sabotés. Je me connectais dessus pour trouver des informations utiles. Je fus vite bredouille. Comme je le craignais, toutes les connexions SSH étaient émises depuis la même passerelle et avec le même utilisateur : "root". Toujours la même chose, je ne cessai de les mettre en garde contre cette pratique depuis des années et elle était toujours là. Je me résignais alors à ne pas trouver mon coupable sur ces machines...

En me connectant sur la passerelle, je notais que le prompt n'était pas celui défini en standard. Encore quelqu'un qui s'est amusé avec songeais-je en me précipitant vers les fichiers de log pour en apprendre plus. Je commençais par les fichiers de l'outil de déploiement ; grand bien m'en pris car même si le saboteur avait supprimé quelques fichiers de logs de déploiements pour cacher ses méfaits, il avait oublié un fichier annexe, peu utile mais qui stockait juste l'horaire et la commande passée. Je trouvais donc que mon saboteur avait déployé quatre paquets entre 3h20 et 3h38. En continuant à analyser les fichiers de logs, et après avoir éliminer différentes IP / compte liés à des opérations de nuit, je tenais mon coupable à la limite près qu'il avait utilisé un poste en libre service placé près de la cantine et de l'accès aux parkings. Il allait me falloir traverser tout le site pour en savoir plus.

En arrivant sur le PC en libre-service, qu'elle ne fut pas ma surprise de voir que l'écran était hors-service. Après prise de renseignement, cela datait de plusieurs jours. Ainsi, mon saboteur n'avait pas pu utiliser le poste en tant que tel. Il ne lui restait que la connexion en mode Terminal Server. Je repartais donc dans mon bureau, me connectait à la machine en question en TSE et épluchait le journal d'évènements. Je le tenais enfin mon coupable. J'appelais alors le Grand Chef et lui demanda de convoquer tout les employés dans le grand amphithéâtre.

Je fis une dernière vérification en me connectant au service RH pour conforter mon opinion. Non seulement il s'était connecté avec son login en TSE sur le poste en libre service mais le relevé du parking était formel également. Je pris alors la direction de l'amphithéâtre.

La salle était comple et je me dirigeais vers la scène sous les yeux observateurs de mes collègues. Je pris le micro et annonça :

"J'ai l'identité de notre saboteur. Je peux même dire DES saboteurs, car oui parfaitement ils sont plusieurs à être complice de ce sabotage"

Un mouvement de recul et un bruit parcoururent la foule puis le silence revint. Le Grand Chef m'indiqua de continuer d'un mouvement de tête.

"Je vais commencer par les complices dans un premier temps" indiquai-je.

"Tout d'abord messieurs les admin systèmes pour utiliser le même mot de passe root partout. Sans ce point, le saboteur, ne faisant pourtant pas partie des équipes techniques, n'aurait pu accéder à nos machines. Je ne m'étendrais pas sur cette faute professionnelle qui relève du premier cours de première année d'étude réseau... Vous êtes complice de cette histoire de part votre négligence !!"

"Je disais précédemment que notre saboteur n'est pas membre des équipes techniques et n'a pas eu besoin d'un soutien d'un membre des équipes techniques car il est suffisamment aguerri par lui-même et que par ingénierie sociale, il a pu récupérer l'ensemble des informations des développeurs eux-mêmes. Il a ainsi pu accéder au code puis préparer et injecter son code à l'insu de tout le monde. Messieurs les développeurs, vous êtes les seconds complices pour ne pas avoir tenu vos langues et pour permettre le commit anonyme sur votre dépôt de sources... Vous ne valez guère mieux que nos admins sys que vous raillez au café..."

"Mais venons-en à notre vrai coupable. Il s'agit de notre cher contrôleur de gestion M. Racine. Il était brillant d'utiliser le PC en libre service mais il aurait fallu voir que l'écran était cassé et surtout ne pas utiliser votre compte pour s'y connecter. Enfin, de même, sachez que même si la barrière du parking est ouverte vu qu'elle est cassée, cela n'empêche pas le détecteur de voiture de scanner la votre à chaque passage... D'ailleurs, je suppose que l'on tient aussi notre destructeur de barrière de parking..."

La foule était médusée par mes révélations et un cercle s'était fait autour de M. Racine. Celui-ci me rendit un regard plein de haine mais restait muet.

"Je pose sur ce bureau l'ensemble des documents permettant de confondre M. Racine. Personnellement, j'en ai fini et je dois me rendre à un rendez-vous..."

Le Grand Chef me gratifia d'un regard qui valait remerciement. Il demanda aux Services Généraux d'accompagner M. Racine jusqu'à son bureau pour discuter avec lui des détails de l'histoire. Je me retournais alors vers lui :

"N'oubliez pas l'anniversaire de votre fille... M. Racine peut attendre quelques jours..."

Pour échapper au fsck au prochain redémarrage de votre machine.

Plusieurs solutions :

  • Via l'argument -f de la commande shutdown. Attention, l'argument -F force le fsck au démarrage - ne pas se tromper dans la casse ;-)
  • Créer un fichier /etc/fastboot ; attention il sera supprimé suite au reboot. Si vous voulez échapper perpétuellement au fsck lors d'un redémarrage, il faut donc le (re)créer à chaque fois.
 
touch /etc/fastboot
chmod 0 /etc/fastboot

Faudrait que j'arrête de publier des tutoriels/astuces/... ici mais plutôt dans l'espace prévu à cet effet mais le manque de flux RSS lié à un espace documentaire sphinx ne m'y encourage pas :-(

Migration Slackware 13.0 vers 13.1

Ne supportant pas de ne pas être à jour, à peine Slackware 13.1 sorti que je me suis empressé de mettre à jour à distance mon linutop.

En partant des notes d'UPGRADE.txt, j'ai fait la chose suivante et ça marche :

  • Modification de /etc/slackpkg/mirrors pour pointer sur une arboresence en 13.1 + slackpkg update
  • Mise à jour des programmes de base :
slackpkg upgrade pkgtools tar findutils xz
slackpkg upgrade glibc-solibs
slackpkg upgrade slackpkg
slackpkg install-new (qui pour le coup m'installe des trucs dont j'ai pas besoin mais passons... j'ai la flemme de trier)

Suppression des paquets obsolètes (certains ne sont pas installés, pas grave) :

removepkg bluez-libs bluez-utils cupsddk device-mapper epic4 gqview \
    kdelibs-experimental lbxproxy libgtkhtml liblbxutil libungif \
    libv4l loadlin mpg321 mplayerthumbs proxymngr xf86-input-citron \
    xf86-input-elographics xf86-input-fpit xf86-input-hyperpen \
    xf86-input-mutouch xf86-video-newport xf86-video-xgixp

Mise à jour des autres paquets :

slackpkg upgrade-all

Dans les modifications des fichiers de conf, attention notamment à /etc/rc.d/rc.inet1.conf si vous ne voulez pas perdre votre conf réseau ;-)

Modification des entrées /dev/hd* par /dev/sd* comme indiqué dans le "LIBATA SWITCHOVER" de CHANGES_AND_HINTS.TXT ou en reprenant ma méthode.

Coup de bol : sur mon linutop, je suis déjà en /dev/sd* par contre, je n'échappe pas à l'initrd à regénérer...

Et après un reboot : ça marche...

digiKam sous OSX

J'ai toujours aimé le gestionnaire de photos digiKam et en vue d'un éventuel retour sous Linux et surtout pour en avoir marre des plantages d'iPhoto '09, je me suis pris à l'installer sous OSX. Voici la marche à suivre.

Pré-requis :

Allons y gaiement :

sudo port install digikam
sudo chown -R <vous>: Library/Preferences/KDE/
sudo chown <vous>: /Library/LaunchAgents/org.freedesktop.dbus-session.plist 
launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist 

Si vous ne changez pas les permissions sur org.freedesktop.dbus-session.plist - vous aurez un message du type :

nothing found to load

Il vous reste plus qu'à aller dans Application > MacPorts > KDE4 > digikam

Plus qu'à voir quel est le meilleur moyen de récupérer mes photos d'iPhoto vers digiKam...

Streamer depuis une machine linux vers une borne airport express

Une des forces de mon Macbook est AirTunes qui permet de diffuser la musique d'iTunes vers n'importe quoi (une chaine hi-fi par ex) via une borne airport.

Après quelques recherches, j'ai découvert le projet AirPort Express ClientPlayer (raop) qui permet de diffuser de la musique vers une borne Airport Express. Pour aller encore plus loin, il s'avère que PulseAudio intègre le module raop, ce qui donne le paquet pulseaudio-module-raop sur des systèmes Debian/Ubuntu.

J'ai donc créé une VM avec "Ubuntu Netbook Remix 9.10" ; une fois installé, il m'a fallu installé les composants manquants :

 bash
sudo apt-get install alsa-base pulseaudio pulseaudio-module-raop

Puis éditer /etc/pulse/default.pa pour y ajouter les 2 lignes suivantes :

load-module module-raop-sink server="IP.DE.MA.BORNE"
load-module module-native-protocol-tcp auth-anonymous=1

ce qui donne :


[...]

load-module module-augment-properties

load-module module-raop-sink server="192.168.3.21"
load-module module-native-protocol-tcp auth-anonymous=1

[...]

Si PulseAudio tourne en service, relancer-le ; sinon il va peut-être falloir relancer votre session pour prise en compte du fichier.

Sous Gnome, allez ensuite dans les préférences du Son (Click droit sur le son dans la barre des tâches) > Sortie > Sélectionner RAOP.

PulseAudio est utilisable aussi bien sur un environnement Gnome que KDE (via Phonon) et surement les autres aussi ;-)

Source : Utiliser une borne airport express depuis Ubuntu

OS X et après ?

18 mois après l'acquisition de mon MacBook, je deviens songeur sur OS X et Apple de manière plus générale. J'avais décidé de quitter le monde Linux pour celui d'OS X au nom du "It just works", imovie pour du montage vidéo que je n'ai toujours pas pris le temps de faire, iphoto et surtout TextMate.

J'aurais tendance à dresser le bilan suivant :

  • Finder : quand on a gouté à Konqueror ben c'est bien mince
  • Spotlight : sous utilisé, uniquement en simple lanceur d'application
  • Exposé / Dashbord : jamais utlisé ; j'en reste au bon vieux alt-tab
  • Imovie : pas utilisé pour le moment
  • iphoto : autant la version 08 avec FFXporter était agréable à utiliser, autant la version '09 + FlickrExport est une cata (plantage à répétition, lourdeurs, etc). Quand je vois les dernières avancées de digikam...
  • TextMate : j'adore même si je ne l'utilise pas au niveau de son potentiel
  • Airtunes (ie pouvoir écouter Itunes où on veut via une borne aiport express) / AirFoll (même principe mais ne se limite pas à ITunes) : j'adore - dommage qu'Airtunes ne gère pas le .ogg
  • Delicious Library : pratique, surtout avec le lecteur de code barre et même si je me suis limité uniquement à mes BDs pour le moment
  • Mail : finalement, je suis en full webmail Gmail
  • Rip-it : très bon logiciel de copie de DVD
  • Tunnelblick : bon client OpenVPN
  • Alors que OS X pourrait accueillir mes dev web autour de CouchDB/Django, ils se retrouvent finalement/essentiellement dans des VMs (surtout pour CouchDB vu que j'avais des soucis avec CouchDBX et que je ne voulais pas avoir recours au macports.

Pour le reste, ce sont des applications que l'on trouve sur tous les environnements, donc je ne les mentionnerais pas.

Globalement, cela fonctionne bien. Jamais eu de problèmes particuliers ; quelques rares plantages.

Ce qui m'énerve c'est le coté faut payer (un peu) tout le temps et la politique commerciale d'Apple. Je me surprends donc à envisager le retour à une station libre de bout en bout. Se pose alors la question du retour à une plateforme GNU/Linux ou *BSD. Ben oui OS X étant un BSD-like, y a peut être une opportunité à saisir (ou pas) à rester sur du *BSD.

Si de bonnes âmes dans l'assistance ont des retours d'expérience à me faire partager sur les *BSD, je suis preneur :

  • Utilisation : surf, bureautique, multimédia (écouter de la musique, gérer mes photos, un jour faire du montage vidéo de base) et bien sur du dev web autour de Django & CouchDB pour le moment.
  • Reconnaissance matérielle ?
  • Utilisation d'un système *BSD / Linux sur un MacBook blanc ?

Extension Postgres pour PHP sous Slackware

Par défaut, la version de PHP fournie par Slackware ne comprend pas les extensions pgsql et pdo_pgsql, chose que nous allons corriger dans un instant :

Pour commencer, récupérer le slackbuild de PHP pour votre version de Slackware :

 bash
rsync -avz --del rsync://slackware.mirrors.tds.net/slackware/slackware64-13.0/patches/source/php ./
rsync -avz --del rsync://slackware.mirrors.tds.net/slackware/slackware64-13.0/source/n/alpine ./

Pour PHP, on s'appuie sur les patchs car la version par défaut dans Slackware 13.0 est PHP 5.2.10 et que par la suite il y a eu une mise à jour en PHP 5.2.12. Pour alpine, il s'agit d'une dépendance afin de pouvoir compiler l'extension imap de PHP. Il n'y a pas eu de mise à jour d'alpine depuis la sortie de Slackware 13.0 donc on le prend dans les sources originelles.

Editez ensuite php/php.Slackbuild pour y ajouter les informations relatives à Postgres dans le cadre du configure, à savoir :

 bash
--with-pgsql=shared,/usr \
--with-pdo-pgsql=shared,/usr \

Ce qui me donne au final (et avec au passage modification du BUILD pour le distinguer du paquet officiel)

 bash
BUILD=${BUILD:-1_slack13.0_with_pgsql}

[...]

  --with-mysql=shared,/usr \
  --with-mysqli=shared,/usr/bin/mysql_config \
  --enable-pdo=shared \
  --with-pdo-mysql=shared,/usr \
  --with-pdo-sqlite=shared \
  --with-pgsql=shared,/usr \
  --with-pdo-pgsql=shared,/usr \
  --with-pspell=shared,/usr \
  --with-mm=/usr \

[...]

Ensuite il faut éditer le fichier doinst.sh pour que les extensions relatives à Postgres soient chargées ; il y a surement plus propre comme méthode mais ça marche :

 bash
echo "extension=pgsql.so" >> /etc/httpd/php.ini
echo "extension=pdo_pgsql.so" >> /etc/httpd/php.ini

Ne pas oublier de re-gzipper à nouveau doinst.sh pour qu'il soit pris en compte par le slackbuild :

 bash
gzip doinst.sh

Une fois cela effectué, pour générer la création de votre package PHP, il vous suffit de faire :

 bash
./php.SlackBuild

Une fois généré, pour l'installer :

 bash
removepkg php
installpkg /tmp/php-5.2.12-x86_64-1_slack13.0_with_pgsql.txz

Pour ceux qui veulent récupérer le slackbuild ou bien le package 64 bits :

Pour ceux qui ne sont pas en 64 bits, il suffit de recompiler en précisant dans php.Slackbuild :

 bash
ARCH=${ARCH:-i486}

Et voilà...

Eviter le kernel panic en mettant à jour vers slackware current

Par curiosité, j"ai voulu voir ce que pouvait donner slackware-current (le branche "bleeding-edge" de slackware) et dans un premier temps bien mal m'en a pris vu que cela s'est terminé par un joli "Kernel Panic". Après discussion avec un collègue et un peu de recherche sur internet, il s'avère qu'à partir du noyau linux 2.6.32, Slackware a désactivé la vieille couche IDE qui faisait que les périphériques étaient vus en /dev/hd*.

Voici la manipulation à suivre pour passer d'une slackware 13.0 à slackware current :

Tout d'abord, utiliser un mirroir slackware-current en éditant /etc/slackpkg/mirrors en lieu et place du mirroir de la version stable. Mettre à jour ensuite votre distribution :

 bash
slackpkg update gpg
slackpkg update
slackpkg install-new
slackpkg upgrade-all

A ce stade, votre système est à jour et vous avez un joli noyau 2.6.33 en passe de devenir votre noyau par défaut.

Avant de redémarrer votre machine, il faut faire les manipulations suivantes :

  • Edition de /etc/lilo.conf pour remplacer les occurrences de /dev/hd* par /dev/sd*
  • Edition de /etc/fstab pour remplacer les occurences de /dev/hd* par /dev/sd*
  • Suppression de /etc/udev/rules.d/70-persistent-cd.rules ; Le fichier sera régénéré correctement au redémarrage de la machine
  • Si vous utilisez initrd au démarrage, il faut éditer /boot/initrd-tree/rootdev et regénérer votre image initrd via mkinitrd. Dans mon cas avec une installation de base de slackware, je n'en ai pas eu besoin. Par contre, j'en aurai besoin pour mon linutop.

A ce stade, si vous faites un lilo -v pour prendre en compte vos modifications, il va hurler puisqu'il ne trouve pas de périphérique /dev/sd*.

Pour cela il suffit de tricher un peu (ma partition /boot est sur /dev/hda2) :

 bash
ln -s /dev/hda /dev/sda
ln -s /dev/hda1 /dev/sda1
ln -s /dev/sda2 /dev/sda2
lilo -v
reboot

Au redémarrage, udev remplacera vos liens symboliques /dev/sd* par les bonnes entrées qui vont bien.

Vais pouvoir aller tester KDE 4.3.5 en attendant que KDE 4.4.x arrive dans slackware-current du coup... :-)

Source : Robby’s libata switchover howto

Un modem peut en cacher un autre

Ci-après ma contribution à Polar Geek, initiative pour le moins ingénieuse de Bruno Bord.

Mon téléphone s'agita, le message fut bref :
- "Rendez-vous au Bar de la Taupe à 15 heures"
J'eus à peine le temps d'assimiler le message que l'appel était fini. Sortant de ma torpeur, je notais rapidement le message sur un bout de papier tant qu'il résonnait encore en ma mémoire. Je ne connaissais qu'une personne en mesure de me passer ce type d'appel et cela faisait bien des années que je n'avais pas entendu cette voix. Me réveillant doucement en sirotant mon café, je songeais à ce message et surtout à son émetteur. Les souvenirs remontaient au fur et à mesure et ma mémoire commençait à rassembler des bribes de visage dans mon esprit. Rigolo, il se rappelait que j'évitais de travailler en début d'après-midi pour cause de digestion et de sa sieste associée. Il ne prenait aucun risque quant à ma disponibilité de me fixer un rendez-vous à 15h dans ce lieu... Il était donc toujours de la partie ? J'aurais pensé qu'il aurait fini par renoncer... L'après-midi s'annonçait intéressant et pour le moins intrigant...

La matinée passa machinalement avec son lot de paperasses et ses coups de téléphone. Les quelques affaires en cours n'avaient pas grand intérêt mais me permettaient de payer mon toit, mon manger et les croquettes du chat. Pour ne pas rater mon rendez-vous, je mangeai léger et me rendis en marchant jusqu'au Bar de la Taupe. A défaut de dormir, ce sera une marche digestive...

Le Bar de la Taupe a pour intérêt d'y accueillir une grande diversité de personnes. Des jeunes lycéens crapoteurs aux cadres tirés à quatre épingles, il se transformait en "salon de thé" tous les jeudi après-midi pour y accueillir un groupe de mamies terribles, plus portées sur le panaché que le thé et plus sur leurs parties de poker que leur tricot. Je m'assis donc en terrasse, afin de profiter des quelques rayons de soleil et commandai mon café. A peine eus-je le temps de poser ma veste qu'il arriva. Il n'avait pas changé malgré toutes ces années. Toujours habillé de son vieux costume pastel et de son noeud-papillon, il était maigre comme un clou. De prime abord, il ne ressemblait à rien, beaucoup de personnes s'y étaient laissés prendre et avaient fini par perdre leur dossier contre lui. Denis Zot, alias Papy, s'assit et commanda un café avec son nuage de lait.
" Toujours avocat ?", lançai-je
" Bien évidemment, le petit peuple a besoin qu'on le représente !"
Ainsi, il n'avait vraiment pas changé. Idéaliste jusqu'au bout des ongles, il était le chevalier servant de la justice dans un monde qui grouillait de requins à la solde de gros intérêts privés. Personne n'avait donc eu raison de lui jusqu'à présent ; ça laissait présager de bonnes choses.
"J'ai un dossier pour toi", me dit-il, "c'est urgent et tu es le seul qui peut m'aider"
Perplexe, je le laissais continuer :
"Tes derniers dossiers ne t'ayant pas tenu au fait de l'actualité informatico-légale, il se trouve que depuis plusieurs mois, j'ai mis à mal bon nombre de majors et des membres de nos gouvernements dans leurs tentatives de poursuite d'internautes pour des histoires de copyrights. Au début, cela était assez simple, il suffisait de trouver le vide de procédure pour faire tomber le château de cartes. Même si la presse a peu relayer l'information, j'ai quand même réussi à évincer A. Dopi de toute velléité électorale..."
Ah oui songeais-je. Je m'en souviens maintenant, c'était l'une des dernières informations qu'avait remonté un vieux script en analysant des flux RSS que je pensais périmés. Depuis l'avénement des "Etats Majors" en lieu et place des "Etats Nations" au début du 21ème siècle, la presse était sous contrôle et il était de plus en plus complexe d'échapper à la propagande d'Etat. Le modèle Chinois s'était imposé de part le monde, toute l'information était contrôlée par l'une des cinq Majors et les bribes de gouvernement qui restait ne faisait que leur obéir aveuglément. Arrestations sommaires et mise sur écoute se faisaient à tour de bras. Papy, en face de moi, faisait donc la résistance et jouait le rôle de Chevalier Blanc du petit peuple. Il devait être considéré comme l'ennemi public n°1 ou presque. Il ne devait pas non plus lui rester beaucoup de soutien. Dans quoi allait-il m'embarquer ???
"... mais bon revenons-en à notre affaire" me dit-il. "Mon client, qui comme moi, milite pour le retour aux libertés fondamentales, après moult menaces (comprendre des courriers envoyés par le ministère de la culture pour des activités soit-disant illégales) vient d'être arrêté. S'il ne signe pas un faux aveu, il sera expédié dans son pays natal avec sa femme et ses deux enfants. S'ils repartent en Birmanie, ce sont les pompes funèbres qui vont les accueillir à l'aéroport..."
"Qu'attends-tu de moi ?"
"Trouve la preuve du complot ; seul toi peut la trouver et je n'ai confiance qu'en toi."
"Et j'y gagne quoi ? Hormis de passer sur une liste noire ?"
"Financièrement, donne-moi ton prix et tu l'auras. La question n'est pas là. Comme tu le sais peut-être, la contestation gronde et nous avons besoin d'un coup d'éclat pour faire prendre conscience au reste du peuple que la solution est là. On peut mettre fin au joug des Majors. Ce que je t'offre, c'est la liberté !" Le bougre, il savait que j'étais sensible à ces mots et que je ne supporterais pas que l'on puisse faire du mal à des enfants. Et puis financièrement, je n'avais pas trop le choix, je commençais à prendre les raviolis en grippe...
"Ok, j'accepte ; qu'as tu pour moi ?"
"La clé de sa maison, la milice du Ministère de la Culture ne s'y est pas encore rendue. Ils iront demain d'après un de mes informateurs. C'est ton unique chance de trouver les preuves de son innocence avant qu'ils ne déposent les fausses. C'est tout ce que j'ai pour toi..."
"Bien, j'y vais de ce pas..."
"Fais attention à toi et surveille bien tes échanges" me dit-il. Alors qu'il se levait pour partir il me dit "Tu en auras besoin aussi : Pomme Noisette" et il disparut.

Je finis d'un trait mon café, payai l'addition. Je repartis au bureau mais plutôt que de monter à l'étage, je pris le chemin de la cave. Il me fallait du matériel spécifique et qu'on ne remonte pas jusqu'à moi si je me faisais prendre. Je ne faisais aucunement confiance au matériel dernier cri qui était sur mon bureau. Pour mes affaires courantes, cela allait bien mais pas pour des situations comme celles-ci. Je ressortis mon petit netbook sous Slackware en disant "Hello Citrouille, j'ai du boulot pour toi". Au moins avec Slackware, on sait que l'on installe les sources officielles. Pas de risque de rootkit ou autre tripatouillage exotique. Le temps de vérifier le bon état des batteries et de son bon fonctionnement et je prenais la direction de la maison du client de Papy.

La maison était située en banlieue Ouest de Paris. Elle était au milieu d'une résidence calme et agréable. Un bon coin pour une vie de famille songeais-je. Un jour peut-être... Après avoir fait un petit tour de la maison pour vérifier de la véracité des propos de l'informateur de Papy, je m'y introduisis sans problème. Pas de voisine curieuse pour casser mon approche, vraiment chouette ce quartier. L'intérieur était propre et bien rangé. Quelques jouets dispersés témoignaient de la présence d'enfants.
Je m'attelais au travail et cherchais les ordinateurs. Une fois le premier trouvé, je remarquai que le réseau était filaire. Chose étrange de nos jours mais trahissant le coté paranoïaque du client. En effet, le Wifi s'était imposé comme mode d'accès par défaut mais sa médiocre sécurité permettaient une écoute des plus aisées par nos milices étatiques ou la multitudes de sociétés privées dont les résultats étaient basées sur la délation d'internautes. Au moins avec un réseau filaire, il est aisé de trouver les différents ordinateurs. Je dénombrais 2 portables et deux tours, ainsi qu'une sorte de client léger collé sous le bureau, au même niveau que les prises électriques. Avant d'entrer plus loin dans mon investigations, je branchais Citrouille pour vérifier quelques informations supplémentaires : pas de réseau wifi à proximité, donc j'ai bien tous mes PCs.
Je commençais mon analyse par les deux tours situés dans les chambres des enfants. Je les débranchais du réseau et y introduisis ma clé USB magique contenant un OS minimaliste et surtout des outils d'analyse rapide. Ces derniers ne m'apprirent pas grand chose des deux tours. Les logiciels étaient tous en règles et à jour et les données étaient celles d'un ordinateurs d'enfant : des photos, des jeux vidéos, quelques listes aux Père Noel et quelques menues bricoles. La seule chose repérée fut la présence d'un proxy. Tiens, le père de famille semble vouloir protéger ses enfants. Cela doit correspondre au client léger repéré sous le bureau. Passons à autre chose...

Je décidais alors de brancher Citrouille sur le réseau en utilisant le câble réseau d'une des tours pour voir s'il y avait des activités suspectes. J'activais le mode furtif et en lecture seule pour éviter toute intrusion désobligeante. Le temps que Citrouille s'initialise, je poursuivais l'analyse des deux portables. Pour l'un des deux, ce fut facile, il était complètement HS et vue la dose de poussière sur la machine, cela ne datait pas d'hier. Pour le second, il était en veille et tout de suite un mot de passe me fut demandé. J'avais deux solutions pour cet ordinateur : soit le redémarrer sur ma clé usb magique et analyser son contenu au risque de perdre les données actuellement en cours ; soit le sortir de sa veille et l'analyser en direct live, sans trop savoir ce qu'il contenait tant d'un point de vue données que de celui du mouchard. Il me fallait bien sur trouver le mot de passe... Un mouvement de lumière attira mon attention. Je retins mon souffle avant de constater que c'était seulement lié au soleil qui se couchait et dont la lumière se reflétait dans la porte du four. Et là, le déclic : Pomme Noisette pardi ! Le mot de passe en ma possession, cela ne m'aidait pas pour autant sur l'attitude à suivre vis à vis de ce portable.

Mon attention se déporta alors sur le client léger placé sous le bureau. Je connaissais ce genre de modèle, une configuration minimaliste qui ne prend pas de place et qui permet de rendre des services. Une invite me demanda un mot de passe et Pomme Noisette fut le sésame. Mes soupçons étaient justes, la machine faisait bien office de proxy particulièrement agressif. Des tunnels VPN étaient en outre établis et obéissaient à des règles de routage bien particulières. Tout était fait pour protéger les internautes de la maison et anonymiser au maximum certaines pratiques. Le client de Papy est pour le moins paranoïaque et la réalité ne pouvait que lui donner raison. Toutefois, il s'était fait prendre. Il me restait à trouver comment...

Tout d'un coup, Citrouille se mit à biper dans tous les sens. Elle m'indiqua que le réseau contenait une activité anormale de programmes cherchant à récupérer des informations de tout ce qui circulait sur le réseau et/ou à s'introduire sur les machines présentes sur le réseau. A priori, elle ne s'était pas fait prendre mais il allait falloir la jouer finement pour en apprendre un maximum sans se faire prendre ou montrer que quelqu'un cherche à innocenter le client de Papy...
Il me fallait maintenant accéder au contenu du portable à tout prix sans éveiller les soupçons. Du client légér, je récupérais toutes les informations réseau sur le profil du portable (Adresse MAC, etc). Ceci s'ajoutant aux informations produit écrites sur le portable, j'étais en mesure de créer un profil factice sur Citrouille pour se faire passer pour le portable afin de pouvoir l'analyser tranquillement. Alors que je notais les informations sur un bout de papier, je notais la présence d'un bon de livraison émis par le FAI pour le remplacement du modem/routeur. En y regardant de plus près, cela datait de la semaine précédente... tiens donc. Le courrier stipulait que l'équipe du FAI en charge de la surveillance du matériel avait noté des incidents sur le modem. Par conséquent, un modem de rechange était envoyé de façon préventive et moyennant l'envoi du modem originel pour réparation. Mon radar vit rouge tout de suite, se pourrait-il que le modem soit le responsable de l'histoire ?

Rejoignant Citrouille, je peaufinais mon plan d'attaque. Citrouille allait se faire passer pour le portable et me permettrait d'analyser le modem à son insu en lui donnant des données bidon à manger en masse. Ces données était constituées d'un savant mix de consultations de sites honnêtes, téléchargement de binaires et d'images de femmes plus ou moins dénudées, histoire de faire tilter tout algo de surveillance comme il se doit. Citrouille était prête, il ne me restait plus qu'à taper sur "Entrée". Une pression de touche plus tard et simulant une micro-coupure réseau, Citrouille avait pris la place du portable. J'ouvris alors la session et lança le gestionnaire des tâches ; aucune activité suspecte pour le moment. Il cherchait à se reconnecter sur le réseau mais je ne craignais rien, Citrouille l'empêcherait de revenir en ligne. Je fis une passe rapide sur l'ordinateur. Rapidement je découvris un dossier "Téléchargement" contenant quelques oeuvres piratées à des dates variées. Cela était vraiment trop gros comme pièce à conviction mais à l'heure des Etats Majors, cela suffisait amplement pour vous mettre à l'ombre et vider votre compte en banque. Surtout, cela ne collait pas avec ce que j'avais pu voir précédemment sur le client de Papy. Un Dialer dont le nom contenait celui du FAI chercha alors à s'exécuter ; louche me dis-je et tuait alors le processus. Pour éviter tout autre problème, j'arrêtai l'ordinateur pour une analyse ultérieure. Mon regard revint sur le modem, qui de ses diodes me narguait, je le savais...

Citrouille me donna la solution. De nombreuses connexions avaient cherché à se connecter sur le portable pour récupérer moult informations et surtout y placer les mêmes fichiers que ceux que j'avais vu dans le dossier "Téléchargement". Je le tenais mon coupable et il devenait aisé de reconstituer l'histoire. En recevant son nouveau modem, le client de Papy bien qu'habituellement derrière son proxy, dut pour une fois se connecter en direct au modem. A ceci s'ajoutant le CD d'installation dont venait surement le Dialer (et surement d'autres exécutables peu catholiques), le portable avait été compromis à ce moment là. Les autorités n'avaient alors plus qu'à attendre que le modem fasse son travail et de saisir l'individu quand bon leur semblait. L'énigme était résolue, je remis les choses en ordre et quittais discrètement la maison du client de Papy.

La fin de l'affaire fut explosive. Après avoir fait part de mes découvertes à Papy, celui-ci contacta différents collectifs et associations en faveur de la liberté pour créer un effet presse hors du commun. Lorsque la communication fut lancée, les autorités ne purent la retenir et elle déferla sur l'espace public. Le quidam moyen s'empara du sujet et des manifestations spontanées eurent lieu aux quatre coins du pays. L'opposition bien qu'affaiblie tira son épingle du jeu en faisant part de son expérience à ce mouvement citoyen qui grossissait de façon exponentielle. Le gouvernement chercha à faire sauter quelques fusibles en la présence de Monsieur Lop Psi et d'A. Cta mais cela ne suffit pas. Après un mois de manifestation, il fut contraint à la démission et de désapprouver les Majors. Un nouveau gouvernement fut élu et il s'empressa de rétablir bon nombre de libertés fondamentales bafouées depuis tant d'années, ainsi que la neutralité du net. Quelques FAI jugés trop proches des Majors firent faillite et il fut décider de confier les accès à internet à des associations citoyennes.

Personnellement, je savourais cette victoire même si je regrettais de ne pas avoir demandé une rémunération supérieure pour ce que j'avais fait. Je me consolais néanmoins en me disant que de toutes façons, la liberté n'a pas de prix...

Note de l'auteur : au départ, j'étais parti sur tout à fait autre chose. Le revirement s'est fait suite à la lecture du billet "La Quadrature jette l'éponge". Il semblerait que nous prenions une route où mon histoire pourrait devenir possible (tout au moins le début, pour la fin j'en doute). Après DADVSI et HADOPI, il y maintenant LOPPSI et ACTA... Pour soutenir la Quadrature du Net, il vous est possible de faire un don si vous n'avez pas la possibilité de les aider autrement...

Perl vs Shell vs Python

Ayant suivi il y a 2 semaines une formation Perl de 3 jours vu qu'il s'agit d'un standard de fait chez JCDecaux pour tout ce qui touche au scripting, mon petit ressenti sur le sujet.

Tout d'abord, il faut dire que j'allais à cette formation avec un a priori plutôt négatif sur Perl de part ce que j'avais pu en entendre ici ou là. Il faut dire que j'ai plutôt été agréablement surpris par certains cotés.

Match perl vs bash :

  • Perl peut être vue comme une bonne alternative / un bon complément à des scripts bash. Plutôt que de vous casser la tête à apprendre à utiliser grep/sed/awk, vous pouvez faire la même chose mais uniquement en perl. Parce que bon, franchement awk, c'est peut être super puissant mais je trouve ça inabordable et loin d'être évident.
  • Je compte ainsi revoir certains scripts bash qui ne me satisfont pas pour voir si Perl ne me permettrait pas d'atteindre l'objectif souhaité.

Match perl vs python : avantage Python

  • Pour le coup, le langage avec des des $, %, et même @ devant les types de données, des accolades pour les débuts/fin de bloc qu'on ne sait jamais à quel niveau positionner pour rester lisible de bout en bout et des ; en fin de ligne, j'ai du mal. Surtout maintenant que je me suis habitué à la syntaxe python que je trouve infiniment plus lisible et moins source d'erreur.
  • Dans la même veine, les syntaxes sont pas des plus évidentes : ainsi dire que $tab est un scalaire, @tab un tableau, %tab un tableau associatif et que si on met un "antislash" devant on parle alors d'une référence vers le scalaire/tableau/tableau associatif, ça aide pas l'écriture d'un script

Par ex en perl :

 perl
if ( $toto == 2)
{
    print "Toto vaut : $toto\n";
}

et en python :

 python
if toto == 2:
    print "Toto vaut %s" % toto
  • Perl fonctionne de façon beaucoup trop implicite/facultative contrairement à python. Python impose un certain nombre de conventions et c'est bien. Le "There is more than one way to do it" de Perl peut être séduisant mais aussi contre productif, surtout en entreprise.

Exemple pour parcourir un tableau en perl :

 perl
#! /usr/bin/perl -w

# Tableau simple
@tab = ("fraise", "abricot", "goyave", "pamplemousse");
foreach (@tab)
{
    print "Valeur : $_ \n";
}

# Tableau associatif
%hash = ("France" => "Paris", "Allemagne" => "Berlin", "Angleterre" => "Londres");
foreach (keys %hash)
{
    print "Pays : $_ , Capitale: $hash{$_}\n";
}

Le $_ est appelé scalaire par défaut. Il est conseillé de vivement l'utilisé plutôt que d'initialiser une variable. De prime abord, ça surprend. Il existe aussi un @_ dans les fonctions et qui correspond à un tableau d'arguments passés à la fonction.

Dans ce cas les parenthèses sont implicites. On peut bien sur écrire :

 perl
foreach(keys(%hash))

alors qu'en python :

 python
tab = ["fraise", "abricot", "goyave", "pamplemousse"]
for fruit in tab:
    print "Valeur : %s" % fruit

hash = {'France' : 'Paris', 'Allemagne': 'Berlin',  'Angleterre' : 'Londres'};
for key, value in hash.items():
    print "Clé : %s Valeur %s" % (key, value)

Dans les deux cas, nous aurons :

Valeur : fraise
Valeur : abricot
Valeur : goyave
Valeur : pamplemousse
Pays : France , Capitale: Paris
Pays : Angleterre , Capitale: Londres
Pays : Allemagne , Capitale: Berlin

Si on rajoutait un tri en perl, en implicite cela peut aller jusqu'à :

 perl
foreach (sort keys %tab)
{
}

Difficile de s'y retrouver à mon humble avis.

  • Perl n'a pas de "prompt" intégré : Franchement pouvoir taper "python" dans un shell et ensuite codé en direct son script et le retoucher, que de temps gagné. Il y a certes perl -pe "commandes perl" mais c'est bien en deçà de ce que peut offrir python.
  • Mettre /usr/bin/perl -w en début de script permet de lever les warnings et corriger les éventuels bugs
  • Python propose le module "re" pour les expressions régulières. Pas besoin donc de se mettre spécifiquement à Perl s'il y a des besoins de RegExp ;-)
  • J'ai l'impression que la doc python est de meilleure qualité même si apparemment Perl rattrape petit à petit son chemin...
  • Globalement, Python et Perl doivent permettre de faire les mêmes choses, donc je vais considérer le périmètre des langages comme ex-aequo.
  • Même si cela m'a troublé de prime abord avec les listes en python, les listes en perl sont sympathiques :
 perl
@tab = ("un", "deux", "trois");
($t1, $t2, $t3) = @tab;
 print "t1 vaut $t1\n";
 print "t2 vaut $t2\n";
 print "t3 vaut $t3\n";

Contrairement à ce que l'on pourrait croire de prime abord, cela n'est pas un tableau mais juste un "panier" de variables. On peut donc utiliser $t1 & co.

  • La notation objet est plus claire en Python. Je n'adhère toujours pas au $titi->dosomething(); (comme en PHP en fait)
  • La prise en main de python est beaucoup plus immédiate (aux listes / tuples (grosso modo des listes non modifiables) / dictionnaires (tableaux associatifs) prêt ;-) )
    • D'ailleurs, les listes en python correspondent aux tableaux en perl et les dictionnaires python au hash (tableau associatif) perl.
    • Sauf erreur, il n'y a pas d'équivalent des tuples en perl
    • Les listes en perl n'ont donc rien à avoir avec les listes en python (cela m'a pas mal dérangé durant la formation)

Ce qui fait qu'au final, je rejoins tout à fait David sur "Pourquoi Python & Django". A titre personnel, mon langage de prédilection va donc rester python et je vais voir dans quelle mesure je peux encourager python au boulot. J'y ai déjà glissé une appli Django après tout ;-)

Perl a malgré tout été une bonne surprise, je m'attendais à pire. Il convient par contre dans un contexte d'entreprise je pense de rendre le code le plus verbeux possible pour facilité sa reprise et sa maintenance.

- page 1 de 7

Des trucs de/pour geeks quoi...

Fil des billets
Fil des commentaires