Planet Asrall

May 21, 2017

Florent Peterschmitt

Namasté Népal - #2

Direction le parc national de Chitwan, dans le Terraï. Long voyage, bestioles et bactéries…

J’en profite pour vous informer que la barre de droite peut être masquée en cliquant sur la séparation. Ça fait plus de place pour les photos.

Kathmandu vers Sauraha - 13 Avril

Réveil à 4h15 du matin, ça pique… il fait tout noir, les chiens n’aboient plus et tout est extrèmement calme. Toilette, chaussures, sac à dos et zou. J’ai cinquante minutes de marche devant moi, à travers la ville, avec pour seuls compagnons le GPS et la lampe torche. Quelle grande idée j’ai eu de l’emporter…

Le portail de l’hôtel était fermé avec un cadenas. J’avais prévenu le staff, ils m’ont dit de les réveiller. Je toque à la porte « STAFF ». Ça ronfle, et fort, mais ça ne bouge pas. Plan B !

Vu qu’il n’y a personne dans les rues et que tout le monde ronfle manifestement, je passe par dessus la grille, en ayant préalablement accroché les sacs sur les piques de la grilles afin de pouvoir passer sans risquer de riper, et de finir embroché.

Pouarf l’aterrissage était un peu lourd… c’était haut.

La traversée de la mort toute noire qui fait peur

Je disais donc, cinquante minutes à marcher dans le noir quasi complet, avec de temps en temps un pauvre lampadaire, mais surtout, oh la la, surtout, des chiens qui se réveillent tout d’un coup et me gueulent dessus ! Il y en a même un qui m’a suivi sur une centaine de metres en grondant derrière. Je lui répondait à coup de lampe torche dans la tronche. Pas physiquement bien sûr, juste la lumière. 300 lumens, je pense qu’il a vu le jour jusque dans le fond du crâne. Ça marchait car quand le faisseau lui passait devant les yeux, il marquait un coup d’arrêt. Il a fini par me lâcher les basques mais pas sans hurler à la mort et réveiller tous ces potes autour >__< Heureusement, eux, ils n’ont pas eu le courage de bouger.

Sur le chemin quelques dames marchent, en marmonant des choses. Plus ça allait plus je me posais des questions au sujet de la nature de ces incantations.

Un camion passe.

Je passe en plein milieu d’un petit marché. La faute au GPS dont les cartes ne sont plus exactement à jour. Tout le monde est occupé à marchander des patates, légumes, sacs de riz, épices et bonbonnes d’eau.

Un taxi passe.

Et bizarrement il n’a pas ralenti pour me proposer une course. Le temps passe, je suis à mi chemin et ces cabos me mettent les nerfs à vif.

Un taxi et un bus passent.

Quelques personnes marchent dans les rues, des vélos aussi.

Un camion, un bus, un scout et encore un camion passent.

Ah, ça commence à se réveiller. Il est environ 5h15, la nuit laisse place petit à petit à un pâle jour encore fatigué de la poussière de la veille.

Un camion un bus un taxi un bus un camion un vélo un taxi un bus.

La ville s’agite, le soleil est levé, et la poussière s’affaire, il est 5h30. Je suis arrivé à l’arrêt de bus indiqué par agenceman.

Des bus passent. Bizarrement ils ont tous un bandeau « Tourists only » sur le pare-brise. Ça m’inquiète cette histoire. Où qu’y sont les bus ? Ils déboulent tous d’une rue plus haut, après un angle. Je demande l’avis d’un bonhomme, qui me fait effectivement signe de remonter.

Et Ô magie, des bus, à perte de vue. « Tourists Only », « Deluxe », « Free WiFi » et tout et tout. Mais pas un seul n’a de panneau indiquant la destination, pour ça faut demander.

Vous voyez Pong ? Ben c’est le même principe, sauf que là, c’est avec les chauffeurs de bus, et il y en a une cinquantaine. Au bout d’un moment ya un pti vieux avec une caisse remplie de conneries sucrées qui me hurle « need help ?? ».

« Heu, yes, i go to Chitwan, do you know where is this bus? » lui dis-je, avec un superbe accent… Français mais en faisant des efforts, en lui montrant le ticket.

« Oh, this way, come. » Bon bah on verra bien. Finalement il s’occupe de demander aux chauffeurs et on trouve le bon.

« Friend, I helped you so… maybe you can help me » qu’il me dit en me montrant avec les mains le contenu de sa caisse. Va donc pour une bouteille d’eau, je crève la soif depuis que je suis debout.

« One hundred » WHHAAAAAAT, non non, pas moyen, une bouteille c’est maximum 30 roupilles, et la plupart du temps c’est seulement 20. Je lui propose 30, il refuse, propose 70, je maintiens 30, il refuse toujours et propose 60, je monte dans le bus sans bouteille d’eau. Et j’ai bien fais car le ticket comprend deux bouteilles, que le fiston du chauffeur distribuera un peu plus tard aux passagers.

8h dans le bus

Quelques derniers passagers montent en hâte

Les genoux touchent le siège d’en face, ça va être fantastique. On démarre à 5h45, le départ était prévu à 5h40. A priori c’est bien huilé. Dans le guide j’ai lu que les bus tombent en panne, et que c’est quasi inévitable. On se rassure en disant que la figurine de bouddha posée en plein milieu du tableau de bord de la cabine du chauffeur (qui dispose de quelques places pour absorber quelques imprévus) nous portera bonheur.

Le bus s’extirpe de sa place, difficilement vu le traffic déjà complètement encombré. Ça vrombit, ça tremble, ça fait un vieux bruit de pièce usée, ça fait pouet pouet et d’autres sons impossibles à écrire, et on avaaaaance…

La route pour sortir de Kathmandu est infernale. Une simple voie en terre, avec des trous partout et des habitations autour qui prennent tellement la poussière qu’on en vient à se demander comment font-ils pour rester ici. Et d’ailleurs, la poussière rentre dans le bus. La veille je me suis procuré un de ces masque à mettre devant le pif et la bouche. Ça empêchera le plus gros.

Encore une fois, on voit de tout. Impossible de photographier tellement le bus bouge, au mieux la photo est floue, au pire l’objectif se prend un coup. Des gens brûlent des câbles électriques à même le sol, d’autres leurs déchets.

Un bus arrive en sens inverse, il n’a plus de pare-brise. C’est rassurant !

photo

Ça monte ça monte… péniblement, mais sûrement.

photo

À défaut du bus sans pare-brise, un magnifique camion défoncé ! La photo est floue, c’est pas facile depuis le bus quand on voit tout au dernier moment.

photo

7h20, on est tout juste sorti de Kathmandu, de l’autre côté de la vallée. Premier arrêt pour une pause toilette(s) et miam.

Le trajet sera long et pénible, avec quelques travaux bloquant la circulation pendant dix à quinze minutes à chaque fois.

Voici quelques photos, prises sur le trajet vers Pokhara depuis Chitwan cependant.

photo

photo

photo

photo

photo

Vers 12h on fera une pause déjeuner. Sans moi, les bosses du trajet m’ont retourné l’estomac.

Dans le bus un troupeau d’étudiants parlent en mélangant Anglais et Népali. Ils jouent à ce genre de jeu où on pose des questions stupides et parfois dérangeantes et si on ne souhaite pas répondre, on a un gage. En l’occurrence, le gage était de devoir partager ses biscuits.

Sauraha

Ou presque. Le bus s’arrête et annonce qu’il faut changer. Ah ben, c’est que j’en savais rien, ça fait tout bizarre. Je demande quel bus je dois prendre mais là, personne ou presque ne parle anglais, et à ce moment là je n’avais aucune idée du nom exact de l’endroit où je devais me rendre. Ce sont justement les étudiants de tout à l’heure qui m’ont aidé. Il y a toujours quelqu’un pour t’aider, c’est fantastique.

Je récupère mon sac à dos et… et attends, on doit entrer là dedans ? Ce micro bus déjà plein à craquer ? Mais heu ça va pas être possible avec ce sac !

Bon en fait si. Tout le monde écrase tout le monde mais tout va bien.

À côté de moi, un autre touriste a l’air tout aussi paumé, sauf que lui n’a même pas de téléphone pour savoir où il met les pieds. Soit il est plus courageux, soit il a perdu son matériel en route. Je ne lui ai pas demandé car j’étais très occupé à zieuter la route à la recherche d’un panneau indiquant l’hôtel où je suis attendu.

Au fur et à mesure que le bus avance, encore une fois sur une route complètement défoncée, et là, bonus, boueuse, on voit de grand panneaux avec des noms d’hôtels.

Du coin de l’œil j’aperçois « Hotel West Wood », ma destination. Je demande au chauffeur de s’arrêter… trois fois et en hurlant car il a l’air un peu dur de la feuille, souhaite bonne chance au collègue touriste, sors du bus… j’ai dis sors du bus… nan mais les gens, je sais que je suis enquiquinant, mais va falloir me laisser passer sinon on va rester planté là pendant des heures.

Le groupe d’étudiants m’adressent un « Good bye » tous en cœur, je leur répond la même chose main levée et grand sourire de couillon heureux d’être au bon endroit.

Piouh ça y est. Il fait chaud, archi-chaud, et la seule chose que j’ai vu pour le moment ce sont des champs à perte de vue et une forêt au loin. Peu de temps après je comprendrai qu’il n’y a rien à faire, car c’est une zone touristique et qu’en dehors des activités programmées par l’hôtel, on est coincé. Je suis parti seul et à l’arrache pour précisément faire ce que je voulais et me voilà coincé dans un hôtel un peu trop chic, avec un confort dont j’aurais pu me passer et en plus dans un coin sans intérêt.

C’est tellement prémâché qu’on vient te chercher pour manger. Bon de toute façon, il fait faim. Une demi journée de bus sans manger sous peine de tout renvoyer, ça creuse.

Repas typique Népalais. Soupe de légumes avec un fromage local, un « Népali set » composé de riz et quelques coupelles de légumes cuits dans diverses épices, une salade de fruit et fromage blanc. C’était bien trop peu épicé pour être un plat typique. Des deux jours à Kathmandu à chaque repas, nez qui coule et yeux qui pleurent des larmes, et là rien. Coin à touriste. Horreur.

Les autres touristes présents font la gueule et ne relèvent même pas la tête pour dire bonjour quand on les croise. Ambiance.

Profitons de ce vide pour se reposer, envoyer quelques nouvelles sur Whatsapp et tenter d’extraire quelques photos de l’APN via le Wifi.

Au soir, on viendra me dire que la « danse culturelle », programmée, est annulée à cause du nouvel an, et qu’on fera ça demain. Soit. Mangeons alors !

Un des serveur viendra discuter un peu. Anjan, 21 ans, désirant se rendre en europe pour y vivre, sans savoir quoi y faire en pensant que la vie est facile. Je lui ai proposé de discuter de ça avec le patron d’un restaurateur à Lyon, Népalais, via Facebook. De temps en temps, les prestations ça a du bon :)

En gagnant 70$ par mois, rien que le billet d’avion va lui bouffer d’éventuelles économies, et après il faudra bien avoir un projet, sinon c’est retour à l’envoyeur.

Je lui demande s’il est possible de se balader dans le quartier la nuit, il me répond qu’avec les tigres présents dans les rues peu fréquentées c’est très dangereux. Et que de toute façon on ne me laisserait pas sortir à cause de ça.

Sauraha - 14 Avril

Programme du jour :

  • Canoé sur la rivière, crocodiles, oiseaux.
  • Marche dans la jungle, m’a-t-on dit qu’il serait possible de voir des tigres et rinhocéroces. Me dira-t-on plus tard qu’il est nécessaire de se terrer trois jours dans une cabane au fond de la jungle pour avoir une chance d’en voir. Arnaque.
  • Visite du centre d’élevage d’éléphants.
  • La douche des éléphants. Qui n’aura pas lieu car les éléphants ont servi pendant le nouvel an. Ça m’était sorti de la tête ça, le nouvel an !
  • Safari dans la jungle, en jeep.

Mais d’abord, surprise, le gardien rentre dans la chambre pendant que tu es à moitié à poil pour que tu te ramène prendre ton petit déjeuner !

Petit dej à base de curry de pommes de terre, œufs, fruits.

Le guide vient me chercher et on part en jeep rejoindre la verte. Il est tôt, le soleil est encore assez bas et masqué par une sorte de brume épaisse. On traverse des champs de maïs, des rizières. Sur le bord de la route, quelques maisons en bois se réveillent et les fours traditionnels en terre cuite chauffent. Vent frais et humide, c’est vraiment, vraiment très agréable.

photo

La seule photo potable que j’ai pu prendre sur le trajet, malheureusement.

La balade en canoé se fera avec d’autres touristes, sur une embarcation en bois poussée par un perchiste, typique mais néanmoins modernisée : les joints sont fait au goudron. Malheureusement les touristes seront bruillants et feront fuir les oiseaux.

photo

photo

photo

photo

photo

photo

Tranquilles les crocodiles. Ils ne bougeront pas d’un millimètre.

photo

La marche dans la jungle durera à peine deux heures et à part de la végétation, point de tigres ni de rhinos. Et en plus, j’ai mal au ventre. Ah non… je suis pas en train de tomber malade hein ?!

photo

photo

photo

Balèses ces pivers.

photo

photo

photo

Cette plante parasite s’enroule autour des arbres, toujours dans le même sens, et fini par étouffer son partenaire.

photo

photo

photo

C’est le moment de dire bonjour aux éléphants ! On sort de la jungle pour rejoindre le camps d’élevage. Et… mais qu’est-ce que c’est que ce bricolage ?

photo

Bon, malheureusement, c’est bien ce que j’imaginais : les éléphants sont enchaînés et font du sur place, balançant leur trombe d’avant en arrière pour accompagner leur pattes mimant une marche.

photo

photo

Seuls les éléphanteaux sont libres de se balader dans le parc. N’étants pas assez forts pour entraîner des dommages aux installations et au personnel et étants dépendants de leur mère, il n’y a aucun intérêt à les maintenir captifs.

photo

Les femelles sont tenues captives afin de permettre aux mâles de la jungle de venir s’accoupler avec elles. Le succès n’est pas forcément au rendez-vous en terme de taux de fécondation, le stress induit par la captivité et la fatigue du travail des éléphants afin de transporter leur propre nourriture « en seraient probablement la cause », expliquent les panneaux de présentation du centre.

photo

Un groupe d’étudiants (collège / lycée) voudra que je prenne quelques photos avec eux. Une attraction à moi tout seul ! L’appareil photo autour du coup joue pour beaucoup aussi, j’ai cru comprendre que pas mal de monde pense que je suis photographe. Pwahaha s’ils savaient le nombre de photos ratées !

Évidemment j’accepte, ça leur fait plaisir. Je leur ai demandé d’où ils arrivaient et ils étaient d’une petite ville dans le Terraï, à quelques dizaines de kilomètres d’ici. Petit voyage scolaire.

Mon guide est pressé par le fameux programme, j’abandonne mes étudiants sans même penser à les prendre en photo…

photo

photo

Sur le chemin à pied depuis la rivière passant à proximité du camps, des plantes dégagent une odeur particulière. « Marijuana » me dit le guide. D’après lui, beaucoup en profitent et en abusent. Les plants ne sont pas contrôlés ni détruits, ça pousse là et puis c’est tout.

Finalement, le safari en jeep sera lui aussi annulé. En fait, ça n’aurait rien changé car je suis tombé malade pour le restant de la journée : diarrhée violente et presque dangereuse vu la quantité d’eau perdue. Si ça vous arrive, demandez urgemment des sels de réhidratation (rehydratation salts) et des bouteilles d’eau. Mélangez les trois quarts d’un sachet pour 1L d’eau et tâchez de boire plus que ce que vous perdez.

Ça a continué toute la nuit, vomissements et compagnie… bref, pas cool. Fort heureusement le voyage vers Pokhara se sera bien passé et tout sera rentré dans l’ordre. Violent mais court, heureusement.

Au final, je pense que si vous voulez découvrir le Terraï il vaut mieux prendre son temps. Les animaux sauvages demandent de la patience et ce n’est pas en deux heures de marche dans la jungle, ou alors avec énormément de chance, qu’on peut espérer voir quelque chose. Prenez garde aux arnaques dans les agences donc.

by Florent Peterschmitt at May 21, 2017 05:03 PM

May 14, 2017

Florent Peterschmitt

Namasté Népal - #1

Voyage du 11 Avril au 5 Mai 2017

Vingt-quatre jours au Népal, seul, avec un sac à dos trop lourd, un appareil photo, mon téléphone et une batterie externe pour seuls gadgets électroniques, et aucune idée de ce que qu’il se passera ni de où j’irai vraiment.

Je prévois de découper le voyage en plusieurs articles, d’habord pour raconter les différentes étapes principales du voyage, au nombre de 5/6, et éventuellement un article supplémentaire, une sorte de conclusion sur l’ensemble du voyage.

Un total de 6 à 7 articles à venir. L’ensemble sera écrit après mon retour, je me suis contenté de prendre des notes sur un carnet durant le voyage.

Au sujet du contenu des articles, ça comprendra la quasi totalité de ce que j’ai pu vivre et voir, y compris des détails qui pourraient paraître insignifiants, mais qui pour moi sur place, étaient significatifs. Veuillez également excuser l’orthographe approximative… et le français approximatif en général.

Et comme je suis toujours utilisateur de GNU/Linux, les quelques images DNG (format standard RAW) ont été converties en JPEG grâce à dcraw et ImageMagick, voyez plutôt :

#!/bin/sh
for i in $(find . -name "*.DNG"); do
    imgname=$(echo $i | sed -re 's/(.*IMGP[0-9]+).DNG$/\1/g')
    jpg=${imgname}.JPG
    if [ ! -f $jpg ]; then
        dcraw -w -T $i && convert -quality 90 ${imgname}.tiff ${imgname}.jpeg && rm -f ${imgname}.tiff
    fi
done

for i in $(find . -name "*.jpeg" -or -name "*.JPG"); do
    convert $i -resize 30% $i.small.jpeg
done

for i in $(find . -name "*.small.jpeg"); do
    imgname=$(echo $i | sed -r 's/(.*)(\.jpeg|\.JPG)\.small\.jpeg$/\1.jpeg/g')
    mv $i $imgname
done

Enfin, n’hésitez pas à me poser des questions en commentaire, c’est fait pour ça ! Et peut-être que ça alimentera l’article final, car il se peut que ça soit intéressant :)

Départ - 10 Avril

Ben ou pas, déjà ! J’ai raté l’avion. Tant pis, j’en reprends un autre, avec onze heures d’attente à Bombay. Fantastique…

En survolant Bombay (Mumbai), on void déjà des bidonvilles partout, amassés entre de plus grands bâtiments, qui n’ont de toute façon pas l’air plus en forme que ces bidonvilles.

L’aéroport est entouré de bidonvilles. Premier choc.

On attend onze heures et puis, de bon matin, on décolle pour Kathmandu. Trois petites heures d’avion seulement.

Kathmandu - 11 Avril

« Mais qu’est-ce que je vais faire ici ? Qu’est-ce qu’il m’a pris de venir ici ! »

Et puis je me souviens que je voulais aller en Asie depuis quelques années, déranger mon petit confort et changer d’air.

Pour le coup, l’air a bien changé ! Je me fait tout juste embarquer par un taxis que je découvre l’air local : poussiéreux, pollué à l’essence plombée, s’engouffrant dans les rues défoncées et nues de la ville.

Les routes ont subi le tremblement de terre de 2015 : celles qui étaient faites de macadam sont coupées en deux et les crevasses remplies avec de la terre. Mais ça c’était un grand axe, les routes menant au plus près des habitations sont en terre.

Ça pique le nez et on a une furieuse envie de cracher cette glaire qui deviendra bientôt l’embryon d’une sculpture en terre cuite. Les Népalais le font, tout le temps.

C’est fascinnant de se dire qu’on a respiré de la poussière chargée par tous les crachats de la ville. Ça fait les défenses naturelles…

photo

photo

Le taxi m’enmène au centre ville après être passé par l’hôtel où je logerai pour quelques nuits.

On finit donc par arriver au centre, « here is the Thamel » qu’il me dit. Boutiques à touristes, vêtements de trekking sans marque et apparemment contrefaits, selon le taximan. Les rues sont vraiment très serrées, le taxi s’y enfonce, franchement on aurait pu continuer à pied plutôt que d’encombrer le passage.

Le taxi travaillait avec une agence de trekking, et c’est pour ça qu’on est allé au centre ville. C’était clairement affiché dès le début, pas de souci pour ça. Discussion d’une grosse heure avec le gars de l’agence, et c’est parti pour onze jours organisés : parc national de Chitwan, Pokhara (quatre jours où je fais comme bon me semble) puis un trek de huit jours dans la vallée de Langtang. Départ le 13 Avril.

Je me fais déposer à l’hôtel, « Dormitory Nepal » si un jour vous comptez y aller. C’est peu cher (5$ la nuit dans le dortoire) et très bien entretenu. Le seul problème c’est qu’il ne faut pas avoir peur de marcher pour rejoindre le centre : cinquante minutes. Comme j’avais prévu de me perdre dans la ville, et donc passer bien plus d’une heure sur les trajets, ça ne me posait pas de problème.

Le temps de regarder un peu la carte de la ville sur Maps.ME (openstreetmap sous le capot), et zou on va chercher à bouffer. Le repas dans l’avion était suffisant mais à 17h y fait déjà faim.

Je marche donc. Autour de l’hôtel il y a principalement de grandes maisons individuelles, fermées par des portails, ou de petits appartements à trois, quatre étages maximum, dont on devine les pièces petites et carrées. C’est très calme et ça semble être une zone assez riche de la ville. Ce qui n’empêche pas les routes d’être en terre !

Je rejoins le même grand axe de tout à l’heure, mais en sens inverse, pour y trouver un restaurant. Il y en a partout, et de différents types. De gros restaurants aseptisés destinés aux touristes, voire touristes fortunés, juste à côtés de petites canfouines, parfois sans vitres, tout ça au bort de la route générant son nuage de poussière.

Les trottoirs sont hauts et ravagés, mieux vaut regarder où on met les pieds. La circulation est dense et pour traverser, pas de passage piétons ou pas vraiment. Il vaudra mieux attendre une accalmie et traverser gentillement, en n’hésitant pas à s’arrêter en plein milieu de la route pour laisser passer une rafale, avant de continuer. Il faut rester vigilant, les piétons ne semblent pas avoir la priorité.

photo

Sur le chemin, un type est en train de refaire l’appentis de son restaurant. Un bout de tôle pliée, qui a manifestement subit un quelconque sévice, auquel était suspendu un gamin afin de maintenir le tout proche d’une poutre en bois, pendant que le père / frère / quelqu’un était en train de marteler sur de gros clous.

Je trouve une boutique, ça vend des momos, sortes de ravioles en boule fourrées avec divers ingrédients : mélange de légumes épicés ou viande. En l’occurrence, mauvaise pioche, c’était pas très bon et à croire que ça a été mélangé avec du sable. Ah ben c’est ça aussi, on veut faire le malin en bouffant local, et voilà ce qui arrive quand on ne connaît pas !

Le resto était une simple pièce carrée, avec deux planches fixées au mur en guise de table, et des tabourets tressés pour se reposer sur son arrière train. Mes genoux touchent la table.

Derrière la seule vitre du petit restaurant, une sorte d’énorme cocotte-minute renferme les momos, cuits à la vapeur. Je n’ai jamais vraiment pensé à faire de belle photo des ustensiles, honte à moi.

photo

Ce n’est pas ce resto là, je n’ai pas pris de photo du vrai, mais ça ressemblait à ça, une vitre en moins.

On me sert donc une assiette, une cuillère, une sauce qui arrache la langue, les gencives et les dents avec, et une bouteille d’eau dont je ne connais pas la provenance, et n’y ai donc pas touché. Dans mon guide papier, il est bien dit qu’il ne faut surtout pas boire autre chose que de l’eau en bouteille, sous scellé (un ruban de plastique autour du bouchon jusqu’à la base du goulot) : il n’y a pas d’eau courante sauf à quelques endroits publiquement accessibles et cette eau là est contaminée par divers germes et métaux lourds.

Aller hop, on se rentre à l’hôtel, la nuit est tombée. Je manque de me faire renverser par une moto dont le phare n’était pas allumé. Et ce fou furieux m’a hurlé dessus une fois passé derrière moi.

Avant de se coucher, vu qu’on se sent comme recouvert d’une épaisse couche de crasse, on commence par prendre une douche, mais avant de prendre la douche, on s’adapte : la salle de bain comprend un lavabo, un toilette, un robinet, un pomeau fixe et une évacuation d’eau dans un coin de la pièce, le tout sans aucune espèce de petite cloison ni rideau. Donc déjà, si on ne veut pas innonder ses fringues posées sur le bord du lavabo (à défaut de crochet, paix à son âme), on va prendre sa douche en se contortionnant comme un vers sous le robinet se trouvant à un mètre du sol. Et puis ensuite on découvre que l’eau chaude est un luxe, donc on se grouille parce que c’est froid ! Enfin ça va, on est dans la vallée, la journée il fait chaud. Vous allez voir, lors du quatrième article, que c’est très différent en montagne !

Je mets ma grosse batterie externe en charge, de crainte de manquer d’électricité un jour ou l’autre. Les hôtels sont pourvus de batteries afin de contourner les phases où l’électricité est coupée, mais on ne sait jamais.

S’endormir est un peu difficile, la poussière est présente absolument partout et râcle les voies respiratoires. En plus, des chients aboient. Beaucoup. En fait, dans les rues il y a des chiens errants, et la nuit, ils se parlent. J’ai pensé à prendre des bouchons d’oreille, j’ai bien fais. Mission impossible sinon !

Je suis seul dans le dortoire, pratique.

Kathmandu - 12 Avril

baille

s’étire

ouvre les yeux, il fait jour.

quelle heure est-il ?

CINQ HEURES ET DEMI ????? Ah nan… dodo là…

À 5h30 environ, il fait jour et toute la ville est debout, les chiens on arrêtés de hurler à la mort et la poussière vous caresse délicatement, mais sûrement, le museau.

Petit dej à base de pommes de terre, œufs et un jus de fruit, et zou dans la ville, direction le centre, Thamel. Les mêmes scènes qu’hier se déroulent sous mes yeux : poussière, trafic encombré, chiens errants, petites boutiques vendant tout un tas de conneries à bouffer (chips, sodas…) mais surtout des bouteilles d’eau. « Namasté » les mains jointes et un sourire immédiat apparaît. On demande sa bouteille d’eau à 20 roupies, et on repart. Il y a des bâtiments lézardés, voire abandonnés pour certains tellement ils sont habimés. Les bâtiments sont en brique ou en béton, d’ailleurs en survolant KTM on voit énormément de fabriques de briques. Le béton, c’est pour plus tard. Le réseau électrique aussi est dans un état franchement catastrophique. La plupart des potaux portent des fils coupés trainant sur le sol, quand d’autres servent de « routeurs ».

photo

photo

D’ailleurs, rares sont les petites boutiques à avoir de l’électricité, et ce même la nuit. La plupart est plongée dans le noir. Il n’y a que les boutiques à touristes qui sont éclairées.

Bref, je me promène, de « stupa » en stupa.

photo

photo

On me propose de la marijuana, d’acheter des bonnets, des tshirts, des taxis… bref, je suis un touriste et ça se voit. Quand un bonhomme d’une vingtaine d’année me tombe dessus et me propose de me faire visiter la ville. Un peu naïf (pour ne pas dire un peu con) j’accepte son aide avant de vite comprendre qu’il cherche rétribution. Pourquoi pas après tout, du moment qu’il ne me raconte pas des salades. Il était habillé avec une polaire noire, par temps de plein soleil. Un peu plus tard je découvrirai que c’est bel et bien ça seule fringue disponible. Imaginez-vous une seconde n’avoir tellement rien en revenus que vous ne pourrez porter qu’un seul vêtement toute l’année.

Du coup on fait un tour dans la ville pendant trois bonnes heures, à différents endroits. Le mélange de temples boudhistes et hindous, d’architecture Newar et médiévale coincée entre des bâtiments de brique est atypique.

photo

photo

Quand on marche autour de ces temples, il faut impérativement tourner dans le sens horaire afin de ne pas s’attirer d’ennuis. Quand on sait qu’il y a des temples en plein milieu des routes, on est tenté de croire que c’est la raison pour laquelle tout le monde roule à gauche ! Une autre hypothèse serait que la présence des britanniques au Népal par le passé a pu influencer le pays.

photo

photo

photo

Quelques rares maisons ont encore une allure médiévale. Elles ont bien souffert.

photo

photo

Ça, c’est un petit temple dédié aux dents. Selon mon guide improvisé, Sanjay, les gens venaient ici clouer une pièce en espérant que cela les soigne de leurs maux de dents mais « quand les gens s’aperçoivent que ça ne fonctionne pas, ils vont voir les vrais dentistes, qui sont tous dans la rue juste en face ! » me dit-il avec un sourir un peu moqueur.

photo

Un autre temple, avec des boutiques de poteries tout autour.

photo

Pour faire une photo sans un panneau publicitaire, c’est difficile… entre ça, les fils électriques et la circulation, on est pas rendu !

photo

photo

Une petite ruelle dédiée à ces dames.

photo

Oui oui je sais, la photo est bancale.

photo

photo

On prend un taxi pour aller voir le plus gros stupa bouddhiste de la ville, dont j’ai eu la bonne idée d’oublier le nom. L’entrée est payante, 250 roupies pour les étrangers et quelque chose comme 30 pour les locaux.

photo

Ganesh, divinité Hindou, est un peu partout dans les maisons mais aussi dans les cabines des bus et camions. Je suppose qu’ils en sentent le besoin, vu le chaos qui règne sur la route : on déboite sans regarder ce qu’il se passe derrière, ni vraiment devant en fait, on se double en forçant le doublé à freiner si quelqu’un arrive en face, ça freine, ça reprend… et les accidents arrivent !

On finit quand même par arriver au stupa, et en un seul morceau :p

photo

photo

photo

photo

photo

photo

photo

On fera tourner cette roue dans le sens horaire en prononçant le mantra « Om mani padme hum », pour s’attirer la bonne chance.

J’ai bien plus de photos, mais le volume de 2.5GB fait qu’il sera impossible de tout uploader.

Sanjay me propose de venir chez lui prendre le thé. À vrai dire je me doute un peu que ça ne sera pas que pour prendre le thé, car au cours de la visite il m’a raconté que depuis la mort de son père, enseveli sous sa propre maison pendant le tremblement de terre, il n’avait plus de revenus suffisants. La mère mendie, sa sœur ne peut pas aller à l’école (~200$ / an, sans compter le matériel et l’uniforme, ce qui est énorme pour eux) et lui ne peut plus y aller. Étudiant en histoire de l’art, il s’improvise guide, avec le risque de finir en prison car il est interdit d’exercer sans une licence.

photo

photo

photo

Évidemment, je ne m’attendais pas à une situation reluisante. L’endroit pue, est envahi par les mouches (qu’on ne voit pas sur la photo), et j’ai eu la bonne surprise de voir une puce grimper sur mon sac à dos. Heureusement pas de piqûre ni d’infestation. Une pompe est disponible pour ce bout de “quartier” pour obtenir de l’eau, polluée sans aucun doute.

Ensuite, j’ai eu droit à un sketch où ce fameux Sanjay m’a, pour faire simple, demandé 200$ afin de lui acheter une « boîte » pour cirer et réparer les chaussures. Un peu plus tard, je comprendrai qu’il s’agissait d’une arnaque totale. Je lui ai laissé de l’argent pour la visite, et un peu plus, mais certainement pas 200$.

photo

photo

Bref, je repars, me perds dans les hauts de la ville.

photo

photo

photo

photo

photo

Oui oui, c’est bien de la viande derrière ce simple grillage à l’air libre ! Mais il y a pire. J’ai vu de la viande directement accessible, ou couverte sous un linge. Les mouches sont omniprésentes dans ces cas là.

photo

photo

photo

photo

photo

photo

photo

photo

photo

photo

photo

photo

photo

photo

Je passe par la rivière Bagmati, puante et dégueulasse.

photo

photo

photo

De la poussière, toujours et encore.

photo

Les camions de transport au Népal, c’est quelque chose ! Ils sont tous comme ça, décorés de partout et avec des klaxons dignes d’une fanfare ! Certains ont également de la ferronnerie tout le tour de la benne.

photo

Une école, avec une phrase écrite au dessus de chaque salle de classe.

Je finirai la marche par tomber sur une petite famille et quelques amis (à eux évidemment) m’ayant invité à boire un coup. Un alcool blanc, trouble, au goût de Saké. J’étais à quelques minutes de l’hotel, il commençait à faire nuit, quand j’entends un timide « Hello ! » derrière moi. Je me fais violence, me retourne et tente de discuter avec le gaillard, celui tout à gauche sur la photo.

photo

Ils m’ont également proposé de dormir ici, mais avec le bordel que serait le lendemain, il était plus sage de rentrer meuson. À la lampe torche, vu que le quartier était complètment plongé dans le noir !

by Florent Peterschmitt at May 14, 2017 05:11 PM

May 08, 2017

Luc Didry

Contrôle paren­tal sur Android : liste noire de sites

Il y a pléthore d’ap­pli­ca­tions de contrôle paren­tal sur Android. Mais je n’en ai trouvé aucune de libre. Plutôt que de lais­ser mon fils risquer de tomber sur des trucs non recom­man­dables en le lais­sant sans aucune protec­tion, j’ai trouvé une méthode qui vaut ce qu’elle vaut : utili­ser AdAway, un bloqueur de pubs qui se base sur des listes noires pour qu’il bloque aussi des sites clas­si­fiés par l’univer­sité de Toulouse.

La liste de l’uni­ver­sité de Toulouse n’est pas exhaus­tive (y a-t-il un seul index de sites qui le soit ?) mais elle a le mérite d’exis­ter…

Un petit script pour créer/mettre à jour la liste noire :

#! /bin/bash
mkdir -p /tmp/blacklist
cd /tmp/blacklist
for i in adult.tar.gz agressif.tar.gz dangerous_material.tar.gz drogue.tar.gz phishing.tar.gz publicite.tar.gz tricheur.tar.gz mixed_adult.tar.gz dating.tar.gz malware.tar.gz sect.tar.gz remote-control.tar.gz arjel.tar.gz
do
    curl -s ftp://ftp.ut-capitole.fr/pub/reseau/cache/squidguard_contrib/$i | tar x --gunzip
done
sed -e "s@\(.*\)@127.0.0.1 \1\n::1 \1@" */domains | grep -v " \(\.\|[[:digit:]]\)\+$" > /var/www/blog/hosts.txt

split -l 500000 --numeric-suffixes=1 --additional-suffix=.txt /var/www/blog/hosts.txt /var/www/blog/hosts

Notez bien le split : il permet de décou­per la liste noire en plusieurs fichiers de 500 000 lignes. En effet, la seule liste des sites pour adultes pèse plus de 100Mio : AdAway a du mal à trai­ter un fichier aussi lourd sans crasher. On va donc le décou­per en plusieurs fichiers (chez moi, cela donne 9 fichiers : /var/www/hosts01.txt, /var/www/hosts02.txt, etc.).

On placera bien évidem­ment une tâche cron pour mettre à jour les listes noires. Il est possible d’ajou­ter ou de reti­rer des caté­go­ries à inter­dire dans le for i.

Les fichiers /var/www/hostsXX.txt doivent être acces­sible depuis le web. Les miens sont acces­sibles aux adresses suivantes :

Ou, si votre Android est assez costaud pour qu’AdA­way mange tout d’un coup : https://fiat-tux.fr/hosts.txt

Ensuite il suffira d’ajou­ter l’adresse des listes noires comme « Source d’hôtes » dans AdAway, et ce sera bon :-)

Parta­ger

by Luc at May 08, 2017 02:44 PM

Couper l’ac­cès wifi d’un appa­reil la nuit avec OpenWRT

Mon fils possède plusieurs appa­reils suscep­tibles d’al­ler sur Inter­net. Comme je ne suis pas dans sa chambre la nuit, comment faire pour s’as­su­rer qu’il ne va pas passer sa nuit à regar­der des vidéos sur Youtube ? En lui coupant l’ac­cès à Inter­net, pardi.

Oui, je sais, confiance, tous­sa… mais bon, j’ai été jeune moi aussi, et je sais bien qu’on est toujours tenté d’en­freindre les règles… surtout quand c’est aussi simple que se cacher avec son machin sous la couette :-) (moi c’était une lampe et un bouquin, mais c’est moins discret, la lumière passant géné­ra­le­ment en dessous de la porte.

On peut géné­ra­le­ment, avec les box des FAI clas­siques, choi­sir des plages d’ac­ti­va­tion du wifi. Mais j’ai envie d’avoir du wifi tard le soir, moi ! Et de toute façon, je n’uti­lise pas de box d’un FAI clas­sique : j’uti­lise un VPN chez LDN grâce à mon nouveau jouet que j’aime d’amour, le Turris Omnia qui utilise OpenWRT.

Du coup, c’est assez simple : il suffit de rele­ver l’adresse MAC de l’ap­pa­reil à bloquer et d’ajou­ter cette règle à /etc/config/firewall :

config rule
    option src 'lan'
    option dest '*' 
    option src_mac 'XX:XX:XX:XX:XX:XX'
    option proto 'tcp udp'
    option start_time '20:30'
    option stop_time '07:30'
    option weekdays 'mon tue wed thu fri sat sun'
    option target 'REJECT'
    option name 'Parental control'

Un petit /etc/init.d/firewall restart, et hop ! C’est tout bon :-)

Edit : Sango­kuss vient de m’in­for­mer que luci-app-wifi-sche­dule peut faire le job d’une box clas­sique pour défi­nir des plages d’ac­ti­va­tion du wifi sur le système LEDE (basé sur OpenWRT). Ça n’est pas dans les dépôts de mon OpenWRT, et ça ne corres­pond pas à mon besoin, mais ça peut être utile :-)

Parta­ger

by Luc at May 08, 2017 12:13 PM

May 03, 2017

Luc Didry

Double merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle de mars et d’avril !

Et oui, j’ai zappé la page de remer­cie­ments de mars (je rappelle que je les publie à la fin du mois en ques­tion… ou au début du suivant quand je n’ai pas le temps 🙁) : toujours le démé­na­ge­ment. Et pour celle d’avril… c’est l’em­mé­na­ge­ment et le range­ment de mon bazar qui m’a fait m’écrou­ler tous les soirs sans avoir la force de rouvrir l’ordi.

Merci à :

Je n’ai malheu­reu­se­ment rien fait pendant ces deux mois 🙁 Promis, je vais me rattra­per !

Pour me faire pardon­ner, voici ma petite contri­bu­tion au #Mercre­diFic­tion sur le réseau social Masto­don :

Carlos soupira. Encore une cargai­son qui n’ar­ri­vera pas à bon port. Sata­nés flics !

Le métier deve­nait de plus en plus diffi­cile, entre les raids de plus en plus fréquents de la police, la concur­rence des japo­nais, des français… Peut-être était-il temps pour lui de tout lais­ser tomber et de rentrer au pays, en Argen­tine.

Après tout, il était riche ! Son cartel de trafic de bœufs lui avait tant rapporté depuis l’in­ter­dic­tion mondiale de consom­mer de la viande.

Parta­ger

by Luc at May 03, 2017 03:56 PM

May 01, 2017

Alexandre Bailly

Changer automatiquement de fond d'écran dans LightDM/GTK+ Greeter

Dans cet article, nous allons voir comment changer automatiquement de fond d'écran dans LightDM et GTK+ Greeter.

Qu'est-ce que LightDM ?

LightDM (Light Display Manager), est un gestionnaire d'affichage pour X Window System, et qui gère, entres autres, l'ouverture des sessions graphiques.

Ce logiciel utilise divers front-ends pour dessiner l'interface de connexion, comme GTK+ Greeter, Unity Greeter ou Webkit2 Greeter.

GTK+ Greeter ?

Ce front-end reprend le style de GDM, et est facilement configurable.

Comment changer le fond d'écran

Par défaut, le fond d'écran est celui de la distribution (Debian, Ubuntu ou dérivée…).

LightDM avec le fond d écran Debian

Image par défaut

Sous Debian, avec GTK+ Greeter, l'image par défaut est définie dans /usr/share/lightdm/lightdm-gtk-greeter.conf.d/01_debian.conf

Cependant, ce n'est pas une bonne idée de modifier la configuration à cet endroit là.

Il vaut mieux éditer le fichier de configuration /etc/lightdm/lightdm-gtk-greeter.conf

Par exemple, l'image que je veux utiliser est /usr/local/share/lightdm/walls/miku.jpg

[greeter]
background=/usr/local/share/lightdm/walls/miku.jpg
LightDM avec le fond d'écran que j'ai défini

Le résultat obtenu.

Changer automatiquement de fond d'écran

À priori, Webkit2 Greeter supporterait le changement automatique de fond d'écran. Cependant :

  • cela nécessite de récupérer le code source de ce front-end (non packagé dans Debian) ;
  • cela utilise webkit (moteur de rendu html) pour afficher une image (pourquoi ne pas lancer carrément Firefox tant qu'on y est). #troll ;
  • ce n'est pas amusant si on ne doit pas scripter.

Choix des images

On commence d'abord par choisir des images. J'en ai choisi avec le moins d'éléments graphiques au centre, je préfère que la fenêtre de connexion soit au centre et non déporté sur l'un des côtés de l'écran.

Les images étant un mélange de .jpg et de .png, j'ai converti les .png en .jpg à la main avec EOG (Fichier -> Enregistrer sous…)

Les images sont numérotées (de 1 à 7 dans mon cas).

Le répertoire /usr/local/share/lightdm/walls/ est créé, et est rendu lisible par lightdm (un chmod 0644 devrait convenir). Les images sont copiées dedans.

Un lien symbolique (symlink) est créé.

ln -sf 6.jpg default.jpg

Ici, j'utilise l'image 6.

Paramétrage

On modifie /etc/lightdm/lightdm-gtk-greeter.conf

et on utilise default.jpg à la place de l'image utilisée précédemment.

[greeter]
background=/usr/local/share/lightdm/walls/default.jpg
LightDM avec le fond d'écran "default.jpg"

Désormais, pour changer l'image de fond, il suffit de modifier le lien symbolique et non un fichier de configuration.

Changement automatique

Définir le lien symbolique à la main, c'est bien joli, mais je ne veux pas le faire à chaque fois que j'allume mon ordinateur.

Scriptons un peu avec bash.

#!/bin/bash
cd /usr/local/share/lightdm/walls
MIN=1
MAX=7
CURR=$(($(ls -l default.jpg | sed 's/\(.*\)> \(.*\)\.jpg/\2/') +1))
if [ $CURR -gt $MAX ]
    then CURR=$MIN
fi
ln -sf $CURR.jpg default.jpg

Le script est enregistré dans /usr/local/bin/change-fond-lightdm.sh et est rendu exécutable via chmod +x.

Quelques explications s'imposent :

  • On se déplace d'abord là où sont stockées les images ;
  • On définit deux variables, MIN et MAX :
  • MIN contient la valeur de la première image (certains comptent à partir de zéro, d'autres à partir de un) ;
  • MAX contient la valeur de la dernière image (très important pour la suite) ;

Là, on arrive sur cette instruction imbuvable.

Décomposons cette instruction :

  • ls -l default.jpg
  • sed
  • 's/(.*)> (.*).jpg/2/')
  • +1
  • CURR=$(( ))

ls -l default.jpg. On l'utilise pour récupérer le nom du fichier pointé par default. Ici, le résultat est :

lrwxrwxrwx 1 root staff 5 mai    1 16:42 /usr/local/share/lightdm/walls/default.jpg -> 6.jpg

On utilise ensuite l'éditeur sed pour extraire le nom du fichier.

L'extraction en elle même s'effectue via l'expression régulière 's/(.*)> (.*).jpg/2/')

On cherche deux groupes. Le premier s'arrête à > (noter la présence de l'espace après le >). Le second groupe est le texte qui suit, et qui précède .jpg.

On ne garde que le second groupe.

On obtient alors

6

On ajoute 1.

On stocke le résultat dans la variable CURR.

Ensuite

  • On compare le nombre contenu dans CURR avec MAX ;
  • Si CURR strictement supérieur à MAX
    • alors CURR prend la valeur MIN

Ici, CURR contient 7. 7 n'est pas strictement supérieur à 7, donc on continue. Si CURR aurait la valeur 8, alors la ligne then aurait été appelée, et CURR serait revenu à 1.

  • On crée le lien symbolique (-s) default.jpg avec remplacement si celui-ci existe (f) avec comme nom le nombre contenu dans CURR, que l'on concatène avec .jpg

On teste

Il suffit de regarder la cible de default.jpg, puis d'appeler le script, puis de regarder, etc…

Capture d'écran du terminal contenant en alternance les commandes ls -l default.jpg et l'appel au script de changement d'image

Cela fonctionne correctement, on voit bien qu'après 7, on revient bien à 1.

Le cas 9 -> 10 n'a pas été testé.

On intègre l'automatisation

Ici, plusieurs possibilités :

  • Ajouter l'appel au script dans /etc/rc.local ;
  • Créer un unit systemd ;
  • Exécuter le script toutes les heures via cron ;
  • Faire en sorte que cela soit LightDM qui appelle automatiquement le script lorsque LightDM démarre.

C'est la dernière solution qui a été retenue.

On édite /etc/lightdm/lightdm.conf

Sous la section [Seat:*], on décommente/ajoute la ligne display-setup-script=… comme ceci :

[Seat:*]
display-setup-script=/usr/local/bin/change-fond-lightdm.sh

Test en vidéo :

Ici, LightDM est redémarré pour vérifier que le changement d'image de fond est effectif.

À noter : si on veut que l'image change non pas au démarrage de LightDM mais à chaque fois que LightDM est affiché (l'ordinateur démarre : une image, on ouvre la session, on ferme la session, l'image change…), il faut utiliser greeter-setup-script à la place de display-setup-script

[Seat:*]
greeter-setup-script=/usr/local/bin/change-fond-lightdm.sh

Remerciements

Dave Null (@devnull) pour l'idée de base, le script de capture de l'écran de connexion, et avoir confirmé que ça fonctionne :)

Remarques

Si vous me suivez sur Mastodon et que cet article vous dit quelque chose, c'est normal :)

by nah at May 01, 2017 03:40 PM

March 27, 2017

Florent Peterschmitt

Les tags de dnsmasq + teaser

Première publication de l’année, youhou ! Préparez-vous à de nouvelles publications d’ici à un peu plus d’un mois, et pas d’informatique ;-) Ça, c’était pour le teaser.

Le sujet du jour : balancer des options DHCP à une machine particulière, via son adresse MAC.

/etc/dnsmasq.conf :

domain=local
dhcp-host=52:54:00:06:b7:53,set:untag,dahostname
dhcp-option=tag:untag,12,dahostname
$ host dahostname.local
dahostname.local has address 10.253.1.186

L’option 12 envoie un nom de machine au client DHCP, qui devra le positionner sur la machine cliente. En tout cas ça fonctionne avec dhclient. Achtuce : s’il n’y a pas de route par défaut présente, le client ne positionnera pas le nom de la machine. Pas trouvé pourquoi.

by Florent Peterschmitt at March 27, 2017 01:18 PM

March 09, 2017

Luc Didry

Merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle de février !

Bon sang, ça fait un sacré retard pour la paru­tion de cette page 🙁 La faute à deux/trois choses : premiè­re­ment, les vacances, et surtout, le retour des vacances ! J’ai passé mes vacances dans la cuisine, et ça m’a carré­ment épuisé. Par dessus, un truc à coder un peu en urgence, un démé­na­ge­ment à prépa­rer (enfin, surtout le prochain appar­te­ment à prépa­rer, avec arra­chage de tapis­se­rie et tout) et bada­boum, on est déjà le 9 mars (enfin, le temps que je termine cet article, on sera le 10 mars).

Merci à :

Profi­tons un peu de cet article pour faire un petit résumé de mon acti­vité libriste du mois de février :

  • Encore et toujours du travail sur Lstu :
    • Amélio­ra­tion de la docu­men­ta­tion de l’API de Lstu
    • Ajout de la possi­bi­lité de mettre un mot de passe sur les fichiers dans Lufi (https://frama­git.org/luc/lufi/commit/d24a597e7e9375210695237f­be79c­caac7ab5­da6)
    • Diverses amélio­ra­tions de Lstu
    • Sortie de la version 0.08 de Lstu
    • Travail sur une demande parti­cu­lière sur Lstu (branche dl-cards) : pouvoir avoir plusieurs liens pour une URL, et spéci­fier un délai d’ex­pi­ra­tion après la première visite. C’est une demande d’Oli­vier Saraja pour un projet inté­res­sant : il souhaite vendre ses epubs physique­ment en vendant une carte format carte de visite conte­nant un lien unique et tempo­raire d’ac­cès à l’epub.

À noter que Lstu supporte main­te­nant le breton et les bases MySQL. Merci aux contri­bu­teurs !

Le grand nombre d’amé­lio­ra­tions ces derniers temps ainsi qu’une demande pour des n° de releases plus fréquents m’ont amenés à revoir ma façon de travailler. Je balançais précé­dem­ment tout dans la branche master et mettait un tag de temps en temps quand je sentais que je n’y touche­rai plus pendant un temps. Je vais main­te­nant faire des branches pour chaque fonc­tion­na­lité à ajou­ter et les merger dans la branche deve­lop­ment, qui rejoin­dra master lorsque j’es­ti­me­rai qu’une release peut être faite.

Je souhaite présen­ter ici mes excuses à Guil­hemB et Schoumi pour avoir oublié de les crédi­ter dans les commits du mois de février… Pour la peine, j’es­saye­rai de les crédi­ter deux fois en mars !

Parta­ger

by Luc at March 09, 2017 11:06 PM

January 31, 2017

Luc Didry

Merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle de janvier !

Merci à :

Profi­tons un peu de cet article pour faire un petit résumé de mon acti­vité libriste du mois de janvier :

  • Beau­coup d’amé­lio­ra­tions sur Lstu :
    • Possi­bi­lité d’uti­li­ser une job queue pour l’in­cré­ment des comp­teurs, allé­geant ainsi la charge de la base de données en cas de fort trafic
    • Possi­bi­lité d’uti­li­ser une authen­ti­fi­ca­tion LDAP ou via un fichier htpasswd pour pouvoir créer des liens raccour­cis
    • Ajout d’une page sur les exten­sions de navi­ga­teurs
    • Ajout d’une couche d’abs­trac­tion pour la base de données dans Lstu : prépa­ra­tion au support de Post­greSQL
    • Possi­bi­lité de choi­sir le fichier de confi­gu­ra­tion de Lstu, ce qui permet de lancer plusieurs instances avec un seul code à main­te­nir
    • Ajout du support de Post­greSQL ! Les instances à fort trafic vont enfin pouvoir utili­ser une base de données digne de ce nom
    • Possi­bi­lité de décla­rer des adresses IP dans une white­list, permet­tant d’évi­ter les limi­ta­tions de raccour­cis­se­ment par seconde ainsi que la véri­fi­ca­tion anti-spam
    • Amélio­ra­tion de la suite de test, ainsi que la créa­tion d’une image Docker dédiée à ces tests, dimi­nuant du coup la durée des tests
  • Créa­tion d’un bridge GoCo­mics pour Rss-bridge suite à la suppres­sion du flux RSS sur GoCo­mics

En ce qui concerne le client en ligne de commande pour Lufi, je n’y ai pas trop touché. Pas vrai­ment la super envie de faire du NodeJS… Je m’y remet­trai et je le termi­ne­rai, promis !

Parta­ger

by Luc at January 31, 2017 08:19 PM

January 11, 2017

Luc Didry

Suppri­mer tous les mails de la file d’at­tente de post­fix pour un domaine parti­cu­lier

Aver­tis­se­ment : cette astuce ne fonc­tionne que si vous utili­sez postfix. Il faudra l’adap­ter si vous utili­sez autre chose, comme exim par exemple.

Il arrive qu’on ait un grand nombre de mails en attente pour un domaine erroné. Une des erreurs les plus fréquentes que nous rencon­trons à Frama­soft est l’uti­li­sa­tion d’une adresse en @gmail.fr. Un mail envoyé à une telle adresse n’abou­tira jamais (dig MX gmail.fr +short vous en convain­cra, il n’y a pas de champ MX pour ce domaine). Nous rencon­trons aussi pas mal d’adresses @voila.fr alors que voila.fr a cessé de four­nir du mail depuis le 12 janvier 2016 (Voir http://korben.info/voila-cest-fini.html).

On pour­rait lais­ser ces mails dans la file d’at­tente et attendre qu’ils expirent d’eux-mêmes au bout de 5 jours… mais cela fait 5 jours où la file d’at­tente gros­sit pour rien, ce qui déclenche des alertes dans notre super­vi­sion, ce qui peut masquer un réel problème.

Pour se débar­ras­ser de ces mails en une commande :

mailq | grep "gmail.fr" -B1 |\
 sed -e "s@ .*@@" -e "s@--.*@@" -e "s@(\(host\|delivery\|connect\).*@@i" -e "s@\*@@g" |\
 sed ':a;N;$!ba;s/\n/ /g' |\
 sed -e "s@ \+@ -d @g" -e "s@^@postsuper -d @" -e "s@ -d \+\$@@" |\
 bash
Parta­ger

by Luc at January 11, 2017 12:13 PM

January 03, 2017

Luc Didry

Merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle de décembre !

Elle arrive un poil en retard… parce que manque de pot, la page de Tipeee qui liste mes tipeurs du mois me renvoyait une vilaine erreur 500 :-(

Merci à :

Profi­tons un peu de cet article pour faire un petit résumé de mon acti­vité libriste du mois de décembre :

  • Amélio­ra­tion de Lstu et publi­ca­tion de la v0.07. Merci aux contri­bu­teurs qui ont ajouté des fonc­tion­na­li­tés : Phyks pour le mot de passe admin hashé et la confi­gu­ra­bi­lité du système de bannis­se­ment et Pierre Rudloff pour le tracking des visites via piwik.
  • Début de créa­tion d’un client en ligne de commande pour Lufi. Je l’avais fini, tout fonc­tion­nait, mais j’ai voulu faire du ménage dans le dossier avant de commi­ter et j’ai effacé ce que j’avais fait par mégarde :-(. J’ai donc du reprendre la partie sur l’en­voi de fichiers à partir de zéro ou presque : il me restait quelques souve­nirs et les noms des biblio­thèques que j’avais utili­sées pour cette partie. Ça ne devrait plus trop tarder.
Parta­ger

by Luc at January 03, 2017 06:46 PM

December 07, 2016

Simon Florentin

[MCP] Un peu de théorie avec les SysEx

Entrons dans le vif du sujet: le détail du protocole et l'affichage de données sur un écran LCD!

by Simon at December 07, 2016 09:26 AM

December 01, 2016

Luc Didry

Merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle de novembre !

Elle arrive un poil en retard… parce que j’avoue, hier soir, après 4h de cours avec les ASRALL, j’étais sur les rotules. Impos­sible de faire quoi que ce soit qui néces­si­tait l’ac­ti­va­tion de plus de deux neurones.

Merci à :

Les contre­par­ties physiques (stickers, photos de mon chat) sont bien parties en novembre, et elles sont norma­le­ment arri­vées à bon port (j’ai au moins une confir­ma­tion de bonne récep­tion).

Profi­tons un peu de cet article pour faire un petit résumé de mon acti­vité libriste du mois de novembre :

  • J’ai enfin pris le temps de rema­nier le vieux cours de Perl que j’avais écrit en 2009 avec Julien Vaubourg. Outre sa mise à jour, ce cours a béné­fi­cié d’une réécri­ture en Mark­down : cela me permet de ne plus m’oc­cu­per d’écrire le code LaTeX kiva­bien, c’est pandoc qui s’en charge :-) Enfin, les sources du cours sont main­te­nant sur Frama­git, avec en plus une recom­pi­la­tion auto­ma­tique en PDF chaque fois que je pousse sur le dépôt : le pdf publié est donc toujours à jour
  • Publi­ca­tion de mes cours de licence ASRALL sur le web. L’avan­tage d’écrire en Mark­down, c’est qu’a­vec un mini­mum d’ef­fort, on peut sortir des docu­ments en PDF, mais aussi sortir de l’HTML. Partant de là, je me suis dit que ce serait dommage de ne pas en profi­ter pour diffu­ser plus large­ment mes cours :-) (les cours arrivent au fur et à mesure que je les rema­nie, donc il y aura un nouveau chapitre toutes les semaines) Et puis tant qu’à faire, le cours de Perl est aussi en ligne, au même endroit :D
  • Docu­men­ta­tion d’une fonc­tion­na­lité de l’API d’Ether­pad. La fonc­tion­na­lité exis­tait, mais n’était pas dans la docu­men­ta­tion de l’API !
  • Correc­tion d’une typo sur Gitlab-Omni­bus
  • Correc­tion d’un bug sur Gitlab
  • Ajout d’un bout d’API en plus sur Lutim, pour obte­nir des infor­ma­tions sur la confi­gu­ra­tion du serveur. Cela devrait faci­li­ter le travail de Schoumi sur Goblim
  • Ajout de la récu­pé­ra­tion de la version HTML d’un pad sur padcon­sole
  • Diverses amélio­ra­tions sur Lstu, dont un nouveau thème plus léger, et un meilleur cache des fichiers dans le navi­ga­teur. Lstu devient deux fois plus rapide !

On peut le voir : je n’ai pas fait que du code ce mois-ci. On oublie faci­le­ment que même les plus infimes parti­ci­pa­tions (comme la typo sur Gitlab-Omni­bus) sont appré­ciées, et que le libre, ce n’est pas que du code, c’est aussi le partage du savoir (cf la doc de la fonc­tion d’API manquante sur Ether­pad et mes cours).

EDIT : ce bilan ne tient pas compte de ce que j’ai fait pour Frama­soft en tant que sala­rié, je n’ai parlé ici que de ce que j’ai fait en dehors de mes heures de travail.

Parta­ger

by Luc at December 01, 2016 08:17 PM

November 07, 2016

Florent Peterschmitt

Windows 7/2008, Samba 3, Updates

Des machines Windows 7 et 2008 R2 n’arrivent pas à se connecter à un partage de fichier, alors que d’autres machines sous les mêmes OS et le même réseau le peuvent.

Dans les logs Samba, on pouvait voir Connection reset by peer et Server exit (failed to receive smb request), alors qu’une connexion réussie ne retourne jamais ce genre d’erreur.

Pas de résolution en mettant à jour vers la dernière version de Samba 3.5, et pas plus en 3.6. Je n’ai pas pu tester Samba 4 car il était impossible de l’intégrer chez le client.

Donc, après avoir épluché :

  • les logs
  • les firewall
  • les jointures au domaine
  • les éventuels problèmes d’authentification et être allé jusqu’à la page 2 de Google…

…il apparaît que certaines MAJ de Windows sont en cause : en prenant un PC pas à jour, qui arrive à monter le partage, après mise à jour, plus rien ne fonctionne.

Sauf que trouver et supprimer les MAJ ne résoud rien. Modifier certaines clefs de registre (je ne sais plus lesquelles) ne résoud rien non plus.

J’ai en revanche trouvé l’option samba qui permet de remettre les choses en fonctionnement, en parcourant la doc de Samba 3 de haut en bas :

[global]
    server signing = auto

En passant cette option à disabled, je reproduis mon impossibilité d’accès au partage, et ce même après reboot des clients entre chaque changement de l’option —jouuur, nuit, jouuur, nuit, jouuur, nuit—.

Tips

Un petit truc qui m’a permit de récupérer facilement les informations sur les MAJ windows des machines :

Get-WmiObject -Class "win32_quickfixengineering" | Select-Object -Property "Description", "HotfixID", @{Name="InstalledOn"; Expression={([DateTime]($_.InstalledOn)).ToLocalTime()}}

Puis :

for i in $(cat hotfixes | sed -rn 's/.*KB([0-9]+).*/\1/gp'); do chromium "https://support.microsoft.com/en-us/kb/$i" ; read ; done

Ensuite jouez du clavier… sous i3, c’est facile :D Je n’ai pas poussé à l’extrème l’automatisation, mais ça fait déjà gagner un temps certain.

by Florent Peterschmitt at November 07, 2016 06:00 PM

October 31, 2016

Luc Didry

Merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle d’oc­tobre !

Merci à :

Bonne nouvelle pour les contre­par­ties physiques : les enve­loppes sont sur mon bureau, remplies et adres­sées, et n’at­tendent plus qu’un passage à la poste pour les peser et les envoyer ! Et ce sera fait cette semaine, donc surveillez vos boîtes aux lettres :-)

Parta­ger

by Luc at October 31, 2016 03:41 PM

October 16, 2016

Simon Florentin

[MCP] Introduction au protocole Mackie Control

Retour inatendu sur le blog, cet article est le début d'une petite série concernant la réalisation d'une surface de controle pour DAW via le protocole Mackie Control, largement utilisé dans le milieu audionumérique.

by Simon at October 16, 2016 09:48 AM

October 10, 2016

Luc Didry

Bye Twit­ter

Comme annoncé sur Diaspo­ra* il y a moins de deux semaines, je coupe­rais mon compte Twit­ter fin octobre.

J’en ai assez d’être accro à ce réseau, constam­ment en peur de manquer quelque chose. Et puis, ça pue, c’est pas libre !

Donc j’ai mis en place un bot twit­ter qui répond auto­ma­tique­ment aux gens qui m’in­ter­pellent que je me casse. Ce bot est libre et simple d’em­ploi (un peu mal codé aussi :P ) et vous pouvez vous aussi l’em­ployer pour annon­cer votre départ :-) (ou juste pour emmer­der les gens, ça marche aussi :D )

J’ai aussi enlevé l’on­glet de Twit­ter de mon Fire­fox, désins­tallé Twidere de mon télé­phone et j’ar­rête de parta­ger mes posts Diaspo­ra* sur Twit­ter. La liai­son Twit­ter de ce blog sera coupée juste après la paru­tion de ce billet :-)

Et après cela, je ne serais plus que sur Diaspo­ra* et Twis­ter (comme d’hab, mon pseudo y est @fra­masky). Et pis sur LinuxFr quand même aussi, c’est un réseau social aussi, non mais ho.

Crédits : Dead bird, par Tris­tan Bower­sox, CC-BY, retou­ché par mes soins (crop + colo­ri­sa­tion)

Parta­ger

by Luc at October 10, 2016 07:42 PM

October 05, 2016

Florent Peterschmitt

ArchLinux - Kernel custom

C’est pas nouveau, le kernel d’ArchLinux est géré d’une manière foireuse et certaines options ne sont pas présentes pour des raisons… mouais, bon.

Pour ma part, j’ai besoin du framework AUDIT, qui n’est pas compilé pour une raison que je trouve un peu légère.

En plus de ça, je pourrai passer d’un kernel PREEMPT à un kernel SMP classique car le module de la carte Wifi broadcom ne supporte que ce mode. Avec PREEMPT, on se retrouve à avoir des freeze du scheduler…

Mais bon peu importe : ce n’est pas compliqué de construire un kernel maison et packagé en prime !

Go

pacman -S abs
abs
cp -ar /var/abs/core/linux /tmp/ # je build dans /tmp car j’ai de la RAM
cd /tmp/linux/

makepkg --skippgpcheck -o # telechargement + extraction des sources

sed -i PKGBUILD -e 's/^pkgbase=linux/pkgbase=linux-custom/' # changer le nom parce ce qu'on veut

cd src/linux-4.7

make menuconfig # ou cp de sa configuration...

cd ../..
makepkg -e
pacman -U linux-custom-*.pkg.tar*

Ensuite on est prêt pour mettre à jour GRUB, évidemment :

grub-mkconfig -o /boot/grub/grub.cfg

Les modules gérés par DKMS seront pris en charge avec ce nouveau kernel.

by Florent Peterschmitt at October 05, 2016 08:59 AM

October 03, 2016

Luc Didry

Le pouvoir de nuisance des silos de mail

Quand on pense aux GAFAM, on pense surtout à leur vilaine habi­tude d’as­pi­rer les données de leurs utili­sa­teurs (et des autres aussi d’ailleurs) mais on ne pense pas souvent à leur poids déme­suré dans le domaine du mail.

Google, c’est gmail, Micro­soft, c’est hotmail, live, msn et je ne sais quels autres domaines, etc.

Tout ça repré­sente un nombre plus que consé­quent d’uti­li­sa­teurs. Google reven­diquait en 2015 900 millions de comptes Gmail. Bon ok, il y en a une part qui ne doit servir qu’à avoir un compte pour son télé­phone android, mais quand même. C’est énorme.

Je n’ai pas de statis­tiques pour Micro­soft et Yahoo, mais c’est pareil : ils pèsent un certain poids, et même un poids certain.

Ce qui nous ramène à une situa­tion des plus déplai­santes où un petit nombre d’ac­teurs peut en em***er une multi­tude.

Petits exemples vécus :

  • Micro­soft bloque tout nouveau serveur mail qu’il ne connait pas. C’est arrivé pour mon serveur perso, le serveur de mail de Frama­soft que j’ai mis en place, sa nouvelle IP quand je l’ai migré, le serveur de listes de Frama­soft et sa nouvelle IP quand je l’ai migré. Ça me pétait une erreur 554 Message not allowed (de mémoire, je n’ai plus le message sous la main). Et pour trou­ver comment s’en débrouiller, bon courage : la page d’er­reur de Micro­soft n’in­diquait rien. Je n’ai même pas trouvé tout seul (et pour­tant j’ai cher­ché) : c’est un ami qui m’a trouvé la bonne adresse où se faire dé-black­lis­ter (notez au passage qu’il est impos­sible de faire dé-black­lis­ter une adresse ou un bloc d’adresses IPv6).
  • Gmail qui, du jour au lende­main, décide de mettre tous les mails de mon domaine person­nel en spam. Ce qui ne serait pas trop gênant (hé, les faux posi­tifs, ça existe) si ce n’était pour une raison aber­rante (ou alors c’est une sacrée coïn­ci­dence) : ça s’est passé à partir du moment où j’ai activé DNSSEC sur mon domaine. Et ça s’est terminé dès que j’ai ajouté un enre­gis­tre­ment SPF à ce domaine. Or le DNSSEC et le SPF n’ont rien à voir ! Surtout pas dans cet ordre là ! Qu’on ne fasse confiance à un enre­gis­tre­ment SPF que dès lors que le DNS est de confiance (grâce à DNSSEC), soit, mais pourquoi néces­si­ter du SPF si on a du DNSSEC ?
  • Yahoo. Ah, Yahoo. Yahoo a décidé de renfor­cer la lutte contre le spam (bien) mais a de fait cassé le fonc­tion­ne­ment des listes de diffu­sion tel qu’il était depuis des lustres (pas bien). En effet, quand vous envoyez un mail à une liste de diffu­sion, le mail arrive dans les boîtes des abon­nés avec votre adresse comme expé­di­teur, tout en étant envoyé par le serveur de listes. Et Yahoo a publié un enre­gis­tre­ment DMARC indiquant que tout mail ayant pour expé­di­teur une adresse yahoo doit impé­ra­ti­ve­ment prove­nir d’un serveur de Yahoo. C’est bien gentil, mais non seule­ment ça fout en l’air le fonc­tion­ne­ment des listes de diffu­sion, mais surtout ça fout le bazar partout : les serveurs de mail qui respectent les enre­gis­tre­ments DMARC appliquent cette règle, pas que les serveurs de Yahoo. (notez qu’AOL fait la même chose)

On peut le voir, le pouvoir de nuisance de ces trois silos est énorme. Et plus encore dans le cas de Yahoo qui n’im­pacte pas que les commu­ni­ca­tions entre ses serveurs et votre serveur de listes de diffu­sion, mais entre tous les serveurs et votre serveur de listes, pour peu que l’ex­pé­di­teur utilise une adresse yahoo. Et comme il y a encore pas mal de gens possé­dant une adresse yahoo, il y a des chances que vous vous rencon­triez le problème un jour ou l’autre.

Si ces acteurs étaient de tailles modestes, l’en­semble de la commu­nauté pour­rait soit leur dire d’ar­rê­ter leurs bêtises, soit les lais­ser crever dans leurs forte­resses injoi­gnables. Mais ce n’est malheu­reu­se­ment pas le cas :-(

Une seule solu­tion pour faire cesser ce genre d’abus : la dégoo­gli­sa­tion ! Une décen­tra­li­sa­tion du net, le retour à un Inter­net d’avant, fait de petites briques et pas d’im­menses pans de béton.

EDIT : Orange fait aussi son chieur à coup d’er­reurs Too many connections, slow down. OFR004_104 [104]. C’est telle­ment connu que Google suggère de lui-même wanadoo quand on cherche Too many connections, slow down. Voici la solu­tion que j’ai utili­sée : https://blog.network-studio.fr/2011/06/30/too-many-connec­tions-slow-down/.

Crédits : Illus­tra­tion de Vincent Van Gogh, Joseph Roulin assis

PS : ne me lancez pas sur MailInB­lack, ça me donne des envies de meurtre.

Parta­ger

by Luc at October 03, 2016 06:54 PM

October 01, 2016

Luc Didry

Merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle de septembre !

Certes, j’avais dit la dernière fois que je publie­rai cette page le dernier jour de chaque mois, mais Murphy et sa loi se sont invi­tés chez moi :

  • ça fait une semaine que mon ADSL débloque plein tube
  • pas grave, j’uti­li­sais la liai­son 4G de mon télé­phone
  • je n’ai pas trop fait gaffe à ma consom­ma­tion de ce précieux forfait data, me disant que de toute façon, ça repar­ti­rait à zéro le 1er octobre
  • bien évidem­ment, j’ai explosé le forfait hier juste après ma jour­née de travail et ça ne repart… que le 8 octobre
  • le débit après le dépas­se­ment de forfait n’ar­rive qu’à grand peine à me permettre de rele­ver mes mails :-(

Bref, avec les tests avec un autre modem dont il a fallu que je le mette à jour et le recon­fi­gure avant les tests, je n’ai pas eu le temps de prépa­rer mon arti­cle…

Merci, avec un peu de retard donc, et profi­tant d’une pointe de stabi­lité de ma ligne ADSL, à :

Pour ce qui est des contre­par­ties physiques… à ma grande honte, je suis en retard :-( Il faut que je me décide sur la photo de mon chat à impri­mer :-)

PS : j’ai mis des liens sur mes tipeurs pour lesquels j’avais une idée d’un site kiva­bien, mais si vous voulez ajou­ter, modi­fier ou suppri­mer votre lien, il n’y a qu’à me le dire :-)

Parta­ger

by Luc at October 01, 2016 02:55 PM

September 20, 2016

Florent Peterschmitt

Linux Kernel Network Namespaces et dnsmasq

Bien souvent, nos clients nous mettent à disposition des VPN pour pouvoir les aider à distance pour les cas de support.

Parmis ces VPN, on a Juniper Network Connect, qui touche aux routes et ne permet pas de les modifier (il les remet comme il le souhaite).

Du coup aujourd’hui je suis obligé de passer par une VM/conteneur. C’est peu pratique, mais on va voir comment s’en sortir avec les namespaces réseau et dnsmasq.

Network Namespaces

Un article très intéressant détail ce que sont les namespaces, et je vous en recommande la lecture avant de lire la suite ici. Car en bonne feignasse… voilà.

En gros :

With network namespaces, you can have different
and separate instances of network interfaces and
routing tables that operate independent of each other.

Un peu de théorie

L’objectif est d’avoir un environnement réseau indépendant du reste du système, pour que la connexion VPN puisse y vivre sa vie, sans venir m’enquiquiner sur le reste de mes connexions.

Pour y arriver, j’ai choisi d’utiliser une configuration natée (le VPN est ipv4 uniquement) avec une interface virtuelle qui servira de pont entre mon interface physique et l’interface du namespace.

Mise en place du namespace

Création du namespace :

ip netns add juniper

Mais où sont passées nos interfaces ! ;-)

ip netns exec juniper ip l
ip netns exec juniper iptables -nL

On créer une paire d’interfaces :

  • jun1 : interface dédiée au namespace
  • jun0 : pont entre le lien physique (eth0) et l’interface du namespace (jun1)
ip link add jun0 type veth peer name jun1

On migre jun1 dans le namespace :

ip link set jun1 netns juniper
ip netns exec juniper ip l # Oooooh !

On configure le réseau comme on le ferait avec n’importe quel système. Note : j’utilise ip mais on pourrait utiliser ifconfig…

ip netns exec juniper ip a add 10.252.0.1/24 dev jun1
ip netns exec juniper ip l set jun1 up
ip netns exec juniper ip r add default via 10.252.0.254 dev jun1

On positionne jun0 comme passerelle :

ip a add 10.252.0.254/24 dev jun0
ip l set jun0 up
iptables -t nat -A POSTROUTING -s 10.252.0.0/24 -j MASQUERADE

Voilà, notre namespace réseau juniper est configuré et actif. Maintenant on va pouvoir lancer notre VPN dans ce namespace :

ip netns exec juniper openconnect --juniper <endpoint>

Une histoire de résolution

Le problème avec ce VPN, c’est le fichier /etc/resolv.conf qui sera écrasé par openconnect. Hé oui, on a isolé le réseau, mais rien de plus. Donc on va toujours pouvoir faire ping 8.8.8.8, mais par contre pour la résolution… ça va être compliqué.

Ou pas : avec dnsmasq, on peut faire ce qu’on veut !

Du coup, comme /etc/resolv.conf est partagé pour tous les namespaces… mais que chaque namespace dispose de sa propre pile réseau… on va pouvoir lancer un dnsmasq sur le système hôte, et un autre dans le namespace : chacun écoutera sur le port 53 de son namespace, et n’entrera pas en conflict avec son voisin !

Le but du jeu, c’est que le dnsmasq du namespace fasse les résolutions DNS pour ce qui concerne notre VPN, et l’autre fasse les résolutions habituelles.

En imaginant que mon VPN me donne accès à un réseau 10.0.0.0/8, que le serveur DNS “du VPN” soit 10.9.8.253 et que le domaine soit domaine.prive :

/etc/dnsmasq.conf

server=/domaine.prive/10.9.8.253
/etc/resolv.conf :
nameserver 127.0.0.1
nameserver <votre DNS public favoris>

Avec cette conf, dnsmasq va tout seul comprendre qu’il faudra forwarder les requêtes auxquels il ne peut répondre aux autres serveurs DNS configurés (resolv.conf), mais va en revanche contacter les serveurs DNS pour les domaines précisés, ici domaine.prive.

Une fois qu’on a fait ça, on démarre dnsmasq sur notre “hôte”, et dans le namespace :

# on se met bien dans notre namespace
ip netns exec juniper /bin/bash
ip a add 127.0.0.1/8 dev lo
ip l set lo up
dnsmasq -d

On pourra même se targuer d’un chattr +i /etc/resolv.conf pour que personne ne vienne casser la conf. Et là, on est royal :

ip netns exec juniper su - wrk -c "export DISPLAY=:0; firefox"

Notre firefox est lancé dans un namespace réseau, donc il est dans le VPN juniper, pendant que le reste de notre système vit sa vie.

Un petit schéma peut-être ?

schema

by Florent Peterschmitt at September 20, 2016 02:58 PM

Linux Kernel Network Namespaces et dnsmasq

Bien souvent, nos clients nous mettent à disposition des VPN pour pouvoir les aider à distance pour les cas de support.

Parmis ces VPN, on a Juniper Network Connect, qui touche aux routes et ne permet pas de les modifier (il les remet comme il le souhaite).

Du coup aujourd’hui je suis obligé de passer par une VM/conteneur. C’est peu pratique, mais on va voir comment s’en sortir avec les namespaces réseau et dnsmasq.

Network Namespaces

Un article très intéressant détail ce que sont les namespaces, et je vous en recommande la lecture avant de lire la suite ici. Car en bonne feignasse… voilà.

En gros :

With network namespaces, you can have different
and separate instances of network interfaces and
routing tables that operate independent of each other.

Un peu de théorie

L’objectif est d’avoir un environnement réseau indépendant du reste du système, pour que la connexion VPN puisse y vivre sa vie, sans venir m’enquiquiner sur le reste de mes connexions.

Pour y arriver, j’ai choisi d’utiliser une configuration natée (le VPN est ipv4 uniquement) avec une interface virtuelle qui servira de pont entre mon interface physique et l’interface du namespace.

Mise en place du namespace

# création du namespace
ip netns add juniper

# mais où sont passées nos interfaces ! ;-)
ip netns exec juniper ip l
ip netns exec juniper iptables -nL

# on créer une paire d’interfaces :
# jun1 : interface dédiée au namespace
# jun0 : pont entre le lien physique (eth0) et l’interface du namespace (jun1)
ip link add jun0 type veth peer name jun1

# on migre jun1 dans le namespace
ip link set jun1 netns juniper

ip netns exec juniper ip l # Oooooh !

# on configure le réseau comme on le ferait avec n’importe quel système.
# Note : j’utilise ip mais on pourrait utiliser ifconfig...
ip netns exec juniper ip a add 10.252.0.1/24 dev jun1
ip netns exec juniper ip l set jun1 up
ip netns exec juniper ip r add default via 10.252.0.254 dev jun1

# on positionne jun0 comme passerelle
ip a add 10.252.0.254/24 dev jun0
ip l set jun0 up
iptables -t nat -A POSTROUTING -s 10.252.0.0/24 -j MASQUERADE

Voilà, notre namespace réseau est configuré et actif. Maintenant on va pouvoir lancer notre VPN dans ce namespace :

ip netns exec juniper openconnect --juniper <endpoint>

Une histoire de résolution

Le problème avec ce VPN, c’est le fichier /etc/resolv.conf qui sera écrasé par openconnect. Hé oui, on a isolé le réseau, mais rien de plus. Donc on va toujours pouvoir faire ping 8.8.8.8, mais par contre pour la résolution… ça va être compliqué.

Ou pas : avec dnsmasq, on peut faire ce qu’on veut !

Du coup, comme /etc/resolv.conf est partagé pour tous les namespaces… mais que chaque namespace dispose de sa propre pile réseau… on va pouvoir lancer un dnsmasq sur le système hôte, et un autre dans le namespace : chacun écoutera sur le port 53 de son namespace, et n’entrera pas en conflict avec son voisin !

Le but du jeu, c’est que le dnsmasq du namespace fasse les résolutions DNS pour ce qui concerne notre VPN, et l’autre fasse les résolutions habituelles.

En imaginant que mon VPN me donne accès à un réseau 10.0.0.0/8, que le serveur DNS “du VPN” soit 10.9.8.253 et que le domaine soit domaine.prive :

/etc/dnsmasq.conf

server=/domaine.prive/10.9.8.253
/etc/resolv.conf :
nameserver 127.0.0.1
nameserver <votre DNS public favoris>

Avec cette conf, dnsmasq va tout seul comprendre qu’il faudra forwarder les requêtes auxquels il ne peut répondre aux autres serveurs DNS configurés (resolv.conf), mais va en revanche contacter les serveurs DNS pour les domaines précisés, ici domaine.prive.

Une fois qu’on a fait ça, on démarre dnsmasq sur notre “hôte”, et dans le namespace :

# on se met bien dans notre namespace
ip netns exec juniper /bin/bash
ip a add 127.0.0.1/8 dev lo
ip l set lo up
dnsmasq -d

On pourra même se targuer d’un chattr +i /etc/resolv.conf pour que personne ne vienne casser la conf. Et là, on est royal :

ip netns exec juniper su - wrk -c "export DISPLAY=:0; firefox"

Notre firefox est lancé dans un namespace réseau, donc il est dans le VPN juniper, pendant que le reste de notre système vit sa vie.

Un petit schéma peut-être ?

schema

by Florent Peterschmitt at September 20, 2016 02:58 PM

September 09, 2016

Luc Didry

L’art et le libre

Ça gueule un peu en ce moment dans le monde de la BD. C’est un peu la faute à David Revoy, aux licences libres et à l’édi­teur Glénat et surtout aux auteurs de BD (puisque c’est eux qui gueulent :P).

Un peu de contexte

David est l’au­teur de Pepper & Carrot, un webco­mic libre (en CC-BY) qui raconte l’his­toire d’une jeune sorcière maladroite et de son chat.
Il a choisi une voie pour le moins coura­geuse : faire appel à son public pour se finan­cer notam­ment via les plate­formes Patreon et Tipeee.
Pour en savoir plus sur David, allez lire son inter­view sur le Frama­blog par votre servi­teur.

2015-12-14_pour-framasoft_net-1024x763

Glénat est un éditeur de BD tout ce qu’il y a de clas­sique, avec ceci de parti­cu­lier qu’il a la répu­ta­tion d’avoir des oursins dans les poches et que son nom est apparu dans les Panama papers.

Un évène­ment

Glénat a sorti une version papier de Pepper & Carrot.

Comme c’est du CC-BY, il n’y a pas de contrat clas­sique entre l’au­teur et l’édi­teur :

  • pas d’avance
  • pas de droits d’au­teur

Par contre, sans doute histoire de ne pas faire le gros rat, Glénat joint les contri­bu­teurs sur Patreon à hauteur de 350$ par mois (mais rien ne l’em­pêche d’ar­rê­ter du jour au lende­main). Et puis la BD est vendue à un prix infé­rieur au prix habi­tuel d’une BD de cette taille.

Les réac­tions

Parmi les fans de David, de ce que j’en ai constaté, c’est un évène­ment appré­cié.

Parmi les fans du libre aussi : si les logi­ciels libres sont assez bons pour être aujourd’­hui utili­sés par les plus grosses boîtes d’in­for­ma­tique du monde, la culture libre, elle, n’est pas très visible. Et là, ça change.

La shits­torm

La mèche a été allu­mée par Cali­maq, avec son article Pepper et Carrot : une bande dessi­née Open Source publiée chez Glénat.

Cali­maq en parle comme d’« un événe­ment inté­res­sant, qui montre comment la Culture Libre et l’in­dus­trie cultu­relle mains­tream peuvent arri­ver à entrer en syner­gie, avec des béné­fices mutuels à la clé. ». Bref, il s’en réjouit (je vous laisse lire l’ar­ticle).

Là-dessus, des dessi­na­teurs (Béhé et Boulet, et peut-être d’autres, mais ce sont les deux seuls dont j’ai reconnu le nom) sont inter­ve­nus dans les commen­taires pour appor­ter un gros bémol (on passe même dans l’oc­tave du dessous). Je vais essayer de résu­mer le gros problème que ça leur pose :

  • la situa­tion des auteurs de BD, c’est un peu la merde : payés à coup de lance-pierre, des coti­sa­tions retraite qui augmentent alors qu’ils ont à peine de quoi manger… Ça, c’est un fait établi et un autre fait établi.
  • David fout en l’air le seul outil qui leur permet­tait (aux auteurs de BDs) de faire respec­ter quelques droits en permet­tant à un éditeur qui est loin d’être à la rue de sortir un bouquin en payant des clopi­nettes à l’au­teur. Ça, c’est une opinion.
  • David est un pigeon qui se fait plumer par l’édi­teur. Ça aussi c’est une opinion.

De là, plusieurs articles sont parus :

  • Vues Éphé­mères – Rentrée 2016, qui fait une synthèse plutôt inté­res­sante du débat, avec un penchant pour contrat d’au­teur clas­sique (« C’est sans aucun doute l’er­reur majeure du « doux rêveur » (tel qu’il se décrit lui-même), que de ne pas avoir choisi une licence CC-BY-NC ») ;
  • Glénat, licences libres et crowd­fun­ding : la tech­nique de la boule de cris­tal de Neil Jomunsi, qui pèse fort bien le pour et le contre, remet le choix final dans les mains de l’au­teur (« Doit-on empê­cher un auteur de publier son travail en CC-BY au motif que le modèle proposé pour­rait donner des idées à d’autres éditeurs et que c’est pas très sympa pour les autres ? ») et pose la ques­tion fort perti­nente (d’un point de vue comme de l’autre) : « Est-ce que ça conta­mi­nera l’édi­tion ?  » ;
  • Droits d’au­teur : ambiance poivrée dans la BD de Quen­tin Girard, dont on peut se passer. Même si la synthèse de la situa­tion semble équi­li­brée à première vue, j’ai lu beau­coup de mépris pour l’œuvre de David Revoy dans cet article. Morceau choi­sis :
    • « Le récit, sans grande qualité graphique, narra­tive ou comique » Certes, les aven­tures de Pepper & Carrot sont dans le registre du mignon, qui ne convient pas à tout le monde. Mais de là à en nier la qualité graphique, il y a un monde.
    • « Comme le montre son shéma (sic), son but est de chan­ger la chaîne de diffu­sion (niant par la même occa­sion l’uti­lité des éditeurs et des libraires). » Qui a dit que David niait leur utilité ? Sur son site, au-dessus du schéma, il a plutôt indiqué « Aucun éditeur, distri­bu­teur ou commer­cial ne peut exer­cer des chan­ge­ments sur Pepper&Carrot afin de le faire rentrer dans une case du ‘mar­ché’. ». Ainsi David indique préfé­rer rester maître de son œuvre, et donc ne pas subir de pres­sions pour que ce soit plus commer­cial. 2015-02-09_philosophy_06-industry-change
    • Infan­ti­li­sa­tion de David, tactique clas­sique de déni­gre­ment : « Si jamais David Revoy, amateur des animés du Club Doro­thée et de mangas en géné­ral ».
    • Et une dernière pique, qui vise aussi le lecteur : « A moins que vous ayez 8 ans ou que vous soyez un grand amateur un peu régres­sif de sorcières colo­rées et de chats mignons (quelle origi­na­lité !), vous pouvez passer votre chemin, ou, au pire, aller lire des Mélu­sine. »

Et alors ?

Et alors, j’ai envie de donner mon avis que vous n’avez pas osé solli­ci­ter (sans doute par pudeur, bien sûr, et sûre­ment pas par ton-avis-tu-peux-te-le-mettre-où-je-pensisme). Bref. Vous ne m’avez rien demandé, mais je l’ouvre quand même. (Merci Neil pour la para­phrase)

Disclai­merS :

  • j’aime la BD. Je l’adore. Je claque un budget non négli­geable dans la BD tous les mois. J’ai fait des études de libraire (si, si, j’ai un DUT Métiers du livre option librai­rie, j’ai du me réorien­ter faute de boulot). J’aime beau­coup ce que fait Boulet, et j’ai beau­coup appré­cié les quelques BDs de Béhé que j’ai lues. Je ne souhaite donc pas leur dire « Vous avez tort et moi raison », juste leur montrer ce que moi je vois.
  • j’aime le Libre. Je l’adore. Je passe un temps non négli­geable à faire du libre tous les mois. J’ai fait des études dans le Libre (si, si, j’ai une licence Admin Sys et Réseaux à base de Logi­ciels Libres). Pour tout dire, je mange même grâce au Libre.

Je déve­loppe des logi­ciels libres. Je ne suis pas payé pour ça, je fais ça sur mon temps libre. « Ha bah voilà, faut avoir un boulot à côté pour se permettre de faire du Libre ». Non. Y en a qui sont payés pour ça. Chez Red Hat par exemple. Ou l’au­teur de l’appli Goblim, une appli­ca­tion Android qui utilise Lutim, un des logi­ciels libres que j’ai déve­loppé. Ou les gars de Odoo. Bref, on peut faire du Libre et être payé pour.
Tout comme David fait du Libre pour lui-même et pour ses patrons : les gens qui le soutiennent finan­ciè­re­ment (dont je fais par ailleurs partie).

David a fait un choix, person­nel. Est-ce qu’il créera un précé­dent ? Je crois que c’est déjà fait. Est-ce qu’une personne va faire bascu­ler l’en­semble du secteur de l’édi­tion vers une recherche féroce d’au­teurs libristes de qualité pour leur piquer leurs œuvres ? Est-ce que les éditeurs vont se mettre à dire « Oh, mais tu demandes trop toi, tu sais, moi, j’ai qu’à me pencher sur le web pour trou­ver des auteurs libristes que je pour­rais éditer sans rien leur rever­ser. » Fran­che­ment, vous y croyez ?

S’il y avait des milliers de David, finan­cés par leurs lecteurs et non pas par un éditeur, qui faisaient de la BD libre et que les éditeurs ne se mettaient à ne publier que ça, oui, les auteurs de BD auraient du souci à se faire… Mais ça n’ar­ri­vera pas avant un bon bout de temps, soyons lucides.

La BD est mal en point, entre surpro­duc­tion, salaire de misère et coti­sa­tions trop lourdes. Je pense qu’au contraire, l’exemple de David est une source d’es­poir : un auteur non publié a réussi à se consti­tuer un lecto­rat solide qui le rému­nère. Pourquoi ne pas tenter la même chose ?

« On va quand même pas bosser pour des prunes en atten­dant d’avoir un lecto­rat solide ! Maliki a réussi son pari parce qu’elle est déjà connue ! » Alors, déjà, avant de trou­ver un éditeur, j’ima­gine que les auteurs de BD bossent pour présen­ter un book, parce que se poin­ter la gueule enfa­ri­née et les mains dans les poches en disant « Je suis dessi­na­teur/scéna­riste, vous voulez m’em­bau­cher ? », ça doit pas marcher des masses. Donc la publi­ca­tion des travaux sur le net, ça peut faire double emploi : créa­tion du book et consti­tu­tion du lecto­rat. Où est le mal ? De plus, si vous réus­sis­sez à avoir suffi­sam­ment de mécènes, est-ce que ça ne renver­se­rait pas le rapport de force avec l’édi­teur ? Est-ce que vous ne pour­riez pas lui dire de se mettre son contrat là où le soleil ne brille jamais si vous savez que vous aurez un salaire versé par des gens qui aiment sincè­re­ment ce que vous faites ? Et si vous ne gagnez pas assez avec le mécé­nat pour vous consa­crer à plein temps à votre art, est-ce que ce n’est pas un complé­ment de revenu qui fait toujours plai­sir ?

fr_pepper-and-carrot_by-david-revoy_e10p05

« Oui, bon, ok, mais alors pas de licence libre ! » Ça c’est toi qui voit mon coco, on t’oblige à rien. David a effec­ti­ve­ment fait un pari risqué avec sa licence très libre (plus libre que ça, y a que la CC-0, qui est l’équi­valent du domaine public). Et il y a un éditeur qui a profité du système. OK. C’est le jeu ma pauvre Lucette. Mais grâce à sa licence libre, David permet de démul­ti­plier la diffu­sion de Pepper & Carrot au travers de multiple médias. Et la licence libre me permet à moi, de repos­ter ici des images de Pepper & Carrot sans risquer quoi que ce soit. Tu peux même choi­sir une licence non-libre qui te permet quand même de permettre beau­coup de choses sauf l’usage commer­cial (la clause NC des licences Crea­tive Commons).

EDIT : une licence libre n’in­ter­dit pas de passer des contrats, clas­siques ou non, avec des éditeurs. Les Frama­books sont des livres libres, et les auteurs ont bien passé un contrat avec verse­ment de droits d’au­teur (15% du prix du livre).

fr_pepper-and-carrot_by-david-revoy_e15p01

« La noto­riété, ça paye pas les factures. » Dans le cas de David, si, puisque plus d’au­dience, c’est plus de mécènes poten­tiels. Et Maliki, c’est pas sa noto­riété qui lui paye ses factures aujourd’­hui ?

Le problème du riche éditeur qui tond le pauvre libris­te… Mais Inter­net ne serait pas ce qu’il serait sans les libristes, ces doux rêveurs, ces commu­nistes, ces liber­ta­riens, ces liber­taires ! (choi­sis­sez l’ana­thème de votre choix)
Google existe grâce à Linux et Python, Face­book utilise PHP, les serveurs webs libres équipent plus la moitié des sites web les plus popu­laires, Word­press est le CMS le plus utilisé au monde, vous vous servez sans doute souvent de Wiki­pé­dia… Même Windows avait piqué sa pile réseau à BSD ! Et vous note­rez que les logi­ciels non-libres n’ont pas disparu pour autant… vous voyez, faut pas avoir peur :-)

Qui nous dit que la culture libre n’aura pas le même impact que les logi­ciels libres dans 10, 20 ou 30 ans ? Est-ce que ce ne serait pas agréable de se dire qu’on y a contri­bué ?

Le mal-être actuel des auteurs de BD est peut-être bien l’oc­ca­sion de repen­ser le métier. Beau­coup de métiers ont évolués ou dispa­rus, presque du jour au lende­main (pour encore citer Neil : « Télé­graphe, maré­chal-ferrand, allu­meur de becs de gaz, vendeur de jour­naux à la criée »), pourquoi ne pas faire évoluer celui d’au­teur de BD ? (et pas que de BD)

Pourquoi reje­ter forcé­ment une autre voie et vouloir répa­rer un système (et je ne parle même pas du droit d’au­teur mais du système édito­rial actuel) qui semble si malade ?

EDIT 2 : Neil a écrit un nouvel article qui rejoint tout à fait mon point de vue.

Cet article est diffusé sous licence CC-0
Crédits :

  • illus­tra­tions David Revoy, CC-BY
  • cita­tion de Cali­maq, CC-0
  • cita­tions de Neil Jomunsi, CC-BY-SA
  • cita­tions de Quen­tin Girard, ©
Parta­ger

by Luc at September 09, 2016 09:44 PM

September 05, 2016

Florent Peterschmitt

Check Delivery - SMTP, IMAP, IRC, FTP…

Initialement, je voulais vérifier que je ne m’étais pas gouré dans la configuration de mon serveur mail, et automatiser la vérification de l’envoi/réception interne/externe.

Ça existe déjà, ça s’appelle check_mail_delivery et ça propose sans doute plus de fonctionnalités que ce que j’ai à proposer. Et pour certains mordus de Perl, c’est écrit en Perl ;-)

Néanmoins, comme je suis pas fan de Perl, ni de ce programme, j’en suis venu à coder un petit chéri, en Python 3, sous license MIT : Check Delivery

Check Delivery

Le mail c’est une chose, mais je me suis dit que ça serait sympa de proposer d’autres choses. Au final, le but du jeu, c’est de s’assurer qu’une chaîne délivrant, peu importe le moyen, des messages, fonctionne : FTP, IRC, des fichiers…

Pour fonctionner, on lui précise un sender et un receiver, sous forme d’une URL (voir exemples), ou bien un fichier de conf.

Selon comme le sender et receiver est codé, le receiver sera connecté (ou disponible) avant que le sender ne commence à bosser, ce qui dans le cas de SMTP/IMAP est inutile, mais dans le cas d’IRC, est obligatoire.

Si à l’avenir on prenait XMPP par exemple, il faudrait avoir les deux modes : livraison du message après connexion de l’utilisateur, et livraison en direct.

Le format de sortie est configurable et on peut coder son propre format.

Fonctionnalités

Pour l’instant, voici ce qui est disponible :

  • smtp, smtps, smtp + starttls, en envoi uniquement
  • imap, imaps, imap + starttls, en réception uniquement
  • irc, irc + tls, deux modes
  • ftp, ftps, deux modes
  • file (en local), deux modes
  • sorties Nagios et JSON
  • fichier de configuration

Exemple

[creds]
user = user%40peterschmitt.fr:password

[senders]
smtp = smtpstarttls://${creds:user}@peterschmitt.fr:587

[receivers]
imap = imapstarttls://${creds:user}@peterschmitt.fr:143

[scenarios]
smtp.to.imap.send = ${senders:smtp}
smtp.to.imap.recv = ${receivers:imap}
$ check_delivery --conf config.ini --play smtp.to.imap --wait 3
$ OK - Token found in message b'1'
$ echo $?
0

Le sender nommé arbitrairement smtp va envoyer un token, une somme SHA512, et si tout se passe bien, on devrait récupérer ce message via notre serveur IMAP, configuré dans le receiver arbitrairement nommé imap.

L’option --wait fait attendre la vérification trois secondes après que le sender ai terminé son travail.

Le nom des sections est au choix, sauf scenarios, de même que le nom des clefs, on fait sa vie comme on veut.

Installation

Pas encore d’enregistrement sur pypi, donc on passera par une installation par le dépôts GitHub.

# From local clone
pip install -e .
pip install -e .[irc] # with IRC delivery

# Or from GitHub
pip install -e "git+https://github.com/Leryan/check_delivery.git#egg=check_delivery"
pip install -e "git+https://github.com/Leryan/check_delivery.git#egg=check_delivery[irc]"

Il vous faudra Python 3.2 minimum.

Sécurité

Pour les modes avec chiffrement, on pourra utiliser, dans l’URL, le paramètre ssl_verify.

Par défaut, un certificat reconnu est demandé.

Évolutivité

En prenant exemple sur le file delivery, combiné avec le point d’entrée du programme de référence check_delivery, on peut obtenir assez facilement ce qu’on souhaite.

Il suffira de passer un dictionnaire classmap à cette fonction, l’exécuter et retourner le code de retour en sortie de script, et c’est fini.

#!/usr/bin/env python

import sys

import check_delivery

from check_delivery import Method

class MMBase(Method):

    def connect(self):
        ...

class MMSend(MMBase):

    def send(self, message):
        ...

class MMRecv(MMBase):

    def recv(self, message):
        ...

def mycd():
    classmap = {
        "__methods": {
            "mamethode": {
                "send": MMSend,
                "recv": MMRecv
            }
        }
    }

    return check_delivery.check_delivery(custom_classmap=classmap)

if __name__ == '__main__':
    sys.exit(mycd())

À noter que l’utilisation de deux classes distinctes pour l’envoi et la réception n’est pas nécessaire, il suffira d’implémenter send() et recv(), qui recevront en paramètre le token à envoyer / recevoir.

Évolutions

  • Pouvoir configurer des retry, configurables bien entendu.

  • Si possible coder une gestion évènementielle de la réception du token, ce qui permettrait de demander un timeout sur la réception du token, mais également de fournir une information de performance.

  • Dans le cas où l’évènementiel n’est pas possible, une configuration de l’interval entre deux essais, et un nombre d’essais maximum.

  • Pouvoir lancer le test sur plusieurs receivers. Dans le cas du mail ça serait IMAP et POP3 par exemple.

  • Proposer un mode évènementiel pour ce qui peut l’être, comme ZeroMQ par exemple.

  • Paramétrer la connexion des receivers : avant ou après le sender ?

by Florent Peterschmitt at September 05, 2016 05:23 PM

Check Delivery - SMTP, IMAP, IRC, FTP…

Initialement, je voulais vérifier que je ne m’étais pas gouré dans la configuration de mon serveur mail, et automatiser la vérification de l’envoi/réception interne/externe.

Ça existe déjà, ça s’appelle check_mail_delivery et ça propose sans doute plus de fonctionnalités que ce que j’ai à proposer. Et pour certains mordus de Perl, c’est écrit en Perl ;-)

Néanmoins, comme je suis pas fan de Perl, ni de ce programme, j’en suis venu à coder un petit chéri, en Python 3, sous license MIT : Check Delivery

Check Delivery

Le mail c’est une chose, mais je me suis dit que ça serait sympa de proposer d’autres choses. Au final, le but du jeu, c’est de s’assurer qu’une chaîne délivrant, peu importe le moyen, des messages, fonctionne : FTP, IRC, des fichiers…

Pour fonctionner, on lui précise un sender et un receiver, sous forme d’une URL (voir exemples), ou bien un fichier de conf.

Selon comme le sender et receiver est codé, le receiver sera connecté (ou disponible) avant que le sender ne commence à bosser, ce qui dans le cas de SMTP/IMAP est inutile, mais dans le cas d’IRC, est obligatoire.

Si à l’avenir on prenait XMPP par exemple, il faudrait avoir les deux modes : livraison du message après connexion de l’utilisateur, et livraison en direct.

Le format de sortie est configurable et on peut coder son propre format.

Fonctionnalités

Pour l’instant, voici ce qui est disponible :

  • smtp, smtps, smtp + starttls, en envoi uniquement
  • imap, imaps, imap + starttls, en réception uniquement
  • irc, irc + tls, deux modes
  • ftp, ftps, deux modes
  • file (en local), deux modes
  • sorties Nagios et JSON
  • fichier de configuration

Exemple

[creds]
user = user%40peterschmitt.fr:password

[senders]
smtp = smtpstarttls://${creds:user}@peterschmitt.fr:587

[receivers]
imap = imapstarttls://${creds:user}@peterschmitt.fr:143

[scenarios]
smtp.to.imap.send = ${senders:smtp}
smtp.to.imap.recv = ${receivers:imap}
$ check_delivery --conf config.ini --play smtp.to.imap --wait 3
$ OK - Token found in message b'1'
$ echo $?
0

Le sender nommé arbitrairement smtp va envoyer un token, une somme SHA512, et si tout se passe bien, on devrait récupérer ce message via notre serveur IMAP, configuré dans le receiver arbitrairement nommé imap.

L’option --wait fait attendre la vérification trois secondes après que le sender ai terminé son travail.

Le nom des sections est au choix, sauf scenarios, de même que le nom des clefs, on fait sa vie comme on veut.

Installation

Pas encore d’enregistrement sur pypi, donc on passera par une installation par le dépôts GitHub.

# From local clone
pip install -e .
pip install -e .[irc] # with IRC delivery

# Or from GitHub
pip install -e "git+https://github.com/Leryan/check_delivery.git#egg=check_delivery"
pip install -e "git+https://github.com/Leryan/check_delivery.git#egg=check_delivery[irc]"

Il vous faudra Python 3.2 minimum.

Sécurité

Pour les modes avec chiffrement, on pourra utiliser, dans l’URL, le paramètre ssl_verify.

Par défaut, un certificat reconnu est demandé.

Évolutivité

En prenant exemple sur le file delivery, combiné avec le point d’entrée du programme de référence check_delivery, on peut obtenir assez facilement ce qu’on souhaite.

Il suffira de passer un dictionnaire classmap à cette fonction, l’exécuter et retourner le code de retour en sortie de script, et c’est fini.

#!/usr/bin/env python

import sys

import check_delivery

from check_delivery import Method

class MMBase(Method):

    def connect(self):
        ...

class MMSend(MMBase):

    def send(self, message):
        ...

class MMRecv(MMBase):

    def recv(self, message):
        ...

def mycd():
    classmap = {
        "__methods": {
            "mamethode": {
                "send": MMSend,
                "recv": MMRecv
            }
        }
    }

    return check_delivery.check_delivery(custom_classmap=classmap)

if __name__ == '__main__':
    sys.exit(mycd())

À noter que l’utilisation de deux classes distinctes pour l’envoi et la réception n’est pas nécessaire, il suffira d’implémenter send() et recv(), qui recevront en paramètre le token à envoyer / recevoir.

Évolutions

  • Pouvoir configurer des retry, configurables bien entendu.

  • Si possible coder une gestion évènementielle de la réception du token, ce qui permettrait de demander un timeout sur la réception du token, mais également de fournir une information de performance.

  • Dans le cas où l’évènementiel n’est pas possible, une configuration de l’interval entre deux essais, et un nombre d’essais maximum.

  • Pouvoir lancer le test sur plusieurs receivers. Dans le cas du mail ça serait IMAP et POP3 par exemple.

  • Proposer un mode évènementiel pour ce qui peut l’être, comme ZeroMQ par exemple.

  • Paramétrer la connexion des receivers : avant ou après le sender ?

by Florent Peterschmitt at September 05, 2016 05:23 PM

August 31, 2016

Luc Didry

Merci à mes tipeurs :-)

Le 14 juillet dernier, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… avec un peu de retard, la voici !

Merci donc à Neil Jomunsi et e-Jim qui m’ont tipé ! Ainsi qu’à l’ano­nyme qui a fait un don via Libe­ra­pay :-)

Je souhai­tais initia­le­ment écrire cette page au début de mois mais… procras­ti­na­tion, boulot, vacances, chaleur étouf­fan­te… tout ça n’aide pas à se moti­ver.
Du coup, je décide que cette page mensuelle de remer­cie­ments paraî­tra chaque dernier jour du mois :P

Comme les choses vont reve­nir à un rythme normal en septembre, j’en­ver­rais les contre­par­ties physiques en septembre :-)

Parta­ger

by Luc at August 31, 2016 12:02 PM

August 21, 2016

Luc Didry

Joyeux Ray’s day à tou·­te·s !

Le Ray’s day, c’est la fête de la lecture, quelle qu’elle soit, quel que soit le support. Ce qui compte, ce sont les histoires, leurs auteurs et les lecteurs. Le Ray’s day a lieu le 22 août, jour de l’an­ni­ver­saire de Ray Brad­bury grand amou­reux des livres disparu en 2012 et qui a inspiré Neil Jomunsi pour créer cette jour­née spéciale :-)

N’écri­vant pas (j’ai bien essayé de m’y mettre l’an­née dernière, mais je n’ai jamais fini), que pouvais-je faire pour célé­brer ce jour si parti­cu­lier ? Qu’ai-je dans mes poches ? Un esprit libriste, des compé­tences en infor­ma­tiques… Diffi­cile. Puis j’ai repensé à ce que j’avais fait l’an­née dernière : outre un tirage au sort pour gagner un epub, j’avais fait un livre numé­rique du web-comic de mon cousin.

Bien, un epub, ça c’est dans mes cordes. Mais que mettre dedans ? Il faut que ce soit libre, que ce soit inté­res­sant, qu’il y en assez pour remplir un livre… Et j’ai pensé au Copy­right Madness de Lionel Maurel et Thomas Four­meux. Toutes les semaines, ils traquent les dérives de la « propriété intel­lec­tuelle » et nous rappellent que « Si la propriété, c’est le vol ; la propriété intel­lec­tuelle, c’est le LOL ! »

Un petit script en Perl par ci, un peu de Sigil par là, saupou­dré d’une pincée de feuille de style de Frama­book et d’huile de coude et voilà !

Je vous livre un recueil 2015–2016 du Copy­right Madness !

Merci à nos deux senti­nelles vigi­lantes de nous offrir cette revue hebdo­ma­daire en CC-0 et tout spécia­le­ment à Lionel Maurel d’avoir écrit la préface du recueil :-)

PS : le recueil ne court que de 2015 à 2016 car avant 2015, le Copy­right Madness se basait sur Storify et je ne suis pas sûr que ça n’en­freigne pas leurs termes de service (« Attempt to access or search the Storify Service or Service Content or down­load Service Content from the Storify Service through the use of any engine, soft­ware, tool, agent, device or mecha­nism (inclu­ding spiders, robots, craw­lers, data mining tools or the like) other than the soft­ware and/or search agents provi­ded by Storify or other gene­rally avai­lable third party web brow­sers; ») :-P

Parta­ger

by Luc at August 21, 2016 10:01 PM

August 16, 2016

Sebastien Badia

Prosopopee ♥

Après avoir longtemps cherché la solution répondant à mes besoins en terme de galerie photos, je crois que j'ai trouvé :)

Solutions testées

  • ZenPhoto, Plus en mode CMS, il y a une tonne de plugins, et d'intégration, nécessite une base de données.
  • Lychee, alternative séduisante (graphiquement), assez actif niveau dev. mais pareil il faut une base de données, et la visu est en mode galerie.
  • Lazygal, bon là c'est statique, mais… il faut avoir des dons en CSS si on veut que ça ressemble à qqch :)

Prosopopee

« More or less a small clone of exposure.co in form of a static generator. For those of you who don't know what exposure.co is, this allows you to tell a story with your pictures. »

  • prosopopee, C'est une galerie statique, mais qui permet de raconter une histoire, plus en mode fil, que simple galerie. J'adore!

J'ai d'ailleurs commencé à remplir mes pérégrinations…

Tips

Bon, une galerie photo, c'est cool, mais quid de la taille des photos et de l'aisance de visualisation (petite ligne ADSL…), la solution vient peut être avec le jpeg progressif !!

Avec un petit script rapide :)

#!/bin/sh
file=$1
set -ex
# On optimse :)
jpegtran -copy none -optimize "${file}" > "temp_${file}.jpg"
rm -f "${file}"
# Puis on passe l'encodage en "Progressive DCT, Huffman coding"
jpegtran -copy none -progressive "temp_${file}.jpg" > "${file}"
rm -f "temp_${file}.jpg"
# Et enfin on vire les metadata (exif)
mat "${file}"

Il reste donc plus qu'a écrire l'histoire :)

by Sebastien Badia at August 16, 2016 06:00 AM

August 13, 2016

Florent Peterschmitt

ActiveSync avec Z-Push, le mail

Z-Push est une implémentation en PHP du protocol ActiveSync de Microsoft. Il permet de synchroniser ses mails, calendriers et contacts. Pour l’instant je ne couvrirai que le mail, le calendrier viendra plus tard éventuellement.

Le guide d’installation est assez spartiate.

Comme d’hab, je fais mes install sur CentOS 7 et avec PHP-FPM.

PHP

Déjà, installez PHP 5.6. Ça ne fonctionnera pas du tout avec PHP 7, pour le moment en tout cas. J’ai testé, laissez tomber l’idée. À moins d’avoir du temps pour dev, mais si eux n’ont pas encore sorti une version “PHP 7 proof”, c’est que ça n’est sans doute pas si simple.

https://webtatic.com/packages/php56/

IMAP et SMTP

Avoir un serveur IMAP et SMTP disponible et déjà configuré.

Normalement ces deux bouzins là sont assez connus pour qu’Internet soit truffé de tutos…

Paquets

Les paquets ne sont pas signés malheureusement :/

/etc/yum.repos.d/z-push.repo

[z-push]
name=Z-Push noarch Enterprise Linux 7 - $basearch
baseurl=http://repo.z-hub.io/z-push:/final/RHEL_7
failovermethod=priority
enabled=1
gpgcheck=0
yum makecache
yum install z-push-common z-push-backend-imap z-push-ipc-sharedmemory

On pourra utiliser z-push-ipc-memcached à la place de sharedmemory.

Nginx et PHP-FPM

/etc/nginx/conf.d/peterschmitt.fr.conf

server {
    server_name peterschmitt.fr;

    location /Microsoft-Server-ActiveSync {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        include fastcgi_params_z-push;
        fastcgi_param SCRIPT_FILENAME /usr/share/z-push/index.php;
        fastcgi_param DOCUMENT_ROOT /usr/share/z-push/;
        fastcgi_pass unix:/srv/php-fpm/socks/z-push;
    }
}

La configuration automatique tente de joindre le domaine de l’adresse mail à configurer, sur la location détaillée ici.

J’ai récupéré cette information depuis la configuration Apache de Z-Push.

/etc/php-fpm.d/z-push.conf

[z-push]
access.log = access.log
listen = /srv/php-fpm/socks/z-push
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

user = z-push
group = z-push

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

slowlog = www-slow.log

chdir = /usr/share/z-push

catch_workers_output = yes

php_flag[display_errors] = on
php_admin_value[error_log] = php-error.log
php_admin_flag[log_errors] = on

php_value[session.save_handler] = files
php_value[session.save_path] = /session

Système

Les paquets sont configurés pour l’utilisateur apache, car il existe un paquet embarquant de la conf Apache. On adapte tout ça :

useradd z-push
chgrp z-push /etc/z-push/*
chown -R z-push:z-push /var/log/z-push/
chown -R z-push:z-push /var/lib/z-push/
systemctl restart php-fpm
systemctl restart nginx

Configuration

Faire in tour dans /etc/z-push/imap.conf.php et adapter les dossiers IMAP en fonction de ce qui est actif sur le serveur IMAP, puis passer la define IMAP_FOLDER_CONFIGURED à true.

Configurez-y aussi la connexion au serveur IMAP.

Pour SMTP, cherchez la variable $imap_smtp_params. Le fichier de configuration est très bien documenté, l’idéal étant une configuration du type :

<?php
$imap_smtp_params = array(
    'host' => 'ssl://smtp.peterschmitt.fr',
    'port' => 465,
    'auth' => true,
    'localhost' => 'smtp.peterschmitt.fr',
    'username' => 'imap_username',
    'password' => 'imap_password');

Test

Accéder à http://localhost/Microsoft-Server-ActiveSync et tester l’authentification.

Si déjà ça a fonctionné, vous pouvez passer à la suite, à savoir configurer un client mail voulant causer ActiveSync, comme un client mail mobile par exemple.

Enfin, testez l’envoi de mail en scrutant les logs de votre serveur mail.

by Florent Peterschmitt at August 13, 2016 07:33 PM

ActiveSync avec Z-Push, le mail

Z-Push est une implémentation en PHP du protocol ActiveSync de Microsoft. Il permet de synchroniser ses mails, calendriers et contacts. Pour l’instant je ne couvrirai que le mail, le calendrier viendra plus tard éventuellement.

Le guide d’installation est assez spartiate.

Comme d’hab, je fais mes install sur CentOS 7 et avec PHP-FPM.

PHP

Déjà, installez PHP 5.6. Ça ne fonctionnera pas du tout avec PHP 7, pour le moment en tout cas. J’ai testé, laissez tomber l’idée. À moins d’avoir du temps pour dev, mais si eux n’ont pas encore sorti une version “PHP 7 proof”, c’est que ça n’est sans doute pas si simple.

https://webtatic.com/packages/php56/

IMAP et SMTP

Avoir un serveur IMAP et SMTP disponible et déjà configuré.

Normalement ces deux bouzins là sont assez connus pour qu’Internet soit truffé de tutos…

Paquets

Les paquets ne sont pas signés malheureusement :/

/etc/yum.repos.d/z-push.repo

[z-push]
name=Z-Push noarch Enterprise Linux 7 - $basearch
baseurl=http://repo.z-hub.io/z-push:/final/RHEL_7
failovermethod=priority
enabled=1
gpgcheck=0
yum makecache
yum install z-push-common z-push-backend-imap z-push-ipc-sharedmemory

On pourra utiliser z-push-ipc-memcached à la place de sharedmemory.

Nginx et PHP-FPM

/etc/nginx/conf.d/peterschmitt.fr.conf

server {
    server_name peterschmitt.fr;

    location /Microsoft-Server-ActiveSync {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        include fastcgi_params_z-push;
        fastcgi_param SCRIPT_FILENAME /usr/share/z-push/index.php;
        fastcgi_param DOCUMENT_ROOT /usr/share/z-push/;
        fastcgi_pass unix:/srv/php-fpm/socks/z-push;
    }
}

La configuration automatique tente de joindre le domaine de l’adresse mail à configurer, sur la location détaillée ici.

J’ai récupéré cette information depuis la configuration Apache de Z-Push.

/etc/php-fpm.d/z-push.conf

[z-push]
access.log = access.log
listen = /srv/php-fpm/socks/z-push
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

user = z-push
group = z-push

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

slowlog = www-slow.log

chdir = /usr/share/z-push

catch_workers_output = yes

php_flag[display_errors] = on
php_admin_value[error_log] = php-error.log
php_admin_flag[log_errors] = on

php_value[session.save_handler] = files
php_value[session.save_path] = /session

Système

Les paquets sont configurés pour l’utilisateur apache, car il existe un paquet embarquant de la conf Apache. On adapte tout ça :

useradd z-push
chgrp z-push /etc/z-push/*
chown -R z-push:z-push /var/log/z-push/
chown -R z-push:z-push /var/lib/z-push/
systemctl restart php-fpm
systemctl restart nginx

Configuration

Faire in tour dans /etc/z-push/imap.conf.php et adapter les dossiers IMAP en fonction de ce qui est actif sur le serveur IMAP, puis passer la define IMAP_FOLDER_CONFIGURED à true.

Configurez-y aussi la connexion au serveur IMAP.

Pour SMTP, cherchez la variable $imap_smtp_params. Le fichier de configuration est très bien documenté, l’idéal étant une configuration du type :

<?php
$imap_smtp_params = array(
    'host' => 'ssl://smtp.peterschmitt.fr',
    'port' => 465,
    'auth' => true,
    'localhost' => 'smtp.peterschmitt.fr',
    'username' => 'imap_username',
    'password' => 'imap_password');

Test

Accéder à http://localhost/Microsoft-Server-ActiveSync et tester l’authentification.

Si déjà ça a fonctionné, vous pouvez passer à la suite, à savoir configurer un client mail voulant causer ActiveSync, comme un client mail mobile par exemple.

Enfin, testez l’envoi de mail en scrutant les logs de votre serveur mail.

by Florent Peterschmitt at August 13, 2016 07:33 PM