Contrer la vague de spam touchant IRC

Bon ça fait plus de deux semaines qu’un bande de péquenots s’amuse à spammer joyeusement à peu près tous les réseaux IRC existants (enfin s’ils sont suffisamment gros).

L’attaque

C’est un flood avec toujours les mêmes phrases (!) consistant à envoyer des URL vers des blogs. Là où c’est encore plus dégueulasse, c’est que ces blogs sont ceux des membres de l’équipe de Freenode qui est le plus gros réseau. Et ces blogs annoncent fièrement que la pédophilie c’est super chouette… Cela va sans dire que ces blogs ne sont pas les blogs du staff Freenode mais ont été monté pour l’occasion avec des articles antidatés.

L’attaque utilise donc une belle armada de bots, tout d’abord hébergés sur le Google Cloud, puis l’Amazon Cloud, puis juste dispersés à droite à gauche désormais. Les bots prennent des pseudos d’utilisateurs légitimes en ajoutant parfois quelques chiffres en fin et hop.

Maintenant l’attaque se poursuit également en discussion privées.

Chouette -____-

La défense

Par les serveurs

Pour bloquer tout ce spam côté serveur, le mieux est de mettre en place des spamfilters mais tous les ircd ne possèdent pas cette fonctionnalité (comme par exemple ceux qu’utilise Freenode). Cette technique permettra de virer les bots au moment où ils envoient les fameuses phrases qui du coup ne seront pas relayées aux utilisateurs. Il ne reste alors que les join/quit qui malheureusement ne peuvent pas être distinguées de ceux légitimes.

Par les @ d’un salon

Plusieurs possibilités avec chacunes leurs inconvénients.

  • Voicer tous les utilisateurs légitimes et passer le salon en +m : il faut voicer tous les nouveaux arrivants.
  • Restreindre le salon aux utilisateurs enregistrés avec +R : les utilisateurs doivent avoir enregistré leur pseudo auprès des services.
  • Restreindre le salon aux utilisateurs avec une connexion sécurisé (tls) +z : les utilisateurs doivent se connecter via TLS.
  • Mettre en place une liste de badwords (la façon de faire varie beaucoup) : il faut se tapper la liste à la main et que le serveur le gère.

Côté clients

Pas grand chose à faire.

Mais il y a quand même moyen de rendre le truc invisible si un spamfilter a été mis côté serveur. Le but va être de planquer tout ce merdier de join/quit

Une myriade infinie de Join/Quit sur le salon de La Brique Internet

C'est moche hein ?

Weechat possède un super truc appelés les smartfilters qui permettent de n’afficher les Join/Quit uniquement si la personne en question a parlé il y a quelques minutes (ce qui n’est pas le cas des bots). Les salons de discussions redeviennent agréables à utiliser.

/set irc.look.smart_filter on
/filter add irc_smart * irc_smart_filter *

Et hop. Vous pouvez l’activer/désactiver avec Alt =

Pour Irssi il existe un script perl apportant cette même fonctionnalité mais en 2018 plus personne n’utilise Irssi, non ?

Pour les autres clients IRC ? Voici une doc exhaustive qui vous sera utile.

17ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


L’équipe du Librem 5 a été pas mal occupée par le GUADEC avec de nombreuses avancées dans le dev. Voilà un petit récap de ce qu’il s’est passé ces dernières semaines.

GUADEC

Récemment, la majorité des membres de l’équipe étaient au GUADEC. Certains ont même donné des conférences. Même si certaines ne sont pas encore montées, en voilà certaines à regarder :

D’autres confs ont eu lieux concernant la sécurité et l’implémentation de l’interface de téléphonie avec GTK+. Nous vous fournirons les liens lorsque leurs montages seront terminées.

Design

Le Librem5 sera beau mais cela ne se fait pas sans effort. Dernièrement, notre équipe design s’est acharné sur la création d’un nouveau pack d’icônes pour GNOME 3.30 qui sera utilisé par le téléphone. Ils ont aussi créés de nouvelles maquettes pour les réglages propres à la téléphonie avec plus de réglages avancées en peaufinant également le shell.

Travail logiciel

Images

Les images prenaient trop de temps à être créées mais nous sommes parvenus à accélérer la procédure en faisant quelques ajustements. Cela simplifie le dev et les tests. Les images ne sont pas encore complètement basées sur PureOS (toujours sur Debian buster) mais ça arrivera bientôt. Si vous avez utilisé la machine virtuelle x86_64, vous serez heureux d’apprendre que les nouvelles images permettent de redimensionner la partition racine pour s’accommoder de plus d’espace (31Go). Il sera donc plus simple de dev puisqu’auparavant elles étaient limitées à 3.6Go. Il y a encore certains aspects à peaufiner mais c’est déjà fonctionnel.

Phosh

Phosh a connu de nombreuses améliorations sous le capot sous forme de corrections de bugs tels que de nombreux crashs potentiels et des initialisations manquantes. Le bouton de luminosité est également réparé pour se comporter normalement lorsqu’il bouge.

Le Wayland global handling a été [bougé dans un GObject séparé][https://source.puri.sm/Librem5/phosh/merge_requests/84). Le gestionnaire de verrouillage a été ajouté pour désencombrer (il récupère la tempo de timeout depuis GSettings maintenant) et tous les Layersurfaces ont été converties en PhoshLayerSurfaces.

Ce sont tous ces petits nettoyages de code qui permettront d’obtenir des contributions de la communauté car plus le code est bien organisé, plus est simple à comprendre et donc y contribuer.

L’intégrité de phosh est capitale puisque ce sera l’interface du téléphone donc un smoketest gitlab a été mise en place pour passer phosh dans Valgrind. Il y a également un début du support de l’internationalisation du coup des traductions espagnole et allemande ont été ajouté.

Quelques bugs ont également été éradiqués de phosh. Comme mentionné lors du dernier article d’avancements, des avancées ont été faites pour le support de redshift. Le code est inclus dans la branche principale ainsi qu’un correctif de bug concernant des Phosh/wlroots peuvent être démarrés par gnome-session et un bouton accueil (logiciel) a été créé en bas de l’écran.

Wlroots

Du côté de wlroots de nombreux changements ont eu lieux. Quelques patchs pour le supports de modes vidéos personnalisés a été inclus upstream. Puisque le Librem5 ne supportera pas X, nous devions virer les dépendances à xwayland. Désormais wlroots est compilé avec ET sans le support de xwayland. Un freeze de wlroots s’avère être causé par la déconnexion de la session ssh ayant lancé wlroots ce qui est est débattu upstream pour savoir comment gérer ce cas.

Clavier

Le clavier (virtboard) bénéficiera de l’important travail ayant lieu sur le protocole text-input. Le patch text-input-v3 a été mis à jour et envoyé upstream à Wayland pour revue. Une implémentation du protocole text-input pour GTK3 a été envoyé upstream et est en cours. Pour le support wlroots, une implémentation a été prototypé et sera bientôt envoyé pour revue.

Calls

Afin d’intégrer Calls dans gnome-settings-daemon et gnome-control-center, il nous est apparu évident lors des discussions au GUADEC que la meilleure façon de faire est d’utiliser ModemManager au lieu d’oFono. Bien que jusqu’à présent tous les essais a été fait pour l’implémentation d’oFono, c’est un changement inévitable. L’implémentation initiale du backend ModemManager pour Calls est complète et les tests ont commencés.

L’interface de Calls s’est grandement amélioré pour ressembler aux maquettes de l’équipe design. En dessous vous pouvez voir l’implémentation (gauche) et sa maquette (droite).

La maquette et l'application se ressemble comme deux gouttes d'eau

Libhandy

Quelques bugs ont aussi été corrigé dans libhandy ainsi que du travail pour préparer l’arrivée prochaine de GTK+4. Un des problèmes réglé est une fuite de mémoire. Également, un bug trouvé et corrigé dans HdyColumn où une mauvaise largeur était utilisée pour les calculs de la hauteur de colonne.

Si vous suivez la mailing-list librem-5-dev, vous avez probablement vu passer la sortie de libhandy v0.0.2.

Epiphany/GNOME Web

Personne n’aime les pubs donc Better le bloqueur de pub a été suggéré pour inclusion upstream pour être utilisé dans epiphany.

Messaging

Les technologies de messagerie vont être séparées en deux applis distinctes. Une dédiée aux conversations à deux personnes ou pour les petits groupes (Chatty) et l’autre pour les discussions publiques comme sur les salons IRC (Fractal).

L’application Chatty est développé par Purism, s’appuie sur libpurble et permettra des communications E2EE par messages XMPP via OMEMO dès la sortie (lorsque les Librem seront livrés en Janvier), ainsi que les SMS non chiffrés. Puisque nous nous sommes rendus compte qu’il nous fallait utiliser ModemManager en lieu et place d’Ofono, un handler D-BUS a été créé pour le backend ModemManager de l’application. Avec cette installation de ModemManager, envoyer et recevoir des SMS fonctionne.

Le client Fractal ne permettra pas forcément les communications E2EE dès la sortie mais nous travaillerons pour que cela arrive.

Sécurité

La sécurité est l’un de nos aspects favoris (vous l’avez peut-être remarqué) donc des recherches ont été commencés à propos de TrustZone, TPM et autres. Nous avons eu quelques discussions internes à propos d’un boot anti-sabotage, Heads et la sortie vidéos par les modes alternatifs de l’USB. Nous envisageons sérieusement l’implémentation de mesures de sécurité dans le Librem 5.

Kernel

Avoir un kernel fonctionnel pour l’i.MX8M n’est pas une mince affaire. Après de gros efforts, nous sommes parvenus à avoir l’ethernet fonctionnel. Afin de faire marcher le DRM et l’affichage, nous avons d’abord porté le support du PCIe. Le second port SD fonctionne mais pas SDIO (la carte SDIO étant alimenté par USB), il va falloir le support de l’USB en premier. Plus d’appareils i2c ont été activés. La carte nécessitera également un chargeur de batterie et donc nous testons actuellement le BQ25896 de TI, mais un driver d’alimentation électrique a été ajouté et soumis upstream.

Il reste un important chemin à parcourir avant d’avoir un kernel pleinement fonctionnel avec tous les drivers en ordre, particulièrement pour tout ce qui concerne l’affichage. S’il y a des experts en drivers graphiques prêt à filer un coup de main, merci de nous contacter sur le salon de discussion Matrix.

Travail matériel

Nous travaillons toujours d’arrache-pied avec le potentiel fabricant des cartes de dev pour évaluer les schémas développés par nos ingénieurs matériel et faire les changements suggerés. Cependant, certaines choses sont maintenant gravés dans le marbre et de nombreux composants ont déjà été commandés. Voici donc ce que vous trouverez à coup-sûr sur les cartes de devs :

Communauté

Il y a une nouvelle FAQ sur le site de documentation basés sur les questions reçues sur le salon de discussion matrix community/librem-5. Nous n’y mettrons pas TOUTES les questions car cela nécessiterait trop de temps mais certainement les plus fréquentes.

Un grand merci à toutes les équipes externes qui ont évalués et inclus les patchs dans les différents projets upstreams. Le temps et les contributions de tout le monde sont fortement appréciées.

C’est tout pour le moment les amis. Restez branchés pour plus de mises à jour à venir !


Original par Heather Ellsworth

Bon on sent que cet article a été rédigé en parallèle du précédent car il y a un peu de redites. D’un point de vue logiciel ça progresse vraiment bien dans tous les projets connexes. C’est agréable de voir plusieurs communautés collaborer (plus ou moins indirectement) vers un but commun : les joies du libre.

D’un point de vue matos ils ont l’air d’avoir la majeure partie des composants arrêté, ce qui est bon signe.

Ils semblent toujours confiant pour Janvier 2019.

Ils commencent à aborder les aspects de sécurité et ça semble plutôt encourageant. On peut s’attendre à avoir un truc qui les différencie des habituels Android/IOS. Ça pourrait être un argument de vente pour certaines personnes pas spécialement touchées par le Libre mais plus pour la sécurité.

Polissage du thême Hugo : NeoDark

Salut les lecteurs ça va ?

Et bhé ! Vous êtes pas très causant.

Bon je vais pas me fâcher même si c’est un peu vexant de pas avoir de réponse.

J’ai encore un peu retravaillé NeoDark (ouai le nom est bidon) mon thème Hugo. Le but est d’enfin le partager proprement avec vous pour que vous puissiez le réutiliser.

Avant de vous le partager, bha il fallait virer les saloperies que j’avais fait.

Par exemple au lieu d’avoir un template spécifique pour les posts, un autre pour les fast-posts et un troisième pour les shares, j’ai tout viré et fait un seul template générique où juste une class css est modifiée. Du coup maintenant tout a la même gueule, juste des ptites modifs de couleurs mais c’est plus rationnel. Donc non seulement le design final est plus unifié mais en plus c’est vachement plus rapide pour Hugo. Je suis passé de 800ms à 330ms pour créer tout le site.

Le thême du site a d’ailleurs été déjà retaillé par Franck Paul qui l’a adapté pour DotClear.

Bon et zavez-vu ? Il y a des ptites icônes SVG à gauche maintenant. Ça enlève un peu de texte et ajoute un peu de couleur…

Et donc voilà un targz du thème Hugo.

J’espère que ça vous plaît !

Dans la catégorie ça sert à rien mais ça m’amuse : j’ai mis un lien vers la version dans une autre langue directement à côté de chacun des “Lire en entier …”. J’ai à peu près 0 lecteur pour les articles en franglais mais bon… Avant c’était juste accessible depuis la sidebar mais du coup pour l’accessibilité c’était vraiment pourri. D’ailleurs si vous vous y connaissez en accessibilité et que vous trouvez des trucs vraiment nul à chier sur mon site n’hésitez pas à m’en parler, je me ferai une joie de trouver une piste d’amélioration.

Bon dans la catégorie spoilers : l’arrivée d’une nouvelle catégorie bientôt.

Voilà tout.

Le Geekcode

Allez, je déballe encore une vieillerie !

Il fût un temps, où pour briller en société (keuf keuf), il fallait sortir sa carte de visite. Comme chacun sait, le geek a bien du mal à sortir de sa tanière physique tout entravé dans sa barbe qu’il est, du coup il lui fallait une carte de visite pour le monde numérique.

C’est d’ailleurs presque un CV plus qu’une carte de visite : le Geekcode.

Nani ?!

Il y a vingt ans, être un geek n’était pas à la mode et ne signifiait pas être capable de débourser 1000€ dans le dernier smartphone à la mode et sortir trois termes techniques. Le mot “geek” lui même, n’était pas connu du grand public et c’était d’ailleurs proche de l’insulte. Quoi qu’il en soit, déjà à l’époque une distinction existait entre les différents types de geeks.

Parcequ’au delà de l’informatique, en vrai, un geek est juste une personne passionnée++ mais du coup de nombreux domaines existent et donc toute une pléthore de geeks différents !

illustration de 56 sortes de geeks différents par Scott Johnson

Vous retrouvez-vous plus de deux fois là-dedans ?

Partant de ce constat, un certain Robert A. Hayden a entrepris la tâche de classer ces drôles de bêtes et de fournir un moyen d’afficher quel type de geek on est. Pour cela un grand questionnaire à choix multiples qui attribuent des lettres avec des symboles associés. On fout tout ça à la suite et pouf vous obtenez votre Geekcode !

Ok c’est où ?

Bon malheureusement la dernière version officielle 3.12 est pas mal obsolète car datée de 1996 mais l’idée est bonne. Un français a entrepris de proposer une bonne update en 3.20 en 2010. Mais bon la référence officielle est tout de même la 3.12.

Voilà le mien refait pour l’occase.

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GIT d? s--: a C+++ UL++++ P L+++ E--- W+++
N+() ?o ?K w-- ?O !M ?V !PS !PE Y++ PGP(+)
t@ ?5 ?X ?R !tv b- DI D++ G e++ h r+++ z?
------END GEEK CODE BLOCK------

Quelqu’un de motivé pour en faire une version 2018 ?

16ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Nous avons passé les dernières semaines concentrés sur le design des applications de communication par défaut du Librem 5. Nous sommes donc parvenu à établir des spécifications pour deux applications. L’une d’elle se nomme Calls et sert à - vous l’avez deviné - recevoir et émettre des appels téléphoniques. La seconde est Messages quant à elle permet comme son nom l’indique d’envoyer et recevoir des messages.

Tobias, notre lead designer, a particulièrement bien bossé en communiquant et collaborant avec l’équipe design de GNOME ce qui nous a permit de faire de grands progrès conjointement avec le projet upstream GNOME. Quand Tobias nous a rejoint, nous avons eu une conversation avec Allan Day et Jakub Steiner (de l’équipe design de GNOME) où nous leur avons présenté le projet, nos buts et discutés à propos de la structuration de nos contributions à GNOME. Par exemple, nous avons un dépot de design applicatif sur le serveur Gitlab upstream de GNOME où nos designs et prototypes sont rendus disponibles à tous. Au final, notre projet et sa vision semble bien reçu par la communauté GNOME.

L’application Calls

L’application étant nouvelle, nous sommes donc partit de zéro. Nous l’avons fait alors que Bob progressait dans l’implémentation des fonctions basiques d’appels.

Les différents écrans visibles lors d'un appel

Calls est supposé permettre à l’utiliateur d’utiliser les fonctions de base d’un téléphone classique mais n’est pas limité à cela. Elle est architecturé de façon telle qu’elle promet un haut niveau de sécurité et d’intimité (privacy) via du chiffrement de bout-en-bout de façon transparente. Les appels privés, entre deux appareils supportant cette fonction seront établis juste en sélectionnant un contact et en appuyant sur le bouton d’appel.

Le numéroteur ainsi que les contacts de l'application Calls

Le design complet de l’application peut être admiré dans notre propre dépot.

L’application Messages

Photo des devs lors du hackfest fractal

Au début de l’été, certains de nos employés (Dorota, Adrien, Tobias et moi-même) avons participé au Fractal hackfest à Strasbourg. Le but était d’analyser et discuter des possibilité d’utiliser Fractal comme appli par défaut pour la messagerie dans PureOS et le Librem5. C’est motivé par notre souhait d’être en phase avec les choix upstreams mais aussi par le fait que Tobias, en plus d’être designer des applis du Librem 5 est également le designer de Fractal. Nous avons également profité de l’opportunité pour rencontrer Matthew de Matrix qui nous apporta des clarifications techniques bienvenues à propos de Matrix.

Il était clair lors de ce meeting que les plans pour Fractal soient en accord avec les principes du Design éthique que le Librem 5 et PureOS suivent. Une application suivant ces recommandations doit être simple et dédiée à une seule tâche.

On pourrait penser que l’état actuel de Fractal sied déjà au but premier de Messages (envoyer et recevoir des messages), mais elle est trop générique en terme de but. Discuter en privé avec un ami est différent d’une discussion dans un salon public IRC bondé. Bien que la technologie employée dans le fond soit la même, l’interface utilisateur doit répondre à des objectifs différents. Ce fût discuté lors du hackfest Fractal (Tobias a eu recours à l’analogie du “barbecue” et du “banquet” pour exposer le soucis), où les devs de Fractal décidèrent de scinder l’application en deux : une application pour les discussions en aparté ou petit groupe (le barbecue) tandis que la seconde sera dédiée aux discussions publiques (le banquet). Il faudra cependant un peu de temps pour découper l’application existante.

L’application simplifiée Messages que nous avons développée est basée sur le cas du “barbecue”; ce qui s’avère être l’utilisation majoritaire. Le but de Messages est d’être capable de gérer des SMS mais aussi des messages chiffrés de bout-en-bout de façon transparente entre deux appareils compatibles.

Exemple de conversation dans Messages

Le design global de Messages peut être reluqué dans son propre dépot.


Original par François Téchené

Un retour sur leur collaboration avec l’équipe Matrix. Les screenshots sont plutôt encourageant surtout pour ceux appréciant le look de GNOME. Ça commence franchement à avoir une gueule d’OS de smartphone.

Un truc qui serait pas mal c’est une compatibilité avec l’application Silence pour Android qui permet d’envoyer des SMS de façon chiffré même pour des personnes pas spécialement douées en informatique.

TDC

Et alors qu’une vague de spam sévit actuellement sur les IRC (oui oui en 2018 ça se fait encore…), je me sens obligé de vous présenter l’un des meilleurs sites old-school encore sur le ouaib.

tROu dU cuLz hiDeOuT

L’une des meilleures ressources du ouaib encore dispo pour devenir un 1337. Ne vous laissez pas berner par l’esthétique pleine de charme et d’un esthétisme certain, le contenu prévaut sur la forme ici.

Vous y apprendrez pleins de trucs indispensables :

  • Comment devenir un rebelz en utilisant Linux (et en méprisant wiNfUcK’98) ?
  • Comment bafouer la nétiquette sur Usenet ?
  • La joie de snober le bas peuple sur les IRC.
  • L’intérêt de monter sa homepage de daube.
  • Pleins d’autres trucs uber classe.

Bref tout un art de vivre à adopter pour débuter sur le web en cette fin des années 90.

Outre l’aspect limite vulgaire de ces pages humoristiques, j’aime beaucoup l’aspect historique. Ça rappelle pas mal de souvenirs. Haaa, le bon vieux temps du net avant que ce ne soit monopolisé par tout l’aspect business d’aujourd’hui.

Cette page circulait assez régulièrement à l’époque. Bon par contre pour les gens sur téléphones mobiles, le site n’est pas très très responsive mais bon les smartphones n’existaient pas à l’époque…

Voilà le TDC Hideout, vous en reviendrez grandi (ou pas) !

J’aime toujours retrouver des bouts du web d’antan où chacun osait se lancer avec un design dégueu trois bouts de balises html, une bonne louche de gif mais qui au final produisait un contenu original. À l’ère des réseaux sociaux à la brièveté absolu et où l’on favorise principalement le retweet, le reposts, ça fait du bien de revoir l’époque où créer était plus important.

Configuration Weechat 2018

Weechat 2.2 vient de sortir et c’est l’occasion de lui faire un ptit article. Ça fait maintenant très longtemps que je l’utilise comme client IRC. Je l’ai pas mal trifouillé de droite et de gauche depuis le temps du coup je voulais poser un peu toutes ces personnalisations quelque part pour les retrouver au cas où et pour vous les partager.

Les scripts

Du haut de ses 15 ans, Weechat a sû se créer un petit écosystème complet de plugins/scripts (et bientôt des thêmes !).

J’ai toujours préferré éviter de trop en cumuler. Du coup j’en utilise assez peu :

  • colorize_nicks.py : Permet de colorer les pseudos lorsqu’ils sont cités dans une phrase. Très pratique pour repérer quand ça parle de gens présent sur le salon.
  • autoconnect.py : Permet de se reconnecter automatiquement aux précédents serveurs et salon ouverts lors d’un redémarrage.
  • chanmon.pl : permet d’avoir un buffer aggrégeant tous les salons. Pratique pour voir d’un coup d’œil ce qu’il se raconte partout.
  • colorize_lines.pl : Permet de colorer les lignes de texte de la même couleur que le pseudo. Excellent pour améliorer la lisibilité.

Et voilà, j’ai réussi à ne pas être trop gourmand.

Autoconnect me sert peu car weechat tourne 247 sur un serveur mais au cas où, on sait jamais.

Les deux plugins de colorations sont purement esthétiques mais pourtant je pourrai pas m’en passer. Ça simplifie grandement la lecture des conversations, surtout si on augmente le nombre de couleurs utilisées par weechat.

Chanmon est lui dispensable mais étant sur de très nombreux salons, j’ai très souvent la hotbar assez bien remplie avec de l’activité dans pleins de chans à la fois. Ça me permet de ne pas aller dans un buffer où il y a de l’activité pour rien.

Layout

capture d'écran de l'interface de Weechat

Par défaut c'est… meh

On va élaguer tout ça je vous préviens !

Bon alors la barre à gauche qui liste les buffers on peut virer : ça sert à rien. /bar del buflist

La barre de droit avec la liste de pseudo, même combat : ça dégage. /bar del nicklist Les rares fois où vous aurez besoin de voir la nicklist vous ferez un ptit /names et hop.

Vous voyez la barre avec le titre en haut ? Vous voyez où je veux en venir : /bar del title

Bon bha déjà c’est pas trop mal.

Bon cette barre bleue en bas c’est pas mal mais qu’est-ce que ça bouffe comme place ! It would be a shame if… /bar del status

Ha merde il y avait des trucs pas mal dedans quand même ! Bon faisons une barre mieux foutue du coup ! /bar add ubar root bottom 1 0 buffer_number+:+buffer_name,hotlist,input_text,time,[completion]

Et voilà notre übar, plus qu’à virer celle par défaut : /bar del input

Voilà, on a gratté à peu près tout l’espace disponible, on a fusionné la status_bar avec l’input_bar et viré toutes les autres. C’est bien minimaliste tout en étant parfaitement fonctionnel.

Bon maintenant, il ne reste plus qu’à faire en sorte de voir le chanmon en haut. On va donc découper la fenêtre horizontalement avec un ptit /window splith 10 et on a donc 10% de l’espace vertical qui est dispo pour un autre buffer. Pour passer à la fenêtre du haut on fait un ptit /window up on peut y changer de buffer (typiquement on se fout sur celui de chanmon) et on retourne à celui du bas et voilà.

Bon on a fait le plus gros du boulot je crois. Il va rester à fignoler quelques ptits réglages pour rendre le truc encore un peu plus séyant.

Ptites optimisations

On va virer tous les scripts inutiles (ou juste ne pas en installer). /script Et là on coupe avec /script remove xxx.yy .

Et surtout on va aussi virer tous les plugins inutiles. /plugin et maintenant /plugin unload xxx et surtout set weechat.plugin.autoload “*,!buflist,!exec,!fset” pour que ça persiste à un redémarrage de la bête.

En virant tout le superflux j’arrive à faire tourner mon instance weechat dans un container de 64Mo de ram avec pourtant près de 200 buffers ouverts simultannément tout en ayant le relay. Et le tout avec un uptime de plusieurs mois. Bref ça tourne comme sur des disquettes.

Mais mais ! À quoi ça ressemble maintenant qu’on a tout trifouillé ?!

Capture de Weechat une fois toutes les modifs effectuées

Beau comme un rognon !

Vrac moins intéressant

  • irc.network.send_unknown_commands on # Pour envoyer les commandes d’admin du serveur
  • plugins.var.perl.chanmon.alignment channel # Histoire que ce soit joli à voir et pas le dawa
  • plugins.var.perl.colorize_lines.highlight off # Pour ne pas qu’un HL colore toute la ligne (c’est moche et trop agressif)
  • weechat.color.chat_time orange # Un peu de orange pour l’heure
  • weechat.completion.nick_completer “” # Ouai j’aime pas quand ça rajoute “:” quand on tab un pseudo
  • weechat.look.prefix_align_max 10 # Pas plus de 10 lettres pour les pseudos… largement suffisant
  • weechat.look.prefix_same_nick “” # J’aime bien le fait de pas avoir le même pseudo affiché en boucle lors de ligne successive
  • weechat.look.prefix_suffix “│” # Pour avoir des jolies barres complètes
  • weechat.color.chat_nick_colors “028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,058,059,060,061,062,063,064,065,066,067,068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229” C’est long mais ça rajoute tout pleins de nouvelles couleurs utilisables.

Ralentir le flux

Tiens un petit fast-post rapide sur le feu.

En ce moment je cherche à ralentir un peu le rythme de mon TTRSS. Il se connectait toutes les heures sur chacun des flux RSS pour voir s’il n’y avait pas une nouveauté.

Au final ça représente un sacré bastringue réseau pour rien les trois quarts du temps. J’ai donc diminué la fréquence d’actualisation de quasiment tous les flux à une fois toutes les 24h.

Les sites publiant plusieurs fois par jour je l’ai monté à 2h et certains 12h. J’ai donc pas mal diminué la cadence en espérant alléger légèrement mon empreinte réseau/ressource à la fois de ma machine mais aussi de chacun des sites que je poll constamment. C’est probablement anecdotique mais comme d’hab, les molards font les grandes rivières.

Il est d’ailleurs dommage qu’un flux RSS ne puisse pas spécifier une cadence de rafraichissement (qu’il soit biensûr possible d’outre-passer) pour que lors de la souscription se soit suggéré à l’aggrégateur.

En plus d’alléger les machines et le réseau, mes flux arrivent désormais un peu plus par vague, plutôt qu’au compte-goutte toute la journée. Ça permet d’un peu moins se disperser. Et d’y consacrer un peu moins de temps au final.

Bref ça peut vous tenter d’essayer d’expérimenter ça.

L'Histoire d'Iloth

J’en ai jamais vraiment parlé sur mon blog et pourtant Iloth représente une page de ma vie.

Iloth est une association membre de la FFDN. J’en ai été membre quelques années pas au tout début mais pas trop loin, jusqu’à très récemment où j’ai eu besoin de passer à autre chose.

Du coup je vais vous raconter un peu la vie d’Iloth, certains de ses moments forts et tout et tout. Ça sera bien entendu mon point de vue sur l’asso et non quelque chose de purement objectif. Par contre pas de bol j’ai un mal de chien avec les dates donc ça sera pas super précis.

2010 : Création

En l’an de grâce 2010 née la FFDN, Fédération FDN qui cherche à essaimer. Pourquoi ? Parce que l’asso FDN devenait trop grosse et du coup gagnait en poids mais malheureusement perdait le côté local/associatif où tu connais tout le monde toussa.

Du coup de nombreuses petites assos locales se sont créées et regroupées dans une fédération afin de garder un certain poids tout en recréant un côté local qui est bénéfique pour l’humain.

Iloth a été dans la première vague de la FFDN à l’initiative de 3 geeks Montpellierains et voilà que le 31 Août 2010 l’asso existe officiellement avec la publication au Journal Officiel et intègre donc la FFDN. Internet Libre et Ouvert à Tous dans l’Hérault

À cette époque les 3 valeureux gugusses se sont tapés toute la paperasse administrative, ont ouvert un compte en banque, se sont déclarés officiellement comme étant un vrai FAI auprès de l’ARCEP. Ils ont fait la partie vraiment chiante.

Peu de temps après (je sais pas quand exactement), l’asso sympathise avec une boîte locale qui héberge et fournit des services et notamment des connexions Internet neutres à des entreprises du coin. Des liens sont tissés et c’est ainsi qu’une relation solide s’est créée et permettra à l’asso de vivre et surtout d’avoir une présence sur Internet. Une convention est signée et permet à l’asso d’héberger son propre serveur dans un datacenter montpellierain avec un peu de bande passante. Bref l’asso peut commencer à officier en tant que FAI.

Et là ça va commencer à patauger, comme souvent dans le milieu associatif, chacun investit le temps qu’il peut quand il peut… L’asso commence donc déjà à battre de l’aile. Elle n’a pas de vitrine, ne se réunit pas, n’existe pas vraiment. Il n’est pas vraiment possible d’adhérer car aucun moyen de les contacter.

2012 : La seconde vague

On est désormais aux alentours de fin 2011 début 2012 si je me rappelle bien. C’est à ce moment là que j’ai voulu rejoindre l’asso. Sauf que pas de bol, le site était sacrément vide («Coming Soon»), le salon IRC était en calme plat pendant des semaines complètes malgré plusieurs tentatives d’attirer l’attention.

J’ai réussi à faire venir une deuxième personne sur le salon IRC qui était également intéressée et même une troisième que je ne connaissais que d’IRC. Bref nous étions désormais au moins trois à vouloir intégrer les membres de l’asso et vla-ti-pas qu’un quatrième larron sorti de nulle part est également intéressé et se met à traîner également sur le salon #iloth .

Et un jour, Ô miracle ! Un des pères fondateurs voit ça et commence à parler sur IRC.

On s’organise une rencontre dans un café du centre de Montpellier pour discuter de vives voix. Bon comme on s’en doutait, la démotivation était totale. En gros il s’est dit «Bon bha si vous voulez je vous donne l’asso, j’ai plus le temps ni l’envie, on a déjà tout un tas de trucs en place, yapuka. Si vous êtes motivés, organisez une Assemblée Générale pour trouver un président, un tréso et un secrétaire et roulez jeunesse».

Bon une fois la rencontre finie… on a quand même été un poil étonné. Mais au final on était partant tous les quatre et une AG a été faites courant Mars 2012 où l’on s’est entre-élus. Bon pas de bol j’étais pas dispo le jour de l’AG du coup je n’ai pas pu y participer.

Voilà la seconde vague d’Iloth était lancée. Nous étions donc 4 nouveaux membres et il ne restait plus qu’un membre actif de l’équipe d’origine.

2013 : La belle époque

C’était donc une période faste. Nous étions 4 supers motivés pour monter un FAI. La partie ultra-chiante avait été bien gêrée par l’ancienne équipe et nous allions remotiver le dernier membre restant de la première vague.

  • Nous voulions un logo
  • Nous voulions monter un service de VPN fournissant du vrai Internet neutre.
  • Nous voulions proposer de l’ADSL en marque blanche depuis FDN.
  • Nous voulions monter des services.
  • Nous voulions un joli site ouaib pour communiquer.
  • Nous voulions organiser des conférences.
  • Nous voulions faire du réseau comme des grands.

Bref on était chaud.

On avait une machine fonctionnelle, pas mal de temps libres. On a également tissé des liens avec d’autres assos locales tel que Montpellibre (de loin) et un peu plus intimes avec Le BIB notre cher Hackerspace Montpellierain. Nous nous y réunionnons une fois par mois dans leur garage pour faire une réu-apéro qui généralement se termine dans un restau.

Un des prototype de logo non retenu

L'une des propositions non retenues de logo

Le côté social de l’asso commence à décoller. Avec le temps le noyau dur de l’asso se connait désormais pas mal et nous sommes devenus une bande de potes.

On organise notre première foire associative L’antigone des assos 2012 où l’on tente maladroitement d’attirer le chaland sans avoir rien à présenter. «Quoi ? Un fournisseur d’accès Internet comme Free ? Et du coup c’est gratuit vu que c’est associatif ? Ha mais vous faites pas d’ADSL ?»

Recruter de nouveaux membres va être compliqué, nous ne sommes clairement pas de bons communicants mais c’est pas grave on va progresser. Ça nous permet en plus d’établir une roadmap : monter des services pour montrer du concret, travailler la comm pour rendre le bousin un peu plus compréhensible. On va avoir une année bien remplie.

On a donc fait un site web statique sous Bootstrap histoire d’avoir une vitrine un peu jolie et on y a mis un tout petit peu de contenu.

On commence à discuter d’un projet de créer un IX sur Montpellier afin de relier tous les opérateurs présents localement afin d’améliorer le maillage Internet. Actuellement si deux opérateurs se trouvent physiquement à Montpellier, il y a de très grande chance qu’ils n’y soient pas interconnectés et qu’il faille remonter jusqu’à Paris. Le but est donc de créer un point d’échange local, neutre et gérer par une asso à but non lucratif : le Sudix. Pour l’instant c’est à l’état de discussion de restau.

On s’est empressé de prendre un numéro d’AS ainsi qu’un premier bloc /24 d’adresses IP bien à nous.

On possède des IP, à nous. Je répète des IP qui sont rien qu’à nous ! Wow ça en jette. Nous sommes enfin un vrai opérateur de réseau Internet. Quelque bidouilles BGP plus tard et paf nos IP sont accessibles du grand Ternet !

Mi avril 2013, on ouvre officiellement le service de VPN avec nos ptites IP à nous le tout sur notre serveur hébergé physiquement à Montpellier. La conf OpenVPN est assez simple et pleinement fonctionnelle. Et on peut enfin commencer à utiliser notre bande passante de 10Mbps burstable à 100.

Bon on se monte un serveur mail et on y accroche une mailing-list. Nous avons alors à cette époque du DNS, du mail, du web, du VPN de fonctionnel. On peut maintenant communiquer à peu près officiellement. Et notre infra est à peu près complète.

Et voilà qu’arrive notre seconde foire associative, nous sommes donc Septembre 2013. On va se reconfronter au grand public avec notre petit stand de geeks avec ce coup-ci un truc à annoncer : Iloth participera aux RMLL2014 en fournissant le réseau lors de l’évènement qui se déroulera en Juillet de l’année suivante. On a d’ailleurs réussi à faire venir quelques nouveaux membres dans l’asso à ce moment là. On atteint la dizaine de membres dont environ 7 ou 8 actifs. Je me retrouve non-officiellement propulsé trésorier de l’asso et je commence à faire mumuse avec Dolibarr (beurk) et la banque (beurk beurk).

Le début des emmerdes. Le poste de trésorier est clairement le plus chiant de l’asso. C’est le seul où il y a constamment de la paperasse. Générer des factures et tout. Communiquer avec la banque est d’un compliqué avec leurs horaires d’ouvertures qui ne conviennent pas vraiment avec la vie active et le fait qu’ils demandent constamment des papiers avec des confirmations toussa. Bref ce sont des emmerdeurs de première qui nous font suer encore maintenant.

Fin Octobre, on ouvre notre première ligne ADSL pour notre cobaye belge. C’est de la marque blanche de chez FDN. En gros Iloth ne fait pas grand chose à part facturer l’abonné et recevoir une facture de la part de FDN. Mais on a un service existant pour le grand public !

Le mois suivant on sera également aux JM2L pour nous chauffer pour les RMLL approchant. Nous y serons à trois membres dans une bonne ambiance décontractée le temps d’un samedi.

2014 : année ReuMeuLeuLeu

L’AG de Janvier instaure officiellement un rythme mensuel de réunion chaque premier lundi du mois.

Le site passe sur un Wordpress auto-hébergé en conservant son design fait main convertit pour l’occasion en thême Wordpress. Le but de l’opération est de permettre à plus de membres de le manipuler en lieu et place du site statique précédent.

Le rythme de croisière va s’intensifier pour l’organisation des RMLL. Le but est de fournir du réseau neutre à haut débit lors de l’évènement, à la fois sur le campus universitaire mais également lors du “village grand public” organisé sur l’esplanade Charles de Gaulle. Pour ceux qui ne connaissent pas Montpellier, cet esplanade est en plein centre ville, une grande allée bordée de platanes. Le défi va être de parvenir à y faire arriver du réseau. De nombreuses réunions vont avoir lieu auprès de la FRUL (l’association regroupant d’autres assos locales pour l’orga des RMLL).

On a également organisé une petite conf à propos de la neutralité du net organisé dans les locaux du Bib le 16 Mai. C’était un peu à l’arrache mais au final ça s’est bien passé, même si c’était ma première fois.

À côté de cela, dans le monde des cinémas alternatifs se montent un projet de distribution dématérialisé des films : DCP Bay. Iloth participera en fournissant deux connexions ADSL au cinéma Utopia qui est dorénavant membre de l’asso. Nous les avons aidé en câblant un peu leur bâtiment et en mettant en place logiciellement le client torrent et compagnie. Le cinéma peut maintenant recevoir certains de ces films sans passer par des disques durs externes envoyés par transporteur. Un projet bien sympas auquel je suis fier d’avoir participé et j’ai d’ailleurs un magnifique sticker rond en forme de tranche de citron !

Juillet arrive et nous voilà donc en train de grimper dans les arbres de l’esplanade avec une grande échelle et un touret de fibre optique au milieu des passants.

Les premiers petits arbres de l'esplanade

Les premiers petits arbres de l'esplanade

Les premiers petits arbres de l'esplanade

Les premiers petits arbres de l'esplanade

On tire près de 1250m de fibre dans les arbres en espérant qu’elle survivra une semaine. C’est en partie réussie (une seule fibre pétée paralysant qu’un tiers des stands, on comblera avec un peu de wifi). Malgré quelques soucis de MTU et compagnie le réseau fonctionnera sur le campus. J’en aurai beaucoup chié à cause du manque de sommeil au point de ne plus trop parvenir à réfléchir le jour J. L’évènement est un succès et permet à l’asso de beaucoup se voir et être active, l’ambiance est au beau fixe, les voyages pizza et les restaus pour adultes soudent un peu plus l’équipe.

Moment d'euphorie lors des RMLL2014

L'euphorie lors des RMLL2014

En Août un membre offre un Edge Router Pro à l’asso qui permettra de délester notre unique serveur de la partie réseau. Nous possédons donc un routeur, un switch et un serveur. Un FAI dans moins de 300W.

Pour finir l’été le rendez-vous annuel de l’Antigone des assos. Probablement une des meilleure année, avec à peu près toute l’équipe Iloth présente toute la journée pour faire découvrir l’asso à tout le monde.

Stand 2014 pour l'antigone des assos

Stand 2014 pour l'antigone des assos

On a réussi à gagner encore quelques membres.

Et les trois derniers mois seront plutôt calmes.

2015

On commencera l’année en Mars avec une projection du film Citizen Four au cinéma Utopia lors d’une soirée débat co-organisé par Montpellier Journal et Montpel’libre.

L’AG a lieu comme d’hab courant Mars dans les nouveaux locaux du Bib et je suis désormais Président ! Après avoir tenu tant bien que mal la tréso deux ans et demi à base de fichier texte pour savoir qui doit payer un abo vpn, qui doit payer un abo adsl, faire le lien entre un pseudo et un vrai nom/prénom, savoir que tel numéro de ligne = telle personne…, je suis désormais président. Plus à moi de gérer Dolibarr \o/

On remarque déjà qu’une fois les RMLL passées, le rythme de l’asso diminue drastiquement et que la motivation connait une baisse drastique. Cependant, l’asso lance des idées de projets qui ne seront jamais menés à bien… Il a également été décidé d’organiser deux permanences par mois afin de pouvoir organiser des ateliers/débats mais celles-ci n’auront lieux que trois fois faute de participants (internes et externes). C’est dommage on aura réussi à y recruter un membre très actifs par la suite.

Nous menons une campagne de contacts des députés pour les pousser à ne pas voter pour l’instauration des boîtes noires dans les réseaux opérateurs. Nous les avons contactés par courrier postal et n’aurons malheureusement qu’un seul retour (négatif) des neufs députés contactés. Bref j’en repartirai pas mal refroidi de cette expérience politique.

On tente de recruter de potentiels membres en zone blanche pour fournir de la connectivité wifi. Trois ans plus tard force est de constater que … bha non, ça ne se fera jamais.

L’activité globale de l’asso décline continuellement depuis le passage des RMLL. Le nombre de membres réellement actifs commence même à diminuer. Je me lance dans le projet des briques internet en espérant que ça ramène du sang neuf et que ça remotive les membres actuels.

Je parvient à écouler une première fournée de 10 briques que j’aurai déballé, monté, installé, configuré, vendu moi même. C’est globalement assez chiant. Pour au final tomber en panne quelques jours après ou alors n’être jamais mis en service. Assurer le SAV est une galère ultra chronophage.

Rien de mieux pour démotiver quelqu’un.

Bref les restaus mensuels s’enchaînent toujours, mais je suis encore seul à devoir les organiser. Si je ne le fais pas… ça se fait juste pas. Mais quand on y est ça se passe toujours bien, juste une bande de potes contents de se retrouver chaque mois pour discuter de tout et de rien autour d’un peu de bouffe. Socialement le but de l’asso est complètement rempli et depuis qu’on fait moins de technique (vue que c’est déjà en place) bha l’asso se casse carrément la gueule.

Tiens, en passant, en Décembre on connait notre première petite panne de quelques heures. Comme quoi on a beau être une ptite asso et tout, le service rendu est tout de même assez fiable.

2016

Cette année l’AG courant mars aura lieu dans les nouveaux locaux du Bib (oui encore des nouveaux :-) ). L’équipe continue de s’étioler avec de moins en moins de membres actifs et de participants.

Les restaus mensuels continuent de se dérouler toujours dans la bonne humeur mais on y croise de moins en moins souvent de nouvelles têtes et on y parle de moins en moins de l’asso et même au fur et à mesure, même les habitués ne sont plus 100% dispos.

Notre installation dans le datacenter de Cogent à Montpellier

Notre infra au datacenter Cogent, imaginez à peu près la même chose dans celui de Zayo

Je présente deux confs, une dans un fablab de Montpellier pour y présenter la neutralité du net et aborder vite fait la brique Internet et une seconde dans un Lycée à Mendes sur les mêmes sujets. Je suis à peu près le seul membre actif désormais. La motivation est désormais au plus bas.

Montpel’Libre (un GUL de Montpellier) promeut de plus en plus l’initiative de dé-googlisation de Framasoft. Un début de collaboration un peu plus poussé émerge alors avec Montpel’Libre mais également le Bib pour monter un CHATONS local. En s’appuyant sur les trois associations nous toucherions un large public pas forcément initié, avec des lieux de rencontre et une infrastructure réseau déjà existante. Qu’est-ce qui pourrait déconner ?

Il est décidé de repartir sur une seconde fournée de dix briques à distribuer. Je le fait un peu à reculons mais étrangement les autres membres sont intéressés pour continuer cela (sans avoir participé au premier batch). Bref on les prépare à plusieurs et je parviens à ne pas garder tout le stock et n’en avoir que deux. Ils se débrouilleront avec les autres briques. C’est triste de voir que le but est désormais de se débarrasser des tâches à faire.

Je rédige également quelques articles sur le site d’Iloth qui auront un succès pas trop dégueu. C’est d’ailleurs en partie ce qui m’a remotivé à reprendre en main mon site perso. Même deux ans plus tard, certains articles amènent encore quelques visiteurs sur le site de l’asso, c’est une bonne pub naturelle. Malheureusement personne d’autres ne semble intéressé pour en rédiger.

Et voilà pour l’année…

2017 ou la vache maigre

L’AG sera l’occasion d’avoir un nouveau président pour me remplacer, je vais pouvoir m’éclipser petit à petit. Pas de bol quelques semaines plus tard il abdique sans donner aucune raison et on ne le revit plus jamais… Dans la foulée, le reste du bureau démissionne également et l’asso se retrouve sans plus personne.

Un début de drama commence à éclater lorsqu’un des membres de l’asso prend peur de la pérennité de son VPN et discute avec son avocat pour éventuellement mettre encore plus en péril l’asso voire certains membres. C’est tout pile ce qu’il fallait pour donner envie de reprendre le bousin…

Bref quelques temps après une Assemblée Générale Extraordinaire est organisée où un nouveau Bureau reprend les rennes de l’asso. L’asso est donc officiellement sauvée. Le drama est finalement étouffé avec plus de peur que de mal puisque de toute façon rien ne pouvait être reproché à quiconque et que l’asso (ou ses ressources) ne pouvait pas être reprise par une seule personne.

Cette année, pas de foire associative vu que personne n’a rien prévu, on cède gracieusement notre stand (pourtant vraiment bien placé cette année) au Bib.

2018

Bon bha on est déjà à la moitié de l’année mine de rien donc j’en profite pour faire le bilan vu d’ici. Bha malgré toute la bonne volonté du nouveau Bureau, bha … il n’y a plus de membres actifs. L’asso vivote tant bien que mal.

D’un point de vue politique, le Bureau a tenté d’arranguer les foules concernant la loi européenne concernant le copyright toussa toussa. Bon bha, en dehors du Bureau personne n’a rien fait. Bref, no comment.

Et voilà.

BIM : le CHATONS montpellierain

Tiens et d’ailleurs faisons un point sur le projet de CHATONS en collaboration avec les trois assos. Bha j’ai monté un Sandstorm (plateforme de cloud pour avoir pleins d’applications sans administration toussa, je ferai un article dessus un de ces quatre) sur lequel on a commencé à organiser pas mal de trucs.

Logo de BIM

Bienvenue sur l'Internet Montpellierain : Bib Iloth Montpel'Libre

Niveau matos on a désormais un bon gros serveur bi-proc avec 64Go de ram toussa. On a tout pleins d’IP dédiées aux différents services. Une instance Etherpad lite, un Pastebin, un Studs (Framadate) et bha on est deux et demi à avoir fait tout ça. Et au final on a été que deux et demi à s’y investir. Du coup bha au bout de deux ans, plus envie d’y toucher. Je vais maintenant faire comme les autres, attendre de voir ce que font les autres.

Bref j’ai lâché l’affaire et du coup j’imagine que c’est la mort du projet.

Conclusion ?

Je suis triste que l’asso soit morte mais d’un certain point de vue j’y ait fait d’excellentes rencontres. J’y ai trouvé une bande d’amis, j’ai testé pleins de restaus du secteur, j’ai appris pas mal de truc de réseau, j’adore tout l’environnement de la FFDN, j’aime pas devoir gérer les gens surtout dans une structure associative.

Une association n’existe que par l’investissement de ses membres. On est jamais servi QUE par soit même.

Iloth a toujours eu un fonctionnement assez libre. Tu veux rentrer dans l’asso pour faire des trucs : ok pas de soucis, mais c’est toi qui va le faire ! Faut pas juste vouloir donner un coup de main, il faut vouloir faire le truc en question et ne pas être paralysé de peur de se planter. Fais ce que tu veux (si c’est dans les clous de l’asso), l’asso peut te filer une place sur un serveur, un peu de réseau, mais n’attend pas à ce qu’on le fasse à ta place, au mieux tu auras un coup de main.

Et surtout ne venir qu’avec une idée n’est pas vraiment utile. Apporter une idée, c’est inscrire quelque chose sur la todo-list de quelqu’un d’autre.

Si tu viens avec une idée c’est à toi de la réaliser !

Bref si vous êtes motivés pour faire avancer les choses, apprendre pleins de trucs, découvrir des nouveaux gens, participer à Iloth est génial. N’hésitez pas à le faire et à vous rendre sur le salon de discussion. L’asso a un grand besoin de nouveau souffle, a du matos, un peu de pognon, il ne manque que des cerveaux motivés.

Moi pour l’instant, je prends des vacances, je reviendrai ptet quand il y aura de la vie.

Termtosvg : capturer la cli dans un svg

Capture faites lors de la rédaction de cet article ! Peut prendre un peu de temps pour charger.

L'article en cours de rédaction ~3min

Voilà vous le voyez sous vos yeux ébahis : Termtosvg est un petit logiciel en python qui permet d’enregistrer ce qu’il se passe sur votre terminal et d’en faire un joli SVG.

SVG est un format graphique permettant de faire des images zoomables sans perte de qualité et “sélectionnables” car les données enregistrées ne sont pas des pixels mais des éléments graphiques définis de manière procédural. Il est donc possible de sélectionner le texte du SVG pour faire un copie/coller.

Bref c’est un format bien comme tout, le seul soucis c’est qu’il a une légère tendance à rapidement devenir assez massif surtout quand c’est animé. Par chance ça se compresse assez bien dans le format gzip ce qui devient donc un fichier .svgz qui est bien interprété par les navigateurs nativement.

Termtosvg est donc un excellent outil pour présenter voir faire des tutos de manips faites en console. Je l’utiliserai probablement pour de futurs articles.

Bon par contre un petit point négatif, c’est que par défaut le navigateur n’essaie pas de décompresser les svgz s’il ne reçoit pas le bon content-encoding. Vous me direz c’est tout justement à quoi sert le content-encoding. Ouai mais malheureusement, dans mon cas, nginx et hugo server n’envoient pas le bon content-encoding pour svgz du coup j’ai pas de preview avec hugo. Bon et j’ai dû faire une ptite modif à nginx pour qu’il envoie ce qu’il faut :

location ~ \.svgz$ { add_header Content-Encoding gzip; }

Bon c’est trois fois rien mais c’est dommage que ce soit pas par défaut…

Bon voilà. C’est quand même pratique le rendu est propre (quelques ptits glitch mais ça devrait s’arranger, le projet est super jeune).

Par contre il n’y a pas moyen de contrôler l’animation (play/pause/barre de progression) ce qui peut être un poil gênant pour des animations un peu longue comme dans l’exemple. Ptet qu’un jour les navigateurs ajouteront cette possibilité (rien à attendre à court terme).

Pour ceux intéressés sur le fonctionnement interne, dans sa série Github All Stars, Artur Skowroński a détaillé la bête dans cet article.

Bref vous le trouverez dans toutes les bonnes distros nunux ;-)

15ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Ces dernières semaines, l’équipe du Librem 5 a bossé d’arrache-pied pour améliorer la pile logicielle ainsi que pour finaliser les schémas du kit de dev. Voici les progrès les plus marquants réalisé.

Côté logiciel

Images

Les images produites pour la carte i.MX6 utilisent désormais phosh en shell par défaut et nous expérimentons sur PureOS comme OS de base (en lieu et place de Debian Buster). Il y a désormais une image de machine virtuelle en architecture x86_64 en cours de création. Vous pouvez suivre ces instructions pour en avoir une copie et la faire tourner. Cette machine virtuelle utilise la même résolution qu’utilisera le Librem5.

Alors que les images pour i.MX6 ont été faites pour le matériel actuellement en possession de l’équipe, elle continue d’être modifiées pour être utilisée sur la carte de dev i.MX8 et le téléphone. Soit dit en passant, lors de nos investigations concernant le CPU du i.MX8, des soucis concernant la liberté du code ont été repérés et devront être résolus. Pour en savoir plus à ce sujet, consultez l’article de blog Résoudre les premiers soucis de FSF RYF pour le Librem5 (FSF RYF signifie Free Software Foundation - Respect Your Freedom).

L’image construite pour l’i.MX8 peut désormais booter un kernel mainline très basique (au lieu du kernel du constructeur). La prochaine étape est de faire fonctionner plus de composants ( comme l’affichage) et de reverser à la communauté ces changements. Avec tout cela, l’image pour l’i.MX8 s’annonce plutôt bien.

Phosh / Wlroots

À un moment ou à un autre, les utilisateurs seront sur leur Librem5 la nuit, donc avoir redshift fonctionnel permettra d’amoindrir l’impact de l’écran sur nos yeux. Du boulot a été fait afin d’implémenter certaines API DBUS de Mutter dans Phosh afin, par exemple, de gérer la configuration de l’affichage ou bien de supporter redshift. Désormais, phosh peut détecter les sorties vidéos, les modes vidéo supportés et les communiquer comme le fait mutter/gnome-shell afin que nome-settings et gnome-settings-daemon soit content. C’est la base pour le futur support du gamma (redshift). Cela dépend d’un patch pour wlroots en cours de discussion.

D’autres améliorations ergonomique pour phosh ont été apportées. La temporisation  de l’écran de verrouillage a été augmentée pour accorder plus de temps pour se connecter. Également, les favoris et l’écran d’accueil ont été corrigés pour correctement placer les colonnes et ajouter des barres de défilement quand nécessaire.

Puisque phosh est le shell et qu’il travaille étroitement avec wlroots, ils sont tout deux des éléments centraux des images. Il y a eu des mises à jour fréquentes afin que wlroots soit sur la dernière version upstream existante. Un bug mineur a été corrigé sur wlroots afin d’améliorer la gestion des erreurs de compilations sur l’architecture armhf. En sus, le support des modes vidéos personnalisés a été ajouté à wlroots. Les devs sur phosh travaillent sur l’intégration des prompts-systèmes Gcr. Cela permettra de résoudre une foultitude de problèmes avec les fenêtres modales pour les authentifications comme par exemple pour le code PIN, le PUK, les mots de passe, les smart-cards et le porte-clef en utilisant ce qui est déjà intégré à Gnome.

Clavier

Des avancées ont aussi été faites sur le clavier visuel (virtboard) ce qui fait que désormais il est intégré aux images. Afin que virtboard soit affiché/caché lorsque nécessaire, l’intégration d’une méthode d’entrée dans wlroots était un pré-requis et l’équipe GTK+ a été contactée concernant l’intégration du code de cette méthode d’entrée. Nous travaillons a l’élaboration d’un patch pour sécuriser la méthode d’entrée dans notre compositeur. Il y a eu des retours continus pour l’intégration du protocole de clavier virtuel. En plus, le clavier s’adapte beaucoup mieux maintenant !

Calls

L’application calls a également été ajoutée dans les images pour un accès simplifié. Dans l’appli, l’envoi des fréquences DTMF a été ajouté comme cela il est possible d’entendre les fameux bips lors de la composition des numéros.

Afin de rendre calls plus robuste,la possibilité de faire des tests unitaires, dans oFono le backend de l’appli, en utilisant phonesim simulator a été envisagé. Cependant, faire tourner ofonod nécessite les privilèges root pour réquisitionner le nom org.ofono, ce qui rend les tests quasiment infaisable. Cependant, des tests unitaires ont été créés pour le fournisseur d’interface de Calls en utilisant l’implémentation dummy, ainsi que des test pour l’interface Origin et Call.

Libhandy

Le widget GTK+ libhandy a grandi également. HdyColumn a été ajouté afin d’ajouter le redimensionnement dynamique de colonne. Des tests unitaires ont fait leur apparition pour HdyArrows (utilisé pour le balayage directionnel). Une toute première version de libhandy est sortie et la version v0.0.1 a même été envoyée sur Debian experimental !

Epiphany / Gnome Web

Le navigateur web du Librem5 sera Epiphany donc les modifications pour le rendre adaptifs ont été implémentés upstream pour améliorer l’utilisation sur de petits écrans. Un menu interne a commencé a être implémenté mais n’est pas encore finalisé.

Messaging

Une application de démo s’appuyant sur libpurple a été esquissé afin qu’une conversation XMPP soit établie vers Dino. Pour le chiffrement, une conversation OMEMO tournant sur libpurple et le plugin Lurch a pu être faite. La récupération et l’affichage d’avatar et d’information de compte depuis une liste stockée en xml a été réussie. L’interface ofono pour les SMS et XMPP a été implémentée dans l’application de démo également.

Côté matériel

Des facteurs extérieurs ont causé des retards reposants la date initiale de livraisons de Juin concernant les kits de devs. Lorsque nous établissions les schémas pour les cartes de devs, toutes les infos n’étaient pas disponibles ce qui nous a poussés à investiguer plus concernant de nombreux composants ( ex : les caméras, WLAN+BT, les batteries, les interrupteurs, les boutons, etc). En plus des circuits devaient être ajoutés avant que les schémas puissent être considérés comme prêts par l’équipe de validation externe en charge de leur impression. L’équipe matériel du Librem5 a donc finalisé tout ça et en est à la phase de commande des composants pour envoi chez le fabricant des cartes.

Notre estimation au doigt mouillé actuelle pour l’envoi des cartes de dev est d’Août 2018, nous vous tiendrons au courant plus en détail dans un futur article de blog plus détaillé.

Communauté

Le salon de discussion matrix du Librem 5 a explosé avec de nombreux retours et questions. Certains membres de la communautés se sont même mis en quête de bugs à corriger et d’ajout de documentation. Suite aux demandes de la communautés, il y a désormais une image de machine virtuelle en x86_64 disponible qui ressemble comme deux gouttes d’eau à ce qu’utilise notre équipe sur les cartes i.MX6.

La collaboration entre Purism et la communauté Plasma se poursuit également. Il y a désormais des version arm et aarch64 des flatpaks de Plasma. L’équipe Purism réfléchie activement à la création d’image Plasma pour les cartes i.MX6.

La documentation pour dev a connu d’important modifications pour mieux guider tout le monde au bon endroit :          - La page volontaire a été mise à jour avec des instructions plus claires sur comment participer.     - Quel que soit le type de carte (physique ou virtuelle), des étapes communes ont été ajoutées à la page des premières étapes     - Il y a dorénavant des instructions sur la mise en route de l’image x86_64     - Un référentiel de contribution a été posté afin d’établir une charte des process de communication     - Une page GTK+ a été ajoutée avec des exemples d’applications et l’ajout de documentation sur les labels adaptatifs.     - Une page des contraintes de téléphone a été ajouté pour souligner quelques contraintes spécifiques à prendre en compte lors du dev d’applications pour le Librem 5.

Nous étions récemment au GUADEC en Espagne où nous avons pu interagir avec beaucoup de personnes attendant le Librem 5. Nous communiquerons plus sur cet évènement lors d’un prochain article de progression.

Photographie de tous les participants au Guadec 2018

Un grand Merci à toutes les équipes extérieures nous ayant aidé en révisant et intégrant nos modifications dans les différents projets upstreams. Le temps et les contributions de chacun sont grandement appréciés.

C’est tout pour le moment. Restez-là pour de prochaines mises-à-jour à venir !

Heather Ellsworth


Cela fait plusieurs fois que je ne sais pas comment traduire upstream donc je vais l’expliquer ici une bonne fois pour toute.

Dans le monde du libre, les codes sources sont disponibles et peuvent être modifiés/adaptés par chacun. Cependant ces modifications ne sont pas forcément répercutées dans le projet d’origine. Si un dev fait des modifs dans un logiciel, ce nouveau logiciel basé sur un autre s’appelle ça un fork. Mais ce dev peut tout à fait avoir l’intention que ces modifs soient intégrées au projet d’origine, il va donc les soumettre à l’équipe du projet. Cette équipe peut choisir d’intégrer ou non ces modifs.

Si elle accepte, tout va bien dans le meilleur des mondes. Si elle refuse (parceque le code est moche, buggé, dans un autre langage, ajoute des dépendances non voulues, la façon de faire ne convient pas, le dev en question n’est pas en odeur de sainteté, le code en question n’est pas forcément très légal, le projet ne veux tout simplement pas de ces modifs, l’équipe est aux abonnés absents, bref pour n’importe quelle raison), le dev peut soit laisser tomber et pouf ça tombe dans l’oubli, soit son projet devient un fork et peut alors soit devenir complètement indépendant soit continuer à suivre le projet d’origine en y intégrant ses modifs. Cela peut être uniquement temporaire et peut également être à l’initiative du dev en question qui ne désire pas forcément fusionner son travail avec le projet d’origine. Il existe désormais deux projet, le projet d’origine et son fork. Le projet d’origine est appelé upstream et l’autre le fork.

Dans le cas présent, les équipes de Purism créer des forks de plusieurs projets existants pour ajouter les nouvelles fonctionnalités nécessaires, il les testent et compagnie. Quand le résultat est acceptable, ils soumettent leur fork aux projets upstreams en espérant que ce soit acceptés histoire de ne pas avoir à continuer leur fork pour que les projets fusionnent.


Bref niveau logiciel ça a l’air de pas mal avancer sur tous les plans. Cela dit côté matos, on voit les premiers retards se confirmer. Bon c’est pas trop trop étonnant mais bon ça jette toujours un léger froid.

On sent quand même que la collaboration vis-à-vis de Plasma semble assez légère. J’espère qu’à la sortie, l’équipe de KDE saura proposer un truc suffisamment stable et utilisable et pas juste un proof-of-concept bâtard.

Les Vidéos Primitives

Je suis fan des vidéos primitives. Vous êtes jamais tombé dessus ?

Ce sont des vidéos de personnes simulant la vie primitive c’est à dire sans technologie. Alors ça se contente principalement de construire des trucs plus ou moins utiles.

Mais il y a des codes à respecter :

  1. Partir de 0 : pas d’outil ou autre. Il faut se construire ses propres outils à partir des ressources à disposition localement.
  2. Ne pas parler : les vidéos ne sont pas des tutos. La partie audio se contente des bruits ambiants.
  3. Être dans la nature. Faut pas faire ça dans le jardin de mamie avec les immeubles dans le fond.
  4. Être à moitié à poil. Bha ouai on est primitif mais pas trop non plus. L’uniforme habituel est le bermuda uni et c’est tout (enfin probablement un slibard/calçouf j’imagine mais dur à vérifier)
  5. La caméra est en plan fixe de façon à pouvoir être manipulée par l’acteur qui la place puis vaque à ses occupations.
  6. Bonus point : être asiatique. Ouai les trois quarts des youtubeurs qui font ça sont asiatiques. Ce sont les rois de la discipline.

Voilà pour les règles.

Après faut avouer que certains les prennent plus ou moins au pied de la lettre. En faisant gaffe on entend parfois des bruits de motos dans le fond, ou alors certains ont recours discrètement à un outil non fait main, certains ne sont même pas asiatiques ! Généralement ça se pratique seul, mais on trouve des gugusses qui se mettent à plusieurs pour ça et souvent la caméra est gérée par une personne dédiée que l’on ne voit/entend pas mais qui parfois bouge la caméra, bref ça se professionnalise.

Au commencement : Primitive Technology

La première chaîne à se lancer dans la discipline est Primitive Technology dont la première vidéo a été publiée le 2 Mai 2015. Ce gars est un australien qui s’est payé un bout de terrain dans une forêt et a commencé à se faire des ptites cabanes. John Plant (ouai c’est son nom) s’est filmé lors de ses tribulations et a connu un succès d’abord un peu lent puis fulgurant. Il a ouvert un blog qui détaille chaque vidéo en fournissant des explications et tout.

Ses vidéos contiennent également des sous-titre détaillant ce qu’il fait.

Il me semble qu’il a depuis investit un second terrain pour pouvoir continuer ses aventures. Il cumule plus d’un demi milliard de vuee à l’heure actuelle. C’est le big boss du domaine mais son rythme de publication est désormais assez faible.

Voilà sa chaine et surtout son flux rss.

L’engouement

Du coup quand un toituyauteur publie pas assez vite, on va voir les concurrents. Et là BIM ! Il y en a des cargaisons maintenant.

Depuis 2017 toute une tripottée de nouvelles chaînes se sont créées en reprenant le concept quasi à l’identique. La plupart sont d’origine asiatique donc j’imagine que là-bas ça doit être super populaire. Bref il y a des thailandais, vietnamiens, philippins… mais bon en vrai on s’en fout : les titres de vidéos sont en anglais et ça parle pas donc c’est parfait on peut profiter sans incompréhensions.

Primitive Life

Je sais pas pourquoi mais cette chaîne est dans mon top. Je sais pas pourquoi, mais ce gars m’apparaît sympatique avec son rythme et sa démarche bien à lui. Je saurai pas l’expliquer mais j’accroche particulièrement.

Je ne sais pas exactement d’où il est mais je le soupçonne d’être vietnamien et de s’appeler Chris Wong. Bref il a commencé il y a moins d’un an et est passé du stade de débutant au stade de roi du −−−−−− en quelques vidéos. Je veux pas vous le spoiler mais vous verrez vite.

Du travail de pro même si parfois on entend quelques bruits de civilisation mais bon ça sort pas pour autant de l’ambiance.

Bref voilà le lien de sa chaîne et son flux rss.

Primitive Survival Tool

Là c’est du travail d’équipe. Deux hommes pleins d’énergie. Mais vraiment pleins d’énergie.

Ils construisent pas mal de cabanes/huttes différentes. Et ça se déroule comme un épisode de Télétubbies avec le réveil/sortie de la cabane/boulot boulot/retour à la cabane pour faire dodo.

Ils ont par contre recours à deux outils assez discrètement : une tête de hache enfichée dans un baton et un ptit outil pour percer le bamboo. C’est un peu dommage mais bon ils restent très bon surtout pour creuser !

Ils publient assez régulièrement car ils ont commencé il y a six mois à peine. Voilà le lien de leur chaîne ainsi que leur flux rss.

Primitive Life

Ouai c’est le même nom qu’une autre chaîne… La particularité de celle-là est d’être tenue par une femme.

Ça change pas grand chose au concept mais bon. Il y a un plus grand effort vestimentaire (pas forcément dans le bon sens) mais sinon elle s’en sort vraiment super bien et a tendance à pondre des vidéos un peu plus longue que les autres protagonistes.

Le rythme de publication est pas trop régulier. Il y a des périodes de rush et des périodes sans rien mais bon. Voilà donc sa chaîne youtube et son flux rss.

Et tout un tas d’autres

Bon je vais pas vous le cacher mais en fait on tourne assez vite en rond. Et j’ai pris pour habitude de matter ces vidéos en acceleré (] dans mpv) en 1.66x.

Ensuite ?

Je pense qu’il faudra un peu de renouveau dans la communauté assez vite pour pas que ça ne s’essoufle de trop. À vraie dire ils s’inspirent tous les uns des autres et donc on retrouve le même genre de construction chez tous.

Les vidéos ont tendance à stagner à partir du moment où ils parviennent à se procurer un approvisionnement de flotte, de flitrage de la flotte et un bassin.

J’avoue ne pas trop savoir ce qu’ils pourraient faire pour aller plus loin. Passer à l’âge de cuivre pour se fabriquer des outils ? J’imagine que c’est un peu plus compliqué pour un vidéaste de trouver un terrain avec les ressources nécessaires.

Bref seul le temps nous le dira.

Kakoune

Après avoir un peu utilisé Amp j’utilise désormais kakoune depuis quelques mois. En fait à la base je n’avais pas l’intention de migrer aussi vite vers un autre éditeur mais pas de bol, une mise à jour de ncurses à rendu Amp inutilisable à cause de bugs graphiques dans tous les sens. Une mise à jour était nécessaire mais du coup je suis allé voir un peu ailleurs voir ce qui se faisait.

J’ai été tenté par Xi mais je me suis rappelé d’un autre qui me faisait de l’œil depuis quelques années : Kakoune.

C’est pas du Vi mais c’en est pas loin non plus

Capture d'écran de l'accueil de Kakoune avec Clippy indiquant le changelog important

Welcome to Kakoune

Donc ce cher petit est modal (ouai j’essaye que ce genre d’éditeur mais j’aime beaucoup ce principe). Il se base également sur des actions (ou verbes) comme par exemple supprimer/remplacer… mais contrairement à Vi, la syntaxe est dans l’autre sens : d’abord on sélectionne le texte sur lequel on veut effectuer une action puis on choisi l’action. C’est le ptit détail qui a l’air assez insignifiant mais qui permet de mieux borner ses actions puisqu’avant même d’effectuer une action je vois la sélection sur laquelle elle sera appliquée.

Par défaut

Kakoune est assez récent et n’est donc pas encombré d’un lourd héritage et surtout possède des réglages par défaut vraiment utilisables. Après quelques mois, mon fichier de config ne contient que trois lignes. Pas besoin d’aller fouiller dans les confins de la doc ou autre pour le rendre utilisable au quotidien.

Par défaut il y a la coloration syntaxique, par défaut il y a l’auto-complétion automatique, par défaut il y a une status bar bien foutue. Bref par défaut c’est déjà suffisant pour la plupart des utilisations.

Aide contextuelle

Il y a toujours une petite aide contextuelle sous forme du célèbre Clippy qui reprend enfin du service ! Mais si Clippy ! Le ptit trombone de Word 97 avec ses supers conseils ! Et bha il est là ! Et mine de rien ça aide vachement et évite d’aller voir la doc pour des ptits trous de mémoire réguliers.

Un exemple ? Pour sauvegarder il faut taper :w puis Entrée, mais si vous n’appuyez pas tout de suite sur Entrée, vous verrez alors en bas de la fenêtre ceci :

capture d'écran de l'interface de Kakoune montrant la status bar et Clippy

Clippy the Almighty

Tout en bas il y a la status bar que je détaillerai plus loin. Et juste au dessus sur fond jaune (le thême de couleur par défaut est pas des plus seyant) vous avez le Clippy qui vous indique à quoi correspond l’action en cours et les options possibles.

Status bar

Dans tous les logiciels en TUI on retrouve souvent une status bar en bas. Kakoune ne fait pas exception, voilà ce que vous y trouverez par défaut :

  • Le nom du fichier en cours d’édition
  • La position dans le fichier sous la forme Ligne:Colonne
  • Le [+] indique le contexte
  • Le mode actuel
  • Le nombre de sélections (et donc de curseurs)
  • Les informations concernant le client/serveur

Et bien entendu vous pouvez changer tout cela pour afficher ce que vous voulez comme l’indique la doc.

Multi-curseur

C’est une fonctionnalité qu’on retrouve de plus en plus souvent et c’est vrai que c’est pas mal utile quand même. Au lieu de n’avoir qu’un seul curseur où écrire, vous pouvez en avoir plusieurs simultanément.

exemple 1

Par exemple, juste au dessus j’ai fait une liste d’éléments alors que lors de la rédaction j’ai fait une phrase. Du coup comment je l’ai découpée puis transformée en liste ?

Tout d’abord je sélectionne toute la ligne avec x, ensuite je lance la commande de sélection avec s ce qui ouvre un prompt en bas. Là je rentre les éléments que je veux sélectionner pour y placer les curseurs, dans mon cas , pour sélectionner chaque virgule. Après avoir validé avec Entrée je me retrouve avec tous mes curseurs. Maintenant un petit d pour supprimer les virgules, puis passage en mode édition avec i et enfin Entrée pour ajouter les retours à la ligne.   - pour créer les puces et voilà.

N’oubliez pas de virer tous les curseurs à la fin en appuyant sur la touche Espace.

Seek&Replace

Une fonction souvent utilisée est de remplacer une chaîne de caractère par une autre. Sous vim ça se ferait avec le fameux s/machin/truc/ avec éventuellement le % pour le faire sur tout le fichier en cours d’édition.

C’est absolument pas visuel et du coup ça a un fort potentiel de casse-gueulerie.

La méthode à la Kakoune pour ça est bien plus visuel :

Tout d’abord faut sélectionner la zone de texte où vous voulez l’appliquer (% pour tout le fichier). Par exemple pour le faire de la ligne 10 à 18 on se place sur la ligne 10 avec 10g puis on sélectionne jusqu’à la ligne 18 avec 18G (remarquez le G majuscule qui permet de sélectionner). Ensuite on démarre une sélection avec s puis vous tapez la chaîne de caractère à modifier machin et vous validez avec Entrée. Vous voyez du coup toutes les occurrences qui seront affectées par vos modifs. Et là c bidule pour changer le texte par “bidule”.

C’est pas plus compliquée que la méthode vim et plus safe.

Verdict ?

Vous vous rendez probablement compte que du coup dans kakoune il faut prendre les bons réflexes pour sélectionner le texte que l’on veux modifier, c’est l’élément crucial. Une fois cette habitude acquise, l’utilisation est assez simple et rapide.

Il est bien plus avancé dans son dev que Amp par exemple. Pour de l’édition de texte c’est franchement génial. Pour coder j’imagine que ça ne plaira pas à tout le monde.

L’écosystème de plugin de vim est une sacrée force mais au final j’aime pas installer des cargaisons de plugins pour pouvoir me servir d’un éditeur de texte. Le second avantage de vi(m) est son omniprésence (intégré à busybox toussa). Ce qu’aucun éditeur de texte ne pourra jamais concurrencer.

Bref ces 5 derniers mois je l’ai pas mal utilisé et je vais continuer.

Tant pis pour Amp qui m’avait bien plu mais ton bug m’a fait goûter/adopter autre chose.

:wq

5000$ Compression Challenge

Ce second partage avec vous est une perle que je souhaitais vous montrer depuis des lustres mais je n’avais pas de moyen bien pour vous le partager auparavant.

Il s’agit d’un échange de mail entre Mike Goldman (j’ai pas trouvé d’infos) et Patrick Craig qui est un informaticien avec un site perso.

Notre cher Mike a décidé de lancer un concours avec à la clé 5000$ de gain en l’an de grâce -3 avant Facebook.

Le challenge

Le participant choisit une taille de fichier. Il recevra ensuite un fichier de la taille voulue et devra renvoyer ce même fichier compressé + le décompresseur. Pour gagner, la somme des deux devra être inférieure à la taille du fichier initial.

Pour participer il faut envoyer 100$.

La page en question-cache local

Bon par contre cette fois aussi, c’est en anglais.

TL;DR - Spoiler !

Pour ceux que l’anglais rebute ou qui n’ont pas la patience de lire l’histoire voilà un ptit résumé et quelques explications.

Le fichier que va génèrer Mike Goldman sera un fichier aléatoire bien foutu. Ça veux donc dire qu’en théorie, il n’est pas compressible efficacement. Même si ce fait n’est énoncé à l’avance il n’y a rien d’étonnant à cela.

Notre cher Patrick Craig est très probablement bien au fait de tout cela mais avant de participer pose une question faussement innoncente : Est-ce que la solution peut être constituée de multiples fichiers du moment que le décompresseur retourne le bon résultat ? Ce à quoi Mike Goldman ne vera pas d’objection.

Notre cher participant paie la taxe de participation et demande un fichier de 3Mo.

Entre temps, Mike Goldman a annoncé avoir un participant à son challenge sur la newsgroup comp.compression (ouai c’est pas récent, à l’époque les ng étaient pas mal utilisées encore). Il annonce fièrement que ce challenge est mathématiquement impossible (ce qui est effectivement le cas).

Patrick Craig nous explique ensuite qu’il est mathématiquement impossible de gagner ce challenge MAIS il y a une petite feinte. Le fait de pouvoir rendre plusieurs fichiers est l’astuce.

En gros le fichier original contient des caractères aléatoires. La compression consiste donc à lire le fichier original et de le découper à chaque apparition d’un caractère particulier (“5”), de supprimmer ce caractère et c’est reparti. Recompresser le fichier consiste à lire le premier fichier compressé, caténer le caractère “5” puis de passer au fichier suivant et ainsi de suite. Donc oui les fichiers compressés + le décompresseur sont plus petits que le fichier original. Mais non ils ne prennent pas moins de place.

Pourquoi ?

L’astuce a réside donc dans le fait d’utiliser plus de méta-données afin de réduire la taille des données.

Le système de fichier, pour chaque fichier doit stocker des méta-données dans sa base de données. Donc au lieu d’avoir 1 fois des méta-données pour 1 fichier, il y a désormais 218 fois des méta-données pour 218 fichiers (+1 pour le décompresseur) mais comme le système de fichier ne les affichent pas.

Bref il y a eu filouterie :-)

Patrick Craig n’a pas eu le droit à ses 5000$ mais il ne comptait pas trop dessus. Il aura perdu tout de même 100$ de participation mais franchement c’est plutôt marrant l’histoire qui en découle et puis surtout :

« My main motivation was to “out-trick the tricker”. »

La Renaissance Des RSS

Ça y est \o/ En ce moment on assiste à la renaissance des RSS et c’est pas moi qui le dit ! On le lit un peu partout en ce moment. On vit une époque formidable !

Mais attends une seconde : pour que ça renaisse, il faut que ça meurt !

Mais du coup, les RSS étaient morts ?

C’est ce que semble penser pas mal de monde visiblement. Pourtant les sites ne les ont pas supprimés. Mon ptit aggrégateur de flux n’a jamais tarit ces dix dernières années.

Ils sont morts quand ?

Apparemment deux évènements auraient sonné le glas : la mort de Google Reader et FeedBurner qui déconne.

Bon bha dans le cas de Feedburner je sais pas trop, j’ai jamais utilisé ce service mais visiblement ils ont changé leur façon de faire et ça aurait fait fuire une partie des utilisateurs.

Concernant Google Reader, bha je sais pas trop non plus. Effectivement c’était l’aggrégateur de flux rss le plus populaire à son époque mais sa fermeture est-elle vraiment une raison de la mort des RSS ? Quand ma connexion tombe en panne à la maison c’est pas la mort de l’Internet !

Il s’est passé quoi réellement ?

Google Reader est donc arrêté en 2013 et en fait à cette période beaucoup de monde a cessé d’utiliser les reuseuseu pour se tourner vers les réseaux sociaux : Facebook et Twitter en tête. À l’époque ça pouvait effectivement être une alternative plus ou moins potable. Leurs logiques de fonctionnement étaient pas exactement similaires à aujourd’hui. La course au profit n’était pas absolue et du coup les algoritmes régissant les timelines étaient assez inofensif.

Le temps passe.

Une élection est passée et avec un peu de recul maintenant le monde commence à un tout petit peu faire semblant de commencer à peut-être éventuellement ouvrir les yeux.

« Ha bon ? Les timelines sont biaisées ? Ha bon ça me manipule discrètement pour influencer mon jugement/vote/ressenti ? »

Les créateurs de contenu qui ont délaissé leur site perso pour bénéficier d’une audience élargie et se constituer un vivier public doivent désormais passer à la caisse pour parler à leur auditoire. Bref les réseaux sociaux doivent remplir leur comptes en banque désormais.

Quel rapport avec les RSS ?

Bon revenons à nos moutons : les RSS. Ils sont toujours là et les quelques très rares sites qui les ont zappés pour se contenter d’abreuver leur compte truitteur/faceplook commencent pour certains à revenir en arrière.

Et on arrive donc en 2017-2018. Il faut donc reconquérir son propre auditoire des griffes des bleus.

« Et si on créait une renaissance des RSS ?! » L’idée de génie que Bernard a eu ! Sérieux, on présente le truc comme le renouveau, on passe pour des gentils qui aident à se réapproprier une tech bonne pour la vie privée et EN PLUS on amenuise un peu notre dépendance au GAFAM !

BRAVO ! Bon c’est dommage que Bernard ne soit pas au courant que ça fait quinze ans que son site ne produit que du RSS tronqué suite à la décision de Jean-Kevin marketeux de son état qui s’est rendu compte qu’ils balançaient pas de pub/trackers/cookies dans les RSS. C’est bien gentil de crier contre les GAFAM quand ton site est pourri jusqu’à la moêlle au point que ton contenu ne représente que 10% du poids de tes pages webs. La presse en ligne adore vos données mais quand au final ils se font petit à petit bouffer par ceux qu’ils ont nourris, ils retournent leur veste sans pour autant se repayer une dignité.

Bon, crachons pas trop dans la soupe parceque bon les RSS c’est génial et si l’orchestration de “leur Renaissance” peut pousser un peu la populace à y recourir plutôt qu’aux réseaux sociaux… On sera ptet gagnant, sait-on jamais.

Les RSS ne sont jamais morts et la plupart de ceux qui le clâment auraient voulus les tuer à l’époque mais se font guanoter dessus désormais.

500 Miles Mail

Pour inaugurer cette section je vais vous vous mettre un lien vers une histoire assez cocasse :

Débugguer le soucis des mails qui ne peuvent dépasser les 500miles.

Un adminsys reçoit un appel d’un directeur de son organisation qui ne parvient plus à envoyer de mails à des destinataires à plus de 500 miles. Forcément l’adminsys va devoir trouver comment démerdouiller le tout.


Je trouve cette histoire vraiment sympa et en plus bien écrit. J’ai tout de même un doute sur la véracité mais au final c’est assez plausible et bien écrit.

Bon par contre c’est en anglais…

Allez sans plus attendre voilà l’article en question - version en cache local.

Nouvelle section : Shares

Hello hello. Bon, pour passer le blues, quoi de mieux que de bidouiller le blog ?

Des partages

Ça fait un petit moment que j’aimerai vous parler de trucs plus … comment dire … “extérieur”. Parler de trucs que j’ai lu/vu/écouté ailleurs et vous les recommander souvent.

Du coup voilà une nouvelle section qui commencera très bientôt à se remplir.

Adaptation CSS

Bon du coup pour ça j’ai remis un peu les doigts dans le CSS.

De ce que vous pouvez voir dès maintenant… ça n’a pas changé radicalement, juste quelques couleurs modifées.

Du coup chaque section a sa couleur :

  • Violet (limite rose) les posts.
  • Bleu les fast-posts.
  • Jaune les partages.

Et aussi pour rendre le truc un peu plus clair, j’ai rajouté une ptite étiquette en haut à gauche qui indique la catégorie. Bref ça devrait être un peu plus clair qu’avant sans rajouter trop d’éléments visuels au site.

D’ailleurs j’hésite à terme à mettre des liens vers les différentes catégories directement dans la barre latérale de gauche. Pourquoi pas ?

Faut que je réflêchisse à comment agencer ça.

Bref, j’ai poussé le CSS, avec les histoires de cache toussa vous verrez pas forcément les modifs tout de suite mais rien de bien grave.

Et dans quelques jours je vous envoi un premier share.

Les userscripts dans Qutebrowser

Qutebrowser est un super navigateur mais sur certains points il est loin des ténors. Son développement est bien plus lent que celui de Chrome et Firefox car c’est un projet bien plus petit avec bien moins de contributeurs et aucune entreprise commerciale pour pousser. Il n’en reste pas moins tout à fait fonctionnelle et propose une alternative crédible au prix de maigres sacrifices.

Un des sacrifices à faire est l’absence d’extensions. Mais on peut toute fois lui ajouter des userscripts. Il s’agit de petits bouts de javascripts qui s’executent sur les pages web pour modifier le comportement de la page.

C’est un système qui se base à l’origine sur l’extension Greasemonkey créée en 2005 mais qui a été souvent remplacé par TamperMonkey. Depuis, pas mal de navigateurs ont adoptés différents moyens pour être compatibles avec ces scripts.

Dans QB

Donc Qutebrowser ne fait pas exception à la règle et est nativement compatible avec ces userscripts. Pour les utiliser, rien de plus simple : Placez les scripts dans .local/share/qutebrowser/greasemonkey et voilà.

Super simple, rien à modifier ou autre.

Par contre faut le relancer…

Où les trouver ?

Plusieurs sites.

Il y a Greasy Fork qui en propose pas mal mais je suis trop fan de l’interface. Un meilleur site est OpenUserJS.

Ceux que j’utilise

  • Pour Youtube j’utilise Iridium qui permet d’ajouter tout pleins d’options pour Youtube plus ou moins utile (dont la possibilité de continuer la vidéo même en changeant de page sur youtube).
  • Pour explorer son système de fichier local j’utilise Supercharged Local Directory File Browser qui vous mettra une interface pas mal du tout lorsque vous ouvrez file:///home/lord/ .
  • Celui-là ne m’a jamais servi car je l’ai découvert après en avoir eu besoin mais je l’ai au cas où : Remove Web Limits empêche les sites de bloquer les clics droits, copier/coller et compagnie. Généralement les sites qui font ça je les contourne simplement par le fait que je n’active javascript qu’au cas par cas.

Voilà tout. Il y en a des tas d’autres mais j’ai su rester raisonable.

Hellblues

Ce week-end se tenait le Hellfest à Clisson. 4 jours dans une ambiance extra-ordinaire.

Extra-ordinaire est le mot le plus adapté qu’on puisse trouver pour ça. Pendant quatre jours tu vis dans une ambiance bienfaisante. Tout le monde est gentil, heureux, souriant, ensemble. J’oserai presque dire qu’il y règne une sorte d’ambiance de ZAD mais avec un thème radicalement différent. Alors que c’est tout à l’opposé de cette philosophie : il y a des tas de stands pour acheter des conneries hors de prix. Mais tout le monde y est paisible tout en étant extrêmement bruyant.

Tout le monde se fritte la gueule dans des pogos mais en prenant soin de tout de suite t’aider à te relever quand tu échoues sur l’herbe la poussière.

Tu dors difficilement 6 heures par nuit, tu passes tes journées à errer de scène en bar jusqu’à tenter le grand voyage jusqu’au Leclerc tout grimé en Hellclerc pour l’occasion, tu portes tout ton barda pour 45 minutes de marche sous un soleil de plomb et tu te tapes 8h de route.

Mais tu ne penses plus qu’au 360 jours d’attente pour la prochaine édition.

4 jours à vivre dans une ambiance hors du commun en dépensant tes deniers durement acquis pour ramener des souvenirs. Une ptite centaine de photos et vidéos pour tenter d’en ramener un peu plus à la maison.

Tu repenses à ces gens que tu as rencontré quelques secondes/heures. Les gars complètement déquerres trop bourré pour profiter des concerts. Les espagnols un peu bruyants de la tente d’à côté. Les meufs à trois quarts à poils avec des coups de soleil de la mort qui te font mal rien qu’en les regardant. Les quelques punks au loin en train de pisser dans le Kingdom of Muscadet. Le mec à moitié amoureux de tes chaussures pendant sa petite sieste lors d’un concert de Black Metal…

Il y a bien quelques reproches qui sont faits au Hellfest… La programmation qui n’est pas vraiment du goût de tout le monde (me suis un peu fait chier niveau musique le samedi, mais du coup ça fait une ptite pause pour faire un tour de Grande Roue). Et c’est vrai qu’en regardant un peu le débrief Arte … bha … hmmm … il y avait quand même pas mal de rap ! Et puis pourquoi c’est aussi loin dans un bled où on se pèle sévère dès le soleil disparu !? C’est vrai quoi le faire à une heure de chez moi ça serait plus pratique !

Bref.

Maintenant, bha faut retourner au boulot. -___- Retourner à la civilisation normale… chiante. Le supermarché à la déco fadasse. Les gens qui font la gueule dans la rue. Ne plus voir de cheveux longs, kilts, cornes, les tatouages bien planqués.

C’est le blues. Allez plus que 358 jours.

Les us et coutumes d'IRC

IRC est l’un des plus anciens protocoles de chat sur Internet encore très activement utilisé. Malgré une perte d’intérêt de la part du grand public qui se tourne massivement vers les réseaux sociaux ou alors sur les plateformes verrouillées/privatives de Slack, Discord, Telegram, … IRC reste toujours utilisé près de trente ans après sa création et connait même des mises à jour du protocole.

IRC est donc à la fois un protocole mais aussi toute une communauté avec ses traditions, ses codes et ses ptites habitudes.

Morning

Il existe de très nombreux fuseaux horaires utilisés dans le monde mais sur IRC nous avons dépassés ces concepts abstraits. Au lieu de s’appuyer sur UTC pour synchroniser tout ce petit monde, nous nous appuyons sur UGT : l’Universal Greetings Time qui permet de simplifier les rapports :

Quand une personne arrive dans un salon de discussion c’est le matin. Du coup « Good Morning !» , quelque soit l’heure chez soit.

Et quand elle part ? Bah « Bonne Nuit ! ».

C’est super simple et devrait s’appliquer dans le monde physique aussi. Fini de se tracasser et hésiter entre bonsoir ou *bon aprem*…

HL : HighLight

La plupart des clients IRC sont configurés de sorte que lorsque quelqu’un mentionne votre nom, votre client se mette à clignoter/jouer un son/envoi une notif/… bref ça se rate pas. On appelle cela un highlight ou plus communément HL.

Évitez de HL les gens pour rien. Et évitez également de HL pleins de monde (à tord) sur un salon. C’est souvent une bonne occasion de réveiller un bot pour kicker le malotru.

Et tant que j’y suis, pour l’amour de Gnu, si vous mentionnez quelqu’un, foutez pas un @ devant. On est pas sur twitter ou autre, un @ devant un nom signifie que c’est un opérateur et aura même tendance à empêcher le client de HL.

Slaps

MSN a les wizz, Facebook les pokes, IRC les slaps.

Berthe slaps Guigui around a bit with a large trout.

C’est amusant cinq minutes. Mais ça fait bien plus de cinq minutes que l’on est sur IRC…

Don’t ask to ask, just ask

Sur les salons de discussions des distributions linux (mais pas seulement), de très nombreux utilisateurs vont et viennent pour avoir un petit coup de main. C’est l’endroit idéal pour ça (mieux que les forums dans la majorité des cas je dirai).

Mais par contre, ne demandez pas la permission pour poser une question. « Can I ask something ? » Biensûr que vous pouvez poser votre question, mais demander si vous pouvez poser la question est une perte de temps pour tout le monde.

Posez votre question tout de suite avec courtoisie et le plus clairement possible. Mais surtout, posez là à votre moteur de recherche favoris avant, ce serait dommage de déranger des gens pour une réponse que l’on obtient en moins de trente secondes par soi-même.

Pas mal de monde traîne passivement sur IRC. Soyez précis, concis et courtois dans vos questions.

XY

Et ne vous ofusquez pas si quelqu’un vous demande « Pourquoi vous tentez de faire telle ou telle chose ? ».

Par habitude on reconnait les questions étranges pour tenter d’obtenir des effets abscons. On est typiquement dans un XY problem, donc ne vous braquez pas et expliquez quel est votre problème global plutôt que « Comment faire ceci ? ».

Et vous aurez probablement des suggestions pour trouver un meilleur angle d’attaque de votre problème.

Bon c’est pas spécifique à IRC mais c’est problème récurrent.

Idle

IRC est une messagerie instantanée certes mais généralement les utilisateurs sont passifs. On est connectés 247 mais on est pas forcément devant le terminal 247.

N’espérez donc pas une réponse instantanée, surtout un dimanche à 4h du matin. Il n’est pas rare de tomber sur des salons de discussions où rien ne se raconte pendant plusieurs jours et puis d’un coup : PAF ! Une fulgurance, une activité débordante, bref la vie reprend le dessus.

Chacun à un rythme de clavardage différent.

Bref si vous arrivez sur un salon désespérément calme, lancez une phrase ou deux mais surtout ne commencez pas à chouiner que personne ne répond. Et non, HL tout le monde ne vous attirera pas la sympathie des occupants.

Messages d’away

Bon bha maintenant que vous avez envie de rester connecté 247 avec votre client irc vous vous demandez : « Mais comment signaler au monde entier quand je suis pas dispo ?! »

Et bha en fait on s’en fout royal. Si vous répondez pas… bha on comprend assez vite que vous n’êtes pas là…

Épargnez-nous les messages d’away et les changements de pseudo.

AMSG

Bon je continue de râler encore un coup. Les amsg sont les messages envoyés à tous les salons de discussions où vous êtes connectés.

Et bha comme pour les messages d’away…

On

s’en

fout.


C’est vrai quoi… Ce n’est généralement que du spam.

Vous êtes toujours là ?

Je vous ai pas dégouté en passant pour un gros con aigri ?

Bon bha du coup venez sur IRC, c’est super sympathique ! Pleins de gens très intéressants (mais aussi des cons comme partout).

Même si la fréquentation est en légère baisse depuis quelques années, les salons de discussions sont toujours pas mal remplis surtout dans la communauté du logiciel libre. En tentant d’aider des gens, on apprend énormément les rouages internes d’un logiciel. Avec des problèmatiques que l’on a pas rencontré personnellement ou autre.

Ce n’est pas un réseau fédéré mais une myriade de réseaux indépendants avec leurs règles et coutumes spécifiques : Freenode est le réseau de référence pour le monde du Libre. Geeknode est un réseau français versé logiciel libre et neutralité du net hébergeant beaucoup de salons francophones dont une bonne partie de la FFDN. Et encore pleins d’autres réseaux IRC…

14ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Beaucoup de travail a été abattu sur le projet Librem 5 et même s’il en reste énormément, nous voulions faire un point des avancées réalisées par l’équipe ces deux dernières semaines. Profitez donc de cette brève mise à jour concernant nos effort récents et nos accomplissements.

Le travail logiciel

Cela représente une importante masse de travail pour le Librem 5. Il y a toute l’infrastructure comme l’apparence de l’interface utilisateur et les nouvelles bibliothèques et protocoles. Mais il y a aussi les applications familières qui sont nécessaires.

Sous le capot, notre interface téléphone (phosh) a subit d’importantes améliorations ergonomiques principalement concernant l’écran de verrouillage. Un important changement vient du fait que dorénavant le déverrouillage est délégué à PAM pour mieux gérer le verrouillage de l’appareil via un code PIN. Des ajouts de code ont également ont été fait pour mieux gérer de multiples sorties (écrans). Également, libhandy est notre lib pour l’UI handy (pratique) pour développer des applications GTK+. Il y a eu l’ajout récent d’un widget de flèches (HdyArrows) pour indiquer la direction de balayage de l’écran qui sera très utile pour de nombreuses applications, particulièrement pour l’écran de déverrouillage. Qui plus est, libhandy a eu quelques corrections de bugs et une refonte de la gestion du clavier. Puisque les graphismes sont importants, nous avons ajouté le support d’Etnaviv à weston-simple-dmabuf (un client Wayland pour tester l’implémentation du protocole Linux DMA-BUF). Nous avons aussi completé son support du format NV12. C’est utilisé pour tester l’implémentation de linux-dmabuf de wlroots. Nous aimerions tout particulièrement remercier le projet wlroots et Weston pour leurs revues de code, recommandations et supports.

Puisqu’on peut pas avoir un téléphone qui ne puisse faire d’appels téléphoniques, de grands efforts ont été fait sur Calls qui peut désormais émettre des appels ! (Et si vous l’aviez manqué, nous vous encourageons à lire l’article correspondantFR) En plus de tout le code écrit, les interfaces ont été documentées dans de code. L’empaquetage pour Debian est en préparation et nous taffons pour inclure un paquet Flatpak créé par un membre de la communauté.

Chaque smartphone nécessite un clavier visuel (OSK pour On-Screen-Keyboard), donc des efforts de devs ont été fait en ce sens pour les protocoles nécessaires et les upstreamer (les faire accepter par les mainteneurs des projets amonts). Pour l’instant, le protocole virtual-keyboard a été accepté pour être inclus dans wlroots. Le protocole text-input a été soumis upstream à l’approbation. Pour tester le protocole. virtual-keyboard, nous avons créé un prototype basé sur weston-keyboard. Vous pouvez lire ça plus en détail à propos du dev du clavier visuel dans l’article de DorotaFR.

Le travail matériel

Identifier et tester chaque composant matériel qui seront présent dans le dev kit et éventuellement le téléphone est une tâche non trivial. Après le choix d’un composant potentiel et la réception de quelques échantillons pour tests, il faut souvent modifier ou carrément écrire un module kernel avant même de pouvoir tester. Cela a été le cas pour évaluer et tester des module basse consommation Wifi, ce qui est encore en cours. Les moteurs de vibrations sont aussi en cours d’approvisionnements pour évaluations et les chargeurs de batterie sont testés. Nous sommes aussi en train d’investiguer différentes options pour les caméras.

Construire une communauté

La communauté continue d’occuper nos pensées. Nous avons donc monté un wiki PureOS qui n’est pas encore très étoffé mais qui pourrait devenir un endroit pour trouver de la documentation générale et des informations techniques sur PureOs et les produits Purism. Nous avons corrigé un soucis sur la mailing-list de la communauté pour être de nouveau fonctionnelle et avons ouvert nos salons de discussion Matrix pour que vous puissiez nous rejoindre avec vos Matrix ID existants. Pour plus d’infos à ce propos, jetez un œil à notre page “volunteer”.

Nous sommes heureux de recevoir des propositions de volontariat qui font un travail formidable pour aider à rendre le Librem5 génial. Si vous avez suivi ou contribué à nos dépôts de code, sachez que nous venons de migrer de Gogs à GitLab − la nouvelle adresse est source.puri.sm.

C’est tout les amis. Restez branchés pour de futures nouveautés à venir !


Beaucoup d’avancées logicielles. C’est assez encourageant et on dirait qu’un bon rythme s’est mis en place avec de la collaboration effective avec d’autres projets.

Par contre c’est toujours un peu flippant concernant la partie matos. Les dev kits devraient pas tarder à être finalisés pour être livrés… j’ai du mal à imaginer que la deadline initiale puisse être respectées. On croise les doigts

13ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


L’importance des claviers visuels

Le rôle des claviers ne doit pas être sous-estimé. Ils sont apparus bien avant les ordinateurs et survivent à l’ère des smartphones. Des millions de gens discutent avec leurs amis en écrivant sur leur cher ordinateur de poche en utilisant la vénérable disposition QWERTY datant de 1873.

C’est dur d’imaginer un smartphone sans dispositif d’entrée de texte. Certains rêvent de mouvement à la Minority Report mais le Librem 5 perpétue la tradition du clavier.

Ces dernières semaines, je suis devenue la spécialiste de l’équipe concernant le clavier. J’ai passé ce temps à m’assurer que toutes les pièces s’emboîtent bien et à prouver que le prototype fonctionne. Le prototype peut être vu dans la vidéo ci-dessous. Il est basé sur rootston (wlroots), GTK et weston-keyboard − notez ces noms, ils auront leur importance plus loin.

photo d'un clavier de machine à écrire en Qwerty

Une machine à écrire “Continental Standard” Photo issue de Wikipedia

Cette tâche s’est avéré un voyage intéressant et enrichissant. Le train Wayland m’a baladé des méthodes d’entrée à l’Asie, à travers les protocoles, ainsi que les communautés FLOSS. Je vais tenter de vous décrire mon histoire.

“Ça doit pas être bien dur, pas vrai ?”

À la surface, un clavier est un appareil simple. C’est un assortiment de boutons attachés à un ordi. Appuyez sur un bouton et l’ordinateur réagit promptement. Placer un clavier à l’écran ne devrait pas être difficile : il suffit de réserver une portion de l’écran pour les touches. Appui : action. Ça ressemble à un clavier de téléphone, non ? Il n’apparait pas à l’écran tout le temps. Et il corrige les erreurs. Pas mal, il y a d’autres différences ?

En fait, les claviers visuels ne sont pas considérés comme des claviers. Ils font partit d’une plus large catégorie appelée : «les méthodes d’entrées». Ces méthodes d’entrées peuvent avoir plus de responsabilités que juste permettre d’appuyer sur des touches. On pourrait avoir une touche pour corriger les erreurs de frappe, ou bien choisir une suggestion depuis un dictionnaire, trouver des synonymes, entrer des phrases complètes que j’utilise fréquemment comme “Ahoy Matey!”. Pour les langues asiatiques, il est quasiment indispensable d’en utiliser pour écrire.

Illustration d'anthy un logiciel de méthode d'entrée pour les langues asiatiques

Écrire en japonais en utilisant la méthode d'entrée Anthy. Image issue de Wikipedia

En général, les méthodes d’entrée permettent à l’utilisateur d’entrée du texte, il existe une grande variété de façon de faire. Elles peuvent afficher un pop-up de suggestions, suggérer des phrases, reconnaître de l’écriture manuscrite or proposer carrément proposer des systèmes comme Dasher.

Arrive Wayland

Pour moi cependant, la première tâche était de parvenir à taper du bon vieil anglais en appuyant sur des boutons sur l’écran. Le Librem5 utilisera des applications Wayland native exclusivement (grâce à GTK3 et Qt5) et c’est un point important pour le clavier. Wayland est en charge des interfaces humaines comme les claviers, souris, écrans tactiles et méthodes d’entrée. Un compositeur Wayland agit en tant qu’intermédiaire entre les appareils et les applications. Il définit comment les applications se partagent ces appareils. Imaginez le boxon que ce serait si toutes les applis écoutaient les clavier en même temps !

Diagramme montrant la relation entre les différents appareils d'entrée, le compositeur au centre, puis les applis à droite à qui le compositeur redirige les entrée

Voilà où la partie technique démarre. Wayland est un ensemble de protocole. Il y en a un, wl_keyboard, définissant comment les applications écoutent les appuis sur le clavier. De la même façon, un autre (text-input) défini comment les applications écoutent les méthodes d’entrées. Encore un autre, nommé input-method, défini comment les application de méthode d’entrée communiquent avec le compositeur. Cela nous donnent trois classes de logiciels qui ont besoin de travailler ensemble pour créer un clavier visuel : application, compositeur et clavier lui même.

Premier réflexe, j’ai regardé comment ces protocoles étaient supportés par les projets existants. La pièce centrale est le projet wlroots sur lequel nous nous basons pour le compositeur du Librem5. Il ne supporte aucun de ces protocole et mon intention d’ajouter leur support a été chaudement apprécié par les mainteneurs. Tout n’est pas aussi rose cependant. Le seul clavier implémentant le protocole input-method est weston-keyboard, qui n’est clairement pas fait pour les téléphones. Le cas du protocole text-input est encore plus intéressant. Voyez-vous, j’ai menti un peu : il y a en vrai trois protocoles pour cela. Qw et KWin se reposent essentiellement sur _v2 et GTK et gnome-shell utilisent gtk_input_method ( tant qu’à digresser, le projet maliit utilise zwp_text_input_unstable_v1). C’est un très mauvaise nouvelle car chaque compositeur devra supporter les deux méthodes pour communiquer les entrées textes pour les applis Qt et GTK.

Le moyen raisonnable de résoudre ça serait de convaincre tout le monde de standardiser un seul protocole. Avant de plonger plus profondément dans les politiques des communautés, j’ai décidé de me salir les mains afin d’avoir une meilleure vue des détails.

Le travail

J’ai choppé rootston, GTK3.22 et weston-keyboard et j’ai codé le support de wlroots. Après l’arrivée de ce code, gtk_input_method a été proposé pour devenir le nouvel zwp_text_input_unstable_v3 officiel. Pendant ce temps, j’ai envoyé une pull reguest à wlroots. De là a émergée une longue série de discussions avec les devs de wlroots. Deux conclusions en sont sorties :

  • text_input_v3 est très proche de ce qu’attend la communauté
  • input-method est à moitié à l’abandon, incomplet et duplique de nombreuses fonctionnalités d’autres protocoles.

En bref, les deux protocoles nécessitent de du boulot.

La bonne nouvelle est que ces discussions étaient très approfondies et impliquaient des gens de différents projets ce qui a clarifié ce qui devait être fait. Pour l’instant, je peaufine des propositions pour chacun de ces protocoles qui seront étudiées en profondeurs et qui seront je l’espère suffisamment propres pour être adoptés et inclus dans les protocoles Wayland.

Avoir de bons protocoles faisant leur job devrait convaincre GTK, Qt et Maliit de s’uniformiser sur une façon de faire afin d’éviter la duplication du code et des efforts.

Vous vous demandez peut-être : “Vous avez déjà une implémentation fonctionnelle, pourquoi se préoccuper des autres projets ?” Dans l’équipe Librem 5, nous réalisons à quel point notre projet sera important dans l’écosystème Wayland. Une fois le téléphone sorti, ça sera la référence pour les projets à venir. Agir dans notre coin, couperai le Librem de certains projets alors que d’autres suivraient le reste du monde. Faire les choses bien et par étape permettra une interopérabilité entre les téléphones Librem et les autres projets sans efforts ce qui améliorera la compatibilité pour tout le monde.

La suite ?

Le travail sur les protocoles se poursuit et leurs implémentations sera proposé pour leur inclusion dans les libs upstreams (les bibliothèques de codes utilisés par les autres projets). À un moment, weston-keyboard devra disparaitre ou être radicalement transformé ce qui signifie plus de travail pour la design team. Les protocoles devraient être standardisés ou presque lorsque nos premières boards arriveront dans les mains du public. Je suis très curieuse des méthodes d’entrées que vous créerez − les idées entendues durant les discussions étaient folles ! Et enfin j’espère être témoin de l’expérience en la matière de la part des asiatiques ;-)

Dorota


Dorota est dans l’équipe de dev mobile de chez Purism.

J’espère que l’unification des protocoles d’entrées de Wayland aura effectivement lieu sinon ça risque d’être assez chiant à l’usage si l’on mixe du gtk et du Qt.

D’ailleurs je connaissais pas du tout le projet Maliit.

J’aimerai bien une réimplémentation libre de MessagEase que j’utilise sur l’android. C’est un clavier qui ne tente pas de mimer un clavier de machine à écrire mais est pensé pour être utilisé sur du tactile.

Trifouillage de firmware de clavier

Je vous ai déjà parlé de mon clavier fait maison il y a bientôt trois ans dans ce premier article. Il est ptet temps de faire la partie 2 ? Ouai mais non c’est trop tard.

Par contre je viens de modifier un peu la disposition du clavier et du coup c’est une bonne occase pour en reparler ! Ça sera un peu la seconde partie en quelque sorte où j’aborderai un peu plus la partie programmation du firmware.

S’y remettre trois ans plus tard

Bon donc ce clavier me sert constamment depuis tout ce temps. Il fonctionne superbement bien malgré son look… particulier.

Photo du clavier au 05/06/2018

Le fameux clavier lors de la rédaction de l'article (admirez le repose poignet à base de SSD et de batterie).

J’ai déjà refait une soudure ou deux qui s’étaient pétées mais bon rien de bien méchant. Ça se refait en moins de cinq minutes montre en main.

Par contre depuis que je réutilise mpd j’ai pas de moyen simple de passer au morceau de musique suivant. J’ai pas de touche multimédia et j’ai pas envie de rajouter un raccourci i3 à base de alt ou autre…

Il me restait toujours deux emplacements de libres sur le clavier mais à des emplacements un peu bâtard du coup pas trop envie d’y toucher, je conserve ce Maj droite et ce GUI (la ptite touche menu à droite de la touche windows droite sur un bon vieil azerty des familles).

Une solution élegante serait de rajouter des touches multimédia par l’intermédiaire de la touche Fn.

Bon bon c’est parti ?

Non !

J’ai bien gardé les sources du firmware du clavier dans un ptit gogs perso. Par contre j’ai plus tout le reste.

Le reste ? Bha déjà il faut le compilateur kivabien, c’est à dire gcc-avr.

Et il faut le ptit outil pour transferer le binaire de l’ordi jusque dans la ptite puce du ptit Teensy.

Propre via Gentoo

Bon bha déjà, ça commence par un emerge arduino avec tout un tas de dépendances des plus effrayantes à base de java et compagnie…

Ça fait un peu chier mais bon faut le faire. A man’s got to do what a man’s got to do !

Pendant que ça s’installe je vais voir la FAQ PJRC (PJRC est le fabricant du Teensy).

The AVR toolchains provided by Gentoo and Arch are broken. They compile .hex files which simply do not work!

Bon … c’est ptet ancien, je verai le moment venu.

Après arduino, il faut Teensyduino qui est un add-on pour rajouter le support du Teensy à l’IDE arduino. En gros chaque petit appareil a ses spécificités et cet add-on permet d’ajouter tout ce qu’il faut pour que l’IDE soit pleinement compatible avec le Teensy et puisse également transferer les binaires génerés dans le Teensy. Ça se télécharge directement depuis le site officiel de PJRC.

Quand on lance le truc il faut l’installer par-dessus l’install arduino. Bon je lui file /usr/share/arduino mais non, l’installer n’en veux pas…

Bon allez j’ai pas envie de perdre deux heures en dégueulassant ma ptite gentoo pour ça.

Sale via Debian

Bon je créer un chroot jetable donc pas besoin de me faire chier avec de la création d’user et compagnie, je veux juste un environnement basique le plus vite possible.

Donc je choppe l’installer arduino directement depuis le site Arduino parceque ça ne marchera pas avec la version made in Debian… J’untar le fichier téléchargé.

Je re-récupère Teensyduino depuis le site officiel PJRC et je lui donne le dossier où j’ai foutu Arduino. Et ça marche \o/

Je récupère les sources du firmware depuis mon gogs. C’est un bon gros git avec des sources pour tous pleins d’autres claviers également.

Je récupère aussi pour tester le firmware déjà compilé que j’utilise actuellement.

Je teste de le transférer dans le Teensy histoire de m’assurer que tout le bousin est fonctionnel. Et hop ça fonctionne, je peux passer sereinement passer à la suite. Bref le ptit quart d’heure de création de chroot n’aura pas été perdu vu que tout fonctionne comme sur des roulettes.

Le firmware du clavier

Je me base sur un firmware libre assez réputé dans le milieu des bidouilleurs de claviers : TMK. Le firmware est donc un programme qui tourne dans le Teensy qui possède un tout petit CPU à 16Mhz.

Il a plusieurs tâches à effectuer. Il doit comprendre quels boutons sont appuyés, les débouncer, choisir quel signal transmettre à l’ordinateur.

Et comme c’est un logiciel, on peut s’amuser à tripotter tout ces comportements. Bon par contre je suis pas codeur donc c’est un peu tendu de modifier ça mais par chance le code est commenté de partout avec beaucoup de doc sur le Github avec explications des variables et tout. Bref un projet bien sympa pour les bidouilleurs du dimanche soir.

La partie qui m’intéresse particulièrement aujourd’hui est la modification du keymap.

lrd/keymap_lrd.c

Bon donc tout ce qui concerne spécifiquement mon clavier se trouve donc dans le dossier lrd (ouai je lui ai pas trouvé de nom à ce clavier). On trouve plus précisément le keymap_lrd.c qui est utilisé par le firmware (c’est défini dans le Makefile).

Voilà ce qu’on y trouve, c’est plutôt simple.

#include "keymap_common.h"
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: BÉPO */
KEYMAP(GRV,    1,    2,    3,    4,   5, FN2,   6,   7,   8,   9,   0,MINS, \
       EQL,    Q,    W,    E,    R,   T,RSFT,   Y,   U,   I,   O,   P,LBRC, \
       TAB,    A,    S,    D,    F,   G, DEL,   H,   J,   K,   L,SCLN,QUOT, \
       LSFT,   Z,    X,    C,    V,   B,BSPC,   N,   M,COMM, DOT,SLSH,RBRC, \
       LCTL,RGUI, BSLS, LGUI, LALT, SPC,RALT, ENT,LEFT,  UP,DOWN,RGHT,FN1),
/* 1: Fn1 */
KEYMAP(TRNS,  F1,  F2,  F3,  F4,  F5, ESC,  F6,  F7,  F8,  F9, F10, F11, \
       TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
       TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
       TRNS,TRNS,TRNS,TRNS,TRNS,MPRV,MPLY,MNXT,TRNS,TRNS,TRNS,TRNS,TRNS, \
       TRNS,TRNS,TRNS,TRNS,TRNS,VOLD,MUTE,VOLU,HOME,PGUP,PGDN, END,TRNS),
/* 2: test */
KEYMAP(  NO,   A,   B,   C,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, \
         NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO),
};
const uint16_t PROGMEM fn_actions[] = {
    [0] = ACTION_LAYER_TAP_KEY(1, KC_ESC), // Vers Fn1
    [1] = ACTION_LAYER_TAP_KEY(1, KC_ESC), // Vers Fn1
    [2] = ACTION_MODS_KEY(MOD_LSFT, KC_INS),
};

Bon ça marche par couches, la 0 est donc l’accès direct des touches classiques, la couche 1 correspond aux touches pressées en même temps que Fn1. La couche 2 est un reste d’expérimentations que j’ai pas pris le temps de virer.

Ceux qui ont l’œil affûté verront que bien que le clavier soit bépo il est défini en qwerty. C’est parcequ’il est réellement qwerty mais que c’est ensuite Xorg qui map ça en bépo. En vrai un clavier n’envoi pas les lettres à l’ordinateur mais envoie une valeur numérique et ensuite l’OS se démerder pour transformer ce numéro de touche en une lettre en fonction de la configuration. C’est d’ailleurs pour ça que certains programmes ont toujours les mêmes raccourcis quelque soit la disposition clavier choisie car ils se basent sur le keycode et non le keysym.

Pour ceux qui ont les yeux encore plus affûtés, vous aurez également remarqué que j’ai pas de touche Échap et que j’ai Fn1 et Fn2. Bravo, vous êtes fort (si c’est pas le cas, faites semblant, je peux pas déceler vos mensonges à ce sujet).

Fn1 est donc la touche qui déclenche l’action [1] qui est définie en dessous, c’est-à-dire ACTION_LAYER_TAP_KEY. Cette fonction est G.É.N.I.A.L.E et encore je pourrai insister un peu plus. En gros cette touche a dorénavant deux fonctions :

  1. Passer sur la couche 1 lorsqu’elle est maintenue enfoncée donc Fn.
  2. Faire KC_ESC lorsqu’elle est juste tappée, c’est-à-dire Échap.

Voilà deux touches en une. On a jamais besoin de maintenir Échap appuyé donc on peut très bien l’utiliser de cette façon. En plus, en étant dans le coin tout en bas à gauche, elle est super accessible de la paume de la main sans viser; dans vim (et ses copains) c’est un régal ! Ce système de double touche est plus souvent utilisé avec Espace ce qui lui a donné son nom de SpaceFn mais il m’arrive de jouer de temps à autres donc la touche Espace est déjà bien utilisée…

L’action [2] est la combinaison de touche MOD_LSFT et KC_INS qui s’avère être Majuscule + Inser. C’est un raccourci classique de Xorg pour Coller. Et hop une touche dédiée pour coller du texte !

Les modifs du jour

Bon du coup pour rajouter les touches multimédia, j’ai bidouillé le fichier keymap sur la couche 1. J’ai ajouté MPRV, MPLY, MNXT qui correspondent à Multimedia Previous, Multimedia Play et Multimedia Next. Sous Linux, ces touches sont appelées XF86AudioPrev, XF86AudioPlay et XF86AudioNext.

Bon bha une fois ces modifs faites, comment qu’on compile et on qu’on upload ?

Mise en service

Compilation

C’est tout simple, un simple make va compiler votre nouveau firmware. Ça va générer pas mal de fichiers dont un fichier avec l’extension .hex . Dans mon cas c’est un ptit fichier de 48Ko contenant tout ce qu’il faut.

Ensuite faut l’envoyer.

Envoi

Bon on va filouter.

Normalement l’IDE arduino s’attend à compiler lui même le code et tout mais j’ai déjà compilé par moi même ce qu’il faut avant. On lui indique donc juste quel type de board on veux trifouiller dans le menu Tools/Boards/Teensy 2.0 . (houlà j’ai vraiment pas l’habitude de parler de logiciels graphiques avec des menus…)

Ensuite pour démarrer la ptite applet d’upload on va dans Sketch/Upload Ce qui ouvrira une ptite fenêtre.

capture d'écran de la popup d'upload du binaire

Upload du binaire dans le Teensy

Là on ouvre File/open hex en allant chercher le fichier géneré précédemment.

Et maintenant l’instant stressant : Appuyer sur le ptit bouton du teensy. Et normalement une barre de progression va apparaitre et faire son œuvre.

Test

Tout s’est bien passé ?

Bha… suffit d’essayer d’utiliser le clavier, pas besoin de débrancher/rebrancher ni rien, c’est instantanné. Ça permet d’itérer très rapidement car ça prend moins de 10 secondes entre l’édition et le test.

Conclusion

Avoir un clavier où on peut trifouiller intégralement le firmware c’est trop bien ! C’est un super jouet.

TMK est un super bac à sable et en plus la doc est géniale. Sérieux, regardez comment les actions des touches et les touches elles-mêmes sont super bien documentées. Mais au delà de l’aspect fun c’est vraiment fonctionnel comme un vrai clavier lambda si ce n’est mieux !

En dehors de la phase de préparation de l’environnement qui est un poil chiante et inintéressante (mais bon rapidement mis en place quand même) c’est vraiment super agréable.

Gérer les spamfilters sur UnrealIrcd

Unrealircd est un ircd très populaire qui a près de vingt ans désormais mais à connu un sursaut d’activité ces dernières années pour arriver en version 4. On l’utilise notamment chez Geeknode sur les quelques serveurs du réseau.

Et comme tout réseau IRC qui se respecte, on subit régulièrement des relous qui viennent spammer les salons et les utilisateurs de façon plus ou moins créative. Un groupe particulièrement chiant passe régulièrement pour faire leur propagande en floodant.

Bref un moyen de contrer leur spam est donc d’utiliser la fonction Spamfilter d’Unrealircd.

J’avais un peu survolé les différentes actions que peuvent faire un ircop ici mais là c’est spécifique au spamfilter.

Spamfilter

La syntaxe est à première vue assez simple mais pourtant toujours un peu spéciale.

Lister

Déjà pour lister les filtres déjà existant : /spamfilter. Ce qui vous sortira un listing de ce genre :

10:26:33   geeknode  -- │ F simple cpnNPq kill 0 9842810 86400 "supernets" Lord!Lord@geeknode.fuckyeah :iяс.sцреяиетs.ояg сни sцреявоwl
10:26:33   geeknode  -- │ F posix cpnNPq tempshun 0 25184053 86400 racisme Lord!Lord@geeknode.fuckyeah :*vap0r*freenode*
10:26:33   geeknode  -- │ F posix cpnNPq kill 0 25696998 86400 supernets Lord!Lord@geeknode.fuckyeah :*SUPERNETS*
10:26:33   geeknode  -- │ F posix cpnN tempshun 0 26141654 60 spam Lord!Lord@geeknode.fuckyeah :*www.icq-net.eu*

Ajouter

Bon pour ajouter un nouveau filtre c’est assez simple si l’on suit la doc

/spamfilter add -regex cnNPq kill 0 l0de_spammer \ [lL1][oO0][dD][eE3]\

En y regardant de plus près on voit quelques trucs chiants :

  • Le type de spamfilter commence par un - donc c’est pas juste regex ou simple mais -regex ou -simple. C’est le truc que j’oublie à chaque fois.

  • Ensuite, dans la raison il faut remplacer les espaces par des underscore _ (le «tiret du 8»).

  • Mais surtout dans la regex elle-même, on ne peut pas foutre d’espace, il faut les échapper avec “\ ”.

Supprimer

Bon pour l’instant cet article n’apporte pas grand chose de plus que la page du wiki vous me direz. C’est vrai. :-(

Mais mais mais je vais me rattraper tout de suite avec cette astuce de sioux !

En théorie pour supprimer un spamfilter vous devez faire exactement la même commande que lorsque vous en avez mis un en place. Mais c’est pas forcément simple car lorsque vous les listez la syntaxe est pas exactement la meême. C’est vite très chiant à retrouver.

Mais si vous faites /spamfilter del vous aurez un listing mieux foutu :

10:41:56   geeknode  -- │ F simple cpnNPq kill 0 9843733 86400 "supernets" Lord!Lord@geeknode.fuckyeah :iяс.sцреяиетs.ояg сни
                        │ sцреявоwl
                        10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f7421b79b40
                        10:41:56   geeknode  -- │ -
                        10:41:56   geeknode  -- │ F posix cpnNPq tempshun 0 25184976 86400 racisme Lord!Lord@geeknode.fuckyeah :*vap0r*freenode*
                        10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f74216e0080
                        10:41:56   geeknode  -- │ -
                        10:41:56   geeknode  -- │ F posix cpnNPq kill 0 25697921 86400 supernets Lord!Lord@geeknode.fuckyeah :*SUPERNETS*
                        10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f74216dfe00
                        10:41:56   geeknode  -- │ -
                        10:41:56   geeknode  -- │ F posix cpnN tempshun 0 26142577 60 spam Lord!Lord@geeknode.fuckyeah :*www.icq-net.eu*
                        10:41:56   geeknode  -- │ To delete this spamfilter, use /SPAMFILTER del 0x7f74216dfd30

Et surtout ils donnent une commande avec un id pour le supprimer facilement \o/.

Joie et Félicité.

Bon bha voilà, l’article avait un peu d’intéret quand même (plus pour moi que pour vous car je n’arrive vraiment pas à mémoriser cette syntaxe et ce truc pour virer les anciens spamfilters).

Tiens et tant qu’à y être, pour les curieux qui se demandent à quoi ça ressemble quand un spamfilter se déclenche :

11:16:29   united.geeknode.org  -- │ united.geeknode.org: [Spamfilter] lorddl!lorddl@LFbn-1-7920-9.w92-167.abo.wanadoo.fr matches filter '\ [lL1][oO0][dD][eE3]\ ': [PRIVMSG #testage: 'lode lode lode'] [l0de spammer]

On voit sur quel serveur était connectée la personne, son identité, la regex qui a déclenché, le message qu’elle a envoyée et enfin le message envoyé comme raison.

C’est pour ça que si ça déclenche, vous risquez de voir apparaitre des ircop quelques temps après ;-)

Firefox : Project Fusion - Remplacer le Tor Browser

Ha bha enfin une bonne décision de la part de Mozilla concernant Firefox !

Le Project Fusion est dans la continuité de Mozilla pour rerendre Firefox sexy. Après les perfs en remodelant toute la partie sous le capot, c’est maintenant la sécurité qui revient sur le devant.

Depuis des années il existe le Tor Browser qui est un fork de Firefox avec de nombreuses modifications pour améliorer tout ce qui a attrait à l’anonymat et tout ce qui est protection de la vie privée. Ce fork était geré par l’équipe de Tor depuis des années et représentait une importante masse de boulot pour pouvoir suivre le rythme de Firefox et s’assurer que tout continue de fonctionner tout en ne leakant pas plus de données.

Donc maintenant que Firefox tente de regagner désespérément des parts de marché, ils se sont rendu-compte qu’inclure des fonctionnalités du Tor Browser dans le vrai Firefox serait un argument marketing intéressant. Tant mieux ! Du coup il va y avoir pas mal de collaboration entre les deux équipes. Le but explicite est de rendre le Tor Browser obsolète.

Bref on devrait bientôt avoir pas mal de fonctionnalités assez poussées mais dans un enrobage bien pensé pour les non-techos.

Quelques fonctions à venir :

  • Meilleure résistance aux fingerprintage
  • Intégration à Tor
  • Le private mode sera boosté aux hormones

Bref avec un peu de chance ça sera une très bonne chose pour tout le monde. Avec un peu de bol ils gagneront quelques part de marché histoire de mieux résister au vilain Chrome.

Voilà l’annonce officielle de la part de Tor.

Utiliser HTTP2 et le PUSH avec Nginx

HTTP2 est une nouvelle version du protocole HTTP qui améliore pas mal de points de l’original.

Tout d’abord la sécurité car la plupart des implémentations ne fonctionne qu’avec une couche de TLS qui était autrefois réservé au HTTPS.

Mais surtout les perfs ont été grandement travaillées. HTTP a été très largement utilisé pendant près de 20 ans avant que le boulot sur son successeur ne commence ce qui a laissé suffisamment de temps pour savoir où ça coinçait et donc comment améliorer le truc.

Optimisations

Compression des headers

Certaines optimisations ont été un peu controversées comme par exemple le fait de compresser les headers. Ça permet d’échanger un peu moins de données mais la contrepartie est que ce n’est plus un vrai protocole texte.

Pour info, un protocole texte échange des données uniquement sous forme de texte ce qui permet à un humain de facilement pouvoir le comprendre contrairement à une machine qui devra bosser un peu plus. L’argument de savoir si un protocole texte est bien provoque de nombreux débats depuis pas mal d’années.

Multiplex

Un autre point d’amélioration de HTTP2 est le multiplexage des données. Auparavant chaque ressource récuperé par le navigateur nécessitait l’envoi d’une requête au préalable dans une nouvelle connexion TCP. HTTP1.1 a ajouté le PIPELINING ce qui a permis de réutiliser la même connexion TCP pour plusieurs requêtes et réponses. Le gain était déjà énorme mais il fallait toujours une requête, avec une réponse distincte pour chaque ressource, le tout dans une seule connexion TCP. Malheureusement cette technique n’était pas utilisé dans tous les cas voire était rare. HTTP2 lui apporte le Multiplex qui permet de faire à peu près pareil mais encore plus efficace. Dans une seule requête, un client peut demander plusieurs ressources différentes et toutes les recevoir dans une seule réponse.

Cette technique a rendu obsolète certains bidouillages mise en place avec HTTP1 tel que le sharding qui consistait à répartir les ressources sur de nombreux domaines différents pour forcer le navigateur à ouvrir plusieurs connexions simultannées. Maintenant, une seule connexion est préferrable plutôt que plusieurs.

Mais pour aller encore un peu plus loin, il existe aussi le PUSH.

Push-toi de là !

Lorsqu’un client va demander une ressource, le serveur web va envoyer le document voulu, mais il peut également en envoyer d’autres qui lui semblent pertinent.

Le client reçoit les données avant même d’en avoir fait la demande ce qui permet (si c’est bien utilisé) de ne pas avoir à demander cette ressource et donc de pouvoir l’utiliser plus vite.

Par contre, vous vous doutez que si le serveur s’amuse à envoyer un fichier inutile, le client n’utilisera pas ce fichier et du coup vous aurez consommé de la bande passante pour pas grand chose…

Et dans le Moteur X ?

H2

Pour utiliser HTTP2, pas grand chose à faire dans votre conf nginx. Dans le block server vous devriez avoir un listen (ou plus). Sur celui concernant le port 443, ajoutez http2.

C’est tout.

PUSH

Nginx sait pusher du contenu depuis la version 1.13.9 sortie en Février 2018. Je me suis empressé de le mettre en place et de faire quelques tests.

Bon du coup dans bloc de type location, depuis l’endroit où vous voulez pusher votre contenu, il va falloir rajouter un simple :

http2_push /css/neodark.css;
    http2_push /favicon.ico;

Et hop votre fichier css et votre favicon seront envoyés.

Si votre site est simple, ça sera vite torché, mais si vous avez pas mal de trucs ça va vite être chiant. Et là vbrandl va vous sauver avec son générateur de conf nginx. Vous lui donnez une page web, vous lui dites quels types de ressources vous voulez push, il vous choppe les liens et vous transforme ça en bout de conf nginx à copier/coller.

Et maintenant pour vérifier que ça marche soit vous utiliser les devtools de chromium qui vous indiques (dans performance) si c’est issu d’une requête ou d’un push. Ou bien si vous voulez un truc plus simple vous avez http2-push qui est un ptit site ouaib permettant de tester une URL.


Voilà vous allez probablement pouvoir grapiller quelques ms sur l’affichage de votre site ouaib avec ça. C’est en place depuis déjà plusieurs jours ici sans soucis, j’ai pas constaté d’augmentation de la conso de bande passante (j’ai été prudent sur les push).


PS :

Comme signalé par Buzut, si vous mettez le push comme indiqué dans l’article, à chaque requête les ressources seront poussées au visiteur ce qui n’est pourtant utile que la première fois. Il est possible de gérer ça en utilisant un cookie et de ne pusher que lorsque le cookie n’existe pas comme c’est montré sur l’article nginx à ce propos.

Ce qu'il se passe quand on envoie un mail

On m’a soufflotté dans l’oreille que ce sujet pourrait être intéressant. Et effectivement ça l’est. Enfin… si on s’y intéresse… Bref…

Quelles sont les étapes qui se passent, par où va transiter les données. Voyons tout ça.

Pour l’exemple, je vais aborder le cas suivant :

Un mail envoyé depuis un client mail type thunderbird via mon serveur auto-hébergé vers un utilisateur gmail.

1 - Rédaction du mail

La partie la plus normale consiste donc à rédiger le texte de votre email. Il s’agit des données à proprement parlé.

C’est un simple texte ce qu’il y a de plus basique ou bien du texte au format HTML. Dès lors que vous ajoutez du formattage à votre texte (du gras/italique/couleur/taille de police/…) c’est du HTML. De lui même, l’éditeur de texte va donc transformer votre texte vers le format HTML pour apporter toutes ces subtilités. Votre destinataire va donc de voir “interprêter” ce texte HTML pour l’afficher avec parfois des résultats différents selon le logiciel.

Au passage, lorsqu’on rédige un mail en HTML contenant des images, celles-ci ne sont pas incluent à proprement parlé il ne s’agit que de liens. Votre lecteur de mail va suivre ces liens pour au moment de la lecture pour vous afficher les images.. C’est un moyen de voir si les mails sont consultés ou non et d’éventuellement vous profiler (en envoyant une adresse unique à chaque mail). Il est donc préferrable de désactiver l’affichage automatique des images dans les mails.

2 - Ajout des pièces jointes

Étape que l’on réalise généralement lors d’un second mail de type “Oups voilà les pièces-jointes oubliées précédemment”.

Le mail est un protocole de type texte. Cela veux dire que toutes les informations transportées le sont sous forme de texte, aussi bien les métadonnées que les données. Il faut donc transformer votre fichier en texte avec le codage base64 qui consiste en 64 caractères alphabetiques permettant de coder n’importe quelles données.

Cependant, c’est loin d’être optimisé :

cat 99-ce-quil-se-passe-quand-on-ouvre-une-page-web.md| base64 | wc -c
23939
cat 99-ce-quil-se-passe-quand-on-ouvre-une-page-web.md| wc -c
17720

Un même fichier une fois passé en base64 est près d’un tier plus lourd que l’original. Cela explique pourquoi certaines fois des fichiers juste en dessous de la limite de taille maximale ne passent pas.

3 - Ajout des méta-données utilisateurs

Bon votre mail contient votre texte et d’éventuelles pièces-jointes, c’est chouette mais ça va pas aller bien loin. Il faut donc un destinataire, voir plusieurs destinataires cachés ou non. Vous allez aussi mettre un sujet à votre mail. Et dans certains cas indiquer quelle est l’adresse d’envoi (si vous en avez plusieurs) et/ou de retour.

Ce sont les méta-données que vous entrez manuellement.

Mais ce ne sont qu’une partie des méta-données du mail puisque votre logiciel va en rajouter ainsi que les différents serveurs qui traiteront votre mail.

4 - Connexion vers le serveur d’émission

Bon bha ça y est vous avez cliqué sur le bouton d’envoi et du coup votre logiciel va commencer à parler à une autre machine !

Votre client mail est appelé un MUA pour Mail User Agent dont le boulot est de converser avec un MTA pour Mail Transfert Agent qui lui est chargé de réellement envoyer/recevoir des mails. Votre client mail donne tout simplement le mail fraîchement préparé au serveur SMTP qui lui a été configuré, en parlant le protocole SMTP (certains logiciels apellent ça serveur d’envoi).

Le protocole SMTP est également un protocole texte assez ancien (plus ancien que le web) mais a connu quelques évolutions comme notamment l’authentification et le chiffrement). Historiquement le port utilisé était le 25 mais c’est généralement le port 587 qui est désormais utilisé dans le cas d’envoi de mail. À l’usage il s’est créé une distinction entre l’envoi de mail et la réception.

Un serveur de mail n’avait pas de notion d’envoi de mail mais juste de transfert, en gros il reçoit un mail sur le port 25 sans savoir si ce mail provient d’un autre serveur de mail ou s’il provient d’un logiciel d’envoi de mail. Avec le temps on a rajouté de l’authentification pour l’envoi de mail ce qui nécessite un traitement différent et donc un port différent.

À noter que certains FAI bloquent les connexions vers le port 25 aussi bien dans un sens que dans l’autre, à des fins de luttes contre le spam. Ce blocage est dans le meilleur des cas débrayable et parfois non, ce qui vous empêche d’utiliser un serveur mail autre que celui de votre FAI.

Dans notre exemple, thunderbird se connecte donc à notre serveur de mail auto-hébergé (dans mon salon, donc sans requête DNS).

4.1 - Connexion TCP vers le serveur d’émission

Mon serveur est configuré de sorte qu’un mail émis depuis une de mes adresses perso ne peut se faire que s’il y a authentification. Il faut donc se connecter au port dit de soumission (puisque on y soumet notre mail) c’est à dire le port TCP 587.

Pour l’instant c’est donc dans mon réseau local. Je ne part pas tout de suite sur le réseau des réseaux. Il s’agit d’une connexion TCP classique en trois parties : “Connexion ?”, “Ok tu peux te connecter.”, “Merci, on est connectés.”.

4.2 - Chiffrement de la connexion

Même s’il s’agit d’une connexion sur mon réseau locale, vu qu’il y aura authentification, je préferre chiffrer la connexion. Déjà parceque ça ne mange pas de pain et ensuite ça permet d’avoir la même chose aussi bien en local qu’en distant via un réseau non sûr.

D’ailleurs de manière globale, ne considérez aucun réseau comme sûr, une machine vérolée volontairement ou non est si vite arrivée…

4.3 - Auth

Bon la connexion est désormais sûre, il ne reste plus qu’à Thunderbird de vous identifier via les identifiants/mot de passe configurés. Cette étape permet au serveur d’émission de n’accepter des mails en votre nom que si les identifiants sont bons pour éviter l’envoi de spam dans votre dos.

Si l’une des deux étapes précédentes échoue, votre serveur vous enverra probablement bouler sans ménagement et coupera la connexion TCP ce qui vous gratifiera d’un joli message d’erreur dans votre Thunderbird.

5 - Vérifs de base antispam avant émission

Internet c’est la jungle et je pense que vous connaissez tous à peu près l’ampleur du spam. Bref tout le monde tente de s’en protéger le plus possible. Ne pas recevoir de spam c’est bien, ne pas en envoyer soi même c’est mieux ! Si votre serveur a la malheur d’en envoyer vous serez très vite blacklisté de partout il vous faut donc vous protéger pour ne pas finir en tant qu’Open relay.

Bon déjà on s’est authentifié, c’est le minimum syndical.

Ensuite il existe tout plein de petits réglages sur le serveur afin de limiter les possibles fuites. Ce sont principalement des ptites restrictions sur les adresses IP autorisées à se connecter ou bien quels domaines sont autorisés à envoyer du mail… Bref rien de bien méchant, c’est du vite vu par le serveur.

Il est même possible de faire passer le mail sortant dans un antispam mais je ne l’ai pas mis en place personnelement mais sachez que c’est possible afin de vraiment s’assurer que ses utilisateurs n’envoient pas de spam. Sur une installation conséquente c’est quasiment indispensable pour ne pas transmettre du spam à la première machine vérolée.

Dans un second temps, le mail va être signé par le serveur d’émission en fonction du domaine d’émission du mail : il s’agit du DKIM le Domain Key Identified Mail. C’est une signature qui atteste que le mail provient bien du serveur de mail autorisé par mon nom de domaine (dans mon serveur DNS, j’ai annoncé que les mails provenant de mon domaine sont signés par telle clé). Contrairement à GPG, cette signature vaut pour tous les mails du domaine, ils ne chiffrent pas le message et ne garantissent pas de l’identité de l’émetteur mais l’identité du nom de domaine d’émission. Toutes les personnes utilisant le même nom de domaine pour émettre leur mail auront la même signature.

Qui plus est cette signature atteste de l’intégrité du mail : il prouve qu’à partir de votre serveur d’émission jusqu’à la lecture, le mail n’a pas été modifié. (Par contre entre le logiciel rédigeant le mail et le serveur d’envoi par contre pas de certitude mais c’est généralement un segment de confiance.)

Bref, cette signature sera placée dans l’entête du mail et sera utilisée par les serveurs intermédiaires et finaux afin de vérifier que votre mail soit bien légitime. Elle ne sert pas directement aux utilisateurs et n’est donc que rarement montrée. Cette signature atteste uniquement de l’authenticité du serveur d’émission et de l’intégrité du mail à partir du serveur d’émission. Elle ne prouve rien concernant l’utilisateur lui même, uniquement le serveur !

Si tout se passe comme il faut, votre mail est donc consideré comme légitime par votre serveur de mail et est donc signé. Votre serveur de mail va donc transferer ce mail au serveur du destinataire

6 - Trouver le serveur de destination

Bon, votre mail est donc prêt à partir, mais à partir où ? Votre serveur de mail va donc trouver quelle machine gère les mails de votre destinataire et qui qui c’est qui doit faire ça ? C’est le DNS !

Bon truc@gmail.com ça veux dire l’utilisateur truc sur le domaine gmail.com, ça devrait être plutôt simple pour le moment. Du coup votre serveur de mail va demander aux serveurs DNS “À quelle machine je dois me connecter pour envoyer des mails pour gmail.com ?” ce qui correspond à “Quels sont les enregistrements MX pour gmail.com ?”

Les MX records sont donc les machines en chargent de la réception du mail : un ptit dig gmail.com in MX

; <<>> DiG 9.12.1 <<>> gmail.com in MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48789
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gmail.com.                     IN      MX
;; ANSWER SECTION:
gmail.com.              3581    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      10 alt1.gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      20 alt2.gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              3581    IN      MX      40 alt4.gmail-smtp-in.l.google.com.
;; Query time: 0 msec
;; SERVER: 10.0.0.254#53(10.0.0.254)
;; WHEN: Wed May 23 15:48:51 CEST 2018
;; MSG SIZE  rcvd: 161

Donc là on voit que pour gmail il y a cinq réponses indiquant donc 5 machines à contacter par ordre de priorité du plus petit au plus grand. Je vais donc devoir tenter de me connecter à gmail-smtp-in.l.google.com. et si cette machine ne répond pas je passe à alt1.gmail-smtp-in.l.google.com. et ainsi de suite. C’est un système qui permet d’avoir plusieurs machines redondantes assez facilement (si seulement un même mécanisme était utilisé pour d’autres protocoles comme le HTTP…).

Bon c’est bien gentil mais c’est une demi réponse ça, il me faut une adresse IP, il faut donc faire une requête DNS pour connaitre l’adresse IP de gmail-smtp-in-l.google.com., ce qui va me donner 74.125.133.27.

Si jamais le domaine à qui vous tentez d’envoyer un mail ne possède pas de MX record, votre serveur tentera de se connecter directement à l’adresse IP rattaché au domaine directement. Mais bon il faut vraiment être un très mauvais administrateur pour ne pas mettre de MX record à un serveur de mail.

Comme d’habitude on peut voir que le DNS est toujours un point sensible pour la confidentialité et que le choix d’un résolveur DNS peut avoir d’importantes conséquences pour le respect de la vie privée.

7 - Interconnexion des serveurs émission/réception

Allez hop, votre serveur d’émission va se connecter donc au serveur de réception pour transmettre votre mail. Une connexion TCP va être établie et parfois ça sera chiffré, parfois non. Globalement le chiffrement progresse énormément ces dernières années au point d’être quasi systématique.

Il va quand même falloir montrer patte blanche pour prouver que vous n’êtes pas un vil spammeur.

La base de la base c’est de parler le protocole SMTP correctement. Certains spammeurs utilisent des logiciels pas très très respectueux du standard et se font repérer et dégager facilement.

Votre serveur va donc transferer votre mail donc avec ses méta-données et les données. Et ensuite bha le serveur de réception fait un peu ce qu’il veut.

7.1 Greylisting

Une méthode très efficace de virer du spam est de faire du greylisting. Le serveur de réception va dire “Je suis pas dispo réessaye plus tard”. Et cinq minutes plus tard votre serveur d’émission va retenter et ça marchera.

La plupart des spammeurs se découragent facilement (ça leur permet de ne pas perdre de temps à retenter…) mais les mails légitimes, eux, retenteront. Cela engendre par contre un délai de quelques minutes dans la réception des mails mais rapelez-vous : Les mails ne garantissent absolument pas de délai de livraison ! Avec un peu de chance ça sera dans quelques secondes mais rien dans le protocole n’empêche de le livrer quelques jours plus tard sans aucun message d’erreur ou autre.

Il me semble que cette technique n’est pas employée par Gmail mais assez courante chez les auto-hébergeurs du fait de son efficacité redoutable.

7.2 Différentes vérifications

Chaque serveur possède des règles différentes pour l’acceptation des mails.

Certains ne font que le strict minimum (c’est à dire vérifier que le destinataire existe bien), d’autres imposent des tailles maximales pour les mails, d’autres utilisent des systèmes de réputation… Chacun fait sa tambouille.

Dans les grands classiques on trouve la consultation de listes noires publiques via le DNS, ce que l’on apelle les DNSBL. On y vérifie que l’adresse IP de votre serveur d’envoi n’est pas présent dans cette blacklist. C’est donc potentiellement encore un endroit potentiel de fuite d’information : votre mail n’est pas envoyé aux fournisseurs de DNSBL, juste l’ip de votre serveur, ce qui peut être couplé avec l’ip du serveur de réception faisant la requête DNS. Le risque est minime cela-dit.

Vous obtiendrez parfois un mail de réponse de la part de Mailer Daemon vous indiquant pourquoi (ou pas) votre mail à été rejeté et ce mail peut prendre jusqu’à une semaine pour arriver…

8 - Fin de l’émission

Bon bha ça y est votre serveur d’émission a fini son boulot et donc maintenant le destin de votre mail n’est plus entre ses mains. Votre serveur peut couper la connexion et se rendormir paisiblement.

Voyons donc ce que fait le serveur de réception désormais.

9 - Antispam

9.1 SPF

Le serveur de réception va faire la vérification du SPF qui permet de s’assurer que le serveur qui a émit le mail est bien autoriser à émettre des mails. Pour cela, le serveur de réception va faire une requête DNS particulière qui lui donnera la liste des serveurs autorisés à émettre des mails pour votre domaine. Si le serveur d’émission ne fait pas parti de cette liste, votre mail sera rejeté pour soupçons de spam. Encore une fois, le DNS va être utilisé.

Il y a encore un potentiel de fuite d’information : le serveur de mail réceptionnant votre mail enverra une requête à son serveur DNS lui indiquant de vérifier quels sont les machines autorisées à envoyer du mail pour tel domaine. Le serveur DNS peut donc deviner que votre domaine à envoyer un mail à tel autre domaine.

9.2 DKIM

Tout à l’heure, votre serveur a ajouté une signature DKIM sur votre mail et maintenant le serveur de réception va la vérifier. Ça permet de s’assurer que le mail reçu provient bien de votre serveur de mail. Donc le serveur de réception regarde le mail, et vérifie que la signature correspond bien à ce qui se trouve dans l’enregistrement DNS du DKIM. Seul votre serveur peut créer une signature valable pour votre domaine.

En gros SPF assure que le serveur a le droit d’envoyer des mails et DKIM prouve que le mail provient bien du domaine. C’est deux technique complémentaires permettant de limiter l’envoi de spam en votre nom.

Si en 2018 vous n’avez pas de SPF et de DKIM fonctionnel, vos mails finiront quasi-systèmatiquement dans les spams, à juste titre. Là encore le DNS joue un grand rôle et se trouve être une potentielle fuite de données.

9.3 Antispam basique

Encore un peu d’antispam mais ce coup-ci ça se base non plus sur le serveur d’émission mais sur les méta-données et les données du mail lui-même.

le mail va être analysé selon pleins de critères variés.

  • Est-ce que la date d’émission est crédible ?
  • Est-ce que ça parle pas un peu trop de pognon ?
  • Est-ce que ça utilise des caractères louches ?
  • Est-ce que les entêtes correspondent bien ?

C’est aussi bien des points techniques que des points plus “humains”. À chaque réponse on obtient un score positif ou négatif.

9.4 Filtre Bayésien

Là on pousse encore un peu plus l’antispam en faisant une analyse statistique sur les mots présents dans le mail.

Si votre mail insiste un peu trop sur la longueur des membres, ou bien s’attarde un peu trop sur d’éventuels gains financiers ou tout autre sujet à la mode, le filtre Bayésien va reconnaître des motifs récurrents et encore une fois attribué un score de probabilité.

On cumule ce score à celui précédemment obtenu et à la fin on fait le compte et le résultat final détermine si c’est un spam ou non.

En fonction de ce score le mail sera soit supprimmé, soit placé dans les spams, soit aura le droit d’arriver dans la boîte du destinataire.

Ici le logiciel antispam a accès au mail complet. Cela pourrai poser un soucis de confidentialité cependant ce filtre n’est pas sous-traité à ma connaissance. Bon bha finalement on me signale que si certaines entreprises sont spécialisées dans l’antispam et reçoivent donc les mails en live pour les analyser et délibérer si oui ou non il s’agit d’un spam, donc c’est encore une fois une fuite potentiel pour votre mail.

10 - Livraison locale

Le serveur du destinataire a donc accepté le mail et effectué tous ses tests d’antispam, il faut donc maintenant transférer le mail au LDA, le local delivery agent. Ce logiciel a pour but de ranger et stocker le mail.

Son rôle premier est donc de trouver à qui le mail doit être livré (il peut y avoir des alias ou des redirections par exemple).

Son second rôle ensuite est de ranger le mail au bon endroit en fonction de règles définies par le service mais qui peuvent également être écrites par l’utilisateur. Par exemple le mail va être classé dans les newsletters ou bien vous avez créez une règle pour indiquer que tous les mails en provenance de tel utilisateur doivent être placés dans un dossier prédifini.

Mais n’oublions pas que le mail est à destination de Google. Il est donc fort probable qu’en interne l’architecture de Gmail soit très complexe et ne soit pas un seul petit serveur mais bien une armada complète pour le stockage (redondant et backuppé) avec répartition de la charge pour pouvoir supporter des millions d’utilisateurs mais cette partie est trop complexe pour cet article.

Bon il y a tout de même une étape cruciale encore.

11 - Indexation

Le but de Google est, comme tout le monde sait, d’aider à chercher dans vos mails. Non pas vous aider vous, mais aider les clients de Google. En tant que marchandise vos mails sont donc lus et analysés et un profil est établi en fonction de tous vos mails. Vous êtes donc placé dans différentes cases en fonction de votre courrier.

Vous êtes inscrits sur tel site, vous prenez des vacances à tel endroit, vous conversez avec telle personne, vous vous êtes abonnez à tel newsletter, vous supprimmez systèmatiquement les mails de telle origine, vous effectuez régulièrement des achats sur tel site…

En bonus toutes ces informations permettent à gmail de vous afficher rapidement les résultats de recherche dans votre montagne de mail.

Bref ce service coûte très cher mais par chance est très facilement rentabilisé par Google.

12 - Consultation

Bon bha maintenant votre destinataire va vouloir lire votre mail, Gmail étant un webmail avant tout, votre utilisateur va devoir ouvrir la page avec son navigateur web et se tapper toutes les étapes classiques. Le webmail a le rôle de MUA ici.

Et voilà ! On y est arrivé.

TL;DR

Chemin d’un mail : MUAMTAMTALDAMUA Avec dans quelques cas des risques de fuites de données de votre mail (surtout du côté des DNS et des MTA).

Si vous vous autohébergez, vous pouvez à peu près garantir les deux premières étapes pour la confidentialité de votre mail tout au mieux. Si vous ne vous auto-hébergez pas vous ne pouvez garantir que la première étape au delà … bha … bonne chance.

Si vous voulez mieux, il va falloir chiffrer votre mail ;-)

Remplacer Groovebasin par MPD

Voilà maintenant des années que j’utilise le logiciel Groovebasin pour écouter de la musique. C’est un lecteur audio web. Ça veux dire qu’il faut utiliser un serveur web, et un navigateur web pour pouvoir l’utiliser. Ça a de sacrés avantages tel que la disponibilité de votre bibliothèque numérique de partout. De reprendre la lecture là où vous en étiez, pouvoir contrôler la lecture depuis une autre machine.

Mais au final ça a ses inconvénients : il faut passer par un navigateur web, ce qui est assez lourd. L’intégration dans le reste du système est compliquée : pas facile de faire des hotkeys pour le contrôler à distance. Et puis il ne gère pas les notifications du coup pas moyen de voir le titre de la nouvelle chanson qui démarre sans aller chopper la page web.

J’ai utilisé pas mal d’alternatives : Subsonic qui est très similaire mais moins bien globalement sauf pour la partie application android (qui gère la création d’un cache offline entre autre). J’ai également testé Ampache il y a très longtemps et ça m’avait moyen convaincu. J’ai utilisé quelques temps MOC qui est un player audio en console que j’aimais bien mais du coup on perd toutes les features qu’apporte un player web. Et encore plus longtemps avant j’ai utilisé foobar2K sur windows et encore un peu avant Winamp.

Bon du coup… vers quoi me tourner ?

MPD

Music Player Daemon est un projet qui est maintenant assez connu de part son âge. Il était particulièrement novateur à l’époque dans son concept d’avoir un serveur musical. C’est une approche pas trop éloigné des players web à la différence que c’est pas du web.

On a donc des clients MPD dédiés plus ou moins variés dont un certains nombre en console. On peut donc manipuler le serveur avec de nombreux programmes différents, du plus basique (mpc) à d’autres plus lourdingues avec de vrais interfaces graphiques en GTK+ ou QT… Bref il va forcément y avoir un truc qui va me plaire !

NCMPCPP

Mon premier réflexe a été de chercher un client console. Après tout j’ai l’habitude de manipuler quasiment tous mes softs dans des terminaux désormais et puis bon… jouer de la musique ne nécessite pas d’interface graphique.

Ayant déjà fais mumuse avec la bête il y a quelques années, je me suis retourné vers ncmpcpp qui est l’un des clients consoles les plus réputés.

Et bhé… J’aime pas trop trop. Je trouve l’interface étrange : par défaut on tombe sur la playlist mais du coup si l’on veux rajouter une chanson à la playlist là commence la bataille. Il faut aller dans la bibliothèque. Trois choix possibles, la première c’est Browse / qui affiche l’arborescence de fichier, la seconde est le Search engine et enfin la Media Library. Et c’est là que je commence à râler.

Ptain que l’interface est désagréable ! Si l’on va dans l’arbo de fichier, on cherche une chanson, et si on a le malheur d’appuyer sur Entrée paf ça vous la fout en fin de playlist et ça passe dessus… Mais heuuu pourquoi ce comportement ? Ça serait compréhensible que ça la foute en fin de playlist mais sans la jouer tout de suite, parcequ’une fois la chanson finie bha la playlist est finie. Ou alors ça la fout à la place du morceau courant du coup la suite de la playlist est pas impactée. Bref un choix bien étrange.

Toujours dans la catégorie interface étrange, le Search engine est d’un lourdingue. Là on peut faire une recherche globale ou alors rechercher uniquement dans un tag précis des fichiers (genre que dans les “artists” ou que dans les “albums”) ce qui est vraiment bien. Par contre pour lancer la recherche faut descendre tout en bas de la liste de choix possible pour aller sur *Search*… Ptain habituellement les interfaces textes sont tellement plus efficaces. Et encore une fois gare à vous ! Si vous avez le malheur d’appuyer sur Entrée, rebelotte ça vous le fout en bas de playlist et ça passe dessus : la plaie. Si vous voulez l’ajouter dans votre playlist actuelle faut appuyer sur a, là s’ouvre un fenêtre vous demandant dans quelle playlist, puis ensuite une autre fenêtre pour savoir où la placer dans la playlist. Beaucoup trop d’étape pour une action aussi basique.

Et c’est pareil pour la Media library, au moins l’interface est cohérente dans sa lourdeur.

PMS

J’ai vite fait testé un autre client pour MPD du nom de PMS qui est plus récent que le vénérable ncmpcpp et qui est actuellement en train de subir une réécriture en Go. J’ai donc testé la version classique avant réécriture qui est annoncé comme stable et pour l’instant avec plus de fonctionnalité et pour faire vite j’ai pas aimé l’interface non plus. Et puis la doc est … déplorable. Pas réussi à faire ce que je voulais simplement du coup j’ai capitulé en voyant la non-doc.

J’ai un peu trop pris mes habitudes avec Groovebasin. La migration vers autre chose est donc difficile. Va falloir que je me décroute et du coup avec l’aide du Fediverse, j’ai décidé de prendre le taureau par les cornes.

SMPCD

Du coup j’ai fait un ptit cahier des charges :

  1. Je veux pas que la musique s’arrête pour cause de playlist vide
  2. Je veux pouvoir revenir au morceau précédent et ptet celui d’avant aussi et aussi au précédent…
  3. Je veux pouvoir le contrôler via des raccourcis claviers
  4. Je veux des ptites notifs quand ça change de morceau avec le titre/l’auteur
  5. Je veux un truc super léger

Bon bha en fait tout rentre dans un simple script shell. MPD propose MPC qui est une interface en ligne de commande basique mais qui a accès à toutes les fonctionnalités de MPD. Si c’est pas faisable dans MPC, c’est que MPD peut pas faire.

Allez c’est parti pour ce dimanche maussadee !

Vérifier que MPD tourne

CheckMPD(){
  if [ ! $(pgrep -x mpd) ]; then
    timeout 3 i3-nagbar -m "MPD ne tourne pas"
    exit 1
  fi
}

Cette partie est ultra simple, si le daemon ne tourne pas on quitte

La boucle qui fait tout

Loop(){
  while true
  do
    CheckMPD

    if [ $(mpc playlist | wc -l) -lt 30 ]; then
      mpc findadd Title "$(mpc list Title | shuf -n 1)"
    fi

    if [ $(mpc current -f %position%) -gt 15 ]; then
      mpc del 1
    fi

    mpc idle player
    flock -nF /tmp/mpdnotif.lock -c 'mpc current -f "%title% - %artist%" | timeout 8 dmenu -g' &
  done
}

Voilà la bête. Au final c’est ultra simple, d’abord on lance une boucle infinie avec le while true. Dans cette boucle d’abord on lance la fonction décrite précédemment histoire de pas mouliner pour rien.

Ensuite le premier if s’assure que si la playlist fait moins de 30 morceaux de musique d’en rajouter un au hasard depuis la bibliothèque.

Le second if lui veille à ce que si l’on dépasse le quinzième morceau de la playlist de virer le premier morceau de la playlist. Ça évite de garder un historique des morceaux passés trop long.

Après se trouve le mpc idle player qui permet d’attendre que MPD fasse une action au de type player ce qui correspond à passer au morceau précédent/suivant ou juste faire une pause/reprendre. Ça évite de faire un sleep dans la boucle.

Et enfin le flock permet de mettre un vérou (dans /tmp) pour éviter de lancer plusieurs fois simultanément la commande qui suit. Sans ça, lors d’une frénésie de passage à la chanson suivante on se retrouve avec pleins de notifs de morceau suivant. Et pour afficher la notif j’ai rusé, j’ai utilisé dmenu avec la commande timeout. timeout permet de lancer une commande pendant quelques secondes puis de l’interrompre. Dans mon cas je lance un dmenu à qui j’ai passé les informations depuis mpc current.

DMENU MPD

Dmenu est amour et des gens ont déjà bidouillé des scripts pour manipuler MPD via dmenu. Mais globalement c’était soit overkill soit pas tout à fait ce que je cherchais. Du coup j’ai fait mon mien qui est ultra simple :

#! /bin/sh
mpc listall | dmenu -i | mpc insert

Ouai c’est ultra basique. Le but est juste de lister tous les morceaux dispo dans la bibli et de pouvoir en chercher un et de l’ajouter à la playlist. Il suffit d’ajouter un ptit raccourcis pour lancer ça depuis i3 et le tour est joué.

Adaptation de Dmenu

J’adore dmenu, c’est un outil formidable. Je m’en sert pour pleins de trucs comme lancer des commandes, pour récupérer mes mots de passe, pour lancer mes films, pour contrôler la musique et aussi pour les notifs. Le souc c’est que pour les notifs… bha ce couillon il choppe le focus du clavier. Du coup à peine lancé vous vous retrouvez “coincé” dans dmenu.

Du coup au début j’ai fouillé dans la doc i3 pour contrer cette habitude. J’ai aussi demandé sur leur salon irc mais pas de bol c’était l’heure de la sieste. Du coup j’ai cherché plus globalement sur le net mais rien de bien probant.

Et si en fait c’était pas du fait d’i3 mais de dmenu lui même ?

Allons voir un peu le code de dmenu. Je sais que c’est du C et je n’ai que de vagues notions de C mais bon c’est made in Suckless, ça devrait être concis.

Un ptit tour dans /usr/portage/distfiles/ et un cp plus tard et me voilà avec le code de dmenu. 17 fichiers ! Ça va je devrais pouvoir m’y retrouver.

Commençons direct par le dmenu.c qui fait 750 lignes. Bingo, visiblement c’est quasiment tout le code de dmenu qui reste plutôt lisible même pour un noob de mon genre.

Bon va quand même falloir un peu fouiller. Je commence par chercher focus qui n’a que 11 occurrences. Il y a des trucs qui paraissent pas mal et je vois que ça parle de grabfocus(). Intéressant !

Cherchons un peu ce qu’il y a avec grab et ses 12 occurrences. Une fonction grabfocus(void) des plus pertinentes ! Et en plus en toute fin de fichier elle est appelée, à ce qui ressemble le lancement de dmenu.

Bon bha yapuka !

En début de main() il y a le parse des arguments, je rajoute une nouvelle option -g pour ne pas grab le focus, j’initialise la variable juste avant bien entendu. Et je rajoute un ptit (en vrai deux) if pour vérifier la présence de cette nouvelle variable pour ne pas appeler la fonction grabkeyboard() et voilà.

Je make et je teste. Ça marche du premier coup \o/.

Bon j’en profite pour modifier le man, et l’ajouter dans la liste des options et voilà. Je fait génère le patch et je fout ce patch dans /etc/portage/patches/x11-misc/dmenu.

Je réinstalle dmenu à la gentoo avec emerge dmenu -av et quelques secondes plus tard je teste en vrai et ça fonctionne, le man est mis à jour aussi.

Bon bha cette partie a été au final torchée en trente minutes. Finalement le C c’est facile et Gentoo est toujours aussi formidable.

Raccourcis claviers

Bon maintenant je veux pouvoir faire pause/suivant/précédent avec des raccourcis claviers. Pas de bol j’ai pas de touches multimédia sur mon clavier.

Il faudrait que je modifie un ptit coup le firmware du clavier pour en ajouter avec Fn mais j’ai un peu la flemme. Je n’ai pas conservé l’IDE arduino… Bref ça sera pour une prochaine fois.

Pour l’instant me contenterai de créer un raccourcis clavier i3 classique sur des touches non utilisées même si c’est moins propre.

Publication des codes

Pour l’instant je publie pas SMPCD (Shell Media Player Client Daemon) car je pense qu’en l’utilisant quelques jours j’y apporterai des modifs mais je le ferai vous inquiétez pas. Si jamais vous le voulez vraiment n’hésitez pas à demander.

Pour dmenu pour l’instant j’ai annoncé ce que j’avais fait sur le chan irc de Suckless sans trop de réponse donc pour l’instant ça reste chez moi. Pour les intéressés je le fout ici.

Présentation de Calls. L'appli du Librem 5 pour les appels

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Introduction

De loin, la fonctionnalité la plus critique d’un téléphone est la possibilité d’émettre et recevoir des appels via le réseau téléphonique publique en utilisant des numéros de téléphones. Même si chez Purism nous souhaitons implémenter des systèmes de communications permettant plus de sécurité et un meilleur respect de la vie privée que ce que l’on peut attendre via le réseau téléphonique publique, ce moyen est le plus utilisé pour le moment et nous ne pouvons nous permettre de vendre un téléphone ne pouvant pas téléphoner.

Mon boulot a été de coder un dialer (numéroteur) et la gestion des appels. Comme tous nos développements sur le Librem 5, le but est de réutiliser le plus de code existant possible et de viser l’intégration dans la plateforme Gnome qui est utilisée par défaut par notre PureOS. Il n’y a pour le moment pas de dialer dans le projet Gnome donc nous pousserons son adoption.

Idées initiales

Après quelques recherches, le but initial était de réutiliser le framework Telepathy, l’idée étant que nous pourrions un numéroteur utilisant le réseau publique et d’utiliser le dialer SIP car Telepathy possède déjà un gestionnaire de connexion PSTN (réseau publique téléphonique) et SIP. Qui plus est, le gestionnaire de connexion PSTN telepathy-ring est déjà utilisé dans des téléphones sur le marché. Et même si il possède quelques soucis, je trouve Telepathy vraiment génial :-)

Pour aller plus loin, mon collègue François Téchené a écrit un article décrivant un approche basé sur les fonctionnalité plutôt que sur les applications concernant l’expérience utilisateur. Telepathy pourrait fournir les fondations d’une telle approche.

Il est bon de noter cependant que Telepathy n’est pas en odeur de sainteté. De nombreuses voix parmi le projet Gnome préferraient sa mort. Telepathy est un système complexe où le moindre changement est difficile à apporter. Pour se faire, il faut synchroniser ces changements dans les spécifications de l’API D-Bus et dans une multitude de composants divers. Une longue discussion à propos de Telepathy et de son éventuel remplacement a eu lieu dans la mailing-list Gnomes’s desktop-devel en Aout et Septembre 2017.

Élargissement du débat

Après avoir commencé quelques travaux préliminaires sur le code de Telepathy, étant donné que notre but est que ça devienne le dialer de Gnome, et que notre intention est d’utiliser le framework contesté qu’est Telepathy, j’ai contacté la fameuse mailing-list pour voir ce qu’ils en pensaient.

La discussion s’est penché sur les soucis généraux et la consolidation des différents systèmes de communication. La première conclusion a été que créé un système à base de fonctionnalité est pour le moins compliqué. Comme lors de la première discussion de 2017, un Telepathy-NG (nouvelle génération) serait la meilleure solution. C’est une future tâche que nous envisageront une fois les fonctions basiques déjà en place. Pour l’instant, il n’y avait aucune réticence à propos d’un dialer PSTN reposant sur Telepathy.

J’ai aussi discuté via IRC avec Robert McQueen, l’un des auteurs originels de Telepathy. Le gestionnaire de connexion telepathy-ring utilise le framework de téléphonie mobile oFono. Étant donné la difficulté d’écrire un client Telepathy, Robert suggera qu’il serait probablement plus simple de créer une interface utilisateur (UI) avec une fine couche d’abstraction implémentant d’abord un backend oFono puis, plus tard, un backend plus complexe sur Telepathy. Nous avons suivi son conseil et notre dialer adopte donc cette approche.

Bienvenue Calls

Capture d'écran montrant l'interface du dialer.

Notre programme s’appelle Calls. Il a une interface utilateur (UI) en GTK +3 et utilise oFono à travers une fine couche d’abstraction. Nous utilisons également notre libhandy pour le widget du numéroteur.

« Peut-il téléphoner ?! » Oui, il peut ! 🙂

Les rouages internes

Le diagramme est représentation à la UML de la couche d’abstraction dans Calls :

Diagramme UML de la couche d'abstraction

Les classes sont des GInterfaces. Pour vous donner une meilleure idées de la sémantique derrière chaque interface, voici un tableau des objets que les implémentations pourront utiliser :

Interface objets d’implémentation
Provider oFono Manager, Telepathy Account Manager
Origin oFono Modem/VoiceCallManager, Telepathy Account
Call oFono VoiceCall, Telepathy Channel

Le nom “Origin” a été choisi puisqu’il s’agit de l’objet à l’origine d’un appel.

La super-interface MessageSource est utilisée pour traiter les messages de l’utilisateur. La couche d’abstraction est une fine couche pour l’UI donc l’implémentation est amenée à afficher des informations, comme des erreurs ou des warnings ou autre, d’une manière appropriée pour l’utilisateur. Même si les méthodes ne renvoient pas d’erreurs d’information mais à la place s’attendent à ce que l’implémentation fournissent des signaux de type messages.

Le code source est disponible dans gitlab Gnome de notre repo community.

Modems, oFono et ModemManager

La démo d’en haut utilise un modem SIM7100E de chez SIMCom que vous pourrez voir monter sur notre board prototype avec la bordure rouge en bas à droite de l’écran. Comme la plupart des modems cellulaires, il supporte à la fois les commandes AT ainsi que les QMI.

Lorsque le SIM7100E a été branché pour la première fois, oFono ne le reconnaissait pas. Cependant, il existe un second framework de téléphonie mobile, ModemManager qui l’a reconnu et pouvait passer des appels, envoyer des SMS et faire des connexions de données out of the box. Nous avons alors considérer de l’utiliser à la place d’oFono mais malheureusement, le support des appels audio est rudimentaire et ne supporte pas les services additionnels comme la mise en attente ou les conférences.

Alors que QMI est préferrable aux commandes AT, oFono ne supporte pas les appels via QMI. Donc pour pouvoir faire des appels vocaux, nous avons besoins d’un nouveau driver pour le SIM7100E utilisant les commandes AT. Ce drive a été upstreamé (partagé à la communauté).

Ensuite

Nous avons abattu un certain travail jusqu’à présent mais il reste de nombreuses tâches à accomplir.

  1. Ajouter des sonneries. Pour le moment le programme ne joue aucun son lors d’un appel entrant. Il va falloir également jouer les tonalités DTMF quand l’utilisateur composera des numéros.
  2. Implémenter un journal d’appel et son intégration avec Gnome Contacts. Pour l’instant Calls ne journalise rien, nous avons donc besoin d’un format de stockage ainsi qu’une UI. Nous devons également être capable de chercher des contacts depuis Calls et ajouter des contact depuis le journal d’appel.
  3. L’UI est simple mais fonctionnelle. Nous sommes bien loin du niveau de finition que nos designers envisagent. De nombreux efforts pour retravailler et polir l’interface seront nécessaires.
  4. Implémenter les réglages téléphoniques dans Gnome Settings. Nous avons besoin d’une nouvelle page pour les réglages spécifiques comme la sélection du réseau mobile et autres.
  5. Gérer les multiples SIM et les connexions des modems. Pour l’instant Calls est une simple interface pour les objets DBus OFono et ne peut qu’utiliser des modems déjà fonctionnels. Nous avons besoin de mécanisme permettant de configurer quel modems doit utiliser Calls et pour les connecter automatiquement quand l’appareil démarre.
  6. Implémenter un backend Telepathy pour avoir un support des appels SIP ainsi que les autres protocoles supportés par Telepathy.
  7. Le choix final des modems n’a pas encore été fait donc nous ne poussons pas trop les efforts vers le SIM7100E, juste assez pour tester Calls. Nous pourrions implémenter le support de QMI dans oFono si nous décidions d’adopter ce modem. À vrai dire, alors que j’écrit cet article il y a une discussion sur leur mailing-list pour le support QMI. Cependant nous pourrions implémenter le support de services supplémentaires dans ModemManager, qui est plus dans l’alignement de la plateforme Gnome.
  8. Ajouter le support des services supplémentaires et les opérations complexes. ModemManager a un support rudimentaire des appels tout comme Calls actuellement. Nous voulons être sûr que notre dialer aura un support complet des standards de la téléphonie mobile.

C’est tout pour le moment, restez branché pour de futurs infos ! 🙂

Une entreprise qui ne sera pas nommé vendait des téléphones basés sur GNU/Linux mais ceux-ci n’étaient pas capable d’émettre des appels téléphoniques quand ils sont sortis. Cinq ans plus tard, j’ai acheté un de ces téléphones et l’ai apporté à mon LUG local. Et biensûr, la première question a été : “Est-ce qu’il peut téléphoner ?! haha!” La réputation n’est plus à faire une fois que l’on vend un téléphone qui ne peux pas téléphoner !


Ça avance petit à petit. C’est pas mal du tout mais ça rassure pas… La deadline approche et bha ça paraît toujours aussi distant pour les fonctions basiques et le choix du matos. Gardons confiance.

Leur collaboration avec l’écosystème existant fait toujours plaisir et augure un bon avenir.

Les maux des GAFAM

Il est de bon ton de critiquer les GAFAM. C’est un sport assez commun. Aussi bien chez les libristes/techniciens qui sont au fait des enjeux techniques de la chose mais également désormais la presse spécialisée voire pas spécialisée du tout.

Bref le discours devient assez connu et commun. C’est bien.

Par contre le remède n’est que très rarement abordé.

Un remède mais pour quelle maladie ?

La maladie en elle-même n’est pas unique. Le terme “GAFAM” c’est déjà trop générique et pourtant ça regroupe des maux radicalement différents.

Et si on essayait de décomposer cet accronyme et voir un peu ce que ça regroupe ? La liste qui suit ne sera pas exhaustive du tout mais donnera un bon aperçu.

G

Google, le fameux moteur de recherche.

Ha le bon vieux temps où ce n’était qu’un moteur de recherche est révolu mais bon qu’est-ce qu’on leur reproche désormais ?

  1. Hégémonie sur la recherche web : ils font la pluie et le beau temps sur la visibilité d’un site web. Si demain ils modifient leur algoritme d’indexation, ils peuvent chambouler la vie d’un site web (en bien ou en mal).
  2. Hégémonie sur le navigateur web : ils font la pluie et le beau temps sur la façon dont le web évolue. S’ils décident d’utiliser de nouvelles balises HTML hors standard bha… tant pis pour les autres. S’ils décident d’ajouter un blocage de pub nativement dans leur navigateur… bha tant pis pour les régie pubs autre que la leur.
  3. Roi de la pub : la pub en elle même n’est pas l’élément génant mais en fait ça veux surtout dire roi de l’espionnage. Ce n’est pas “juste de la pub”. La pub que vend Google à ses clients est ultra ciblée. Et pour cibler le pigeon, il faut le connaître par cœur. Donc on l’espionne constamment partout pour recouper les données et monter non pas un simple profil mais une identité complète.
  4. Omniprésent : ils ont une galaxie de site web (google, youtube, maps, plus, …), une myriade d’appareils (android, chromecast, chromebooks, des enceintes, des thermostats, quelques voitures, …), une petite collection d’OS (android, chromeOS bientôt fuschia). Même hors ligne on sent sa présence permanente.

Ça fait peur. On ne peut absolument pas leur échapper sans être très précautionneux et en ayant des connaissances techniques assez poussées. Et le pire c’est que ça ne va pas s’arranger de si-tôt.

A

Apple, la plus grosse capitalisation boursière actuelle (proche du 18ème PIB mondial).

En quarante ans, ils sont passés d’une entreprise pro-bidouilleurs à une église diabolisant la personnalisation, empêchant la réparation et compliquant la propriété privée.

  1. La forme avant le reste : c’est un reproche assez récurrent. Ils préferrent sortir un produit qui sera plus joli/léger plutôt que réparable/upgradable.
  2. C’est comme ça et puis c’est tout : quand on achète un produit Apple, on utilise un produit Apple comme Apple accepte qu’on l’utilise. Très peu de personnalisation, c’est tout verouillé de partout. Une autre personne avec un produit Apple aura le même que vous. Une chance qu’on puisse changer le fond d’écran !
  3. Vous avez le droit de l’utiliser : quand on achète un produit Apple, on utilise un produit Apple comme Apple accepte qu’on l’utilise. C’est tout juste s’il vous appartient. Vous n’avez pas le droit de l’utiliser différemment. Surtout pas utiliser leurs logiciels sur un autre OS ou leur OS sur un autre matériel. Bref on se retrouve vite enfermé dans toute une philosophie, un écosystème… Bref une religion.
  4. Le culte Apple : Ouai c’est fatigant toute cette ambiance qui règne autour. Non, c’est pas forcément mieux pour un graphiste… À l’inverse, c’est pas forcément beaucoup plus cher à matos de même qualité et même intégration. T’as-tu vraiment besoin de remplacer ton matos toutes les cinq minutes ? Non tu n’utilises pas 50% des perfs de ton téléphone actuel, donc les 15% de perf supplémentaires du nouveau te changeront rien.

Finalement on ne leur reproche pas du tout la même chose que Google. Pas de soucis de vie privée. Pas de pistage intempestif. On me signale qu’en fait leurs produits embarquent un SuperCookie permettant d’identifier leurs utilisateurs. En gros on s’en fout un peu d’eux. Ils posent pas trop de soucis, c’est plutôt leur clientèle qui est toxique.

Le moyen facile pour éviter leurs travers est de ne pas acheter leurs produits et c’est bon vous êtes safe.

On peut se réjouir que le “Don’t be evil” s’applique plutôt à eux, car avec les semi-remorques de lingots qu’ils possèdent ils pourraient faire des dégats massifs.

F

Facebook, le grand registre mondial de l’humanité.

Le plus récent des GAFAM et pourtant l’un des plus néfastes mais soit-disant légèrement sur le déclin.

  1. Omniprésence sur le web : il est difficile d’ouvrir une page web sans envoyer une requête vers leur serveur. Partout des scripts, des images, des boutons qui pointent vers leurs machines.
  2. Point d’accès unique : pour de nombreuses personnes l’Internet peut se résumer à Facebook.
  3. Créer des identités vraiment poussées : dans le but de vendre de la pub encore une fois. Un publicitaire peut cibler “les personnes entre 16 et 18 ans de couleur blanche habitant tel quartier à tendance technophile n’aimant pas le rap” et savoir que sa pub atteindra X personnes. Flippant.
  4. Omniprésence qui se répend hors du web : avec le rachat de Whatsapp ils se font une joie de capter les conversations des gens. En sachant que Whatsapp s’est forgé une popularité massive dans les pays en voie de développement grâce à leurs apps tournant sur n’importe quel type de téléphone, le déclin est pas près d’arriver. Et puis ils sont plutôt bien placé dans la VR grâce au rachat d’Occulus. Ha et si vous êtes plutôt Instagram… bha c’est aussi Facebook. Bref…

Là c’est bien moins ragoutant qu’Apple et on a les mêmes travers que Google. Bref pour la vie privée c’est le désastre complet. On a déjà vu/lu des centaines d’articles à ce propos mais c’est réellement un bourbier immense.

A

Amazon, le ptit libraire qui héberge la moitié du net Américain.

Je ne parlerai pas de leur business physique de vente de trucs mais uniquement de leur business informatique.

  1. Tout le monde l’utilise : ils se taillent une belle part de l’hébergement cloud, surtout aux US. Leurs offres de stockage sont également massivement utilisée pour tout et n’importe quoi.
  2. Ils obéissent aux lois US : c’est un reproche à faire également aux autres mais c’est un reproche un point plus génant pour eux dans le sens où en tant qu’utilisateur, on est pas forcément au courant qu’on se retrouve sur leur infra. Et du coup potentiellement on visite un site français mais qui en fait est hébergé par Amazon et du coup potentiellement à disposition de la NSA, CIA, FBI, …
  3. Alexa l’espion à la maison : Bon sur ce point c’est comme le truc de Google. Heureusement personne n’accepterai d’acheter un micro à placer chez soit qui écoute constamment tout ce qu’il se passe à la maison. Hein ! Personne ne ferait ça !

Moins de reproches du fait qu’ils ne sont que prestataire et au final ne touchent pas vraiment les données qu’ils hébergent. D’ailleurs peut-on leur reprocher de se plier aux loi US ?

M

Microsoft, le logiciel mou qui tente désespérément de se faire une place sur l’Internet.

Comme pour Amazon, je ne parlerai que de leurs pratiques concernant Internet/la vie privée.

  1. Leur cloud fait tourner plus de Linux que de Windows : hahahahaahhahahaha. Le plus gros vendeur d’OS proprio qui est l’un des plus gros loueur de Linux. Voilà c’est juste pour les troller.
  2. GAFA, pas GAFAM : ouai pas de bol pour eux, ils se font souvent zapper. Ils existent presque pas sur Internet.
  3. Hégémonie sur les PC : bon allez on va quand même parler de leur position dominante sur les OS grâce à la vente liée et le lobbying massif. Et quand à ça on saupoudre d’un peu d’espionnite dans Win10 et un soupçon de pubs on obtient un OS techniquement en amélioration mais au détriment de l’utilisateur.
  4. Ils chient sur les mails : envoyer du mail chez Microsoft est une plaie. Il faut avoir bonne réputation, mais comment avoir bonne réputation si on peut pas leur envoyer de mail ? C’est simple ! En ouvrant un compte chez eux et en les suppliant de bien vouloir recevoir vos mails. Donc voilà, si vous êtes pas un très gros du secteur bien établi, vous ne pourrez leur envoyer des mails qu’en montrant patte blanche. Appliquer les bonnes consignes des serveurs de mails ne suffira pas.

Bon bha que dire si ce n’est qu’en fait on s’en fout un peu d’eux. Même si ces derniers années ils s’améliorent énormément en découvrant l’Opensource et le Libre, leur faible présence sur le net ne les rend pas trop hostiles en dehors de leur attitude merdique concernant les mails.

Verdict quel est le soucis ?

Bon bha une partie vient de la position dominante dans un domaine.

Donc utiliser des alternatives est déjà un bon moyen de rendre plus inoffensif ces géants.

Ensuite concernant la vie privée, la première chose la plus évidente est d’arrêter de coller nos données ailleurs que chez soit. N’écoutez pas les sirènes du cloud. Le cloud c’est l’ordinateur de quelqu’un d’autre. Et si ce quelqu’un d’autre vous le prête grâcieusement c’est bien pour faire tourner son business et rarement par bonté d’âme (bien que ce soit parfois le cas, hein Framasoft).

Arrêtez de nourrir le cloud !

Ne postez plus vos photos de soirée sur Facebook. S’il vous plaît, épargnez la vie privée de vos enfants qui n’ont pas forcément envie de voir publier leurs premiers instants et les suivants. Cessez de distiller la moindre de vos pensées dans des tweets (tiens j’avais pas parlé d’eux). Je ne vous demande pas de vous couper du monde, juste d’agir plus raisonnablement en le faisant différement et plus posément.

Tout ce que vous poussez dans le cloud sera archivé, stocké, analysé, monétisé et qui sait un jour se retournera contre vous.

Le point Godwin obligatoire

Bon pour enfoncer le clou je me dois de faire cette digression.

Je vais faire court mais si vous voulez plus de détails il existe un livre ainsi que la page wikipedia anglaise qui détaille un peu.

Le régime nazi a travaillé main dans la main avec IBM pour créer une base de donnée (via recensement) de la population allemande dans les années 1930. Cette base de donnée à base de cartes perforées a permis de trier/classer/analyser le recensement avec une précision telle qu’elle a grandement aidé à peupler les camps de concentration.

Il faut bien voir que lors de l’établissement de la base de donnée Hitler n’avait pas encore commencé sa purge massive. Il ne s’agissait que d’un simple recensement utilisant les balbutiements de l’outil informatique. Ce recensement était tout à fait légitime et le monde ne savait pas encore quelle serait l’utilisation de ces données.

Les bases de données de Google et Facebook feraient rêver plus d’un Hitler.

Sachez qu’une fois en leur main, les données qu’accumulent Google et Facebook ne sont très probablement jamais supprimmées. Et gardez en tête que ce qui est légal/normal/admis aujourd’hui ne le sera pas forcément demain.

Montez votre site ouaib !

Plutôt que d’engraisser les vendeurs de vie privée, montez votre blog, votre galerie photo, réfugiez-vous sur une instance Mastodon proche de chez vous. Faites vivre les alternatives que sont les chatons. Utilisez un navigateur web respectueux (non gagner 2ms sur l’ouverture d’une page web n’est pas indispensable).

Alors vous allez vite me dire que ça demande des compétences. Bha oui et non. Vous n’êtes pas obligé d’y aller à fond tout de suite en vous auto-hébergeant et tout. Mais vous pouvez commencer simplement par exemple via l’excellente initiative Framasoft que sont les Framasite.

11ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE, UBPorts et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Salut tout le monde ! Beaucoup d’avancements depuis mon dernier rapport de design. Jusqu’à maintenant je n’ai rapporté que les avancées design sur le plan software, mais nos efforts ne s’y limitent évidemment pas. L’expérience que ressent une personne vis-à-vis d’un appareil physique est également très importante. Cet article résumera les récentes décisions prises d’un point de vue logiciel mais également matériel.

Penser à l’interface physique

Notre but avec le Librem 5 est d’améliorer l’identité visuelle de la lignée Librem tout en restant proche de notre look humble et minimaliste qui nous caractérise.

Le principal challenge d’un design de boitier est un compromis entre l’esthétisme, l’ergonomie, la praticité et les limitations techniques.

Comme vous le savez, le Librem 5 est particulier car contrairement à la tendance actuelle, nous auront un processeur et un chipset distincts. La consommation électrique est un facteur majeur à prendre en compte mais également la capacité de la batterie ainsi que l’arrangement des circuits imprimmés et ne voulons pas sacrifier l’endurance de la batterie pour quelques milimètres d’épaisseurs. Cela-dit :

  • Nous visons désormais un écran d’une taille d’environ 5.5 à 5.7 pouces avec un ration de 18:9 ce qui nous permettrait d’inclure une plus grande batterie sans impacter le format du téléphone.
  • Nous allons également opter pour une forme chanfrein (voir la photo), au lieu de l’habituel bord arrondi. Non seulement c’est élégant, mais ça permettra une meilleure préhension tout en donnant un peu plus d’espace pour les composants internes.
Concept de design du Librem 5 en version 1

Simplification de l’interface utilisateur

Au fur et à mesure de l’avancement du Librem5, nous sommes conscient du planning serré en visant une sortie en Janvier 2019, et sommes donc concentrés sur la robustesse et l’efficacité pour la première version de l’interface mobile (“phosh”), que nous allons pousser pour devenir l’interface mobile de Gnome Shell.

Nous avons donc revus les fonctionnalités et décidé de diviser le design et son implémentation en plusieurs phases.

La Phase 1 définie une interface la plus simple en terme de fonctionnalité et d’utilisation. C’est ce qui sera livré avec le téléphone en Janvier 2019.

Concept des différents éléments d'interface de l'interface phosh.

Cela inclu :

  • Un écran de verrouillage.
  • Un écran de déverrouillage à base de code PIN pour protéger la session.
  • Un écran d’accueil affichant une liste paginée d’applications.
  • Une barre en haut affichant des informations utiles comme l’heure, le niveau de batterie, le volume audio, le niveau de signal réseau.
  • Une barre du bas simulant un bouton de retour (uniquement visible quand une application est ouverte).
  • Un clavier virtuel.
  • Des notifications d’appels entrants.

Le multi-tâche, la recherche ou les notifications ne seront implémentés qu’en phase 2 et donc disponible plus tard.

Même si la “phase 1” ne correspond pas à l’offre pléthorique habituellement proposé, nous pensons que cette interface minimale sera extrèmement simple à appréhender ce qui favorisera une adoption sans heurts. Cela sera un très bon point de départ.

Designer l’application Contacts

L’application *Contacts sera au centre des fonctionnalités de communication. C’est l’application qui aura en charge la gestion des contacts pour les autres applications comme Calls ou Messages.

Pour cela, nous sommes en train d’adapter l’applications Contacts existante en designant son agencement mobile et en ajoutant de nouveaux champs nécessaires pour les différentes applications.

Différents écrans de l'interface de l'appli Contacts à la fois sur ordinateur et sur mobile.

Librem 5 & Fractal team hackfest à Strasbourg

Cette semaine, certains membre de l’équipe Librem 5 (incluant moi-même) seront au Fractal Hackfest 2018 à Strasbourg dans le but d’aider l’équipe Fractal à créer application basée sur Matrix à la fois jolie et sécurisée à la fois sur ordinateur que sur plateforme mobile. J’espère faire un rapport sur les fonctionnalités de communication du Librem 5 dans un futur article où j’aborderai ce qu’il se sera passé au Fractal Hackfest.


Bon bien entendu quand vous lisez “je” dans cet article, ce n’est pas moi mais l’auteur original François Téchené membre de Purism.

Les modifications de concept de design physique sont intéressantes. Mine de rien les modes des smartphone a pas mal changé depuis la création du crowdfunding et ce nouveau design (provisoire) est déjà plus sympa et accuse moins le coup. J’aime beaucoup le fait qu’ils ne cherchent pas à faire le smartphone le plus fin possible. Perso ça ne me gène pas d’avoir un appareil un peu épais, surtout si ça permet d’avoir une meilleure batterie et un téléphone mieux branlé.

Concernant le logiciel, certains vont probablement râler mais bon la deadline est vraiment courte. Même s’ils repartent de briques existantes, le monde GNU/Linux est quand même pas vraiment adapter au téléphone et du coup tout le userspace est à créer ou presque. Bref c’est bien qu’ils annoncent que dans un premier temps ça sera léger. Il y a plus qu’à espérer qu’ils ne s’arrêteront pas à la Phase 2 mais poursuivent les efforts par la suite.

Ce qu'il se passe quand on ouvre une page web

Vous ouvrez très probablement des dizaines voir des centaines de pages web tous les jours. C’est devenu naturel à tel point qu’on ne se rend pas compte de toute la magie à l’œuvre pour nous afficher notre drogue moderne.

Déjà commençons par une petite mise au point : je vais causer principalement de Web mais pas trop d’Internet car souvenez-vous : Web ≠ Internet.

C’est parti !

Comprendre l’adresse

Imaginons que vous vous comportiez bien en utilisant la barre d’adresse (et non la barre de recherche). Vous entrez donc lord.re/posts .

Votre navigateur va devoir transformer ça en une véritable URL.

Donc premièrement il va rajouter le protocole utilisé. Ça veux dire qu’il va rajouter http:// devant pour indiquer Hyper Text Transport Protocol. Peut-être que les navigateurs utiliseront https par défaut bientôt ce qui permettrait d’utiliser une version plus sécurisée du web par défaut mais c’est pas encore le cas.

L’adresse est donc http://lord.re/posts avec les différents composants :

  • http:// étant le protocole
  • lord.re est le nom de la machine sur laquelle vous vous connectez
  • posts est le document que vous voulez voir

À partir de là, le navigateur va pouvoir passer à la suite.

Requête DNS

Bon c’est bien gentil, votre ordinateur sait quel serveur contacter mais il ne sait pas où il se trouve. Votre navigateur ne peut se connecter qu’à des adresses IP, il lui faut donc faire la correspondance entre le nom de la machine et son adresse IP. Ce service est assuré par l’OS et plus spécifiquement le service de résolution de nom couramment appelé DNS.

Votre navigateur demande donc à votre OS : « Quelle est l’adresse IP de lord.re ? »

Votre OS va donc consulter le serveur DNS qui est configuré et celui-ci lui donnera une adresse IP de la forme 92.167.84.9 si c’est une IPv4 ou bien 2001:0db8:1234:4321:1234:4321:1234:4321 en IPv6 (oui c’est beaucoup moins simple à retenir).

Avec un peu de chance cette information ne vous aura nécessité l’envoi que d’un paquet DNS et la réception d’un paquet DNS. On a donc déjà 2 paquets qui ont voyagé. Votre OS transmettra ensuite cette réponse à votre navigateur qui pourra établir la connexion IP et TCP.

Création des paquets IP

Lorsque deux machines se connectent pour ensuite parler, elles le font via le protocole IP (IPv4 ou IPv6). Les données sont tronçonnées en de multiples morceaux. Chaque morceau est placé dans un paquet IP. En gros un paquet IP c’est une enveloppe avec l’entête (écrit sur l’enveloppe) et les données dedans.

Ces entêtes IP contiennent (entre autre) l’adresse IP d’émission du paquet (pour pouvoir revenir) ainsi que l’adresse IP de réception (pour pouvoir atteindre la destination).

Bref le navigateur est désormais capable de joindre le destinataire final en demandant à l’OS de créer des paquets IP. Le réseau se chargera de les amener au bon endroit et de faire le retour également. Mais ça c’est une autre histoire passionnante.

Établissement de la connexion TCP

Si vous voulez parler via le protocole http, alors les paquets sont émis à destination du port 80 si c’est en https, alors ce sera le port 443 et seront émis depuis un port aléatoire de votre ordinateur.

Mais dis-moi Jamie, c’est quoi un port ? La notion de port est ce qui permet à un ordinateur d’établir plus d’une connexion simultanée.

Vous n’allez pas vous connecter juste à un ordinateur en réalité mais à 1 port d’un ordinateur. Un même ordinateur pourra faire tourner plusieurs logiciels simultanément qui attendront chacun des connexions sur des ports différents. De ce fait un seul ordinateur peut à la fois parler http et https mais également faire serveur mail sur le port 25 par exemple et pourquoi pas aussi serveur de discussion via le port 6667…

Les ordinateurs en ont 65535 ce qui leur laisse pas mal de marge de manœuvre (et encore autant en UDP). Un port est donc un point d’entrée et/ou de sortie de votre OS sur le réseau.

Donc reprenons :

  • votre ordinateur va envoyer une demande de connexion tcp vers le port 80 ou 443 du serveur web (TCP SYN).
  • Lorsque le serveur web va recevoir cette demande, s’il est disponible, il enverra un paquet comme quoi il accepte cette connexion (TCP ACK).
  • Et enfin votre ordinateur à la réception de l’acceptation enverra un accusé de réception attestant que la connexion est établie (TCP SYNACK).

Cet échange s’appelle le TCP Handshake ou 3way-handshak ou la poignée de main TCP.

TCP est dit fiable car il s’assure que chaque paquet envoyé est reçu et dans le bon ordre. Si des paquets ne sont pas reçus, TCP le renverra. Ce système fonctionne grâce à des accusés de réception et le fait que chaque paquet est numéroté.

On est donc dans le meilleur des cas à 5 paquets échangés et toujours 0 info à se mettre sous la dent.

Établissement TLS

TLS est la couche de protection qui fait la différence entre le HTTP et le HTTPS. Ce fameux petit s qui veux dire secure.

C’est lui le garant de la sécurité et de la confidentialité de vos données mais malheureusement ce n’est pas infaillible mais je ne pousserai pas dans ces détails. Cette étape n’intervient donc que lorsque l’adresse rentrée est en HTTPS.

Bref maintenant votre ordinateur (le client) va parler SSL/TLS (SSL étant le nom de l’ancien protocole) avec le serveur.

  • Votre client indique quel domaine il veux contacter ( lord.re dans notre exemple) en clair.
  • Il y tout d’abord la négociation de la méthode de chiffrement pour que le client et le serveur puisse utiliser la même.
  • Le serveur envoi son certificat au client.
  • Le client vérifie que ce certificat est de confiance (en regardant qui l’a signé et si ce tiers est de confiance)
  • Si c’est ok, le client choisi une clé de chiffrement temporaire qu’il chiffre via la clé publique du serveur
  • Le serveur web déchiffre cette clé temporaire grâce à sa clé privée
  • Les échanges suivant sont chiffrés via la clé temporaire échangée de manière sécurisée.

Si les rouages sous le capot vous intéresse le bon vieux wikipedia possède une page plutôt pas mal à ce sujet.

Autant vous dire que les méthode de chiffrements sont variées allant du vraiment blindé à la passoire. Sachez que généralement les sites sont plutôt moyens et que généralement les banques sont dans le tout juste passable voir passoire… Le site SSLLabs de Qualys propose un excellent test de niveau de sécurité TLS bien foutu ce qui vous permettra de juger de la sécurité d’un site (mais ça ne fait pas tout).

Bref l’utilisation de TLS a un léger impact sur les performances mais garantie (dans la grande majorité des cas) que les données échangées ne sont pas lisibles par quiconque et ne sont pas non plus alterées, c’est donc indispensable.

Bon bon bon, notre compteur atteint désormais les 11 paquets échangés et toujours pas de données utiles pour votre navigateur mais ça arrive à la prochaine étape. (spoiler pas vraiment mais presque)

HTTP

Bon maintenant que la connexion est établie pour de bon et qu’elle est éventuellement chiffrée, ça va enfin pouvoir parler http.

Votre navigateur (le client web) va donc dire quel domaine il veux contacter, quel document il souhaiterait recevoir ainsi que quelques métadonnées. Voilà un exemple de requête :

> GET /posts/ HTTP/1.1
> Host: lord.re
> User-Agent: curl/7.59.0
> Accept: */*

On y voit quel document je demande, ainsi que la version du protocole que j’utilise, quel hôte (le domaine) je demande, quel est mon navigateur (curl/7.59.0) et quels sont les types de données que j’accepte (/ signifie tous les types).

Une des choses fondamentales à voir est que le navigateur et le serveur se parle en s’envoyant du texte lisible par un humain. C’est donc très facile à débugguer et inspecter pour un humain, ce n’est par contre plus le cas avec HTTP2 qui ajoute de la compression et n’échange plus ces entêtes sous forme textuelle mais binaire.

Cependant cet exemple n’est pas super représentatif car curl n’est pas un navigateur classique mais un logiciel en ligne de commande un peu spécifique. Voyons plutôt à quoi ça ressemble avec un bon vieux Firefox des familles :

> GET /posts/ HTTP/1.1
> Host: lord.re
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en-US,en;q=0.5
> Accept-Encoding: gzip, deflate, br
> DNT: 1
> Connection: keep-alive
> Upgrade-Insecure-Requests: 1
> If-Modified-Since: Mon, 30 Apr 2018 21:59:32 GMT
> If-None-Match: W/"5ae791c4-21f57"
> Cache-Control: max-age=0

Et là il y a beaucoup plus d’infos dont certaines permettent de vous profiler/espionner/suivre.

Le User-Agent indique quel navigateur vous utilisez et souvent quel OS vous utilisez.

Le Accept est aussi plus spécifique en spécifiant également la langue et quel formats de compression de données vous pouvez gérer.

DNT est là pour indiquer que vous ne souhaitez pas être traqué et n’est généralement pas mis par défaut et rarement pris en compte par les serveurs malheuresement.

Connection indique la façon dont vous voulez que la connexion soit gerée. Ici on indique que l’on reste connecté (au sens TCP) même une fois les données transferées, ce qui permet de réutiliser cette même connexion dans le cas où il y aurait d’autres requêtes par la suite. Bien évidemment au bout de quelques secondes/minutes c’est tout de même coupé.

Upgrade-Insecure-Requests indique que le navigateur web accepte de passer en HTTPS si c’est possible.

Les trois derniers éléments de la requêtes sont relatifs au cache du navigateur qui indique qu’il a déjà des données en cache afin que le serveur s’adapte.

Bref c’est beaucoup plus verbeux que le bon vieux curl mais ça apporte quelques raffinements bien utiles tout de même.

Ce coup-ci de multiples paquets seront nécessaires et contiendront enfin vos vrais données. Maintenant votre navigateur va attendre la réponse du serveur.

Création de la page

Vous voulez désormais recevoir le document demandé mais pas si vite! Tout ne se déroule pas toujours aussi facilement.

Deux cas sont possible, le document est dit statique et de ce fait existe dans un fichier qui vous est transmis ou bien ce n’est pas le cas.

Et là je parle pas d’erreur 404 mais juste que le document que vous demandez doit être généré juste avant l’envoi et que ces données sont volatiles. Elles peuvent être regénérées mais ne sont pas un vrai fichier sur un disque dur quelque part, dans ce cas c’est dit dynamique.

Le serveur reçoit votre requête http et en fonction de celle-ci va créer une page.

C’est par exemple le cas des pages web en PHP utilisés par de nombreux sites (notamment Facebook ou plus simplement les sites utilisant le moteur Wordpress). Les pages sont générées par le serveur à la volée et vous sont transmises. Cette technique est désormais communes et s’est développé peu après le début du web vers la fin des années 90.

Il existe un troisième cas qui est de plus en plus répandu et qui est bien plus récent puisqu’il a débarqué ces dix dernières années où le contenu brut est envoyé au navigateur web mais c’est le navigateur web lui même qui va générer la page. Cette technologie s’appuie largement sur le langage Javascript qui s’exécute dans votre navigateur.

Sachez d’ailleurs qu’il est possible de désactiver Javascript dans votre navigateur ce qui rend ces sites inutilisables. Qui plus est, beaucoup de ces sites posent des problèmes d’accessibilités et parfois de référencement mais que voulez-vous ma petite dame, c’est la mode.

Réception de la page

À l’étape HTTP on a vu la requête envoyée par le navigateur, ici nous allons voir la réponse HTTP reçue :

< HTTP/1.1 200 OK
< Server: nginx
< Date: Fri, 13 Apr 2018 17:29:43 GMT
< Content-Type: text/html
< Content-Length: 134839
< Connection: keep-alive
< Vary: Accept-Encoding
< Last-Modified: Thu, 12 Apr 2018 11:25:23 GMT
< ETag: "5acf4223-20eb7"
< X-Cache-Status: MISS
< Accept-Ranges: bytes

On voit la version du protocole ainsi que le code de retour (200 qui signifie OK, vous connaissez probablement 404 qui signifie document introuvable, 403 interdiction de voir le document, …). On voit quel est le serveur (nginx est l’un des logiciel les plus répandu), la date, le type de donnée du document voulu, sa taille, la dernière modif du document et des informations concernant le cache.

Ensuite, il y a les données, c’est à dire le document demandé.

Lire la page

Votre navigateur vient donc de recevoir votre page web, il va la lire et regarder son contenu.

Une page web ce n’est qu’un fichier texte formatté d’une certaine façon.

Ce fichier texte va donc devoir être transformé en un document plus regardable qu’un simple fichier texte. Le navigateur va afficher les images qui sont liées à la page, appliquer un style définie dans un fichier CSS, placer une/des vidéo ou jouer des sons, pourquoi pas afficher des éléments en 3D.

Pour chacun de ces éléments, votre navigateur va refaire toutes les étapes précédentes avec d’éventuelles subtilités. Par exemple si un document est sur le même domaine que la page actuelle, le navigateur pourra zapper l’étape du DNS et en fonction du protocole utilisé (si c’est du HTTP2 par exemple ou 1.1 avec quelques options) le navigateur pourra réutiliser la connexion TCP en cours ainsi que la session TLS actuelle.

Bref le navigateur va recevoir en premier lieu, à peu près tout le texte de la page (sauf s’il y a filouterie via javascript) puis recevra les autres éléments, mais le navigateur tentera de faire le rendu au plus tôt et le modifiera à chaque fois qu’il recevra de nouveaux éléments.

Par exemple le CSS est un fichier texte s’occupant de styliser la page en y définissant des couleurs, le placement des éléments et tout ce qui a attrait à l’esthétisme. Une même page web peut avoir plusieurs fichiers CSS.

Toujours à ce propos, une même page web peut contenir de nombreuses images (no shit Sherlock) ou de nombreux Javascript. Mais là où ça devient problèmatique, c’est que ces différents contenus ne proviennent pas forcément du site que vous consultez mais de sites extérieurs.

Par exemple tous les boutons de réseaux sociaux, sont très généralement issus de ces fameux réseaux sociaux eux-mêmes ce qui implique que même si vous ne cliquez pas sur ces boutons, les sites en questions collectent tout de même l’information que vous avez consultez telle-page, même sans y être connecté (via un champs referer de la requête http, qui contient l’adresse web de la requête précédente). Bref, un désastre pour les performances mais aussi la vie privée.

Exécuter le javascript

Une fois que votre navigateur a également reçu les javascripts, il va les exécuter. Ce sont des sortes de mini programmes qui à l’origine étaient très limités mais qui au fil du temps ont de plus en plus de possibilités ce qui a amené à la création des web applications.

C’est eux qui permettent par exemple de créer des ptits graphs en live, qui affichent les prix les plus à jour sur les sites marchands, qui rafraîchissent partiellement la page pour afficher le nouveau contenu, bref tout ce qui est un peu dynamique sur une page provient de Javascript.

C’est d’ailleurs souvent un nid à emmerdes dans le sens où certains s’en servent pour chopper quelques données sur vous, pour miner de la crypto monnaie dans votre dos, pour utiliser votre processeur un peu trop intensivement juste pour afficher des effets négligeables… Bref je suis pas un fan inconditionnel de Javascript et je recommande de n’activer Javascript qu’au cas par cas afin de vous épargner (ainsi que votre machine) tout plein d’emmerdes.

Et voilà votre page web est complète et aura nécessité de nombreux aller-retours un peu partout dans le monde. J’ai pas mal insisté sur le nombre de paquets car il faut bien voir que chacun des paquets fais un aller-retour (le paquet fait l’aller, l’accusé de réception le retour), ce qui implique à chaque fois une certaine latence. Ça explique en partie la lenteur d’ouverture de certaines pages.

Le second facteur de lenteur est tout simplement la quantité de données de tous les documents nécessaires à la page web.


Cet article est une nouvelle version d’un article publié sur le site d’Iloth un gentil Fournisseur d’Accès Internet dont je suis membre. Je l’ai réécrit pour l’améliorer et le rendre un poil plus digeste et plus à jour.

Des fissures dans le Fediverse

La popularité récente de Mastodon mais plus largement du Fédiverse est intéressante. Mais. Ouai fallait mettre un “mais”. Mais, il commence à montrer quelques signes de fissures.

La fédération

Mastodon s’appuie donc sur du logiciel libre pour créer un réseau social fonctionnant sur le même principe que Twitter. Sauf que contrairement à Twitter, c’est un logiciel libre parlant un protocole ouvert s’appelant ActivityPub et OStatus.

Cette différence peut sembler mineure mais est en fait la force de ce réseau social : le protocole étant ouvert et documenté, il est possible pour plusieurs personnes de monter un serveur qui saura parler avec le reste du réseau.

On est donc sur un ensemble de serveurs parlant le même langages et pouvant donc communiquer entre eux.

C’est un peu comme les mails. Il existe tout pleins de fournisseurs de mails qui acceptent de parler entre eux. Vous pouvez donc via votre adresse @gmail.com envoyer un mail à quelqu’un chez @yahoo.fr . Tout comme sur mastodon, sur votre instance @octodon.social vous pouvez tooter votre ami se trouvant sur @mamot.fr .

Les serveurs bossent ensemble et forment un seul et unique grand réseau aggloméré.

Pour que ça soit effectivement le cas il faut donc 1 langage commun + accepter de se féderer. Le langage commun c’est sous le capot, le choix d’un protocole ouvert et normalisé. Par contre accepter de se fédérer c’est de la décision humaine.

Bref maintenant qu’on a vu ce qu’est en gros la fédération voyons les quelques soucis qui émergent en pratique dans le Fediverse.

La mort d’une instance populaire

Le Fediverse est donc peuplé d’environ 2000 instances Mastodon (mais pas que…). Les utilisateurs (Près de 1.5Millions) sont donc répartis entre ces instances.

Witches.town était l’une de ces instances. Pas la plus populaire mais pas non plus la plus petite des instances. Elle était maintenue par une personne. Une seule personne. Et pas de bol cette personne a décidée d’arrêter et du coup pas mal des sorcières ont dû trouver une nouvelle cabane.

Heureusement tout a été plutôt bien fait avec un long délai avant que ce ne soit effectif et pas mal de bonnes âmes ont proposées des places sur d’autres instances. Mais ça risque d’arriver de façon un peu plus chaotique les prochaines fois.

Il est donc important de bien choisir son instance Mastodon. Et il est même possible de monter sa propre instance perso afin de le gérer au plus proche de ses besoins.

Pleroma vs Mastodon.social

Je vous ai teasé que le Fediverse n’était pas uniquement composé d’instances Mastodon.

On y trouve également d’autres logiciels tels que Gnu.social qui est la suite de status.net qui était la suite d’identi.ca … Bref c’est un projet qui a une vie assez longue désormais et qui est toujours en place. Il me semble que c’est ce logiciel qui a créé le protocole OStatus (tout du moins ses ancêtres de fork).

Mais ce n’est pas tout. Le Fediverse grandit de plus en plus désormais et de nouvelles alternatives émergent régulièrement.

Une qui commence à avoir pas mal le vent en poupe est Pleroma.

Mais pas de chance, l’une des plus grosses instances (mastodon.social) a décidé de silence une instance pleroma ainsi que quelques devs pleroma. Parceque visiblement Pleroma a une vision légèrement différente sur la façon de faire les choses que les mainteneurs de mastodon.social. Bref drama drama drama.

Est-ce que le Fediverse va se scinder avec d’une part un Fediverse avec seulement Mastodon d’un côté et les autres de l’autre ? On ne le sait pas mais peut-être que ça pourrait arriver si la situation ne se désamorce pas.

IRC

Quittons le Fediverse un instant. Il fût un temps où le meilleur des protocoles de chat en ligne (IRC) était un seul et unique réseau féderé.

Vous pouviez vous connecter à n’importe lequel des serveurs existant à l’époque et vous vous retrouviez connecté à tout l’IRC. Tous les chans du monde accessibles en un point. Tout le monde au même point.

Puis il y a eu mésentente et coups-bas, un nouveau réseau parallèle s’est formé pour ensuite tout refusionner. Et ensuite quelques temps après commencer à se fractionner de partout. En cinq ans on est passé d’un modèle décentralisé fédéré à un modèle multi-centralisé non fédéré. Trente ans plus tard l’IRC est toujours morcellé en de nombreux réseaux.

C’est ce que risque le Fediverse.

Si vous voulez plus d’infos concernant l’histoire d’IRC, la page anglaise de Wikipedia en a un ptit résumé.

Le seul réseau fédéré qui malgré les années l’est encore est le SMTP : les mails. Et pourtant Google et Microsoft s’acharnent à briser cette fédération.

Préserver la fédération

Le meilleur moyen de protéger la fédération est de morceler le plus possible les instances.

Plus les instances sont nombreuses et petites moins elles ont d’intéret à briser la fédération et s’isoler. Au contraire, plus une instance devient importante moins la fédération a d’intéret pour elle.

Mais d’ailleurs pourquoi vouloir à tout point garder la fédération ? Parceque le succès d’un réseau social est directement lié à son nombre d’utilisateur afin de bénéficier de l’effet de réseau.

Pour virer ces crasses que sont Facebook, Twitter et tous les autres réseaux sociaux propriétaires, il faut une alternative crédible et fonctionnelle. Le Fediverse pourrait l’être.

Bon sur ce je vous laisse, je retourne à la fête du Fediverse.

PS : Tiens wikipedia n’a pas d’article concernant le Fediverse.

PS2 : Ha bha trois heures après finalement il y a un article Fediverse dans le wikipedia FR. Je comptais m’y atteler demain pour fêter le travail mais finalement j’ai été pris de vitesse.

Mes déboires Hardware de ce début 2018

Bon bha ça y est j’en vois je bout.

Gros nordi

Mon ordi de bureau m’a fait quelques misères. Impossible de booter. Ça plantait inlassablement à divers moments du boot, parfois dès le POST, parfois au niveau de grub, par chance je parvenais à booter pour quelques minutes une fois sur Y. Bref de l’aléatoire comme j’aime (keuf keuf).

Bon, je vais voir le bios (j’ai toujours pas pris l’habitude de dire l’UEFI…). Hmmm je fouille, je fait d’ailleurs l’update bios en version 2.0 (wahou ça doit être tellement mieux avec une update majeure).

Bof pareil. Je ClearCmos avec le ptit bouton qui va bien. Suspens. Tiens il se passe plus rien. … Ha bha je suis pas dans la merde. … Ha si ça booot… pas. Erf. On sent qu’ils se passent des trucs pas net quand on clearcmos, ça prend un temps fou à faire on sait pas trop quoi avant de réellement booter (surement l’AMD PSP qui doit booter aussi son ptit OS et faire ses saloperies dans mon dos).

Bon j’enlève les barrettes de ram je les permuttent, je vire les SSD. Rien à faire.

Il y a bien le DrDebug qui est en fait un code à deux caractères hexa affiché sur la mobo pendant le boot pour indiquer les erreurs. Mais ce cher Docteur indique pleins de trucs qui alternent sans cesse puis ça part en boucle.

Je fais une ptite vidéo de la carte mère qui agonise et j’envoie ça par mail au support d’Asrock.

Bref après deux jours d’emmerdes et un bon week-end, je contacte Amazon pour un ptit RMA. Comme à leur habitude c’est d’une rapidité déconcertante et je teste donc la nouvelle mobo identique.

Je l’installe dans le boitier, je fout le cpu, toute la ram, la carte graphique, les différents connecteurs, les SSD, le ventirad et c’est parti ! Je vois le logo de la mobo (ce qui est déjà rare). Je vois même mon bon vieux grub violet mochtoque. Et là pouf ça reboot !

-____−

Bon bha c’est pas la mobo déjà une bonne chose. J’ai une réponse d’Asrock et du coup je leur parle pas du RMA pour voir ce qu’ils proposent. Après quelques manips que j’avais déjà effectué, ils me demandent de faire une autre vidéo en virant absolument tout sauf le cpu.

Et là Miracle ça marche, ça ne redémarre plus en boucle.

Bon bha. Heuuu. Je met la ram. Ça marche. Je fout le GPU. Ça marche. hmmmm Je fout les SSD. Ça marche. Je fout les connecteurs USB et Audio du boitier. Ça marche. Je fout les connecteurs des boutons Power et Reset. Ça déconne.

HOLY SHIT !!!

Cette petite merde de bouton reset qui déconne et qui se déclenche seul de temps à autres.

RAGEQUIT

Ptit nordi

Mon vieux Bender était malade.

Une extinction inopinée le mois dernier dans un mystère le plus total m’avais un peu troublé mais sans plus. J’étais pas spécialement pressé de le réparer car avec l’usage je me rend compte que je suis de moins en moins dépendant envers mon nas. J’utilise désormais Netflix et mon instance Groovebasin comblent mes besoins multimédias. Qui plus est le skeudur de backup étant via usb, j’ai pu le foutre sur une autre machine…

Sauf que là en ayant plus accès à mon gros ordi ça devient un peu plus gênant de plus avoir accès à mes mots de passes (qui sont synchro entre ces deux machines). D’autant plus quand il devient nécessaire de passer voir les impôts, accéder à Amazon et d’autres comptes.

Bref j’ai profité de la convalescence du gros ordi pour tester son alim dans le ptit ordi.

Yatta ça fonctionne.

Bon bha je commande une ptite alim au format SFX et c’est reglé. Bon je prend un ptit skeudur 8To aussi au passage pour éviter d’en commander un dans quelques temps et donc diminuer un poil l’empreinte carbone (on se trouve des excuses).

Et bha pas de bol. Je reçois un 4To -____-

Bon bha je vais le renvoyer aussi et espérer recevoir un 8To assez vite.

Voilà à plus ;-)

Mon environnement auto-hébergé

Ça fait un ptit moment que je voulais faire un point des services autoheberge que j’utilise.

Mails

Allez on commence par les mails. Je vous ai déjà pas mal bassinné avec ça mais bon un ptit point rapide. Vos mails sont une grande partie de votre identité numérique. Ils regorgent d’identifiants, de factures, de conversations, de pièces-jointes…

Bref, ça se refile pas au premier venu qui vous regarde gentiment avec des grands yeux et un grand sourire en vous disant qu’il s’en occupera gratuitement. C’est l’un des services les plus importants à auto-héberger mais c’est aussi le plus chiant.

Avoir un serveur de mail pleinement fonctionnel n’est pas si difficile en soit. Par contre faire en sorte qu’il fonctionne encore dix ans plus tard sans perdre de mail et voir ses mails acceptés partout… ce n’est pas la même affaire. Je ne le recommande donc pas à tout le monde. Pour le webmail j’ai longtemps utilisé Roundcube mais je suis désormais sur Rainloop. L’interface est un poil plus joli que Roundcube et passe mieux sur téléphone.

Et dans le fond j’utilise Postfix, Dovecot, Rspamd, Sisyphus.

RSS

Dans les services web, un dont je suis ultra friand est l’aggrégateur de flux RSS/Atom. Dans mon cas c’est Tiny Tiny RSS. Malgré l’attitude quelque peu particulière du main dev, ce logiciel est excellent et super fiable. Mon instance a soufflée sa 11ème bougie récemment, sa base de donnée s’est déjà fait migrer plusieurs fois et tout fonctionne encore sans aucune prise de tête. Juste de temps à autres une update via l’interface web et hop je le backup même plus tellement je suis inconsc^W mal-habitué.

Les RSS sont ma source principale de news et autres. J’adore le fait de pouvoir chopper des news de blogs très rarement mis à jour sans devoir vérifier constamment. Et contrairement à Fb et compagnie c’est pas filtré, tout le contenu des créateurs est publié sans le faire passer à la caisse.

Musique

Pour la musique j’ai une instance Groovebasin qui tourne. Ça stream de la musique, gère les playlists, sait importer de la musique via youtubedl, ça normalize et surtout ça génère une playlist infinie. Malheureusement c’est maintenant à l’abandon et il n’y a plus de mise à jour ni rien depuis des mois.

Un des reproches est que l’interface n’est pas du tout adaptée aux appareils tactiles (il faut double cliquer et parfois faire un clic droit)… En dehors de ça pas grand chose à reprocher. Je pense qu’il va tout de même falloir migrer si les developpements ne reprennent pas mais j’ai pas encore trouvé vers quoi.

J’ai déjà testé Ampache, Subsonic pour lequel je me suis même pris une licence d’un an, mpd, mais au final j’ai préferé Groovebasin.

Galeries photo

J’en ai deux en parallèle sur la même base de photos. La première basée sur SFPG en PHP mais sans base de donnée ni rien. Pas mal du tout. Ça marche sans broncher mais pas super moderne.

Puis j’ai découvert PhotoFloat qui est par contre bien plus moderne. Plus besoin de rafraîchir la page, ça charge quasi instantanément. Bien plus agréable à utiliser mais c’est en Python, faut générer la galerie à chaque fois qu’on rajoute des photos (générateur de site statique quoi). Pas de bol c’est plus trop maintenu (c’est le dev qui a aussi pondu les excellent Password-store et aussi Wireguard).

Cloud multi-services

Je me suis également monté un instance Sandstorm. C’est une plateforme de cloud assez magique qui vous permet de faire tourner des services web très facilement. Ce qui différencie Sandstorm de toute la concurrence (cozy, yunuhost, cloudron, …) c’est qu’ils ont une approche de la sécurité exotique.

Déjà il n’y a pas de mot de passe, ça fonctionne par tokens temporaires qui sont envoyés par mail. Ensuite ils ont une approche 1 document = 1 instance.

C’est à dire que si par exemple vous avez besoin d’un pad, sandstorm vous démarra une instance etherpad-lite. Si ensuite vous voulez ouvrir un second pad, sandstorm vous démarra une nouvelle instance indépendante d’etherpad-lite. Tout est fortement isolé.

Si vous partagez un document, vous obtiendrez une url unique que vous pouvez bloquer en écriture. Et chaque personne à qui vous partagerez ce grain (c’est le nom des applis) aura une adresse unique. Vous pouvez révoquer ces droits et tout.

C’est vraiment génial. Par contre il y a quelques désavantages : les applis doivent être légèrement modifiées pour s’intégrer dans Sandstorm et le temps d’accès à un document est plus long que la normale vu qu’il faut le temps que la dite appli soit démarrée mais ça reste largement tolérable car de l’ordre de 3/4secondes.

DNS

Avoir un nom de domaine c’est essentiel mais le gérer soit même c’est encore mieux ! J’utilise Knot qui est globalement assez simple et robuste. Il permet de faire du DNSSEC facilement en plus. Pas grand chose de plus à dire. Il sait se faire oublier.

Backup

J’utilise depuis très longtemps Rsnapshot qui permet de faire des backup incrémentaux en utilisant ce bon vieux rsync et de pousser ça via SSH. Mais je dois avouer que je commence à reluquer sérieusement Borg Backup qui sait chiffrer de lui même du coup je couplerai bien ça avec un fournisseur de stockage externe genre Wasabi. C’est dans la catégorie “Pour plus tard” sauf que la mort de mon NAS/serveur bouscule un peu plus les priorités.

Les services abandonnés

Voilà les services que j’ai actuellement. J’en ai eu pas mal d’autres que j’ai stoppé au fil du temps.

À un moment j’ai tenté de croire à xmpp mais au final… bof. J’ai tout de même utilisé ejabberd, prosody, movim. J’ai également fait mumuse avec Identi.ca mais c’était pas ma tasse de thé (bien que je commence à faire mumuse avec Mastodon depuis un an (sur octodon) ).

J’ai eu du Wordpress mais vite largué pour un simple fichier texte puis maintenant Hugo. J’ai utilisé Wok aussi pour faire du site web statique. J’ai presque utilisé Dokuwiki avant de me rendre compte que pour du perso c’est overkill, j’en ai vraiment pas besoin.

J’ai également utilisé très peu de temps un service de localisation qui permet de voir en live (quand une page web était utilisée où se trouvait la personne). Je retrouve pas le nom du service et au final je ne m’en suis servi qu’une fois ou deux.

J’héberge ponctuellement un serveur Quake 3 avec le mod CPMA mais ça ne dure rarement plus de quelques semaines.

J’ai utilisé de l’OpenVPN en perso aussi quelques temps avant de me rendre compte qu’un bête tunnel SSH est bien plus léger et tout aussi bien et avec bien moins de dépendances. Cela dit je pense me tourner vers du Wireguard bientôt.

J’ai essayé d’utiliser Funambol pour synchroniser des contacts et autre merdouilles avec le téléphone mais au final… bha ça me sert à rien. Je fais un backup manuel des contacts du téléphone tous les six mois et voilà… Je dois surement en oublier quelques-un.

J’ai hébergé du Mumble durant ma folle période gamer.

Avant de migrer sur du pur Weechat, j’utilisais ZNC qui est donc un bouncer irc sur lequel je connectais Weechat sur l’ordi et un client irc sur l’Android mais maintenant j’utilise un client weechat sur le téléphone aussi.

Pour les synchro de fichier, j’ai utilisé Syncthing pendant quelques temps mais son fonctionnement un peu trop p2p n’était pas forcément ce que je recherchais le plus mais surtout sa trop grande gourmandise et son côté service de Schrödinger qui marche ou ne marche pas m’a vite saoulé. Cela dit il y a eu un paquet de nouvelles versions désormais ptet que ces reproches n’ont plus lieu d’être.

Facebook Algo Complot

Bon si vous êtes ici, j’imagine que vous n’êtes pas sans savoir que Facebook n’est pas une plateforme neutre dans la distribution de “son” contenu.

Les personnes à qui vous êtes abonnés publient du contenu et Facebook décide d’afficher ou non ce contenu dans votre flux d’information. Ce choix est basé sur des algos fait maison complètement opaques. En cela je ne les blâme pas. C’est leur produit, ils font ce qu’ils veulent. Même si pour les créateurs de contenu ça peut devenir problèmatique, ça peut tout de même poser quelques soucis.

Une IA ça s’entraîne

Ce travail de sélection de contenu n’est bien évidemment pas fait à la main mais par un algorithme.

Cet algorithme tend de plus en plus vers une Intelligence Artificielle (bha oui c’est la mode). Facebook investit énormément dans l’IA d’ailleurs.

Donc une IA est tout de même un peu bête, pour fonctionner il faut lui donner des billes et lui dire si c’est bien ou pas. Bref de l’apprentissage.

Petite digression : Avez-vous déjà joué aux jeux Black&White, ils reposent sur le principe que vous êtes un dieu avec une créature que vous devez éduquer. Cette créature sera le reflet de l’apprentissage que vous lui procurerez et sera donc gentille ou méchante en fonction de vos choix.

Bref c’est un principe assez basique des IA.

Et si Facebook créait une IA diabolique ?

Facebook abreuve ses utilisateurs de contenu ciblés par l’IA. Mais quel est le but de Facebook ? Vendre des encarts publicitaires. Plus vous voyez ces pubs plus ils engrangent de pognon.

Et si l’IA se rendait compte que certains contenus génère bien plus d’activité sur le site, il y a fort à parier que l’IA favorise ce contenu à l’avenir (c’est son taff après tout). Et si ce contenu c’était un évènement malheureux comme un suicide ? Facebook se retrouve en ébullition pour transmettre tous les messages de soutiens et d’indignation. Le compteur de nombre de vue s’affolent.

L’IA pourrait se dire que ça augmente la rentabilité et que c’est bon pour le business.

Et si l’IA se rendait compte qu’en abreuvant certains de ses utilisateurs les plus populaires de messages déprimants et en isolant les gens de leurs amis réels les probabilités de suicide augmentent ainsi que le trafic ?

Ouai c’est un peu poussé mais est-ce que franchement faut écarter tout de suite cette théorie ? Ils ont déjà tous les outils techniques pour mettre en place un tel système.

Plus de trolls == plus de vues == plus de pognon

Sans aller aussi loin, on peut imaginer que le système pousserai juste les gens à se diviser.

Avoir des discussions enflammées sur Facebook génère bien plus de trafic que Tata Yvette racontant son dernier rêve durant la sieste.

Donc le réseau pousserait plus que de raison les contenus trolligènes afin que les gens se frittent plutôt que le contenu plus banal faisant moins réagir les gens.


Ha au fait, c’est pas uniquement valable pour Facebook mais aussi pour tous les autres réseaux sociaux à la mord-moi-le-nœud.

Quelques liens sur le sujet

La demoscene vol.3

C’est parti pour notre troisième excursion dans le monde de la demoscene après un ptit tour sur les textmodes.

Et comme d’habitude, si vous cliquez sur les images vous serez amené sur la vidéo Youtube de la démo mais regarder l’original est toujours mieux. Aujourd’hui pas de sujet précis mais juste une ptite sélection de démo que j’aime beaucoup.

La Revision 2018 s’est déroulé lors du week-end de Pacques mais je n’ai pas pu voir ce qui s’y est passé mais je serai à l’affût je vous promet.

Masagin

Commençons tout de suite avec une chouette démo.

Capture d'écran on l'on voit deux moines bouddhistes en dessin stylisé

Masagin by Farbrausch & Neuro

Cette démo est une invitation pour la NVScene 2008. C’est un type de démo pour annoncer une démoparty et donc inviter de nombreux groupes à y venir.

Elle est assez particulière car réalisée entièrement à base de SVG ce qui est assez rare dans le milieu. C’est d’autant plus surprenant que la NVScene est une démoparty à l’initiative de nVidia habitué à vendre des cartes graphiques pour leurs performances en 3D.

Elle sort donc vraiment du lot et sa musique est bien prenante. Et en fouillant le ouaib j’ai réussi à retrouver un ptit making-of.

Malgré ses dix ans son esthétique est toujours agréable de part son côté technique atypique.

Medium

Celle-là est déjà bien plus vintage mais à toujours une ptite place dans la liste de démos que j’adore.

capture d'écran de Medium montrant des formes abstraites

Medium by Einklang

Il y a vingt ans c’était une sacré bête avec sa synesthésie assez poussée et sa 3D pas dégueue. Et lorsque j’ai changé de PC à l’époque je me souviens que ça a été le premier truc un peu costaud que j’ai fait tourner dessus pour évaluer la puissance de la bête. C’est d’ailleurs surement pour ça qu’elle me marque autant celle-ci.

A Mind Is Born

Cette petite est à première vue assez moche mais en fait c’est un tour de force hallucinant.

Déjà elle tourne sur Commodore 64 une belle vieillerie sortie en 1982 cadencé à près d’1Mhz. Mais surtout elle ne pèse 256 octets. 256 octets. 256 Octets !

Le paragraphe dédié à cette démo est déjà 4 fois plus lourd !

Certes cette démo n’est pas très belle mais déjà la vidéo et l’audio sont synchro mais en plus l’audio est pas déplaisant, ça se laisse plutôt bien écouter.

Capture d'écran où l'on voit des caractères textuels représentant des formes abstraites

A Mind Is Born by Linus Åkesson

Elle est toute récente et on trouve même son making-of. Elle mérite clairement sa première place lors de la Revision 2017 dans la catégorie Oldskool 4K Intro.

Through The Cracks

capture en noir et blanc de formes rectilignes abstraites

Through the Cracks byy Still

3ème lors de la Revision 2016 dans la catégorie pc demo, cette vidéo est le cauchemar des codecs vidéos bien que n’étant qu’en noir et blanc. Déjà la première démo de cette sélection a une tendance à faire méchamment souffrir les encodeurs pendant une certaine séquence, celle-ci c’est l’intégralité.

Autant vous prévenir, le rendu made in Youtube est un sketch. Si vous le pouvez, mattez l’original.

Still est un groupe que j’apprécie particulièrement. Beaucoup de leurs démos sont vraiment propre avec toujours de la musique bien posée à forte ambiance. C’est souvent assez minimal et là c’est effectivement encore le cas avec tout un jeu sur le moiré.

10ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Chez Purism, nous sommes tout autant excités que vous concernant les boards de devs qui seront distribuées cet été. Quand quelqu’un recevra sa board, leur première question sera «C’est chouette ! Maintenant qu’est-ce que j’en fait ?». Et pour anticiper ce besoin d’aide technique, notre effort de documentation technique a démarré. Vous pouvez déjà voir l’état actuel de la doc à l’adresse developer.puri.sm.

But de la doc

La doc pour dev sert de guide pour qu’un nouveau dev soit prêt à démarrer et s’amuse ! Cela inclura de nombreux exemples qui vous aideront quelque soit votre but.

Il y aura des instructions pas-à-pas accessible à la fois aux débutants mais aussi aux devs Debian. Le but de la doc est de vous accueillir et éclairer votre chemin via des exemples et des liens vers des docs externes. Ces exemples iront du déballage de votre board jusqu’à la conception et le déploiement d’applications flatpak dessus et pourquoi pas leur inclusion dans PureOS. Vous pourrez également y trouver des exemples d’utilisation de certains outils comme flatpak, les IDE utilisés pour les applications flatpak ainsi que des outils pour vous aider à designer les interfaces utilisateurs de vos applications. Le design des interfaces du Librem 5 seront également abordés dans les moindres détails afin de vous fournir une vue d’ensemble des recommandations pour les interfaces avec les humains qui seront appliquées par les applications fondamentales. Consultez la doc pour apprendre les mouvements que vous pourrez utiliser sur le téléphone. Les applications que vous créerez ou porterez pourront utiliser ces mouvements également.

Prenez tout de même en compte que cette documentation n’est pas un tuto exhaustif sur l’utilisation de tous les outils nécessaires au dev. Il existe déjà de nombreuses docs concernant chacun des outils donc il n’y a pas lieu de réinventer la roue. Cependant, vous serez redirigé vers celles-ci le cas échéant.

Nous accueillons volontiers les tests et autres efforts de devs que des volontaires sont prêts à fournir. En ce sens nous fournirons des informations sur la façon de participer à la communauté Purism en général.

Work in Progress

La doc est en mouvement permanent. Du contenu est ajouté chaque jour et des réorganisation ont lieu de temps à autre. Si une page vous semble avoir disparu, cherché là car il y a des chances qu’elle ait juste déménagée ailleurs plutôt que d’être réellement supprimée. Le but est d’écrire une documentation qui aide tout en étant intuitive donc il est important que le chemin le plus intuitif soit mis en place. La doc est toute neuve mais se remplie assez rapidement afin que vous puissiez l’utiliser décemment dès que vous recevrez votre board en Juin !

Il y aura une annonce dans les prochaines semaines pour un appel à volontaire. Tenez vous prêt !


La doc est un poil capital inexistant chez les entreprises de smartphone. Ils s’appuient beaucoup sur la communauté pour créer un environnement logiciel satisfaisant et du coup savent que la doc tient un rôle prépondérant sur ce point.

L’écosystème Linux actuel n’est pas trop adapté aux smartphone donc de nombreux logiciels vont devoir être créé pour cela.

Trois astuces pour Hugo

J’ai apporté encore quelques modifs sur mon thême Hugo (ouai j’en cause un peu trop souvent désolé mais ce coup-ci c’est plus une astuce qu’autre chose !). Une des modifs récente est l’ajout d’un lien vers un article aléatoire.

Pas de bol cette fonction n’existe pas de base mais c’est assez facile à bricoler via les quelques fonctions internes d’Hugo.

J’ai aussi généré une page contenant absolument tous les articles à l’image de l’ancienne version du site. C’est assez simple à faire.

Je publie désormais les brouillons des articles avant leur publication officielles mais je voulais les exclure du site pour pas que ce soit mélangé.

Chopper un article aléatoire

Hugo possède de nombreuses fonctions et surtout ces fonctions peuvent être chaînées à la manière du | dans le shell.

Du coup on va avoir besoin d’une fonction pour mélanger un array (un tableau) : shuffle.

Une fonction pour générer cet array à partir de critères définis : where.

Et une fonction pour chopper juste le premier élément de l’array : range first.

Le but exact de la fonction est de chopper tous les articles de la section “posts” dans la langue actuelle, les mélanger, extraire uniquement le premier.

{{ range first 1 (shuffle (where .Site.RegularPages "Section" "posts")) }} <a href="{{ .Permalink }}">{{ .Title }}</a>{{ end }}

La ptite astuce c’est que range est en fait une boucle qui doit donc être terminée par un end mais surtout qu’à l’intérieur le scope est définie par l’objet en question. Ça veux dire que .Permalink et .Title sont donc propre à l’itération actuelle de la boucle. Vous aurez donc bien le permalink et le titre de l’élément en cours de la boucle et non de l’article en cours de rédaction.

Voilà, maintenant vous aurez un lien aléatoire sur chacune de vos pages.

Par contre bien entendu ce lien changera à chaque nouvelle génération de votre site…

Générer une page avec le contenu de tous les articles

Avant d’utiliser Hugo, j’étais sur une simple page web faite à la main avec absolument tous les articles. Une seule grosse page.

J’aimais bien ce système pour pouvoir facilement rechercher un terme précis. Du coup j’ai recréé ça sur Hugo.

C’est finalement assez simple puisqu’il suffira de définir une nouvelle section du site.

Donc on créer layouts/mono et dedans on y colle un un list.html.

Là le but est de mimer l’allure de la home page mais avec les articles en entiers.

Donc on copie-colles le layouts/index.html et on modifie {{ .Summary }} par un {{ .Content }}. Bien entendu, on vire le ptit encart pour lire l’article entier.

Et hop ça donne ça.

Publier ses brouillons sans interférer avec le reste du site

Depuis quelques temps maintenant j’ai décidé de rendre public les brouillons d’articles non finalisés. Au lieu de traîner uniquement sur mon ordi, je me suis dit que ça pourrait éventuellement intéresser certaines personnes qui me font parfois des retours avant publication.

Donc pour ça on créer une nouvelle section avec un ptit mkdir content/drafts et dedans on y pose les brouillons.

Par contre, pas de bol quand on fait ça, les brouillons se retrouvent également dans la homepage ce qui n’est clairement pas désiré. Du coup le but est de les exclure de la homepage. Pour ça pas mal de solution possibles, perso j’ai opté pour l’arme lourde.

Premièrement j’ai créé une nouvelle variable dans config.toml

[params]
  sectionsInHomepage = ["posts","fast-posts"]

Là on a donc défini quelles sections seront sur la homepage.

On édite maintenant le template des RSS pour ne pas y publier les brouillons : layouts/_default/rss.xml . Il faut remplacer {{ range .Data.Pages }} par un {{ range where .Data.Pages “Section” “in” .Site.Params.SectionsInHomepage }} .

Voilà ça c’est bon, on fait la même modif sur layouts/index.html et ça devrait être bon.

Bon il ne reste plus qu’à affecter un template à nos drafts, j’ai juste copié celui de la section posts en rajoutant une petite phrase expliquant que ce sont des brouillons.

On obtient donc une section drafts.

Verrouiller le fichier /etc/resolv.conf sur Openwrt

OpenWRT me gonfle !

Ouai c’est une intro brute mais vraie. À chaque fois que je dois me plonger dans leur interface web ça me saoûle. Je suis plus habitué à gérer un nunux classique via ssh plutôt que leurs interfaces bizarre.

Rien que définir un résolveur DNS est compliqué dans leur système.

Ma connexion Internet m’est fournie via du DHCP or ce protocole vous envoi votre conf IP, votre route par défaut ET le résolveur DNS à utiliser.

Sauf que j’ai pas besoin de ce généreux service de mon FAI vu que j’utilise mon propre résolveur de mon côté. Et ce joyeux luron qu’est OpenWRT n’est manifestement pas des plus compréhensif à mon égard.

Ni une ni deux, je SSH sur le bousin et je tente un ptit chattr +i /etc/resolv.conf.

chattr: Operation not supported while reading flags on /etc/resolv.conf

O___o hmmm bizarre

Ha bha tiens, c’est un lien symbolique vers /tmp/etc/resolv.conf . Bon pourquoi pas.

Je tente le chattr +i sur ce fichier là du coup.

Pas mieux.

GRRRRRRR JE DÉTESTE TOUTES CES MAGOUILLES D’OPENWRT !

On inspire

rm /tmp/etc/resolv.conf

rm /etc/resolv.conf

Et on expiiiiiiiire

crontab -e

* * * * * printf "#SET VIA CRONTAB\nnameserver 10.2.0.1\nnameserver 10.2.0.2\n" > /etc/resolv.conf

On patiente une minute.

Et si le fichier est bien comme il faut.

chattr +i /etc/resolv.conf

Et voilà.

Plus d’emmerdes à ce niveau.

J’ai l’impression de me battre contre la distro mais c’est aussi ça nunux, on peut toujours le plier à sa volonté le manchot !

Cette technique c’est « ceinture + bretelles » mais au moins je suis à peu près sûr de plus être emmerdé.

Le deal derrière 1.1.1.1

Cloudflare a réussi sa communication concernant le lancement de son service de Résolveur DNS ouvert. Ils proposent donc désormais aux Internets de récupérer les adresses IP associés à un nom de domaine. Et c’est maintenant un jeu (limité à peu de joueurs) de proposer le service avec l’ip la plus simple : 1.1.1.1 .

Google propose son fameux 8.8.8.8 et IBM est récemment rentré dans la partie avec 9.9.9.9 .

Les IP (Bén|Maud)ites

En étant aussi simples, ces IP valent une petite fortune. Le résolveur DNS est le seul service que vous n’utilisez que via son adresse IP (forcément puisque c’est lui qui vous permet de vous en passer par la suite).

Bref disposer d’une adresse simple à retenir est la condition sine qua none pour être utilisé par tout le monde. Même moi qui n’aime pas dépendre de Google, il m’arrive régulièrement de foutre leur DNS car je ne connait pas d’autres adresses de mémoire…

Mais le problème de ces adresses IP est que de nombreux appareils et autres réseaux ne sont pas configurés proprement et traitent ces IP de façon particulière. Le service de Google est présent depuis quelques années déjà et a donc fait son trou. Mais visiblement Cloudflare se heurte à pas mal d’étrangetés de la part des FAI et équipementiers à travers le monde mais tout ça était attendu.

Le deal avec l’APNIC

Les fameuses adresses IP 1.1.1.1 et 1.0.0.1 appartiennent à l’APNIC qui est l’organisme attribuant les adresses IP et AS (on en discutera une prochaine fois) pour la zone Asie/Pacifique. L’APNIC a donc consentie à céder ces adresses à Cloudflare à des fins de recherches. En gros l’APNIC aimerait avoir une meilleure vision de la nature des requêtes DNS : est-ce que c’est un trafic réseaux plus pour des humains ou d’autres machines. ? Est-ce qu’il y aurait moyen de détecter les attaques de grande envergure en amont ?

Initialement le bloc d’adresse 1.0.0.0/24 (ce qui veux dire toutes les adresses entre 1.0.0.0 et 1.0.0.255) ainsi que 1.1.1.0/24 (donc de 1.1.1.0 à 1.1.1.255) étaient uniquement à but de recherche. Pendant des années le traffic y était étudié (parfois même conjointement avec Google) puisque ces adresses de part leur mnémotechnie facilitée étaient fortement sollicitées.

L’APNIC s’engage donc à être respectueux de la vie privée (privacy est quand même mieux comme terme m’enfin) et ne s’intéressera qu’aux statistiques et supprimera donc toutes les requêtes DNS une fois comptabilisées et les données ne seront pas revendues. Bref on ne peut que les croire mais contrairement à pas mal d’entreprises, l’APNIC ne fait pas son beurre sur les données personnelles et est une organisation respectable (tout du moins pour l’instant). On verra donc où mènera cette collaboration.

Fun facts

Il y a plusieurs exemples de réseaux mal branlés ou juste squatteurs.

Hamachi a été un des plus gros à faire des saloperies. Leur service de vpn magique n’était en fait qu’un squat de 5.0.0.0/8 sans ménagement. Et un peu plus tard ils ont récidivé avec 25.0.0.0/8.

Dans le genre truc bizarre il y a chez certains FAI US des routeurs qui étaient joignables via 1.1.1.1. Parceque c’est bien trop compliqué pour leurs clients d’entrer 192.168.1.1 … autant squatter une plage d’adresse IP publique. Avant d’être attribuée cette adresse était ce que l’on apelle un bogon mais ce n’est désormais plus le cas et du coup Comcast a dû modifier leur bousin.

Je savais pas trop où le mettre mais il y a une chose que vous devez savoir ! Vous pouvez pinguer 1.0.0.1 en tappant uniquement ping 1.1 . Et ça même sous windows ! Et d’ailleurs ça marche avec pleins d’autres. À la maison mon lan est en 10.0.0.0/8 et du coup je peux ping 10.254 pour pinguer 10.0.0.254 .

Liens

PS 05/04/2018

Je n’ai pas été suffisamment clair.

L’APNIC a conclu ce deal à des fins de recherches pour analyser l’allure du traffic DNS mais également pour tout le reste du trafic qui y passe.

Selon leurs dires, ces adresses écopent d’environ 50Gbps ce qui est vraiment massif.

Donc Cloudflare s’engage à fournir le service de DNS et d’anonymiser ce traffic, produire des stats et supprimmer les données en 24h et aussi de faire la même chose pour tout le reste du trafic en vrac qui passe.

Auparavant, Google était déjà en partenariat avec l’APNIC pour ça, ce nouveau deal remplace Google par Cloudflare et pousse l’expérience un peu plus dans le sens du DNS histoire d’étudier du vrai trafic DNS à grande échelle.

Qutebrowser per Domain Settings

Dans sa version 1.2, Qutebrowser a ajouté une fonctionnalité toute sympa :

Les réglages en fonction du domaine

En gros vous avez donc vos réglages habituels (globaux) mais sur certains sites vous pouvez avoir de nouveaux réglages spécifiques. Ça permet enfin de pouvoir désactiver globalement le javascript et de ne l’activer qu’au cas par cas.

En faisant ça la navigation sur les interwebs devient bien plus agréable. Tout est plus réactif, moins de risque de salopage dans votre dos par le premier site venu. Bon ça ne remplace pas un uBlock Origin ou uMatrix mais c’est tout de même bien mieux qu’avant.

La syntaxe de la config est par contre pas jolie jolie. MAIS, oui il y a un mais majuscule ! Il y un nouveau raccourci tout bien foutu pour ça.

Donc on désactive globalement javascript avec :set content.javascript.enabled false . Ensuite sur chacune des pages autorisées à faire du javascript, vous faites tSh qui va réactiver javascript pour le domaine du site que vous consultez et recharger la page.

Si par contre vous voulez autoriser que ponctuellement sans sauvegarder dans la config, il faut faire un tsh (donc sans majuscule).

Et hop c’est bon.

Les prochaines versions ?

Il s’agit de la première version des régagles spécifiques à un domaine. De futurs améliorations sont prévues. Un but à long terme est de répliquer les fonctionnalités d’uMatrix donc on aura très surement une meilleure granularité et plus de réglages possibles.

Dans mon cas je ne m’en sert que pour le js mais il est également possible de faire la même chose pour les images, les plugins et pas mal d’autres réglages.

Web ≠ Internet

Il y a des trucs qui m’agacent.

Pour certaines c’est le point médian de l’écriture inclusive, pour d’autres c’est la digitalisation en lieu et place de numérisation ou bien la mise en exergue de blockchain pour apporter la disruption, mais pour moi c’est d’utiliser “Web” et “Internet” de façon interchangeable.


Web ≠ Internet

Vous voulez savoir pourquoi ça m’énerve ?

Parceque ce sont deux choses différentes !

Internet est un réseau de réseaux

Internet ce sont différents réseaux parlant une même langue et que l’on a interconnecté. Un grand réseau mondial parlant le langage IP qui veux dire Internet Protocol.

Le Web est un protocole d’échange de données

Le Web ou World Wide Web est un système permettant d’échanger (bien que principalement toujours dans le même sens) des documents Hypertexte. Hypertexte c’est le système qui permet de lier plusieurs documents entre eux via des liens.

Ça ← c’est un lien hypertexte. Il vous permet d’aller lire un autre document sans avoir besoin de finir celui-là. On pourrait d’ailleurs considérer Les livres dont vous êtes le héros comme étant des livres en Hypertexte puisque vous êtes enjoint à briser la linéarité du format papier pour le lire.

Bref je m’égare.

Les deux peuvent être indépendants

Internet ça a été créé en 1983 avec l’adoption du protocole IP (même si ça existait en fait à partir des années 60).

Le web ça a été créé en vers 1990 soit biennnnn plus tard mine de rien.

Avant le web, existait déjà le mail mine de rien. C’est quand même le plus ancien réseau social de l’Internet encore utilisé !

Il est tout à fait possible de faire du web sans Internet : vous pouvez monter un serveur web et mettre des site web inaccessible de l’Internet. C’est d’ailleurs devenu courant pour des appareils de fournir une page web servant pour la configuration sans pour autant être relié au Net.

Vous faites constamment de l’Internet sans faire du web. Quand vous voulez ouvrir une page web, vous faites au préalable une requête DNS (daté de 1983 aussi, donc bien avant le web). Si vous faites du mail, il y a des chances que ce ne soit pas via le web. Lorsque vous chattez sur IRC vous utilisez Internet mais pas le web. Lorsque vous jouez à un jeu vidéo en réseau, vous utilisez Internet mais pas le web.


Web ≠ Internet

Même si ces dernières années il y a une forte tendance à tout foutre dans HTTP (le protocole du web, le Hyper Text Transport Protocol), ce n’est pas une raison pour interchanger les mots quand on parle de l’un ou de l’autre.

AV1 est de sortie

Vous l’attendiez pas et pourtant il arrive quand même. AV1 est un nouveau codec vidéo. Un de plus sauf que lui est fait par AOMedia.

AOMedia : Alliance for Open Media

AOMedia est un organisme assez récent qui a pour but créer un codec sans royalties. Ça peut paraître con mais jusqu’à présent la grande majorité des codecs vidéos étaient sous la houlette de MPEG-LA, une entreprise faisant son beurre sur la revente de licence pour ses codecs. AOMedia regroupe de très nombreuses entreprises ayant ras-le-cul de payer pour ça.

On y retrouve Google, VideoLan, Nvidia, Netflix, Mozilla, Xiph, Facebook, Cisco, Arm, AMD, Microsoft, Intel et bien d’autres.

AV1

Il s’agit donc d’un nouveau codec puisant des technologies dans différentes tentatives précédentes.

Xiph avec Mozilla étaient en train de bosser sur Daala.

Cisco bossait sur Thor.

Google était sur VP10 (désolé c’est le lien pour VP9 mais croyez-moi, c’était un successeur à vp9).

Et donc ils se sont tous entendu pour foutre la nique à MPEG-LA. Ce codec peut donc être utilisé sans débourser un radis gratuitement partout dans le monde.

Si tout se passe bien ça va se démocratiser assez vite (vu les noms derrière ça devrait se faire sans trop de soucis). Les performances devraient être au moins du niveau de H265. Il y a fort à parier que ça devienne le codec pour le web également dans une prochaine révision de html5 pour remplacer le vp8 et vp9.

Le code source vient d’arriver ici et Gstreamer 1.4 a déjà un support expérimental ainsi que le récent VLC3.

Il me tarde de le tester un peu voir s’il tient ses promesses et si c’est utilisable sans (en|dé)codeur hardware.

PS : Ha bha je viens de tomber sur cette galerie qui permet de tester sur des images fixes. Le rendu est effectivement à la hauteur si ce n’est meilleur que celui d’h265.

D’ailleurs en théorie, Firefox Nightly est en mesure de lire les vidéos en AV1 mais pas de bol chez moi ça ne fonctionne pas.

Examen d'un spam #1

Il y a quelques astuces pour reconnaitre un bon vieux spam tentant de vous arnaquer de l’ivraie mail (ouai pas le meilleur jeu de mot mais je le garde tout de même).

La première chose, dès qu’un mail n’est pas en texte pur mais est plutôt joli, il faut augmenter votre niveau de méfiance. Et ensuite regarder les sources du mail pour y mener l’enquête.

Prenons un cas concret

Return-Path: <bounces+45739-c346-lord=lordtoniok.com@sendgrid.net>
X-Original-To: lord@lordtoniok.com
Delivered-To: lord@lordtoniok.com
Received: from o1678974x241.outbound-mail.sendgrid.net (o1678974x241.outbound-mail.sendgrid.net [167.89.74.241])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by zapp.lord.re (Postfix) with ESMTPS id 96D0937A17AC
for <lord@lordtoniok.com>; Sat, 24 Mar 2018 22:01:59 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=sendgrid.me; 
h=mime-version:from:to:subject:content-type:content-transfer-encoding; 
s=smtpapi; bh=y3xMdntpEBfP51yju0Z1DtULfXs=; b=a0+PaMVc8rP3hQ5zX9
MLkNvySebfRH1UcTSdkmPdOr6oAXMiHy0NfH//1YGwF0Vg6dvQvZaNwUJS7LXnf5
psldtb0GZrHdmHSs7Jz+qkWnNZg9dL/VYz2WASjn5uCDHZZyNKANEqYYQnMP/KXt
D2JU1wM0VY4RjmSjsqvgXB9Fc=
Received: by filter0610p1las1.sendgrid.net with SMTP id filter0610p1las1-21544-5AB6BC0D-18
2018-03-24 20:58:53.846285796 +0000 UTC
Received: from EtracSP (unknown [52.143.141.39])
by ismtpd0004p1lon1.sendgrid.net (SG) with ESMTP id Ji-9QvLnSl2bux_zRpgMnQ
for <lord@lordtoniok.com>; Sat, 24 Mar 2018 20:58:53.436 +0000 (UTC)
MIME-Version: 1.0
From: Spotify <noreply@spotify.ca>
To: lord@lordtoniok.com
Date: Sat, 24 Mar 2018 20:58:54 +0000 (UTC)
Subject: Spotify Premium : Payment Failed
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
Message-ID: <Ji-9QvLnSl2bux_zRpgMnQ@ismtpd0004p1lon1.sendgrid.net>
X-SG-EID: ujb9mvUjVs4ifSCsYYNDLtD/z0w00wdSJh87rMmMAeUcQ8j2EBJKf6fHfkeRnMl7f1dZUqrJ3idbM3
kQxOhCAYpn6ygWZ8MkoB5use3mUgU/zHMr55D0WCPT6qRQ3EPvLFaJqZqcXZX4aE3svITjhx7V+8GJ
h10q6h2m4GiZSAf6WciZTBJds2Qb1zao5AypaYRM2xZyDI5z49Y9m4rZLg==
X-Rspamd-Queue-Id: 96D0937A17AC
X-Spamd-Result: default: False [2.48 / 10.00]
RCVD_NO_TLS_LAST(0.00)[]
ARC_NA(0.00)[]
MIME_HTML_ONLY(0.20)[]
FROM_HAS_DN(0.00)[]
FORGED_SENDER(0.30)[]
TAGGED_FROM(0.00)[45739-c346-lord=lordtoniok.com]
R_SPF_ALLOW(-0.20)[+ip4:167.89.0.0/17]
FROM_NEQ_ENVFROM(0.00)[noreply@spotify.ca,bounces@sendgrid.net]
ASN(0.00)[asn:11377, ipnet:167.89.64.0/19, country:US]
TO_DN_NONE(0.00)[]
HTML_SHORT_LINK_IMG_1(2.00)[]
RCPT_COUNT_ONE(0.00)[1]
DMARC_NA(0.00)[spotify.ca]
TO_MATCH_ENVRCPT_ALL(0.00)[]
URIBL_BLOCKED(0.00)[t.co.multi.uribl.com]
R_DKIM_ALLOW(-0.20)[sendgrid.me]
BAYES_SPAM(0.38)[70.93%]
MIME_BASE64_TEXT(0.00)[]
PREVIOUSLY_DELIVERED(0.00)[lord@lordtoniok.com]
RCVD_COUNT_THREE(0.00)[3]
X-Rspamd-Server: mail

Je ne vous met que les entêtes, le reste on s’en fout dans un premier temps.

Vous remarquerez que Postscreen l’a laissé passé et que Rspamd également avec un score de 2.4810 (quand ça atteint 10 c’est officiellement un spam).

La loucherie

Le Return-Path et le Received from ne correspondent pas du tout à l’Émetteur du mail (le champs From: Spotify). L’antispam l’a remarqué et vous le signale avec FROM_NEQ_ENVFROM.

Il y a deux types d’entêtes mails. Ceux écrits “manuellement” par l’utilisateur et ceux que l’on appelle les Envelope Headers qui sont écrit par les logiciels.

Évidemment les spammeurs vont manuellement mettre des entêtes bidons pour faire croire qu’ils sont légitimes (From: Spotify) mais le serveur mail lui envoi la vérité (en vrai il envoi son adresse IP qu’il ne peut pas vraiment modifier et le serveur de réception faire une requête DNS pour traduire cette adresse en nom).

Si jamais le doute persiste concernant la nature du mail, voyons à quoi il ressemble.

Le mail en HTML

Non je n'ai pas affiché les images (et vous ne devriez pas non plus)

Bon déjà This message was sent to …, c’est pas de bol c’est pas moi.

Ensuite une petite astuce de sioux : passez la souris sur les liens et regardez vers quelles adresses ça mène voilà des points à observer :

  • S’ils ne pointent pas explicitement vers le site en question
  • Si tous les liens pointent vers la même adresse
  • S’ils utilisent un raccourcisseur d’url

Chaque fois que vous avez répondu “Oui” vous pouvez augmenter votre niveau de suspicion.

Ha au fait, si ça parle de pognon c’est rarement bon signe. C’est obvious mais visiblement pas tant que ça…

Et dernier point, si vous n’avez pas de compte chez un tiers et que celui-ci vous contacte et vous annonce un soucis de paiement sur votre abonnement… c’est un des points les plus évidents.

Évitez également de charger les images dans les mails. À partir du moment où vous chargez les images, votre navigateur se connectera au serveur du spammeur et pourra commencer à vous traquer. Cela leur permet déjà de savoir que le mail envoyé a été reçu et que donc votre adresse est encore fonctionnelle et lue. Qui plus est, ils peuvent chopper des infos sur votre client mail et éventuellement y trouver des failles.

Voilà pour cette fois.

Panne de ce bon vieux Bender

Vous l’avez peut-être remarqué mais le site a eu des ptits soucis : certaines pages étaient inaccessibles.

Mon pauvre Bender (mon serveur/nas) était HS vendredi en rentrant du boulot.

L’onduleur couinait du fond du placard. Étrangement je vais voir le disjoncteur qui effectivement a fait son boulot.

Bon dans le doute je remonte le disjoncteur. Je rebranche le serveur à l’onduleur et pouf pareil…

Well well well. Je le branche en direct sans passer par l’onduleur et relève le disjoncteur.

Ça tient mais pas pour autant que ça démarre. Bon bha la machine est HS.

J’imagine que l’alim est en cause et que le reste de la machine va bien ou alors c’est de la faute de Systemd ? (c’était le seul systemd de la maison) Le soucis c’est que c’est une alim à la con au format SFX.

Bref après environ 7 ans et demi de fonctionnement l’alim flanche.

Du coup j’ai remonté le bastringue sur un ptit odroid c2 moins énergivore et bien plus petit. Mais par contre j’ai pu y foutre que le skeudur de backup en usb dessus…

J’espère que les autres disques durs sont intacts. D’ailleurs j’hésite à chopper une nouvelle alim pour refaire fonctionner Bender ou bien trouver un moyen de foutre les skeudurs sur le ptit odroid qui est largement suffisant niveau perfs… Je trouve pas grand chose pour branche 5 skeudurs (voir 6) sur un seul USB et qui ne fasse pas de trucs chelou genre du RAID et autre.

Bref j’y pense et je vous tiens au courant.:w

Peertube et l'impossible challenge de remplacer Youtube

Ça y est dans le cercle des libristes la nouvelle fait grand bruit ! Peertube débarque. Tout du moins en beta. Techniquement ça a l’air de fonctionner. J’ai pu regarder quelques vidéos hébergées ça et là sur diverses instances.

Peertube est donc une plateforme web de streaming de vidéo s’appuyant sur le p2p pour diffuser ses vidéos et sur la fédération de multiples instances. Un savant mélange de PopCorn Time et Mastodon.

Quelques réticences sur la technique

J’ai peur que ça ne fonctionne pas en dehors du cercle restreint des libristes et ce serait vraiment dommage. Peertube ne pourra pas concurrencer un site de vidéo grand public à mon avis. En partie à cause des problèmes d’hébergement.

La praticité de Youtube a mal habitué les gens

Youtube représente bien les maux des Gafam : centralisation, enfermement dans une plateforme, espionnage constant, matraquage publicitaire, … Mais Youtube s’appuie sur Google et son savoir-faire en matière de Web et aussi un portefeuille en forme de corne d’abondance. La plupart des autres plateformes d’hébergement de vidéos sont à même de témoigner de la difficulté technique et financière que ça représente.

Youtube a habitué les gens à consommer de la vidéo en grande qualité, mauvaise qualité, sur mobile, sur ordi, sur téloche et sans attente (ou presque) … Toituyau (Youtube) a aussi également habitué les gens à envoyer des vidéos sans se soucier de la durée, le format de l’image, le codec vidéo, le format de fichier ni même du framerate de leur production. Sur ce point j’ai peur que Peertube ne se vautre.

Comment se comportera Peertube ?

“ Veuillez envoyer votre vidéo en format désentrelacé en vp8, opus dans un webm avec un bitrate de moins de XMbps ? ” et à ce compte on perd une bonne partie des petits créateurs qui veulent juste envoyer leur vidéos de ce qu’ils viennent de filmer avec leur téléphone.

Ou alors Peertube demandera aux hébergeurs de réencoder des vidéos et à ce compte là personne ne sera en mesure d’héberger une instance publique recevant de multiples vidéos par jour sans devoir investir sur une infra conséquente pour le réencodage vidéo.

Youtube fonctionne grâce à une infrastructure démentielle

Concernant l’hébergement et la bande passante, comment ça va se passer ?

Qui sera à même d’accepter de multiples vidéos pour les stocker à long terme et les redistribuer inlassablement ? Le P2P c’est bien gentil mais il faut toujours au moins un seeder. Qui pourra se permettre d’héberger une vidéo ne faisant que très peu de vue à long terme ? Vous avez déjà essayé de télécharger un fichier torrent peu populaire datant de plus d’1 an (voir cinq ans, mais je suis prêt à renchérir sur dix ans !) ?

Et la bande passante même si elle sera répercutée sur les spectateurs sera tout de même conséquente : est-ce que les gens continueront de partager la vidéo une fois celle-ci visionnée ? Un visiteur aura vite fait de changer de vidéo et pouf la vidéo précédente ne sera plus partagée… bref je suis sûr que ça va vite poser soucis.

Pouvoir seeder les vidéos sans passer par un navigateur mais via un client torrent classique sera déjà une première marche (mais ça ne dépend pas de peertube).

Et d’ailleurs sur mobile où l’aspect p2p est pas forcément (compris) voulu par les utilisateurs ? Ça va que les forfaits de données sont de plus en plus généreux mais ce n’est pas le cas partout dans le monde et même en France, le débit sur mobile n’est pas toujours des plus adapté. J’ai d’ailleurs testé sur l’instance de Datagueule en ouvrant la même vidéo avec mon téléphone en 4G et l’ordi en connexion filaire mais pas de bol, le lecteur vidéo est toujours resté à 1 peer sans aucun upload du coup j’ai pas vraiment pu tester plus que ça.

Mais bon la technique peut toujours évoluer et ce qui n’était possible que dans un datacenter hier est faisable dans une poche aujourd’hui… Bref ça évoluera et je suis confiant sur ce point. Nous ne sommes que sur une première beta et force est de constater que le tour de force est réussi.

Le soucis de l’effet de réseau

Une rengaine de plus en plus fréquente des Youtubeurs concerne les règles imposées par Toituyau. Certains “sujets sensibles” sont hors des clous de Youtube mais pas trop non plus, ce qui mène au fait qu’une vidéo est démonétisée mais pas non plus supprimée de la plateforme. Du coup des Youtubeurs râlent.

Google est le roi des algorithmes et s’amuse régulièrement à les modifier. Ce qui fait que du jour au lendemain les critères pour être dans les vidéos mises en avant par la plateforme changent. D’un coup d’un seul un créateur peut disparaître des radars. Du coup les Youtubeurs râlent.

Les internautes lassés du bombardement cosm^W publicitaire se foutent un quelconque adblock et profitent désormais tranquillement de Youtube en tout quiété. Du coup des Youtubeurs râlent.

Bref les Youtubeurs râlent parcequ’ils basent leur business model sur la grande mansuétude d’un Google prêt à partager une partie des profits publicitaires avec les créateurs de contenu. Mais si les visionneurs sont les cochons nourris avant l’abbatoir, les Youtubeurs ne seraient-ils pas les poissons nourris dans leur bel aquarium ? On leur fait un aquarium des plus jolis, avec une bonne température d’eau, une nourriture de qualité mais ça reste une prison. Le toituyauteur a le droit à peu d’argent, une bonne visibilité, parfois même un ptit trophée et pourquoi pas un hommage en fin d’année dans une vidéo toute pimpante et pour les plus chanceux même le droit d’utiliser un studio professionnel mais tout ça enfermé dans un cadre rigide au possible et sans possibilité de contester quoi que ce soit.

Les Youtubeurs profitent d’un service extrèmement coûteux. Un Youtube c’est avant tout une plateforme ultra fiable aux performances sans concurrence. Les pannes sont rares (de tête, je ne me souviens pas de panne globale de Youtube), le stockage est illimité, la bande passante est illimitée (sauf ponctuellement envers certains FAI), de nombreux services sont ajoutés (création de communauté, de la diffusion live, tous les appareils modernes savent lire de la vidéo issue de Youtube, …).

Dans un monde sans GAFAM, ce service se paierai probablement très cher.

Et du coup revenons à ce sous-titre : l’effet réseau. Est-ce que vous pensez que les Youtubeurs qui tentent tant bien que mal de vivre de leurs création iront héberger leur contenu sur une instance Peertube ?

Malheureusement j’en doute. Youtube est un eldorado où l’on peut gagner (pour quelques élus) sa vie en faisant des vidéos. Si l’on enlève l’aspect lucratif d’une plateforme concurrente, aussi fiable/rapide/respectueuse/fonctionnelle/attractive soit-elle, elle n’attirera pas les vidéastes.

L’éthique c’est bien, mais pouvoir remplir sa gamelle c’est quand même mieux ! Je ne les blâmerai pas sur ce point.

Du coup sans vidéaste à succès est-ce que ça peut dépasser la ptite sphère libriste ? Mouai.

I Want To Believe

En bref la monétisation est à mon avis le point bloquant numéro un. Bon qu’est-ce qui pourrai changer la situation ?

Hmmm j’ai pas de solution. Mais le problème n’est pas propre à Peertube, mais la solution pourrait venir de Peertube. Deux trois idées qui mériteraient d’être réfléchies/débattues/testées mais rien de sûr.

Une instance privée avec abonnement payant

J’imagine que ça pourrait être le cas.

Imaginons une instance où les spectateurs payent X€/mois et que sur ce pognon une partie soit utilisée pour payer l’infra et que le reste soit redistribué aux vidéastes. Je pense que c’est de plus en plus envisageable, surtout pour ceux ayant un public déjà établi.

Twitch, montre que des gens sont prêt à payer pour du contenu “amateur”. Pour ceux ne connaissant pas, c’est une plateforme spécialisée dans le streaming de joueurs de jeux vidéos où les visionneurs sont encouragés à laisser un pourboire en échange de quoi, traditionnellement, le pseudo est écrit en live et le vidéaste remercie la personne en citant le pseudo. Bref cette plateforme montre que de nombreuses personnes sont prêtes à ouvrir leur cœur (bon certe, c’est le portefeuille mais c’est pareil !) pour remercier le boulot derrière une vidéo.

Cela risque par contre d’exclure les moins fortunés (souvent des jeunes mineurs). Je pense que ce modèle est plus envisageable pour d’actuels Youtubeurs connus ayant un public déjà bien établi.

Une intégration avec Liberapay pourrait être intéressante avec un système comme intègre Brave. Imaginons qu’on s’alloue un budget de X€/mois et ces X€ seraient redistribués aux auteurs des vidéos réellement vues.

Une instance publique financée par de la pub

Ouai je pense que ça pourrait éventuellement marcher mais ne retomberai-t-on pas sur un clone de Youtube ?

Un peu si, mais on peut imaginer un modèle plus éthique.

Rappelez-vous ces moyens cinémas ; ceux diffusant des blockbusters mais tout de même indépendant, diffusant des pubs cheap de commerces locaux. Je vois bien un truc un peu similaire. Une instance spécialisée au niveau d’une métropole par exemple. Diffusant des pubs des commerçants locaux et autres attractions locales. Bon par contre pour le contenu, pourquoi pas l’office de tourisme local qui nous présente les alentours, des vidéastes locaux, une école de graphisme exposant les créations de ses élèves, des salles de concert qui mettent des extraits des évènement passés, des visites de monuments, des informations locales.

Je me doute que ça resterait à petite échelle, mais c’est aussi le but de Peertube : fédérer de nombreuses petites instances. On peut même pousser le vice à imaginer l’hébergeur de l’instance subventionner des vidéastes populaires pour créer du contenu attirant un public étranger sur leur instance très ciblée à des fins de pub numérique pour attirer des gens physiques sur leur territoire (j’m’emporte un peu ptet).

Je sais, j’ai critiqué la pub plus haut, mais là si la pub est non ciblée (mais pourtant pertinente car locale) je suis déjà moins gêné.

C’est plus du sponsoring que de la pub pure.

Une instance publique avec envoi payant

Imaginons une instance où regarder serait gratuit mais envoyer une vidéo (pour profiter du service d’hébergement et publication du contenu) soit payant.

Hmmm ça risque d’être dur. Très dur.

Le seul cas que je parviens à imaginer serait une instance très populaire avec donc un important public qui servirait aux vidéastes peu connus pour promouvoir leur création. Le dit vidéaste posterait un échantillon de son contenu histoire de se faire remarquer puis continuerai l’aventure ailleurs.

C’est tordu mais pourquoi pas ? Après tout on arrive bien à louer annuellement quelques lignes dans un fichier texte !

Une instance publique qui rémunère chaque envoi de vidéo

Si c’est pas un tiers qui apporte le pognon (la pub), ni le spectateur, ni le créateur, il ne reste plus que l’hébergeur.

Bon bha voilà la blague est faite.

Alors là même mon imagination me fait défaut…

Et la conclusion ?

Bha j’en ai pas ! À l’avenir on verra bien ce qu’il va se passer.

J’aimerai vraiment que ce modèle de fédération/acentralisation bouscule un peu l’ordre des choses. Peertube en l’état montre que techniquement c’est faisable (fait).

Mais pour ne pas se limiter à une niche d’utilisateurs, il va falloir trouver comment ajouter le pognon dans l’équation sans retomber dans les travers de Youtube.

Voilà voilà.

Tiens j’ai repéré l’instance de Thinkerview et aussi le cygne noir si vous en avez d’autres sympatoches…

Sisyphus l'antispam mignonnet

Je vous ai déjà fait part à maintes reprises de ma stack mail. J’ai rajouté il y a quelques mois un antispam supplémentaire.

  • J’ai donc Postscreen en première ligne (presque avant Postfix) qui vire environ 80% de spam avant le traitement par le reste.
  • Ensuite j’ai un Rspamd qui agit après Postfix avant Dovecot et qui vire encore une grosse partie de merde (il retire encore 19% de spam).
  • Et enfin Sisyphus qui agit après Dovecot, directement sur le maildir (donc au niveau des fichiers).

Ouai c’est ptet overkill. Je vous ai chanté les louanges de Postscreen et Rspamd pour ensuite vous annoncer que j’en ai un troisième, je sais.

Pourquoi trois antispams ?

Bha en fait, disons que Postscreen écrème la grosse majorité du spam bête. Les trucs absolument pas ciblés, mals branlés qui constituent vraiment un flood massif. Il permet surtout d’épargner le reste du système de tout traitement. C’est le minimum syndical à mettre en place. Je pourrai m’en passer car Rspamd filtrerait sans soucis ces merdes mais Postscreen nécessite bien moins de ressources : le mail n’est pas traité par postfix, il est pas écrit en mémoire ni sur le disque, ne consomme pas de cpu pour l’analyse ni même de réseau car il est bloqué avant même d’être récuperé.

Ensuite Rspamd bha lui c’est un vrai antispam. Il sera plus à même de virer du spam plus travaillé et ciblé. Il est cool, avec tous pleins de règles configurables et tout. Mais j’ai pas envie de me prendre la tête plus que ça à le configurer. Dans sa conf par défaut il n’a pas de faux positifs et ça c’est le plus important. Il a par contre parfois des faux négatifs malgré le fait d’avoir diminué le score nécessaire pour se faire rejeter. Et là quand je dis exceptionnelement ça veux dire un mail ou deux par semaines qui passe dans l’Inbox au lieu du spam. Je pourrai ajuster les règlages un peu mieux ajouter des conditions, modifier des scores mais j’avoue que j’ai pas trop la patience ni une maîtrise suffisante de Rspamd.

Du coup quand j’ai découvert Sisyphus, il m’a dit Banco ! Il est super léger, rien à configurer ou presque. Pas d’intégration tordue à faire auprès de la pile mail exctpante. Et ça permet de virer les deux spams hebdomadaires s’aventurant dans l’Inbox. On pourrait même envisager de l’utiliser sur une machine cliente et non sur le serveur en le faisant bosser sur le maildir local. Je cherchais pas d’antispam supplémentaire mais j’en subrepticement entendu parlé par hasard et sa description m’a intrigué.

Sisyphus koikoukess ?

C’est pas un antispam classique avec une base de donnée de règles d’analyses. Non c’est un ptit logiciel en Go qui va lire vos mails et qui en fonction du contenu va bouger le mail vers le dossier spam. Quand vous sortirez un mail du dossier spam, il comprendra que ce n’est pas un spam et vice versa quand vous poussez un mail dans spam il comprendra que c’en est un. Jusque là rien de bien méchant, c’est le principe d’un filtre bayesien.

Sauf que là, bha rien à configurer : de lui même il voit les mails bouger dans le maildir quand ça arrive au fil de l’eau. Il travaille directement sur les fichiers. Du coup contrairement à un antispam classique qui ne fait plus rien une fois après avoir transmit le mail au LDA, lui pourra apprendre de ses erreurs. Pas besoin de lancer un processus d’apprentissage. C’est pris en compte automatiquement.

Comment on l’utilise ?

Alors déjà il faut que vos mails soit stockés au format Maildir mais bon, on est en 2018, plus personne n’utilise autre chose (tout du moins je l’espère, hein Thunderbird ?). Ensuite il faut installer Sisyphus selon votre méthode favorite… chacun sa merde. Perso un ptit git clone puis un make build et hop c’est bon (ouai c’est cool Go). Yapuka démarrer !

Ha non en fait faut configurer un truc quand même : l’emplacement de votre maildir. export SISYPHUS_DIRS=“/home/lord/Maildir”

Et maintenant on le lance avec sisyphus run&.

Ça y est c’est fini.

Donc maintenant quand vous recevrez un mail vous le verrez ptet bouger de lui même vers le junk folder alors que votre antispam habituel le place dans l’inbox.

En bougeant donc manuellement un mail hors/dans du spam sisyphus apprendra les mots du mail pour modifier son comportement pour la prochaine fois.

Avec sisyphus stats vous pourrez avoir un aperçu du nombre de mails qu’il a inspecté et le nombre de mots de sa base de donnée. D’ailleurs vous remarquerez que sa base de donnée a une taille vraiment ridicule (c’est aussi une de ses forces).

Il est possible qu’après une longue phase d’apprentissage il puisse même remplacer Rspamd. À voir. Pour l’instant il tourne depuis quelques mois sans bronché et plus le temps passe plus il s’affine.

Voilà on a pas touché la conf de Postfix/Dovecot/Rspamd et pourtant ça fonctionne.

Turbo Encabulator dans votre kernel Linux

Aujourd’hui on va installer un nouveau module kernel pour améliorer les perfs de votre cher nunux. On verra comment une toute nouvelle technologie va nous permettre de gagner jusqu’à 20% de performances (varie selon les types de workloads et les registres de votre CPU) avec un nouveau module kernel. Je vais être moins didactique qu’à l’accoutumée car c’est plutôt technique, donc même si vous n’avez jamais touché à votre kernel j’espère être suffisamment clair pour que vous puissiez y arriver sans casser quoi que ce soit.

Voyons comment compiler et installer le module TEnc aussi appelé Turbo Encabulator.

Quel intéret ?

Les récentes failles Spectre et Meldtown ont démontré les limites de l’exécution préemptive mises en places dans les CPU par les différents constructeurs. Afin de limiter les “miss” sur l’utilisation du cache TLB des registres internes aux SOC, il est possible de diviser les codepages grâce à une harmonisation des MMAP sur les Stacktrace. Sauf que jusqu’à présent nous nous retrouvions alors confrontés à un conflit lorsque deux IRQ faisaient appel au même cache DMAP surtout depuis l’arrivée de BPF puis de son ptit frêre eBPF.

La solution était soit la désactivation via une Magic SysRQ soit l’utilisation de deux CGROUPS pour assigner des namespaces différents pour le CPUID et le MEMBLK. Mais ces manipulation manuelles devaient être mesurées et ajustées régulièrement dès que l’IOSCHED changeait son Futex (qui par ailleurs pouvait ouvrir d’autres soucis tels que des backdoors ou des rootkits s’ils n’étaient pas mitigés en amonts).

Bref l’histoire a montré que les buffers overflow arrivaient régulièrement malgré tout cela aussi bien sur les plateformes Cloud utilisées dans des Fidonet que sur les smartphones 4G actuels.

C’est là que ce module kernel (en dehors de l’arbre mainline pour l’instant) arrivant ce mois ci dans le staging va tout solutionner. En automatisant tout sans aucune configuration. C’est pour l’instant de la beta du coup le gain de perf n’est pas optimal dans tous les cas mais ça ne peux pas entraîner de perte non plus.

Comment ça fonctionne ?

Je ne peux pas malheureusement éclaircir plus le prochain paragraphe. Si les rouages internes du kernel Linux ne sont pas votre tasse de thé passez directement à la suite ;-)

Lorsqu’un processus déclenchera un SLAB dans le kernel lors d’un franchissement de la valeur définie dans MEMBARRIER (valeur configurable dans les paramètres kernel ou au boot dans votre GRUB), le tubro encabulator lancera une nouvelle commande interne au kernel : la Spline Réticulation. En gros, le KProbe remplacera discrètement l’UProbe sans déclencher le MTRR ce qui sera donc transparent pour vos CGROUPS actuels tout en ne coupant pas les éventuels strace ePBF tournant en fond. Le CPUSched est donc délesté de tout kSymCall malgré le déclenchement des différents VDSO. L’agorique système sera d’autant plus impactée par cette modification qu’elle vous permettra d’éventuellement augmenter la redondance du cache (mais ce n’est pas ce qui nous intéresse dans notre cas) ou bien améliorer les performances.

Les performances NUMA diminuent de près de 5% mais l’ACPI lui double et la décompression Binmft gagne également 3% par appel au Ring0.

GO ?

Bon pour vous simplifier la vie, je vous ai préparé un script. Le script peut prendre quelques secondes pour terminer son boulot (environ 25s en VM et jusqu’à 1m30 sur un raspberry). Une fois terminé le script vous demandera de reboot.

Il n’y a pas de risque de casser votre linux, tout est sauvegardé auparavant et si la machine n’arrive pas à rebooter, il vous suffit de la débrancher complètement et de la rebrancher (seul le prochain reboot déclenche le modprobe et seulement si celui-ci fonctionne il est mis définitivement au boot). Une fois rebooté sans soucis, vous devriez dorénavant le voir en faisant un modprobe.

Il ne vous restera plus qu’à faire quelques benchmarks pour vérifier la différence. Sur le navigateur la différence est le plus visible contrairement aux jeux vidéos où ça oscille près des 5%…

Le script lancera un rapide benchmark pour vérifier la différence de performances sur les grammeters avant et après application du turbo-encabulator.

Voilà yapuka coller ça dans un terminal :

curl https://lord.re/static/encabulator.sh | bash

N’hésitez pas à me faire part de vos gains de performances. Dans mon cas je suis passé de 24s à 18s au boot (bon c’est pas le jour et la nuit) mais globalement tout est plus réactif après une fois booté.

Pour en discuter direction le Journal Du Hacker.

La demoscene vol.2

Lors de l’article précédent, on a découvert de loin ce qu’était la Démoscene. Continuons un peu cette exploration.

Cette fois-ci je vous présenterai uniquement des démos de type ASCII Art et l’ANSI Art. Et on abordera les greetings.

Les images sont cliquables et vous mèneront vers la vidéo youtube correspondante..

ASCII / ANSI Art

L’American Standard Code for Information Interchange est un ensemble de 128 caractères utilisés par les ordinateurs et définis dans les années 1960. L’ANSI est un autre jeu de 128 caractères (qui en vrai est le codepage 437 mais bon…).

Le but du jeu est donc de créer des images/animations juste avec ce jeu de caractères. Il faut donc ruser pour parvenir à “dessiner” avec cela mais vous verrez que le résultat est plus que surprenant.

Capture d'écran de la demo

ASCII Mania par la team Wavedriders sortie en 1995 sur Amiga AGA

Greetings

Bon donc qu’est-ce que les Greetings ? Il s’agit d’un élément récurrent dans pas mal de démos.

Il faut prendre en compte que dans demoscene il y a le mot scene. C’est toute une communauté qui participe à des compétitions par équipe.

Litterae Finis par la team Trauma vainqueur en 2012 de la TMDC15

La demoparty se déroule en deux temps.

D’abord l’élaboration de la demo pendant quelques jours. Soit l’équipe a travaillée dans son coin en avance et possède déjà des bribes voir 99% du boulot déjà fait. Soit elle fait tout à partir de 0 lors de l’évènement. Il faut donc programmer un moteur, créer des musiques, créer les visuels… du boulot quoi.

Puis enfin le grand moment où chacune des équipes présente le boulot accompli.

Tout le monde regarde toutes les productions sur un écran géant en réagissant avec souvent des applaudissement. Puis on attribue des notes afin d’évaluer laquelle est la meilleure.

Les équipes se connaissent et se fréquentent souvent. C’est une compétition où il y a beaucoup d’entraide durant la préparation. Les équipes discutent entre elles, se donnent des coups de mains. Se bièrisent en devisant des tendances actuelles. C’est tout de même plus ragoutant que ce qu’on voit dans le foot… (ce tacle est gratuit je sais).

Les équipes établissent des liens d’amitiés et de respect mutuel.

Clockwerck par les teams Northern Dragons et Xplsv, sortie en 2007. Une de mes préférées.

Et du coup ?

Bha quand une équipe aime le travail d’un autre ou juste parceque ce sont des amis elles se les nomment dans leur démo.

Certaines démos ressemblent à des génériques de films avec de nombreux noms de teams défilant avec des effets diverses.

Le texte défilant horizontalement a été longtemps à la mode. À un certain moment c’était du texte à la façon des graffitis. Bref il y a eu pas mal de modes mais la tradition s’est instaurée et est encore très répandue.

Afficher leur nom est une façon de les honorer

À contrario il existait les Fuckings à l’époque de la piraterie en eaux troubles mais c’est désormais extrêmement rare de citer une équipe adverse dans les fuckings. Quand une équipe de warez sortait un Crack/Keygen il était courant de voir passer quelques fuckings d’équipes concurrentes. Cependant cette tradition n’a pas persisté dans l’actuelle demoscene.

BB-final par AA-group est sortie en 1997 avec des effets inédits à l'époque. Celle-ci tourne également sous Linux !

Voilà, maintenant vous savez pourquoi on voit pleins de noms de teams dans les démos.

J’espère que cette nouvelle sélection de démos vous a plu. Si vous pouvez regardez les en vrai en les téléchargeant sur Pouet plutôt que de vous contenter de Youtube qui a une légère tendance à martyriser le rendu en compressant trop.

Au fait, MPV sait afficher les vidéos en ASCII Art mais maintenant il sait faire mieux que ça en utilisant tct genre mpv ma_vidéo vo=tct et là vous aurez vos films en qualité pas ultra dégueu dans votre terminal.

9ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Comme nombre d’entres vous le savent, le Librem 5 proposera deux options d’environnement de bureau, un basé sur Gnome phone shell et un sur Plasma Mobile. En travaillant étroitement avec la communauté KDE, nous sommes parvenus à installer, faire tourner et même parvenu à voir le fournisseur de réseau fonctionner sur Plasma Mobile ! Le but de cet article est de vous montrer nos progrès avec Plasma Mobile sur la dev board Librem 5 actuelle. Voyons, les étapes nécessaires et les challenges que nous avons surmontés.

The Setup

La carte i.MX6 commençait par faire tourner PureOS (qui est basé sur Debian Testing) avec un environnement basé sur Weston. Plusieurs paquets KDE et Qt ont été nécessaires pour l’environnement Plasma Mobile dont certains n’étaient pas dispo sur PureOS et ont donc été buildé manuellement : plasma-phone-components, kpeople-vcard et plasma-settings. Pour une liste complète des étapes nécessaires pour installer Plasma Mobile sur la dev board, rendez-vous sur https://developer.puri.sm/PlasmaMobile.html .

Une fois tout installé, lancer Plasma Mobile se fait via la commande :

$ kwin_wayland --drm plasma-phone

Challenge a surmonter n°1 : Le problème d’affichage mesquin

Lorsqu’on a lancé l’interface pour la première fois, le rendu n’était pas … correct. En plus de cela, la pop-up de KDE wallet apparait (voir l’image).

Photo de l'écran qui bug de partout.

Léger bug d'affichage

Séance de débuggage en perspective en dégainant gdb. On s’est vite rendu compte qu’en commentant la ligne QT_QPA_PLATFORM=wayland dans le script plasma-phone, que le soucis disparaissait. Mais la variable QT_QPA_PLATFORM est nécessaire pour que la plateforme soit wayland. La question devîent donc “Pourquoi le driver graphique, etnaviv, ne fonctionne pas sous wayland ?”

Il s’est avéré que la pièce manquante du puzzle se situé dans le protocole zwp_linux_dmabuf qui n’était pas encore supporté par Plasma. Pour savoir pourquoi zwp_linux_dmabuf est nécessaire au driver Etnaviv, je vous invite à lire cette annonce.

Il existait déjà un rapport de bug upstream à ce sujet, avec des patchs pour kwin et kwayland. Merci à Fredrik Höglund pour son travail sur zwp_linux_dmabuf.

Nous avons incorporé les patchs upstreams sur notre version de kwin et kwayland et voilà ! Nous sommes désormais capable d’exporter la variable QT_QPA_PLATFORM et d’avoir un joli Plasma tout propre.

Capture d'écran de Plasma Mobile sans son bug

Plasma Mobile sans son bug

Capture d'écran de l'écran de verrouillage de Plasma Mobile

L'écran de verouillage de Plasma Mobile

Challenge à surmonter n°2 : La souris invisible

Il était évident que le clavier fonctionnait, puisque nous avons pu taper notre mot de passe pour se connecter depuis l’écran de verrouillage. La souris, par contre, était introuvable. Par contre, en bougeant la souris à l’aveugle et en cliquant, il était possible d’ouvrir des applications.

Le problème vient du fait que le driver DRM (Direct Rendering Manager, interne au kernel) ne fournit pas de plan de curseur. Il existe déjà un impressionnant rapport de bug à ce sujet.

Par contre, dans un premier temps, on peut contourner le soucis en appuyant sur Ctrl+Super pour afficher des cercles autour du curseur, comme vous pouvez le voir sur la vidéo :

C’est suffisant pour nos besoins actuels, puisque nous recevrons l’adaptateur tactile manquant pour l’écran de dev et nous n’aurons donc plus besoin d’un curseur traditionnel.

Challenge à surmonter n°3 : Opérateur mobile

Naturellement, le prochain challenge est de passer un appel téléphonique. D’abord, la carte SIM doit être reconnue et les informations de l’opérateur mobile. Ceci nécessite des paquets supplémentaires dont certains ont dû se compiler hors dépôt. Pour que le Sierra Wireless MC7455 reconnaisse la carte SIM, il a fallu envoyer un code PIN, connecter le modem, raccorder les antennes. Puis, quand Plasma Mobile a démarré, on a pu voir le nom de l’opérateur et la force du signal dans le coin en haut à gauche !

Photo de l'écran montrant l'opérateur et la puissance du signal affiché dans le coin

La fierté d'afficher le nom de l'opérateur et la puissance du signal dans le coin !

À cause du modem installé actuellement sur notre board i.MX 6, nous n’avons pas pu passer d’appels. Mais pas de panique, le Librem 5 aura un modem capable de téléphoner ;-)

Une étape de franchie, 9000 restantes

Avec la communauté, Purism a progressé dans le support de Plasma Mobile sur le Librem 5. Il reste de nombreux efforts et la collaboration avec la communauté Plasma permettra d’avoir un environnement fonctionnel lors de la sortie du Librem 5.

Du 27 Février au 1er Avril, Todd et Nicole seront à l’Embedded World Electronics Supplier Trade Show à Nürnberg en Allemagne pour rencontrer de potentiels fournisseurs et tout particulièrement des représentants de chez NXP et du distributeur EBV Elektronik. En plus, nous avons eu de nombreux meetings avec des fournisseurs de composants WiFi, BlueTooth et de capteurs et nous avons également discutés avec des fabricants et designers de boards.

Cet évènement et ces discussions nous préparent pour notre prochain voyage à Shenzhen, le Silicon Delta de la Chine. Nous avons des rendez-vous avec différents fournisseurs intéressés pour collaborer avec nous sur le Librem 5 ainsi que d’autres de nos projets matériels. Nous aurons deux semaines intensives sous forme de marathon de rendez-vous pour définir nos choix matériels et le choix de fournisseurs pour notre projet.


Ha bel avancement ce coup-ci. Les avancées sur Plasma Mobile sont encourageantes. Encore et toujours des rendez-vous à droite à gauche pour trouver les fournisseurs.

La rapidité de déploiement des technos web

En scrutant un peu GoAccess, je me suis rendu compte que j’avais désormais plus de visiteurs en HTTP2 qu’en HTTP1.0 ou HTTP1.1.

HTTP2 est officiellement né en Février 2015 et en seulement deux ans il est devenu le protocole majoritaire (tout du moins dans mon cas). J’ai environ trois visites en H2 pour 1 en H1.

C’est impressionnant de voir une telle vitesse de déploiement côté client. IPv6 ne peut pas en dire autant. Et la puissance de frappe de Google n’y est surement pas pour rien.

La cadence effrénée de sortie de son navigateur Chrome y est pour beaucoup mais pas uniquement.

En étant le moteur de recherche numéro un, il peut pousser tous les éditeurs de site ouaib à faire tout et n’importe quoi en brandissant la promesse d’un meilleur classement. Pour le bien et pour le pire (vous avez entendu parlé de la controverse AMP (pas l’éditeur de texte, hein) ?).

Le mois dernier, NGINX a ajouté le support de la fonction PUSH qui permet, à l’initiative du serveur, d’envoyer préventivement des fichiers non demandés par le client. Cette technique est pratique pour envoyer d’office votre feuille de style css, les quelques js nécessaires ou la favicon afin de limiter le nombre de requêtes nécessaires à l’affichage complet de la page.

Bref je foutrait ça en place dès que ça arrive dans le dépôt de ma distrib.

8ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE et le projet Matrix. Ils sont assez transparents sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Design report #4: applications symbiotiques

Le but à long terme de Purism a toujours été de faire des ordinateurs aussi pratique que respectueux de leurs utilisateurs. Les Librem sont une plateforme éthique et de ce fait ne devrait discriminer personne. Au contraire, ils sont fait pour être inclusifs. En d’autres termes, chacun peut trouver dans son Librem un outil pratique et sécurisé pour son utilisation du quotidien et donc l’accessibilité est une importante part de notre feuille de route concernant le design éthique.

Nous sommes conscient que le chemin sera long et que le Librem 5 représente de nombreux challenges donc nous devons établir de solides fondations qui favorise la praticité autant que possible.

Les applications des plateformes existantes sont en compétition pour attirer votre attention

Avec les smartphones actuels, vous avez généralement un ensemble de fonctionnalités réduites que vous pouvez agrandir en ajoutant diverses applications selon vos besoins. Habituellement ces applications sont propriétaires et sont designées autour d’un business model non éthique, d’où le fait quelles sont toutes en compétition permanente pour retenir votre attention et possèdent chacune leur fonctionnalités utilisable uniquement en leur sein.

Ceci amène son lot de redondance et de confusion en terme de fonctionnalité. Un exemple évident sont les applications de communication, où chacune possède sa façon de gérer les contacts, leur propre protocole de communication verrouillé et isolé et où une tonne d’application vous implémenter les mêmes choses dans le même but (passer des appels et envoyer des messages) en tentant d’être la plus flashy pour attirer et retenir le plus d’utilisateurs. Une image vaut mieux que mille mots :

Diagramme présentant la redondance des données et des fonctionnalité d'un écosystème d'application en compétition

Écosystème d'applications en compétition

Envisager un écosystème harmonieux d’applications

Dans le monde réel, les écosystèmes durables sont fait d’entités biologiques interagissants ensembles en harmonie ou symbiose. C’est ce qui rend la vie possible sur le long terme.

Le monde du logiciel Libre et Opensource, particulièrement les systèmes d’exploitation, sont similaires à un écosystème naturel. Dans ce monde, pour faire partie du système, vous ne pouvez pas vous isoler et protéger votre technologie (dans le sens restreindre son utilisation). Les business models et les intérêts sont complètement différents du monde du logiciel propriétaire. Les bonnes pratiques favorise la réutilisation et l’intégration, l’amélioration de l’expérience utilisateur, la réduction de la dette technique, l’amélioration de la qualité logiciel et la diminution du coût de dev avec un système “collaboratif” où différentes applications de différents auteurs sont faites pour travailler ensemble.

Le but est la fonctionnalité

L’idée derrière les recommandation de design de PureOS est de remplacer le concept d’application standalone, indépendante et en compétition avec les autres par le concept de petites applications, avec un seul but et favorisant l’intégration dans l’écosystème. Cela permettra d’obtenir une expérience unifiée au travers des différents appareils (et au delà). Ces petites applications peuvent être vue comme des «fonctionnalités» du système. 1 but = 1 fonctionnalité

diagramme présentant la symbiose d'applications en collaboration

Écosystème d'applications en collaboration

Pour cela, les grandes lignes des Human Interface Guidelines (recommandation pour les interfaces avec les humains) concernant les fonctionnalités seraient :

  • Ne pas voir chaque application comme indépendantes mais comme des «fonctionnalités» qui n’ont qu’un but et qui interagissent ensembles.
  • Une « fonctionnalité » est le garant de la sécurité de son flux de données . Ne faites partager les données de votre application qu’avec des fonctionnalités ou réseau «de confiance» et d’une manière sécurisée.
  • Faites que votre application ne fasse qu’une chose (un client mail n’est pas un agenda, ni un répertoire).
  • Faites que votre application dépende de fonctionnalités existantes (un client mail doit s’appuyer sur un répertoire existant et sur un agenda existant).
  • Éviter les redondances. N’essayez pas de réinventer les applications existantes. Améliorez-les à la place.
  • Préconfigurez vos applications par défaut. Faites en sorte que ça fonctionne dès l’installation.

Avantages

Du point de vue de l’utilisateur, les fonctionnalités d’un appareil sont facilement identifiable car elles sont mises en avant par une application à but clairement identifié. Par exemple, l’application “Appel” est faite pour téléphoner, qu’importe la technologie derrière (ex : Matrix, téléphonie classique, VoIP). L’application “Messagerie” est utilisé pour envoyer des messages instantanés, qu’importe le protocole sous-jacent (ex : Matrix, SMS, XMPP). L’application “Contacts” est utilisée pour manipuler et stocker les informations de vos contacts utilisable par l’application “Appel” et “Messagerie”.

Du côté des dev, sont aussi simple que possible, les cas d’utilisations sont limités et toute logique non liée au but principal de votre application est déléguée à un autre programme ce qui rendra votre application plus simple à designer, implémenter et maintenir.

Les données appartiennent à l’utilisateur, pas à l’application

Dans ce système d’application collaborant entre elles, où les applications interagissent les unes avec les autres en harmonie, les données ne sont plus limitées à la logique de l’application. Les applications agissent comme des services, ou des « fournisseurs de données » pour les autres. Les données naviguent d’une application à une autre, d’un appareil à une autre, d’un réseau à un autre.

Ce concept implique une séparation forte entre les données et les fonctionnalités où les données appartiennent uniquement à l’utilisateur. Les applications qui les manipulent sont les garants de leur intégrité et de leur sécurité.

Complément :

Ce sont des recommandations, représentant une vision globale. Ces recommandations sont là comme un moyen pour guider le design des applications et pour suggérer l’application de bonnes pratiques en général. Étant donné une qu’une distribution GNU/Linux comme PureOS est une plateforme ouvert où des milliers d’applications sont disponibles indépendamment (tant qu’elles respectent votre liberté !), vous n’êtes pas obligés de vous y conformer pour pouvoir distribuer votre application vers Debian et PureOS. Qui plus est, ces plans sont un but à long terme qui n’est pas garanti d’être présent «immédiatement» dès la disponibilité de notre plateforme, …


Bon pas trop d’avancement dans cet article mais ils exposent leur vision de l’écosystème qu’ils veulent atteindre. On doit donc s’attendre à des applications officielles assez simples (KISS) mais interopérantes. J’ai un peu peur que les applications soient trop simplistes même si le principe est sympa. Bon, par contre ils préviennent que ça sera pas forcément complet dès la sortie du système.

Créer un blog statique Hugo de A à Y

Je vois que ces derniers temps Hugo commence à attirer de nouvelles personnes. Du coup, pourquoi pas vous proposer un article un peu plus en profondeur sur ce que j’ai compris d’Hugo. Je vous ai déjà fait un retour sur mon utilisation d’Hugo mais là ça va plus être sous le capot.

Je vais vous montrer comment faire ses premiers pas pour se monter un blog simple comme le mien avec un thème fait maison.

Facts

Tout d’abord voilà un ensemble de facts que j’ai accumulé. - Hugo n’est pas un moteur de blog mais un générateur de site web statique. Vous pouvez en faire autre chose qu’un blog. Et du coup par défaut il ne fait pas forcément un blog. Par défaut d’ailleurs il ne fait pas grand chose comme vous le verrez.

  • Hugo fonctionne avec des sections. Vous pouvez avoir une section blog, une autre pour des articles, encore une autre pour des recettes de cuisines et une dernière pour les livres que vous avez lus. Chaque section peut être “indépendante” dans le sens où vous allez appliquer un template différent.

  • Un thème Hugo n’est pas juste une couche graphique. Un thème Hugo peut définir la structure de votre site. Il est difficile de faire quelque chose non prévu par le thème sans le retoucher. Et changer de thème une fois que votre site en utilise un particulier ne se fera pas en un claquement de doigts.

  • Créer un thème peut être un peu ardu la première fois si vous n’avez jamais pondu de html/css.

  • Créer un thème est relativement aisé, surtout si l’on repars d’un thème existant que l’on tord jusqu’à décider de repartir de 0 avec ce que l’on veux exactement.

  • Hugo gère super bien les sites multi-langues pour peu que vous traduisiez le contenu.

  • Migrer de Wordpress à Hugo n’est pas chose aisée.

  • Comme tous les générateurs de sites statiques, Hugo pond des sites facilement hébergeable, très performants et sans soucis de sécurité.

  • Hugo a des mises à jour très régulièrement qui apporte de nouvelles fonctionnalités souvent dispensables. Pas la peine de rusher les mises à jour : il n’y a pas de risque de faille de sécurité exploitable depuis votre site ouaib.

  • Hugo fournit des messages d’erreurs globalement assez clair si vous vous lancer dans la création d’un thème. Il vous indiquera généralement les caractères qui lui posent soucis (tel fichier, telle ligne).

  • La doc d’Hugo est super bien foutue. Toutes les fonctions sont documentées, souvent avec des exemples, parfois même des vidéos.

  • La collection de thêmes est plutôt conséquente. Méfiez-vous, beaucoup de thème utilisent des fonts externes, des JS externes, du facebook/twitter…

  • Hugo génère par défaut un flux RSS tronqué. Il est aisé de trafiquer le flux RSS pour qu’il soit complet, ne contiennent que les X derniers articles…

  • Hugo possède un serveur web intégré vous permettant de tester votre site ouaib en live quand vous faites des modifs. Il peut même vous emmener directement sur la page ayant été modifiée automatiquement dès que vous changer un fichier.

Bon après ces quelques remarques globales, attaquons nous à la création d’un blog basique ainsi que son thème.

Créer la structure de votre site

Bon, sur votre machine personnelle, on va créer un dossier blog et maintenant tout se fera à partir de ce dossier. hugo new site ./ Et voilà votre dossier peuplé de nouveaux dossiers.

  • archetypes : contient les éléments qui seront automatiquement rajouté quand vous créerez un nouvel article
  • config.toml : fichier texte où se trouve la configuration de votre site
  • content : contiendra vos articles
  • layouts : contient les squelettes des pages qui seront générés
  • static : contiendra les données statiques ajoutées à votre site (les images,js, css,…)
  • themes : où vous pourrez mettre les différents thèmes Hugo

Créer un article

Afin de pouvoir expérimenter au plus vite, on va déjà créer un article bidon pour votre site.

Au préalable, on va créer une section blog : mkdir content/blog. Désormais tous vos articles de blog on les rangera dans ce dossier.

Créons l’article : hugo new blog/welcome.md . La chose à prendre en compte c’est que vous ne placez pas explicitement votre nouvel article dans content, il le fait de lui même. Quand vous utilisez la commande hugo new, ça sera automatiquement dans content.

Maintenant ajoutons du contenu à l’article : vim content/blog/welcome.md Et là vous devriez vous retrouver avec déjà quelques lignes dans votre article.

---
title: "Welcome"
date: 2018-03-07T12:15:24+01:00
draft: true
---

Ces données proviennent en fait du fichier archetypes/default.md fournit par défaut. Dans le jargon on appelle ça le frontmatter. Tout ce qui se trouve entre les (ou +++ en fonction du format). Donc par défaut le titre de votre article sera tiré du nom du fichier donné par la commande hugo new. La date correspondra à la création du fichier et par défaut votre fichier est à l’état de brouillon. Par défaut, Hugo ne génère pas les pages à l’état de brouillon. Pour la suite, mettez draft: false.

Vous pouvez rédiger en dessous votre article en utilisant la syntaxe MarkDown.

Bon après avoir ajouté un peu de contenu à cet article on va commencer les choses sérieuses : générer une page web !

Configuration

Donc pour générer votre site web, il vous suffit de taper : hugo

                    | EN
+-------------------+----+
  Pages             |  4
  Paginator pages   |  0
  Non-page files    |  0
  Static files      |  0
  Processed images  |  0
  Aliases           |  0
  Sitemaps          |  1
  Cleaned           |  0
Total in 21 ms

C’est tout de même mignon ce petit tableau récapitulatif ! Bon alors premièrement, votre site est probablement pas en anglais donc va falloir lui dire qu’il se goure.

Allez, voyons le config.toml

baseURL = "http://adresse.de.votre.site/"
languageCode = "fr-fr"
DefaultContentLanguage = "fr"
title = "le nom de votre site"

On pourra se contenter de ces réglages pour le moment. Et du coup si vous relancez la commande hugo vous verrez que vous générez désormais du français !

Paramètres fait maison

Hugo n’est pas chiant, vous pouvez rajouter des paramètres qui vous serviront pour votre thème, en plus des paramètres existants. Pour cela il suffit de faire ça sous la forme :

[params]
   mon_param_a_moi = "machin"

Vous pourrez les utiliser via .Site.params.mon_param_a_moi mais on verra ça mieux un peu plus loin.

Génération

Après avoir généré votre site, vous devriez voir un dossier public contenant quelques sous-dossiers et fichiers :

   public
   ├── blog
   │   └── index.xml
   ├── categories
   │   └── index.xml
   ├── index.xml
   ├── sitemap.xml
   └── tags
       └── index.xml
       3 directories, 5 files

La section blog a été créé avec dedans un index.xml, le dossier categories est automatiquement créé et contiendra les différentes catégories de vos articles de blog. sitemap.xml est le sitemap de votre site automatiquement généré par Hugo pour vous permettre d’être bien vu par les moteurs de recherche. tags est à l’image de categories et sera rempli tout seul au fur et à mesure. Tous les index.xml sont des flux RSS.

Mais du coup … je comprends pas … elles sont où les pages web ?

Pour l’instant vous n’avez pas donné d’instruction à Hugo sur la façon de générer les pages. Du coup en bon fainéant… il a rien foutu.

Layouts

Pour les moins anglophones, le layout est l’agencement des pages. En gros c’est le squelette HTML de vos pages que vous allez demander à Hugo de remplir avec le Markdown de vos articles.

On va commencer par le minimum absolu.

Dans layouts/index.html :

<html>
  <body>
    Yoplaboum !
  </body>
</htm>

Je vous avais prévenu c’est vraiment peu. Maintenant on régénère via hugo et on voit qu’on a désormais public/index.html qui existe. Et comme par hasard il contient exactement la même chose que définie dans le layouts/index.html.

Ajoutons la magie d’Hugo : Toujours dans layouts/index.html :

<html>
  <body>
{{ range .Data.Pages }}
    <h1>{{ .Title }}</h1>
    {{ .Content }}
{{ end }}
  </bdy>
</html>

Et maintenant refaites un ptit coup de hugo et observez votre nouvel public/index.html

<html>
  <body>
    <h1>Welcome</h1>
    <p>coucou</p>
  </body>
</html>

Voilà, votre tout premier résultat tangible. Voyons ce qu’il s’est passé.

{{ range .Data.Pages }} indique à Hugo d’itérer sur toutes les pages de contenu que vous avez créé. Donc dans notre cas uniquement le fichier content/blog/welcome.md. Il s’agit d’une boucle qui s’exécutera pour chacun des items jusqu’à la fermeture qu’est {{ end }}.

Et dans cette boucle on récupère le {{ .Title }} qui est donc le title que vous avez mis dans le frontmatter de l’article. Et enfin {{ .Content }} est le rendu du MarkDown se trouvant hors du frontmatter de l’article.

C’est pas bien compliqué.

Partials

Hugo vous permet d’utiliser des morceaux de HTML que vous allez pouvoir inclure par la suite.

mkdir layouts/partials et ensuite éditons layouts/partials/header.html

<!DOCTYPE html>
<html lang='{{ .Site.Language.Lang }}'>
  <head>
    <title>{{ .Title }}</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <meta name="description" content="{{ .Desription }}">
    <meta name="keywords" content="{{ range .Params.Tags }}{{   }},{{ end }}">
    <meta name="author" content="{{ .Params.author }}">
    {{ .HugoGenerator }}
    <link rel="stylesheet" href="{{ .Site.BaseURL}}css/style.css">
    <link href="{{ .Site.RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}">
    <link rel="icon" type="image/x-icon" href="{{ .Site.BaseURL }}favicon.ico">
  </head>

{{ .Site.Language.Lang }} sera remplacé par la langue de la page en question. Si vous avez la même page dans différentes langues cette variable sera ajustée en fonction.

{{ .HugoGenerator}} sera remplacé par la version de votre ptit Hugo.

Plusieurs fois vous trouverez {{ .Site.BaseURL }} c’est la variable définie dans config.toml à la racine de votre site.

Bref maintenant yapuka inclure ça dans votre layout : layouts/index.html en ajoutant juste

{{ partial "header.html" . }}

Un ptit coup de hugo et on observe le résultat. Le partial est inclus dans votre page web avec ses variables qui sont bien remplacées. Il nous reste encore un détail à voir et vous serez à même de vous débrouillez comme de grandes personnes.

List/Single pages

Hugo repose sur deux principaux types de pages. Les list pages et les single pages. Les single pages sont les pages affichant un item d’une section (dans notre cas un article de blog). Les list pages sont les pages listant les items d’une section (tous les articles du blog).

Jusqu’à présent, dans notre exemple, nous n’avons travaillé que la home page du site en bidouillant layouts/index.html. On va donc générer la page pour un article de blog.

mkdir layouts/blog puis éditons layouts/blog/single.html

{{ partial "header.html" . }}
<body
  <header>
    <h1><a href="{{ .RelPermalink }}">{{ .Title }}</a><h1>
    <p class="meta">{{ .Date.Format "02/01/2006" }}</p>
  </header>
  <main>
    {{ .Content }}
  </main>
</body>
</html>

Bon ça reste assez simple (notez comme j’amène de nouveaux éléments que progressivement…). {{ .RelPermaLink }} est le lien vers l’article. {{ .Date.Format }} lit le paramètre date de l’article et le met au format “02/01/2006”. J’avoue que cette désignation est assez étrange mais bon vous trouverez ici plus d’explication sur les formats possibles.

Impatients de voir le résultat ? hugo puis là vous aurez encore plus de fichiers \o/

public
├── blog
│   ├── index.xml
│   └── welcome
│       └── index.html
├── categories
│   └── index.xml
├── index.html
├── index.xml
├── sitemap.xml
└── tags
    └── index.xml
    4 directories, 7 files

Vous avez maintenant un dossier blog avec à l’intérieur un index.html qui se trouve être votre single page de l’article. Vous y trouverez comme prévu ce que vous avez mis dans layouts/blog/single.html.

Il ne reste donc plus qu’à faire la list page de la section blog :-)

layouts/blog/list.html

{{ partial "header.html" . }}
<body>
  <main>
  <h1>Mon blog moche</h1>
  {{ range .Data.Pages }}
    <header>
      <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
    </header>
    <article>
      {{ .Summary }}
    </article>
  {{ end}}
  </main>
</body>
</html>

Peu de nouveauté. {{ .Summary }} ne vous sortira pas l’article en entier mais juste le début. Une fois votre site généré vous aurez désormais un public/blog/index.html.

Petite pause dans l’apprentissage

Bon on a un truc qui marche pas trop mal. Plus qu’à raffiner.

Déjà pour se simplifier la vie, dans un autre terminal lancez hugo server –navigateToChanged -F -D. Cette commande lance le ptit serveur web interne d’Hugo en générant les article avec une date dans le futur (-F) et les articles en brouillons (-D). Une fois lancée, ils vous indiquera quelle adresse ouvrir dans votre navigateur (généralement http://localhost:1313). À chaque modification, vous serez redirigé vers la page éditée.

Encore pour se simplifier, on va améliorer archetypes/default.md pour y rajouter quelques infos intéressantes :

+++
Author = "Lord" (enfin si vous voulez m'attribuer tout votre mérite)
Description = ""
Categories = ["",""]
Tags = ["",""]
title = "{{ replace .Name "-" " " | title }}"
date = {{ .Date }}
draft = true
+++

Voilà, la description vous permettra de remplir la balise correspondante de la page, et Tags également ce qui améliorera sensiblement le SEO.

Bon on test ?

Créez un second article sur votre blog avec hugo new blog/le-second-article.md puis éditez-le pour y mettre un peu de contenu.

Si tout va bien, votre frontmatter (les métadonnées en haut du fichier contenant votre article) devrait être pré-rempli.

Peaufinnage

La page d’acceuil

Bon c’est pas mal mais du coup vous remarquerez qu’on a fait une connerie au début : quand on a commencé à faire le layout, on a fait layouts/index.html qui est votre homepage comme un sagouin.

Pour l’instant votre page d’accueil liste tous vos articles mais les affiche en entier ce qui est vite indigeste. Le plus simple est de juste copier layouts/blog/list.html et de le mettre à la place de layouts/index.html et ça sera plus cohérent.

Liens vers les articles suivant/précédent

C’est assez simple à ajouter automatiquement. On édite layouts/blog/single.html pour rajouter après l’article :

  <footer>
    {{ if .PrevInSection }}article précédent : <a href="{{ .PrevInSection.RelPermalink }}">{{ .PrevInSection.Title }}</a>{{ end }}
    {{ if .NextInSection }}article suivant : <a href="{{ .NextInSection.RelPermalink }}">{{ .NextInSection.Title }}</a>{{ end }}
  </footer>

Le if n’affichera que s’il existe un article précédent/suivant.

Un peu de style

Bon pour l’instant c’est pas super beau. Il va vous falloir dégainer votre plus joli CSS et le coller dans les ressources statiques. Donc mkdir static/css puis éditez static/css/style.css à votre convenance. Là c’est pour votre pomme.

Vous pouvez vous contenter de peu de règles écrites à la main plutôt que de forcément partir vers du Bootstrap.

Un flux RSS complet

Le template de génération de flux RSS par défaut ne place que le {{ .Summary }} d’un article. Pour le modifier il va falloir modifier le layout par défaut : mkdir layouts/_default/ et éditer layouts/_default/rss.xml

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>{{ if eq  .Title  .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
    <link>{{ .Permalink }}</link>
    <description>Recent content {{ if ne  .Title  .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
    <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
    <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
    <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
    <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
    <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
    <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
    {{ with .OutputFormats.Get "RSS" }}
        {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
    {{ end }}
    {{ range .Data.Pages }}
    <item>
      <title>{{ .Title }}</title>
      <link>{{ .Permalink }}</link>
      <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
      {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
      <guid>{{ .Permalink }}</guid>
      <description>{{ .Content | html }}</description>
    </item>
    {{ end }}
  </channel>
</rss>

Faire un lien entre articles

C’est un peu une base du web de faire des liens entre les pages. Faire du web sans y coller des liens hypertexte est un non-sens. Bref. Pour pointer vers un autre article il suffit d’utiliser cette syntaxe :

[ceci est un lien]({{ < ref "/blog/welcome" > }})

Alors ?

Bha alors vous avez une base fonctionnelle pour un blog statique pondu par Hugo. C’était pas la mère à boire. Et normalement avec tout ça vous pouvez déjà pas mal vous en sortir. Une prochaine fois on verra comment héberger le bousin ;-)

Les GLSA de chez Gentoo

J’ai réalisé que je parlais pas assez Gentoo sur ce blog. C’est pourtant de loin la meilleure de toutes les distributions Linux.

Trèves de trolleries, Gentoo c’est bien (entre autre) parcequ’on peut tester vite fait son système pour voir si on a de potentielle faille dans le système.

GLSA

Gentoo n’est pas une distro avec une immense équipe de dev mais est tout de même pas mal lotie. Et du coup il y a de multiples équipes spécialisées dont une pour la sécurité. Et cette équipe de sécurité publie les GLSA pour Gentoo Linux Security Advisories.

Les GLSA sont publiées régulièrement et permettent d’être alerté assez rapidement de failles importantes. Pour les suivre il y a plusieurs moyens. Personnellement je suis leur flux RSS via Nib.

GLSA-Check

Mais bon dans le doute j’utilise glsa-check qui est un petit outil présent dans gentoolkit (un ensemble d’outils spécifiques à Gentoo).

Un ptit coup de glsa-check -l (une fois par jour) vous listera toutes les failles publiques qui vous touchent (donc en fonction des logiciels installés). S’il vous trouve quelque chose, vous pouvez premièrement avoir plus d’info avec glsa-check -d XXXXX-XX. Vous saurez quand a été dévoilée la faille, quels sont les paquets affectés et dans quelle version, quel est l’impact et surtout comment s’en démerdouiller.

Et vous pouvez aussi directement voir avec glsa-check -f XXXXX-XX pour que, de lui même il applique le correctif nécessaire (généralement mettre à jour un paquet précis).

Ce petit outil est assez peu connu et pourtant très pratique pour avoir un aperçu rapide de l’état des mises-à-jour de sécurité d’une gentoo. Ce n’est biensûr pas un outil infaillible mais permet déjà d’éviter le pire. Ça ne remplace bien entendu pas une mise à jour globale du système via emerge -uDnav @world.

Tiens d’ailleurs si vous voulez nourrir un peu votre agrégateur de flux rss, Debian publie aussi ses DSA.

7ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE et le projet Matrix. Ils sont assez transparent sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Librem 5 est un gros projet. Comme vous le savez, les gros projets semblent insurmontables jusqu’à ce qu’on les décomposent en de multiples briques logiques. Comme s’il s’agissait d’un puzzle, notre équipe s’est organisée pour commencer à assembler les pièces. C’est enivrant de partir d’un morceau initial, de travailler dessus et soudain… après un peu de temps, une solution apparait et tout s’aligne presque magiquement.

Dans nos précédents articles nous avons décrit ce que nous avions commencé à faire et ces premiers efforts portent déjà leurs fruits lors de notre hackfest d’une semaine à Siegen en Allemagne où notre équipe logicielle s’est rendue. En plus de moi même (Nicole Faerber - Mobile Development Lead), nous ont rejoins Bob, Heather, Pedro, Dorota, Adrien, Guido et Todd.

Photographie de l'équipe travaillant sur leurs ordinateurs
Photographie de l'équipe discutant

Compositor et Shell

L’un des composants le plus importants de l’interface utilisateur du téléphone est le compositor Wayland et le shell. Le compositor coordine l’affichage des surfaces, qui se trouvent être les fenêtres des applications et le shell fournie une interface utilisateur simple pour démarrer cet applications comme par exemple le widget de contrôle du réseau, la luminosité, la rotation etc. Pour plusieurs raisons après avoir évalués de nombreuses options avec les mainteneurs upstreams (amonts), nous avons pris la décision de développer un compositor basé sur Wlroots et Rootston. Guido travaille ardemment sur ce point et les résultats obtenus durant cette semaine sont bluffant.

Nous avons donc désormais un compositor complet fonctionnant sur la dev board à base de i.MX6 basé sur Wlroots et Rootston avec un embryon de shell pour téléphone (Phosh) permettant de manipuler les fenêtre, mise en plein écran, un début de menu de contrôle permettant la rotation de l’écran en redimensionnant les fenêtre à la volée.

Tout cela fonctionne sur une SBC i.MX6 qui est suffisamment performante pour ce dont on a besoin. Cela permet également de valider nos choix fonctionnels. Le shell, Phosh, n’est qu’à l’état de “preuve de concept” mais permet déjà de lancer quelques applications. On peut donc déjà lancer de multiples applications via notre shell. Nous pouvons désormais nous atteler à compléter le shell et appliquer le travail fait par notre équipe de designers.

Applications GTK+ adaptives (“responsives”)

Un des challenges majeurs d’écrire des applications graphiques est de designer une UI de sorte à ce qu’elle puisse s’adapter à différentes tailles d’écran, géométries et résolutions. Le téléphone est un cas extrême car il a un grande résolution dans un tout petit format (environ 5 pouces) et est principalement utilisé en mode portrait “mais tu peux l’utiliser en paysage” et tu peux y raccorder un écran externes bien plus grand… mais tu veux utiliser les mêmes applications dans tous ces cas de figures.

Pour cela, les interfaces graphiques doivent s’adapter à leur environnement. On a vu ces principes adoptés dans le design des sites web ces dernières années sous le terme de “responsive design”.

Cependant nous appelons ça adaptive design, ou applications adaptives. Non pas pour se démarquer mais parce que “responsive” est un terme avec de nombreuses significations, particulièrement dans le domaine des logiciels ou ce terme signifie parfois «performant». Un logiciel responsive est un logiciel qui réagis quasi instantanément contrairement à un logiciel classique qui ne répond plus.

Pour le moment, la grande majorité des applications ne sont pas faites pour cette utilisation. Nous nous sommes donc penché sur le sujet et Adrien commença à développer un widget GTK+ qui devrait solutionner ce problème tout du moins simplifier grandement la création d’applications adaptives et le portage d’applications existantes vers cette technologie. Le widget d’Adrien permet d’afficher/cacher d’autres widgets en fonction de la taille de la fenêtre et de sa géométrie. Pour tester son système, Adrien a modifié Gnome Contact pour qu’elle utilise sa nouvelle “boîte responsive” et il s’avère que cela marche bien comme vous pouvez le constater sur cette vidéo :

L’application contacts est simple dans sa conception tout du moins pour son interface. La prochaine étape pour Adrien sera de tester son widget sur un client email. Stay tuned!

Méthodes d’entrées (Input methods)

En dehors du compositor, du shell et de l’agencement de l’UI, un des points les plus critiques d’une suite logicielle pour téléphone est la gestion des méthodes d’entrées. Presser un bouton et lire du texte est une chose mais vous voulez être capable d’entrer du texte et ceci requièrent quelques composants logiciels complexe à faire communiquer entre eux mettant en scène le compositor ainsi que le toolkit graphique utilisé par les applications. Dorota a planché sur cela et a connectés les différents protocoles et plugins et a désormais un prototype basé sur le protocole d’Input Method de Wayland, le clavier virtuel de Weston, un plugin GTK ainsi qu’une application de test recevant le texte :

Vous pouvez voir voir le texte entré sur le clavier virtuel s’affichant dans l’application de test. En plus de cela, Dorota est parvenu à établir une méthode pour afficher/cacher le widget d’entrée de texte en fonction du focus etc. Tout devrait fonctionner aussi bien avec une application Qt mais ce n’est pas le cas. Dorota s’affaire donc à régler cela. Nous sommes confiant quant au fait de faire fonctionner cela avec Qt.

Le protocole utilisé n’est pas lié au clavier virtuel de Weston, il peut être utilisé avec d’autre méthode d’entrée ce qui permettra donc de développer/adapter d’autres méthodes facilement.

Téléphonie

La dernière fois nous vous présentions le premier SMS envoyé depuis la dev board via le modem à une autre appareil mobile et nous vous promettions de bosser sur les appels téléphoniques. Bob a donc poussé les recherches à ce sujet et commencent à comprendre les entrailles d’oFono et Télépathy. Nous n’y sommes pas encore complètement mais le chemin nous apparait de plus en plus clairement. L’avantage de rechercher et de prendre le temps de comprendre l’interface et le code est que nous serons plus à même d’y brancher notre dialer (composeur de numéro de téléphone) et établir une communication.

Documentation, SDK

Maintenant que notre pile applicative est moins confuse, il est important de centraliser les connaissances et de documenter le tout. Ces dernières semaines, Heather s’est attelé à cette tâche. Non seulement elle documente les efforts de dev actuels, mais en plus elle intègre les bribes de développement dans ce qui deviendra à terme un émulateur et SDK pour les nouveaux devs. Nous voulons fournir un IDE pour les nouveaux devs qui dans un futur pas si lointain devrait permettre de développer pour tous les appareils Purism, laptop ou téléphone. Nous souhaitons être ouverts à différentes technologie de programmation, que ce soit des langages comme le C, C++, Python ou bien des toolkits comme Qt ou GTK+. Nous savons pertinemment que tout ne fonctionnera pas à 100% lors du lancement mais c’est notre but et nous nous employons en posant les fondations. Heather travaille actuellement avec Gnome Builder car il supporte une grande variété de langages et toolkits et permet de lui même de créer des paquets Flatpak. Elle travaille également sur des stratégies de déploiement accessibles pour que les devs puissent déployer directement une application du Builder vers une machine virtuelle pour le Librem 5 ou directement sur un kit de dev ou bien le téléphone ou bien vers un Flatkpak qui puisse être partagé.

Ce travail est capital pour les utilisateurs du SDK qui recevront les SBC en Juin. Avant ça nous lanceront un site web complet dédié à PureOS et au Librem 5.

Hardware

Alors que notre équipe hardware n’a pas pu nous rejoindre à Siegen, nous avons reçus nos premiers kits d’évaluation à base d’i.MX 8M la semaine dernière et avons pu commencé à tester avec les logiciels et pilotes. Nous avons également une prometteuse source pour la fabrication, nous aurons une visite d’usine d’ici à la fin Mars.

Photographie d'une dev board reliée à un oscilloscope.

Les pièces s’assemblent les unes aux autres

De nombreuses pièces de notre immense puzzle s’emboitent pour prendre forme. Nous avons les bases de notre UI (compositor, shell), nous avons prouvé une technique pour adapter les applications aux challenges que posent les différents écrans (boite responsive), nous pouvons entrer du texte, la pile téléphonique devient moins confuse et nous avons une toute une plateforme naissante pour les devs d’application PureOS.

Nous sommes exaltés de la quantité de progrès faits en si peu de temps. Restez branchés, de nombreuses choses arrivent…


Comme dit dans leur conclusion, en si peu de temps les progrès sont remarquables. Surtout du côté de l’interface utilisateur. C’est assez bluffant. Cependant la partie téléphonie parait tellement abscons pour le moment que ça en devient un peu inquiétant. Je trouve la date de juin pour les devs boards assez optimiste également mais bon.

Au fait, j’héberge les images sur mon serveur mais pas leurs vidéos qui seraient trop volumineuses pour chez moi, désolé.

Nouveautés dans l'émulation Playstation

La Playstation première du nom est l’une des quatre consoles de jeux vidéos que j’ai pratiqué à l’époque.

Pas mal de jeux m’ont marqués et c’est donc avec nostalgie que parfois je dégaine un émulateur pour y rejouer.

Pour les malheureux pas au courant, un émulateur est un logiciel mimant le fonctionnement d’une machine. Un logiciel qui remplace donc une machine.

Un émulateur peut même se permettre le luxe d’améliorer l’expérience originale en ajoutant de nouvelles fonctionnalités. On peut par exemple sauvegarder/charger à n’importe quel moment. Jouer avec d’autres périphériques que ceux d’origines. On peut même parfois améliorer les graphismes.

C’est d’ailleurs ce point qui va m’intéresser ici car il y a du nouveau depuis peu de temps.

Double coup de pied dans les madeleines (de Proust)

Quand vous déballerez pour la première fois votre émulateur pour rejouer à ce bon vieux jeu, vous allez vous prendre deux violents coups de pieds dans les madeleines.

Le premier en entendant le son caractéristique du bios affichant ce logo orangé de Sony. Celui-là est agréable.

Le second va être bien moins agréable quand le jeu se lancera et que vous mesurerez le décalage entre vos tendres souvenirs et … la bouillie de pixels dégueux de la réalité.

Ouai la nostalgie améliore grandement les souvenirs.

Les graphismes playstation ont pris un sacré coup de vieux. Les textures sont pas fines mais ça encore ça va. Par contre vous allez vite remarquer que les textures bougent dans tous les sens bizarrement. Et non ça ne vient pas de l’émulateur car la console originale avaient cette même tremblote.

Et puis de nombreux jeux ramaient sévères.

Et puis … wow ces pixels. La console dans le meilleur des mondes peut sortir un maigre 640*480. Et subir ça en 2018 c’est pas la joie.

Émulons et/ou améliorons ?

Du coup il existe deux écoles dans le monde de l’émulation.

  • L’émulation la plus fidèle. En utilisant des émulateurs qui vont jusqu’à émuler chacun des composants de la console.
  • L’émulation haut niveau. Prêt à arrondir les angles et également à ajouter de nouveaux effets pour améliorer l’expérience.

Je suis plutôt du second bord. Je ne pense pas que moderniser techniquement les jeux les dénature dans la limite du raisonnable. Donc voyons comment faire pour résoudre chacun des reproches que je fait.

Déjà pour les jeux Playstation le meilleur émulateur actuel est par chance un émulateur opensource rattaché au projet Retroarch. Il s’agit de Beetle PSX HW qui est un fork de Mednafen par Retroarch. Retroarch est une collection d’émulateur avec une interface commune et toute une configuration commune fonctionnant via des cores. Chaque core émule une machine et est soit fait par l’équipe de retroarch soit un émulateur opensource légèrement modifié pour s’intégrer à retroarch.

Dans notre cas Beetle PSX HW est un fork de fork. Au départ il y avait Mednafen qui est un émulateur multi console opensource pas mal du tout mais sans interface. Puis Retroarch et Mednafen ont collaborés pour pondre Beetle PSX qui est donc un core retroarch pour l’émulation de la playstation. Et enfin un ultime fork a été créé pour rajouter le HW qui signifie Hardware. C’est à dire que la partie graphique n’est plus calculée par votre CPU mais votre GPU qui est amplement plus adapté à cette tâche. Ça permet de gagner en perf mais surtout de pouvoir jouer avec quelques raffinements bien sympatiques comme une bien meilleure résolution.

Améliorons le rendu

capture d'écran de Crash Bandicoot en résolution d'origigne

On va passer de ça

capture d'écran de Crash Bandicoot avec des graphismes améliorés

À ça

Cet article n’est pas un tuto pour Retroarch mais juste une ptite aide pour trouver les bons réglages pour Beetle PSX HW. Si vous ne savez pas comment modifier les réglages et tout RTFM.

Toutes les options se trouvent dans le Quick Menu de Retroarch, une fois avoir démarré le jeu.

Premièrement, on augmente la résolution autant que faire se peut. Si votre ordi est suffisamment puissant n’hésitez pas à faire monter à 8x la résolution initiale. Au delà je ne vois pas la différence mais vous pourrez dire aurevoir aux pixels disgrâcieux.

Ensuite on active le PGXP. Cette option au nom barbare permet de corriger les approximations que fait la playstation pour afficher des textures sur des objets 3D. Ça enlève l’effet dégueulasse des textures biscornues qui gigotte quand la caméra se déplace. Cette option est assez intensive en ressource mais est un must. Cette technique est relativement récente puisqu’elle a débarquée il y a près d’un an dans le monde de l’émulation playstation et apporte une sacré différence de rendu. Donc on le passe en memory+cpu et on active les deux options qui vont avec. On obtient un rendu proche de ce qu’on est habitué désormais. Je vous ai fait un petit avant/après pour bien voir la différence. Admirez les lignes droites une fois activée. Et c’est franchement plus flagrant en mouvement.

La prochaine option est l’augmentation de couleurs. On passe donc les couleurs en mode 32bpp et on passe le dithering pattern à internal resolution. Avec ça les dégradés seront plus lissés. Bon ça fait pas de miracle non plus, les textures d’origines ne seront pas modifiées pour autant.

D’ailleurs en parlant de texture, certaines personnes aiment les lisser via le texture filtering mais là c’est question de goût. Personnelement je suis habitué au classique bilinear qui est un peu flou mais au moins ça ne modifie pas outre mesure le rendu.

La dernière option sympatoche mais non des moindres est toute neuve (une semaine, donc il vous faudra mettre le core beetle psx hw à jour et relancer retroarch) : le GTE Overclock. GTE est le gpu de la psx. Donc là ça va être quitte ou double : soit le jeu va s’emballer soit tout sera nickel mais avec plus de fps. Certains jeux galèrent à pousser ne serait-ce que 20fps, là vous pourrez éventuellement en avoir 60 grâce à ça. Chaque jeu nécessitera un réglage différent cela-dit. Les jeux les plus tardifs sur la consoles généralement le gèrent mieux mais c’est tout de même au cas par cas. (Alien Resurrection fait des merveilles) D’autres jeux par contre ont les FPS fixés à une certaine valeur (par exemple les Final Fantasy pendant les combats sont fixés à 15FPS) ce qui du coup n’aura aucune influence.

 

Voilà amusez-vous bien !

D’ailleurs si vous voulez tester quelques jeux sympas il y a les Crash Bandicoot, ainsi que le Crash Team Racing qui est toujours aussi agréable à jouer. Wipeout 2097 est pas mal. In The Hunt pour shmupper à bord d’un sous-marin. MDK est toujours aussi… étrange. Herc’s Adventure n’a pas trop mal vieilli. Mais mon chouchou reste Final Fantasy 8.

Retour sur le reverse proxy du blog

En septembre dernier, je vous avais parlé de la mise en place d’un micro-cache nginx en reverse proxy et du coup je voulais vous faire un petit retour.

Depuis cet article je n’ai pas changé la config en dehors de la durée du cache que j’ai augmenté récemment à dix minutes.

Bon déjà niveau entretien, rien à faire. Tout fonctionne comme voulu sans aucune intervention. Le seul truc qu’il m’arrive de faire de temps à autre c’est de vider manuellement le cache quand je fait des modifs et que j’ai pas envie d’attendre l’expiration du cache pour voir les résultats. Mais bon un simple *rm /var/www/lecache/* sur le reverse proxy et c’est torché.

D’ailleurs, je ne l’avais pas précisé dans l’article initial mais le cache se trouve en vrai dans un tmpfs c’est à dire dans la ram. Il n’est pas stocké réellement sur le système ce qui permet de gagner un poil en perf. Dans mon cas j’ai limité le tmpfs à 100Mo ce qui est plus que suffisant pour acceuillir l’intégralité du blog (qui ne fait que 12Mo).

Bref

Petit rappel vite fait du principe d’un cache

Le client (toi le lecteur) va demander à afficher une page.

Le reverse proxy va recevoir cette requête et va voir si la page est dans le cache. Si elle n’est pas là, il se connecte à l’upstream pour lui demander la page.

Le proxy envoi la page au client et la place dans son cache.

Pendant la durée de validité de la page, le proxy ne se connectera plus à l’upstream et enverra directement la page en cache.

Comment je collecte et lit les stats de mon site ?

Vous avez peut-être remarqué que mon site est plutôt … minimaliste. Il s’affiche particulièrement bien dans les navigateurs en console et j’espère de ce fait qu’un screen reader saura s’en débrouiller. En dehors des rares articles avec des illustrations, l’affichage d’une page du blog nécessite seulement trois requêtes : une première pour la page en elle-même. Une seconde pour le CSS. Et une dernière facultative pour le favicon.

Je n’utilise pas de javascript ou image bidon pour traquer mes visites.

La seule chose que je fait pour connaître le traffic de mon site est donc de lire les logs du serveur web. Je m’aide du logiciel GoAccess qui propose une interface console toute mimi et colorée. Mais ça reste tout de même rudimentaire comparé à un Google Analytics ou un Piwik. Cela dit, pour mon usage c’est largement suffisant.

Ce n’est qu’un blog perso. En dehors de la satisfaction de voir que des gens le lisent, je ne tire aucun profit de mon site.

Impact du reverse proxy sur l’upstream

Mon upstream est un tout petit Atom D510 de 2011 qui pourrait largement tenir la faible charge des visites de ce blog.

Mon reverse proxy est également une toute petite machine. C’est mon routeur, un Turris Omnia, avec un container lxc pour le reverse proxy nginx.

Pour voir à quel point l’upstream est soulagé il suffit de comparer les logs de l’upstream et du reverse proxy sur la même période et comparer.

Je constate une nette différence (surtout depuis le passage d’1s à 10minutes) entre les logs.

Sur les “journées molles” la différence est minime alors que sur les journées fastes le proxy arrive à écouler les deux tiers du traffic sans contacter l’upstream.

J’ai également coupé plusieurs fois l’upstream sans provoquer de coupure du site vu de l’extérieur (par contre le turris est devenu le spof, je n’ai pas plus de redondance).

Des chiffres !

Sur Février par exemple :

Upstream Proxy
Total requests 56389 131813
Unique Visitors 12848 19894
Log Size 9.93MB 22.61MB
Bandwidth 4.35GiB 7.55GiB

La demoscene vol.1

Connaissez-vous la demoscene ?

On va partir du principe que non.

La demoscene est un art consistant à créer des animations et de la musique par le biais d’un ordinateur avec une forte contrainte : le temps réel.

Contrairement à la création d’une vidéo, une démo est calculée en live par la machine qui l’exécute. Le résultat final est proche d’une vidéo sauf que la machine ne lit pas un fichier vidéo mais exécute un programme qui génère les images et le sons à l’image d’un jeu vidéo.

D’ailleurs de nombreux artistes travaillant dans l’industrie vidéoludique sont issus ou bien participe également à la demoscene.

La demoscene est toute une communauté d’artistes avec de fortes connaissances informatiques.

Origin story

Bon je vais être bref parcequ’il vous suffirait de faire un ptit tour sur kikipedia pour avoir plus d’exhaustivité. En gros ça a débuté dans le milieu du warez vers le début 80. Les pirates de logiciel apposait leur marque de fabrique en ajoutant au programme une petite animation avec parfois même un peu de musique. Petit à petit la demoscene s’est émancipée de la piraterie mais sachez qu’il existe une catégorie dédiée : les cracktros.

Puis dans les années 90 le phénomène a décollé avec la création des démoparty qui sont des rassemblements de ces artistes où le temps d’un week-end une compétition est organisée à qui créera la plus impressionnante des démos. Mais au delà de la compétition, il faut également y voir l’émulsion d’une communauté qui s’entraide et se juge afin de s’améliorer. Les équipes produisant les meilleures compo sont acclammées par la foule lors de la diffusion sur écran géant du fruit d’un rush de 3 jours avec peu de sommeil et peu de nourriture saine. D’ailleurs les lanparties se sont d’abord greffées au demoparty avant de devenir indépendantes.

De la contrainte nait le génie

Non content de devoir être capable de générer la vidéo et l’image en temps réel, il existe également des catégories dans la demoscene qui imposent des contraintes supplémentaires.

Le matériel

Premièrement certaines démo ne visent pas les ordinateurs dernier cri mais visent des machines assez anciennes tel que les Commodore 64 sortis en 1982. D’autres démos visent également le ZX Spectrum également sorti en 1982. Les Atari ont également leur lot de démos. Tout comme les consoles de jeux vidéos qui ont quasiment toutes droit elles aussi à des démos.

De taille

De nombreux artistes choisissent de restreindre la place occupée par leur production (c’est le terme officiel). Là encore plusieurs catégories. Une des plus connues est la 64K mais également la 4K. Ça correspond donc à 64Ko et 4Ko.

C’est peu, vraiment peu. Pour comparaison, la page d’accueil de mon site fait déjà 120Ko (et c’est pourtant déjà léger par rapport à d’autres sites). Et dans ces 64K on y cale généralement 3 minutes d’images et de musiques. Un mp3 de 3 minutes pèsera déjà dans les 3Mo soit 500 fois plus que les 64K de la démo.

Il existe même des démos jusqu’à 32octets mais là c’est vraiment minimaliste on va dire. Mais la performance est tout de même à saluer.

Vous serez d’ailleurs probablement bluffé par des démos de 4K.

Mais du coup ça ressemble à quoi ?

Il y a de tout. C’est une forme d’art et comme dans tous les arts… bha il y a de tout.

De l’abstrait, du réaliste, du moche, du beau, du grand, du stupéfiant, de l’humoristique, du mélancolique…

Généralement l’accent est mis sur la synesthésie et on retrouve des motifs récurrents en fonction des modes.

Bon tu nous en montre ?

Alors ce que je vais faire est contre-nature. Je vais vous donner des liens vers youtube d’enregistrements de démos. Mais gardez bien à l’esprit que youtube n’a qu’un enregistrement, si vous voulez voir l’original, le rendu ne sera pas forcément tout à fait similaire (tout comme voire une photographie de la Joconde ne pourra jamais transmettre toutes les subtilités de l’original).

Allez c’est parti pour une mini-sélection de démo que j’apprécie en tentant de varier pour une première sélection. Je ferai d’autres articles moins explicatifs avec plus de démos une prochaine fois.

Thought Process - TMP

Capture d'écran de la demo Thought Process par TMP

Un couloir sans fin mais coloré

Elle est toute récente. Elle tient dans 4Ko. C’est une démo moderne sympatoche. On y retrouve des traits typiques actuel comme l’occlusion ambiante (les ombres dans les coins) et des effets de lumières à peu près réaliste.

Logon’s run -

capture d'écran de Logon's Run on l'on voit des cubes multi-colores en 3D

Logon's Run en Live durant la Revision 2017

Profitez des réaction du publique lors de sa première présentation. Là c’est également du 2017 mais typé Old-School donc sur un Amstrad CPC avec de la 3D, ce qui, pour la machine, est un tour de force.

We Stand Divided - Cocoon

capture d'écran de We Stand Divided montrant une sorte de ruban rectangulaire avec du texte dessus

C'est ty pas mystique et intriguant ?

C’est une de mes favorite. Elle date de 2015, tourne sur PC sans contrainte de taille. Elle a une très forte synesthésie et j’ai du mal à l’expliquer pourquoi mais me fascine toujours. Par rapport aux deux premières on est dans un style carrément différent, avec une grosse atmosphère et moins de contraintes donc un rendu plus poussé avec des modèles complexes. Le groupe Cocoon est français et a un sacré portfolio à son actif, je vous en posterai d’autres, soyez-en sûr.

Lapsus - Maturefurk

capture montrant une image fixe très stylisée

On pourrait dater la démo approximativement rien qu'à ce screenshot

Ici, je vous présente une démo de 2000 pour que vous goûtiez un peu la mode de l’époque. On sent un style très différent. Personnelement j’aime pas trop trop mais bon ça a tout de même un certain charme daté. On sent qu’à l’époque mettre une “jolie” image était la mode, ça ne se fait quasiment plus maintenant. La 3D commence à être très présente mais rarement texturée.

Voilà pour cette première fournée. Je vous prévoit d’autres articles pour vous en présenter d’autres.

Des liens ! DES LIENS !

La Terrible Dependance Envers les Registrars

Purism vient de subir une importante panne de leur infrastructure réseau. Leurs sites web étaient injoignables.

La cause ? Visiblement leur nom de domaine était injoignable. Après investigation leur infra DNS était pourtant nickel.

Chez le registrar

Le soucis provenait de leur registrar. Pour info le registrar c’est l’entité qui vous loue votre nom de domaine (non non ça ne s’achète pas). En téléphonant à leur prestataire ils n’ont rien appris de plus : leur domaine utilisant le TLD (la partie la plus à droite du domaine) .sm, il faut attendre la disponibilité de l’expert *.sm*…

La panne a eu lieu au milieu de la nuit californienne, il a fallu attendre le petit matin que l’expert .sm du registrar américain débarque.

Une fois celui-ci arrivé, il a vérifié et pu déclarer que chez le registrar tout était OK et que du coup il faut remonter au cran au dessus.

Chez le registre

Au dessus de registrar il y a le registry ou registre dans la langue de Yann Le Pentrec.

.sm est donc le TLD de Saint Marin qui se trouve donc en Europe. Le registrar doit donc attendre les heures d’ouverture européenne du registry…

Purism a pris les devants et a contacté en direct le registry pour se rendre compte de la raison de la coupure :

Le registrar n’a pas payé les droits d’enregistrement.

Hahahahaha j’imagine la joie des équipes de Purism lorsqu’ils ont appris cela.

Bref, retour de flamme chez le registrar et tout rentre dans l’ordre.

Conclusion ?

Le choix du registrar a des conséquences direct sur la disponibilité de votre infra réseau.

Vous aurez beau avoir de la redondance de partout via du RAID, des VM en haute disponibilité, toute une infra réseau multi-homée, dans de multiples datacenter, votre nom de domaine et votre registrar seront toujours un SPOF (single point of failure) inévitable.

Purism a fait le choix de prendre un second nom de domaine chez un autre registrar sur un second TLD malheureusement c’est pas parfait : si les gens se connectent à votre domaine principale sans essayer le domaine de secours… bha vous avez pas de secours.

Le choix du registry a des conséquences direct sur la disponibilité de votre infra réseau.

Tout comme pour le registrar, le choix du registry (et donc du TLD) est capital. Prendre une extension juste sur des critères esthétiques peut se révéler une future faille et n’est pas sans conditions d’utilisations mais ça je vous en reparlerai plus tard.

Même en hébergeant ses propres serveurs DNS et en les gérant au poil, on est pas à l’abri d’une connerie des couches inférieures.

Le calendrier fixe ou CAL13

Le Calendrier Fixe ou Calendrier positiviste voir CAL13 est un système système calendaire différent de notre système actuel.

Il repose sur des semaines de 7 jours.

Et sur des mois de 4 semaines.

Donc tous les mois font 28 jours.

L’année est composée de 13 mois.

On rajoute un jour épagonème (wow ce que ce mot est classe ! si seulement je pouvais m’en rappeler pour épater la galerie) du nouvel an qui n’est pas compté dans tout ça et on obtient bien nos 365 jours par an.

À quoi ça ressemble ?

Voilà le calendrier typique de tous les mois. Et vraiment tous les mois.

 Lun   Mar   Mer   Jeu   Ven   Sam   Dim 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

Les avis divergent concernant l’emplacement de ce nouveau mois et même sur le nom a leur donner tout comme le choix du premier jour de la semaine.

Les propositions populaires le placent entre Juin et Juillet et l’appelent Sol. Et la semaine commencerait soit le lundi soit le dimanche.

Avantages

  • On sait tout de suite quel jour est le 24 du mois.
  • Tous les mois ont le même nombre de jours et semaines.
  • On a un jour férien supplémentaire en début d’année.
  • On a un jour férien supplémentaire les années bisextiles.
  • Synchronisation avec le cycle lunaire.
  • Synchronisation avec le cycle menstruel moyen.

Origines

Pas mal de monde souhaite abandonner l’actuel calendrier Grégorien.

La première proposition émanerait de Hugh Jones en 1745. Un certain Auguste Comte aurait émit l’idée en 1849. L’idée est aussi venue à Moses B. Costworth au début du vingtième siècle.

Pourquoi c’est pas adopté ?

Le calendrier actuel marche suffisamment et l’adoption d’un nouveau serait compliqué. C’est l’éternel inertie qui empêche les choses d’avancer. C’est la même histoire pour l’adoption du système métrique aux US.

L’entreprise Kodak l’a tout de même utilisé de 1928 à 1989… ce devait être une sacré galère d’avoir un calendrier interne différent du monde extérieur.

Mais en plus de révolutionner le calendrier actuel d’un point de vue historique il deviendrait difficile dater ce qu’il s’est déjà passé.

Quitte à choisir un nouveau calendrier cessons d’utiliser une pseudo date de naissance (que l’on sait fausse) comme point de référence (non Jésus n’est pas né le 1 janvier 0 (ni le 25 Décembre)). Le Calendrier Holocène se base sur le début de la civilisation humaine comme référence soit environ -10 000.

5ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE et le projet Matrix. Ils sont assez transparent sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


De retour du FOSDEM

Être au FOSDEM 2018 était une tuerie ! On a obtenu pleins de vos retours concernant ce que nous avons déjà accompli et ce que nous visons. Ces retours constructifs nous permettent d’être ce que nous sommes et nous motivent ! Ça nous permet de mieux concentrer le développement. En plus de cela, nous sommes impressionnés de l’appréciation de la communauté du Logiciel Libre. Nous savons que les relations entre les entreprises (même affiliées au Libre, telle que Purism) et la communauté du Logiciel Libre est toujours un équilibre délicat : L’équilibre entre la transparence, l’ouverture et le Libre d’un côté et générer un revenue pour soutenir le developpement de l’autre côté. Vos retours positifs du FOSDEM et l’engouement général pour nos projets sont toujours agréables à entendre.

Nous nous efforçons pour que des produits éthiques basés sur du Libre et de l’OpenSource deviennent une réalité. Ce n’est pas “juste un boulot” pour l’équipe de Purism; nous aimons tous ce que nous faisons et croyons réellement envers le bien fondé de notre but. Vos retours sont le moteur de notre motivation pour travailler encore plus dur. Merci beaucoup !

Avancées logicielles

Comme expliqué précédemment, nous avons reçu des i.MX 6 QuadPlus de test. Donc voilà quelques photos :

Photographie de la board raccordée à un écran

À droite, vous pouvez voir la carte Nitrogen avec la carte modem installée. Sur la gauche un écran affichant la page web Purism et en dessous une fenêtre de terminal d’où a été lancé le navigateur web. Remarquez la carte Micro SD pour une idée de la taille :

Photographie de l'écran avec une carte micro SD apposée dessus

La fenêtre de terminal fait environ la taille de 3 cartes Micro SD ! Ça démontre clairement le fait qu’il y a pas mal de travail nécessaire pour adapter les applications aux écrans à haute résolution et les rendre utilisabless avec les doigts. Dans la photo suivante on a posé 1 €uro et sommes passés sur l’affichage de la console :

L'écran avec une pièce d'un euro sur la console

Concernant le logiciel, nous travaillons à faire marcher la base du framework sur le matériel que nous avons à disposition. Une pièce essentielle est le middleware qui manipule le modem pour passer les appels et envoyer/recevoir les SMS. Pour cela nous nous appuyons sur oFono car c’est également utilisé par KDE Plasma. Nous avons un premier jalon à partager :

Capture d'écran montrant l'envoi d'un sms depuis le prototype

C’est le tout premier SMS envoyé via oFono depuis la carte iMX et le modem vers un smartphone classiques où la capture d’écran a été prise. Nous sommes donc sur le bon chemin ici avec un système qui commence à fonctionner sur de multiples systèmes comme Plasma Mobile ou un future environnement mobile Gnome/GTK+.

Le SMS a été envoyé par un script python utilisant l’API DBus d’oFono. Au préalable, les pilotes kernel pour le modem ont dû être activés puis il faut démarrer ofonod qui autodétecte le modem. Ensuite le modem doit être démarré et connecté (online-modem). Une fois fait, envoyer un SMS se résume à :

  purism@pureos:~/ofono/test$ sudo ./send-sms 07XXXXXXXXX "Sent from my Librem 5 i.MX6 dev board!"

Le script en lui même est très simple et intéressant. Simuler la réception d’un SMS peut également se faire avec une commande de ce genre :

  purism@pureos:~/ofono/test$ sudo ./receive-smsb 'Sent to my Librem 5 i.MX6 dev board!' LocalSentTime = 2018-02-07T10:26:19+0000 SentTime = 2018-02-07T10:26:19+0000 Sender = +447XXXXXXXXX

L’évolution de la fabrication d’appareils mobiles

Nous construisons un téléphone, donc la partie matérielle est un élément crucial. Dans notre dernier article de blog, nous parlions de la recherche de partenaire pour la fabrication. Puisque nous ne fabriquons pas un énième smartphone basé sur un SOC Qualcomm mais que nous partons de zéro, nous nous attelons à effectuer tous les choix de design ainsi que des partenaires de fabrication. Cette phase de travail supplémentaire est entièrement dépendante envers le marché du téléphone mobile et de son évolution de ces dernières années. Voyons ça.

Aux balbutiements des smartphones, le processeur central était séparé du modem cellulaire qui implémentait dans son firmware tous les protocoles réseaux nécessaires pour faire fonctionner l’interface radio − d’abord GSM, puis UMTS (3G) and désormais LTE (4G). Ces protocoles et l’interfaçage radio sont devenus si complexe que la puissance de calcul nécessaire ainsi que la taille du firmware a grossi. Les actuels modems 3G/4G utilisent des firmware de l’ordre de 60 Mo ou plus. Stocker et faire tourner ces firmwares est rapidement devenu problématique (nécessite également plus de RAM).

Les smartphones ont généralement ont généralement un second cœur de CPU pour le système d’exploitation et les applications interagissant avec l’utilisateur. Ça signifie que le smartphone possèdent deux systèmes de RAM, un pour le baseband et un pour le CPU. Cela signifie également deux systèmes de stockage pour le firmware : un pour pour le CPU et un pour le baseband. Comme vous pouvez l’imaginer, faire marcher tous ces composants et faire rentrer tout ça dans un appareil au format restreint nécessite énormément de ressources de dev et de fabrication.

La montée en puissance des smartphones bas de gamme

Il y a énormément de pression sur le prix des smartphones. Sur le marché, on retrouve des smartphones simples à des prix inférieurs à 100$.

L’arrivée des puces combinant le baseband radio et le CPU sur un seul a permis de réduire massivement les coûts. Maintenant, la RAM et le stockage peut être mutualisé. Les deux puces ne sont plus qu’une seule ce qui réduit les coûts de production pour les fabricants de puces ce qui se répercutent sur les fabricants via réduction les nomenclatures (BOM). Ça permet d’économiser une grande puce pour le modem, une puce de flash pour le firmware du modem ainsi que la ram dédiée au modem. Non seulement ça baisse le prix des composants mais également fait gagner de la place sur le circuit imprimmé (PCB) ce qui permet de fabriquer des téléphones plus petits et plus fins. Aujourd’hui, nombreux sont les constructeurs à vendre ce type de chipsets − comme Qualcomm, Broadcom et Mediatek pour en citer quelques-uns.

Ces puces ont radicalement changé le marché du modem baseband. Il était alors courant de trouver sur le marché des modems baseband seuls. Mais depuis la montée en puissance des puces combinés, le besoin de modems séparés s’est drastiquement réduit. On trouve toujours ce type de puces mais celles-ci visent désormais les appareils M2M (machine to machine, pas les appareils pour humains) avec de faibles débits et ne gérant pas la voix ou bien seulement sur des formats inutilisables dans notre cas comme le miniPCIe ou bien M.2. La conséquence directe pour nous est le choix restreint de modem baseband indépendant.

Ce que ça signifie pour les OEM, ODM ou les DIY

Toute cette consolidation du marché a un impact sur l’éventail de choix. Quasiment tous les smartphones actuels des OEM/ODM sont basés sur des puces combinés; c’est tout ce dont ils sont capables. Plus personne ne fait de smartphone à baseband séparée désormais et ceux le faisant ne sont ni OEM ni ODM. Nos choix sont d’autant plus restreints que nous n’utiliserons pas de matériel avec des firmwares propriétaires sur le CPU (ce que nous verrons plus loin). Les fabricants ne sont pas familiers avec les i.MX6 ou i.MX8 et ne veulent pas s’y risquer. Notre liste de partenaires potentiels se réduit donc à peau de chagrin.

Toutefois, nous avons quelques partenaires prometteurs que nous continuons à évaluer. Nous sommes plutôt confiant sur le fait de pouvoir suivre notre cahier des charges initial pour le Librem 5. Nous voulons juste partager avec vous les challenges à surmonter et pourquoi notre équipe est la meilleure pour ce plan. Pour continuer les négociations avec des fabricants et fournisseurs, Purism ira à l’Embedded World, l’un des plus gros salons de l’embarqué se tenant à Nürnberg en Allemagne début Mars. Et comme d’habitude, nous vous tiendrons informé de l’avancement !

Bonnes nouvelles concernant notre prototype

Nous avons patiemment attendu l’arrivée de l’i.MX 8M suite aux prévisions de NXP. En parallèle, nous avons bien avancé sur la partie logicielle en utilisant des carte d’évaluation i.MX6 QuadPlus de chez Boundary Devices, plus précisément la NITROGEN6_MAX (Nit6Qp_MAX) qui est la carte la plus proche de la future i.MX 8M. Nous avons une image Debian Testing fonctionnant sur le banc d’essai pendant que l’équipe de PureOS prépare une image PureOS spécifique pour ARM et ARM64.

Sur ces cartes d’évaluations nous avons toutes les interfaces nécessaires pour le dev :

  1. Wifi
  2. Entrée/Sortie Vidéo
  3. USB en entrée
  4. Console série et socket carte SIM en miniPCIe pour un modem
  5. Sierra Wireless MC7455 3G/4G miniPCIe modem qui est simplement un modem USB au format miniPCIe
  6. Un superbe écran branché via HDMI. 5.5” AMOLED en full-HD nativement en portait.

Cette configuration matérielle nous permet de commencer le dev logicielle en parallèle de l’avancement sur le matériel jusqu’à l’arrivée de l’i.MX 8.

Prochain élément sur la todo-list : passer des appels !


Bon pas énormément d’avancement depuis la dernière fois mais cela dit ils rassurent côté matériel.

Ils veulent suivre le cahiers des charges établi pour le crowdfunding.

On devrait avoir plus d’infos côté software j’imagine. Leur prototype en place ils vont pousser Gnome/KDE pour rendre les interfaces plus doigts-friendly.

Virer les cookies d'un site précis dans Qutebrowser

Je vous ai déjà chanté les louanges de mon cher Qutebrowser mais ce coup-ci on va passer sous le capot.

Alors que je démarre la bête et qu’il restaure la session habituelle (mail, musique, rss et affaires courantes) : SURPRISE ! Mon instance Tiny Tiny RSS m’affiche un message bien moche. En gros soit un header est foireux (j’en doute) soit le cookie envoyé par le navigateur est trop gros et du coup fout la merde. La seconde option est la plus plausible.

Du coup il faut tripotter les cookies de Qutebrowser. Pour l’instant il n’y a pas de moyen officiel de se servir dans la boîte à cookies et d’y piocher allègrement ceux qu’on veux. Donc allons voir un peu les entrailles de la bête pour bouffer ce délicieux cookie.

Personnellement j’utilise le moteur QtWebengine du coup les cookies sont planqués dans une base sqlite dans : ~/.local/share/qutebrowser/webengine/cookies.

On ne peut donc pas ouvrir le fichier avec un éditeur de texte et éditer à l’arrache. Dépoussiérons les vieilles notions apprises lors des cours de Base de Données.

Bon commençons par le début :

sqlite3 ~/.local/share/qutebrowser/webengine/cookie

Là on ouvre la base de données et on se retrouve dans un shell avec des commandes propre à sqlite.

Tiens ! .help apparemment peut nous aider !

Chouette il n’y a pas trop de commandes et c’est plutôt bien expliqué.

Bon à vue de nez on doit pouvoir trouver des infos intéressantes via .tables

Ouai c’est pas mal. On a donc la table cookies et la table meta. Un ptit coup de select * from meta; nous apprend qu’on s’en fout complètement de cette partie et qu’on trouvera ce qu’on est venu trifouiller dans l’autre table.

select * from cookies; et là on voit notre longue liste de cookies ! On va se régaler avec tout ça.

On repére que les lignes contiennent d’abord un nombre. Serait-ce un index ? Puis le nom du site visiblement. Puis d’autres champs pas spécialement compréhensibles.

Comment trouver à quoi correspondent les différents champs ?

On fouille on fouille.

Hmmm

.schema

Haa là c’est plus clair. Le premier champs est donc la creation_utc (donc c’est pas un index), le second host_key et ensuite des champs propre au cookie lui même (comme secure, httponly, last_access_utc, has_expires,…).

Bon bha pour Tiny Tiny RSS je peux dégager intégralement le cookie.

On peut donc lancer un joli :

delete from cookies where host_key = "le_domaine_a_jarter";

Et hop, on relance Qutebrowser pour tester.

C’est bon ça marche \o/

TL;DR

sqlite3 .local/share/qutebrowser/webengine/cookies
delete from cookies where host_key = "your_domain";

Méta-actu du blog

Bon bha voilà après deux mois je fait un petit retour sur les avancées du blog.

Rythme

Je pense avoir réussi à prendre un bon rythme. Ce n’est plus du tout un effort. Ça me vient vraiment naturellement. Je prend vraiment du plaisir à rédiger pour le site.

Distinguer les posts classiques et les fast-posts a été une bonne décision qui m’offre plus de spontanéité.

Layout

J’ai un poil édité le layout du site.

Premièrement j’ai ajouté la date de dernière modification d’un article (s’il y a eu modif). C’est manuel pour le moment mais peut-être qu’à terme je baserai ça sur la vrai date d’édition du fichier.

Ensuite j’ai corrigé les couleurs des fast-posts dans les listes d’articles. Pour celles et ceux ne l’ayant pas remarqué (ouai vous les lecteurs de rss par exemple), les fasts-posts ont une teinte légèrement bleutée. Et bien cette teinte n’était pas appliquée dans les listes d’articles.

Les listes ? Ouai c’était à moitié pété mais j’ai réparé les listes. Quand vous cliquez sur les tags d’articles (genre meta, hugo, blog qu’on retrouve dans ce post), ça vous mène sur une page listant tous les articles de cette catégorie. Et bha vous l’aviez probablement pas vu mais c’était pété et c’est réparé. J’ai donc bidouillé mon thème hugo (ouai c’est pas forcément le meilleur endroit pour faire ça mais bon…). Un jour viendra je publierai mon thème quelque part.

Après j’ai profité du fait que les catégories fonctionnent pour rajouter des tags aux articles existants histoire que la fonctionnalité ait un peu d’intérêt.

CSS

Dans le registre de l’esthétique j’ai fait quelques ajouts/modifs dans le CSS.

Mis un peu de style dans la date de modifs des articles.

J’en ai profité également pour un peu styliser les <hr> qui passent de l’immonde au passable.

J’ai indenté les listes qui ne l’était pas du tout et du coup dépassait légèrement sur la gauche.

J’ai également centré les images qui ne l’était pas et qui du coup dés-harmonisait le tout.

Et enfin j’ai stylisé les <table> qui servira pour un très prochain article.

Comment je m’y prend ?

J’ai toujours un ou deux article sous le coude en attente de modifs avant de parution.

Ça me permet de laisser quelques jours à froid l’article et d’y retourner avant de publier. J’ai du coup, à mon goût, une meilleure finition des articles.

Auparavant, je créais l’article et le publiais dans la foulée. Et quelques heures/jours après je voulais toujours modifier des trucs bénins ou non. En laissant l’article en attente quelques jours et en m’y repenchant dessus avant de le publier, j’arrive à le relire. Ça me permet de voir tout plein de fautes et de tournures de phrases foireuses.

Je rajoute/enlève du contenu qui me convient que moyennement. Et tout ça sans pénaliser le rythme de sortie car je fait un roulement. Bref c’est une ptite astuce qui améliore le contenu sans impact négatif.

Et niveau outils ?

Bon comment se présente une séance de rédaction ?

  1. cd ~/www - c’est là où je stock mes fichiers sources
  2. hugo new posts/xx-titre-du-post.md - pour créer le fichier avec les méta-données pré-remplies
  3. amp - pour démarrer amp et rajouter le texte
  4. hugo server –navigateToChanged -F -D –disableFastRender - en parallèle pour voir les modifs en live
  5. git add content/posts/xx-titre-du-post.md - pour ajouter le nouveau fichier dans le dépôt git du site
  6. git commit !$ -m “[BLOG] ajout article xx titre du post” - pour prendre en compte et mettre un commentaire dans le dépôt git
  7. git push - pour sauvegarder le dépôt et par la même occasion publier le site sur le serveur.

Il y a peu de manipulations et c’est assez rapide.

Et si vous montiez votre blog ?

Amp : un ptit éditeur de texte à la vi

J’utilise vi et ses dérivés depuis si longtemps que j’ai désormais une petite partie de ses commandes inscrits dans la mémoire musculaire. C’est toujours amusant de voir des étudiants qui galèrent et hallucinent devant ma relative agilité alors que je n’ai pourtant qu’un niveau relativement faible en vimerie. Bref ces derniers temps j’ai entendu parlé d’un nouvel éditeur de texte. Amp.

La fiche technique me parle pas mal : léger, taillé pour la console, inspiré par vi, une configuration par défaut moderne et bonus de la hype : c’est en rust.

Du coup ni une ni deux je git clone et je compile.

Arrivée dans amp

Austère comme j’aime :-)

Bon et sinon ? Il va falloir lire un peu la doc parceque là c’est inspiré de vi mais les commandes ne sont pas pour autant du copié/collé de vi. La migration (si elle se fait) va être un peu douloureuse.

Commandes en vrac pour se débrouiller un minimum

  • Ouvrir un fichier : espace puis c’est du fuzzy search à partir du dossier courant.
  • Fermer le fichier actuel q
  • Sauvegarder s
  • Passer en mode insert i
  • Bouger dans le fichier jump mode j
  • Chercher search mode /

Bon je pense que c’est un peu le minimum à savoir dans un tout premier temps.

Bon et ça ressemble à quoi en vrai ?

Et bien à ça :

Capture d'écran de l'interface d'amp

L'article en cours de rédaction (remarquez les fautes)

Bon alors déjà ça ressemble plus à ce qu’on est habitué à voir. Des lignes numérotés, de la coloration syntaxique (hmmm on en reparle un peu plus loin), une barre de status en bas indiquant le mode, le fichier en cours et parfois même d’autres infos.

Pas de quoi casser trois pattes à un canard.

Réapprendre

Bon je l’utilise un peu plus pour voir un peu comment il s’utilise. Je me heurte assez fortement à mes habitudes vimmiennes. Il me faut tenter de ne pas penser à vi mais à cette nouvelle philosophie. Un peu plus de lecture de doc et du coup je me rend compte qu’il faut un peu plus utiliser des modes. Et surtout il faut regarder un peu les raccourcis par défaut.

Command mode

Et là je découvre le command mode (que l’on atteint via 0). Du fuzzy search (oui oui encore !) pour trouver un peu toutes les commandes existantes. Toutes les commandes possibles y sont répertoriées et donc vous pouvez les débusquer assez simplement.

Jump mode

Plutôt que d’ajouter de nombreux mots-clé pour se déplacer, ils utilisent une sorte de hint mode qu’on retrouve dans qutebrowser. C’est à dire que lorsque vous êtes dans ce mode, amp va placer un peu partout des lettres jaunes dans votre texte. Vous entrez les deux lettres placées à l’endroit où vous voulez placer le curseur et hop le tour est joué. Une image ?

Capture d'écran illustrant le jump mode

Avant le jump mode

Capture d'écran illustrant le jump mode 2

Une fois dans le jump mode

Comme vous pouvez le constater il y a les lettres en jaune qui sont rajoutées un peu partout. Du coup il vous suffit de tapper celle qui vous intéresse et hop votre curseur s’y téléporte.

Trouver tous les raccourcis

Dans le command mode entrez application::display_available_commands, ce qui vous listera toutes les commandes et application::display_default_keymap pour afficher tous les raccourcis. Ça devient vite indispensable lorsqu’on débute avec amp.

Bon donc au bout d’une semaine voilà un peu mon ressenti.

Ce qui me plaît

C’est rapide. Bon c’est pas non plus extraordinaire qu’un ordi de 2018 ne rame pas pour éditer du texte mais c’est toujours agréable. Amp s’ouvre direct, les changements de modes sont instantannés, la recherche de fichier est sacrément réactive. Bref c’est snappy !

La config par défaut qui est bien branlée. J’adore vi mais franchement la config par défaut est un peu légère tout de même. C’est quand même à la limite de l’utilisabilité par défaut. Et franchement c’est un peu dommage pour un logiciel qui a le gigantesque avantage d’être dispo sur tous les os que j’accepte de toucher. Là on se retrouve avec de la coloration de base, l’indication des modes clairement affiché, une barre de status utilisable. La base minimale est utilisable directement. Je dois avouer que je sais même pas s’il y a un fichier de configuration. J’ai pas eu besoin d’aller le regarder pour faire mumuse pour le moment.

C’est un projet en début de dev avec du coup beaucoup d’activité sur le repo. De nouvelles features arrivent. Les bugs se font chasser assez vite (et il y a du boulot). C’est assez sympa cette sensation de voir le logiciel s’améliorer chaque jour et de voir ces ptites améliorations continuelles arriver. Et du coup c’est même assez facile de contribuer au logiciel. Sa documentation est pour l’instant… assez spartiate. J’ai d’ailleurs contribué un peu à son amélioration et je continuerai probablement un peu.

De l’audace dans la réinterprétation de vi. C’est déroutant au début et au final on trouve de sacrément bonnes idées. Le jump mode est génial, c’est dans la même philosophie que QuteBrowser du coup je suis pas perdu.

Le command mode est génial. Alors je vais avoir l’air de débarquer mais ce mode est génial et fait cruellement défaut à vi (je sens qu’on va me dire qu’en fait ça existe…). Il paraît que cette fonctionnalité est de base dans emacs mais je n’ai jamais vraiment poussé emacs. Je veux cette fonctionnalité partout maintenant !

Ce qui me plaît moins

C’est un projet en début de dev. Et du coup il y a des bugs. La doc est très légère. C’est un atout mais c’est un peu rebutant pour certains. J’arrive tout de même à m’en accomoder.

C’est pas un clone de vi. C’est également un atout mais un poil problèmatique quand on doit surpasser sa mémoire musculaire et que l’on réflêchit à “comment effectuer telle action ?”. Le truc qui m’irrite le plus sont le G et gg de vi qui ne fonctionnent pas. Je le fait tellement instinctivement que devoir faire autrement me déroute quelques secondes. (J et K si vous les cherchez)

Les quelques bugs que j’ai rencontrés

Bon rien de vraiment insurmontables, certains sont déjà corrigés (ou presques) d’autres sont déjà rapportés. Pas de gros bugs qui crashent (tout du moins j’en ai pas rencontré) mais par exemple, vous ne pouvez sauvegarder votre fichier que s’il y a une ligne vide à la fin.

Ou bien si vous le lancez à la racine d’un dossier contenant beaucoup de fichier, il va tenter de tous les scanner pour faire le fuzzy search par la suite. Il va donc se bloquer pendant quelques secondes (voir minutes).

Un truc plus étrange c’est lorsque le curseur atteind le bas de la fenêtre, la fenêtre ne défile pas et du coup vous n’avez plus qu’à tapper à l’aveuglette. Il vous faut donc scroller manuellement avec , et m. Une habitude à prendre.

Le bug le plus chiant au final c’est la coloration syntaxique comme vous pouvez le voir sur les différents screenshots. Elle est complètement foireuse pour le markdown, à l’agonie pour le xml, le html par contre est presque bien geré. En gros les caractères spéciaux (d’échappement souvent) la mette à la peine. N’étant pas codeur ça ne m’impacte pas trop mais j’imagine que pour quelqu’un vraiment habitué ça peut être complètement paralysant.


TL;DR

Amp est vraiment sympa mais un peu jeune. À surveiller de près. Je pense continuer à m’en servir pour bloguer et autre.

Vi gardera toujours l’avantage d’être disponible partout du moindre busybox à la bonne grosse gentoo des familles… Mais amp peut devenir une alternative sympatoche.

Réponse à Franck Ridel concernant DuckDuckGo

Je viens de lire cet article de Franck Ridel. J’allais initialement commenter sur le JDH mais ma réponse commençait à être un poil long donc je le fais ici.


Quels sont les reproches envers Google ?

Google a un business plutôt efficace d’ammassage et de revente de données privées. C’est un fait établi que je ne nierai pas. Il est également reproché à Google de collaborer avec la NSA (mais pas forcément de bon cœur).

Le soucis de Google est sa position un peu trop omniprésente sur le mobile et l’Internet en général. Éviter Google sur Internet est un sport de haut niveau.

Que propose DuckDuckGo ?

Contrairement à Google leur business model est radicalement différent puisqu’ils ont juste deux moyens de gagner de l’argent. Quelques pubs dans les résultats (uniquement basé sur la recherche en cours) et des liens affiliés.

DuckDuckGo base une bonne partie de sa communication sur le fait qu’ils respectent la vie privée. Ils ne collectent pas de données personnelles ni les revend.

Qu’à déclarer le patron de Qwant à propos de DDG ?

Il a annoncé que DDG hébergeait ses services sur Amazon et que par conséquent les gentils fonctionnaires de la NSA/CIA/FBI peuvent tout simplement aller piocher chez amazon pour récupérer des données.

Ça c’est absolument vrai.

Mais ce qu’il ne dit pas c’est que pour Qwant c’est pas vraiment mieux. Les machines sont probablement hébergées en France. Il doit donc se plier aux lois Françaises et Européennes. Est-ce vraiment mieux ?

Il pousse à l’amalgame pour discréditer DDG. DDG ne s’est jamais vanter de ne pas collaborer avec la NSA (/…) mais juste de respecter la vie privée.

Quelle menace ?

Éric Leandri pousse donc à l’amalgame des menaces concernant la vie privée.

Il faut bien distinguer deux choses :

  • Collecter/analyser/recouper des données et les revendre pour du pognon à n’importe qui.
  • Se faire voler des données issues de recherche web par une organisation étatique.

Ce sont deux concept diamétralement opposés qu’on ne peut pas faire passer pour la même chose.

Premièrement la portée des données n’est pas la même. DDG ne peut donner que quelques mots-clés de recherche, votre adresse IP, et les informations leakées par votre navigateur. Google pour sa part peut y ajouter des informations concernant votre appareil (surtout si c’est un android ou un chromebook), la localisation ultra précise via les AP wifi, les mails que vous avez lu juste avant cette recherche et que vous enverrez ensuite, le trajet que vous avez parcouru ensuite,… bref à peu tout.

Ensuite la personne qui récupère les données… Google se fera un plaisir de revendre vos infos pour quelques menus dollars. Ce qui est reproché à DDG c’est que les données seront récupérés par la CIA/NSA. Je veux pas vous faire peur mais vous passerez pas outre la CIA/NSA dès que vos paquets IP toucheront le sol étasuniens (voir un peu ailleurs aussi).

Et je pose une vraie question :

Est-ce plus grave que mes données soient interceptées par les US que par la France ?

Réellement je ne sais pas quoi penser. Je suis pas spécialement sûr de préférer que mes données soient lus par des services français. Je ne pense pas être particulièrement que les services Français soient moins regardant que ceux US.

Parceque oui, en France aussi on surveille les Internets des français.

Bref Qwant ou DDG ?

Bha ça revient au même.

Le peu de données qu’ils possèderont sur moi iront chez les espions français et usiens mais bon… on peut malheureusement rien y faire.

Et les autres solutions proposées ?

Voyons un peu les alternatives citées :

  • Startpage : Mouai c’est du résultat Google donc ça revient au même niveau interception que Qwant et DDG.
  • Metager : Idem.
  • Searx : À peu près pareil. Surtout si on utilise une instance personnelle et qu’on l’utilise seul ou presque : les données seront d’autant moins anonymes.

DDG n’est pas qu’un méta-moteur

Ils ont démarrés effectivement comme étant juste une surcouche de Bing le côté respect de la vie privée en plus. Ils ont depuis évolués et possèdent un bot crawler pour créer leur propre index désormais. Ils ont donc des résultats bien de chez eux désormais.

−−−−−−−

PS :

J’ai échangé brièvement par mail avec Kapush et après avoir eu son accord, voilà sa réponse :

Lecture intéressante mais qui fait la même omission que l’article initial.

  1. Qwant est hébergé chez Equinix en banlieue nord de paris
  2. Equinix est une entreprise californienne
  3. D’après la loi US, Le patriot act s’applique à toutes les entreprises étatsuniennes.

Conclusion Qwant est soumis à exactement le même problème que duckduckgo au niveau de la capture de données par les agences gouvernementales US.

La subtile différence est que les USA n’ont pas de loi obligeant à la collecte et rétention des données de connexions, tandis que la France en a.

Du coup si duckduckgo fait ce qu’ils disent et ne collecte pas les données sur leurs usagers alors il n’y a tout simplement rien à venir prendre. C’est le modèle utilisé par certains fournisseurs de VPN basés aux USA.

Dans le cas de Qwant pour le moment ils jouent sur le fait que selon eux ils ne sont ni éditeur, ni hébergeur pour contourner l’obligation de collecter/conserver les données. Comme expliqué dans cette interview: https://www.nextinpact.com/news/97572-dans-coulisses-qwant-interview-deric-leandri.htm

Aussi intéréssant à mentionner par rapport à la pique “duckduckgo c’est rien qu’un métamoteur pour bing”, comme tu le fait remarquer ils ont leur propre crawler et ils utilisent aussi d’autres source mais surtout Qwant aussi utilise Bing https://www.nextinpact.com/news/103652-les-liens-moteur-qwant-avec-microsoft-bing.htm

3ème article d'avancement du Librem 5

Ceci est une traduction libre de cet article concernant les avancées de la société Purism concernant le smartphone Librem 5. L’article original est sous licence CC BY-SA 4.0 tout comme ma traduction.

Ce smartphone a bénéficié d’un crowdfunding et a pour but d’apporter une alternative à Android en proposant un OS basé sur Linux et toutes les briques logiciels opensource qui vont avec. Ils collaborent avec le projet Gnome, le projet KDE et le projet Matrix. Ils sont assez transparent sur leurs avancées et sont reconnus pour leur ligne de laptops.

Bref voilà l’article :


Le Librem 5 et l’actualité récente

Ces derniers temps, pas mal de news assez alarmistes ont fait l’actualité. De nombreuses failles de sécurité ont été trouvées au seins même des processeurs. Elles ne touchent pas uniquement Intel mais également en partie AMD et quelques cœur ARM. En même temps, certains de nos contributeurs ont fait entendre leurs inquiétudes à propos du futur de NXP (fabricant du processeur envisagé pour le Librem 5) en vue d’une potentiel acquisition par Qualcomm. Certains se sont donc demandés : “Est-ce que le Librem 5 est affectés par ces bugs également ?” et “Est-ce que Purism parviendra à obtenir des puces i.MX 8 comme prévu ?”, donc répondons à ces interrogations.

Épargné par Spectre/Meltdown

Pour le moment nous sommes quasiment sûr d’utiliser une des puces de la nouvelle branche i.MX 8 de chez NXP pour le Librem 5. Plus précisément nous nous orientons vers l’i.MX 8M qui comprends 4 cœurs ARM Cortex A53. Selon ARM, ces cœurs ne sont pas affectés par les failles Spectre et Meltdown, ce qu’ARM a résumé dans leur bulletin de sécurité.

Donc pour le moment on est presque certains que le Librem 5 ne sera pas affecté cependant nous continuerons à surveiller de près la situation car des nouveautés font surface régulièrement. À ce propos nous sommes heureux de vous annoncer que nous avons un nouveau consultant pour assister notre équipe sur les questions de sécurité du matériel ansi que des questions tel que : “Est-ce que le CPU est affecté par Spectre/Meltdown ou non ?”.

La possible acquisition de NXP par Qualcomm : pas un soucis

Les rumeurs comme quoi Qualcomm serait intéressé par un rachat de NXP courent depuis quelques temps. Comme nous allons utiliser une puce NXP comme processeur principal (de la famille I.MX 8) nous sommes au courant et nous intéressons de près à cette histoire.

Qualcomm est leader pour les gros volumes de puces grand public alors que NXP vise le marché industriel à faible volume. Il en résulte une approche radicalement différente concernant le support, particulièrement du logiciel libre. Alors que NXP est habituellement tourné vers l’ouverture de ses spécifications techniques, Qualcomm est au contraire fermé. Cela se reflète particulièrement sur le support du kernel Linux des puces des constructeurs respectifs. La question est : Comment est-ce que le support des logiciels libres et la disponibilité des informations concernant les SOC NXP perdurera s’il y a acquisition ?

Tout d’abord, il est peu probable que le deal est lieu. Qualcomm a vécu une année 2017 plutôt rude donc ils ne sont pas forcément dans une position financière leur permettant d’acheter une autre entreprise. Ensuite, il y a également des rumeurs comme quoi Broadcom pourrait en fait racheter Qualcomm. Après, les organisations mondiales de contrôles anti-monopole mènent des investigations afin d’approuver ou non une fusion. Il y a à peine quelques jours, l’organisme de contrôle des monopoles européen a accepté une fusion mais avec de lourdes conditions. Par exemple, Qualcomm devrait donner de nombreuses licences gratuitement concernant certains de ses brevets, etc. Enfin, NXP est tenu par de nombreuses obligations : la façon dont NXP vise les petits et moyens clients les rendant dépendants; changer radicalement d’attitude blesserait ses clients et porterait lourdement atteinte à la réputation de Qualcomm et entraînerait également une perte de part de marché.

On imagine donc que la fusion n’aura pas lieu de si tôt et n’impacterait probablement que peu les i.MX 8. Si la fusion s’opérait, seuls les futurs produits seraient impactés.

Le développement

En plus de travailler à l’obtention de kit de développement i.MX6QuadPlus pour travailler dessus, l’équipe téléphone est activement en train de chercher et évaluer les logiciels qui formeront la base de nos développements pour les prochains mois. Nous sommes parfaitement conscient de l’énorme quantité de travail à accomplir et des responsabilité que nous endosserons. Parmi nos recherches, nous avons contacté l’équipe Gnome human interface design team avec qui nous avons discuté design et implémentation. Par exemple, nous avons commencé à implémenter un widget prototype qui permettrait d’adapter bien plus simplement l’interface existante des applications desktop vers le téléphone voir d’autre style d’interface utilisateur. Nous aimerions parvenir à faire en sorte qu’une application puisse s’adapter à l’appareil sur lequel elle tourne. C’est toujours un objectif lointain, mais on y travaille ardemment. Nous rencontrerons également les membres de Gnome au FOSDEM pour discuter de possibles évolutions et objectifs de design ainsi que de possibles collaborations.

Le travail de dev pour KDE/Plasma sera également fait par leur propre équipe d’interface. Purism supportera leurs efforts en leur fournissant du matériel et de la documentation au fur et à mesure de l’avancement du téléphone. Cela permettra à KDE/Plasma de fonctionner normalement sur le Librem 5 dès la sortie. Pour mieux comprendre l’avancement avec Gnome et KDE, vous pouvez consulter cet article de blog.

Nous avons également testé et évalué différents compositeur et interface de bureau que nous pourrions utiliser comme interface pour le téléphone. Nous visons un environnement uniquement Wayland pour se débarrasser de l’héritage X11 autant que faire se peu afin de profiter d’une meilleure sécurité et de meilleures performances. Après discussions avec les mainteneurs Gnome des interfaces et compositeurs, nous ferions peut-être mieux de créer un nouveau compositeur (utilisé et soutenu par Gnome) afin d’éviter le fardeau d’X11.

Du côté application, nous avons créée une impressionnante liste d’applications que nous pourrions modifier pour permettre au téléphone d’atteindre les objectifs de la campagne (de crowdfunding) et nous avons plus restreint les piles de middlewares. Nous sommes toujours en cours de réflexions/évaluations donc nous n’entrerons pas plus dans les détails pour le moment. Nous aborderons bien sûr tout cela un peu plus tard dans un futur article.

Rencontre avec les fabricants de puces

Comme le choix du CPU est quasiment pris, nous allons rencontrer NXP et d’autres fabricants de puces à l’Embedded World À Nürnberg en Allemagne à la fin du mois. C’est très encourageant car cela fait maintenant des mois que nous travaillons à établir des liens direct avec NXP. Nous allons enfin rencontrer nous rencontrer en personne lors de la conférence. La recherche pour le design et les partenaires de fabrication prend plus de temps que prévu. Notre équipe d’ingénieurs hardware et notre équipe logiciel (particulièrement bas niveau et ingénieurs kernel) ont commencé à créé une nomenclature (Bill Of Material) matériel et également un “plan” d’un éventuel PCB. Mais il s’avère que beaucoup de constructeurs rechignent travailler avec des i.MX 8M car c’est un CPU/SOC tout nouveau. Nous avons cependant de prometteuses pistes et de bons contacts donc nous explorerons cela.

L’équipe Librem 5 sera au FOSDEM

Au fait, une bonne partie du staff de Purism sera au FOSDEM ce week-end du 3 au 4 Février. En plus des équipe design et marketing, les équipes PureOS et Librem 5 seront également là. Nous aimerions vous rencontrer ! Des représentants Purism seront là pour répondre à toutes vos questions et porteront un tshirt Purism pour que vous les reconnaissiez facilement.


Et voilà :-)

Bref, ils rassurent à propos des failles Spectre/Meltdown.

Ce qui est intéressant c’est qu’ils expliquent un peu plus leurs collaborations avec Gnome et KDE. Ils adoptent un développement bien plus ouvert que ne le fait Google avec Android. C’est dommage que cet article ne parle pas de Matrix mais ça sera probablement pour une prochaine fois.

Comme d’habitude avec ce genre de projet, on apprend que ça prend un peu plus de temps que prévu sur le plan matériel mais visiblement leur choix de cpu est à peu près arrêté. Bref ça avance !

Multi layout claviers simultanés pour Xorg

J’aime beaucoup les claviers. Et il m’arrive régulièrement d’en brancher plusieurs sur l’ordinateur… en même temps. Ça n’a que peu d’intérêt mais j’aime bien. Ma petite collection grandit petit à petit. Mon clavier principal est en bépo légèrement trafiqué tandis que la plupart de mes autres bestiaux sont en azerty plus traditionnel voir quelques-uns en qwerty. Du coup j’ai configuré Xorg pour avoir une configuration un peu hors du commun :

  • Mon clavier traditionnel est en bépo, azerty et qwerty
  • Les autres claviers sont en azerty, bépo, qwerty
  • La touche Ctrl droite sert de touche Compose
  • Ctrl-Alt-Backspace tue la session Xorg
  • Maintenir Shift-droite et Shift-gauche simultanément change de disposition

Voilà le cahier des charges que je voulait.

Bon du coup pour faire ça on va éditer le fichier /etc/X11/xorg.conf . Certaines distributions ont remplacées ce fichier par un dossier contenant plusieurs fichiers. Dans ce cas cherchez quel fichier contient ce qui a attrait à evdev…

Section "InputClass"
    Identifier "evdev keyboard catchall"
    MatchIsKeyboard "on"
    MatchDevicePath "/dev/input/event*"
    Driver "evdev"
    Option "XkbLayout"      "fr,fr,us"
    Option "XkbVariant"     "oss,bepo, "
    Option "XkbOptions"     "compose:rctrl,terminate:ctrl_alt_bksp,grp:caps_toggle"
EndSection

Section "InputClass"
    Identifier "Custom Keyboard"
    MatchIsKeyboard "on"
    MatchDevicePath "/dev/input/event*"
    MatchVendor "Lord_Corp"
    Driver "evdev"
    Option "XkbLayout"      "fr,fr,us"
    Option "XkbVariant"     "bepo,oss, "
    Option "XkbOptions"     "compose:rctrl,terminate:ctrl_alt_bksp,grp:caps_toggle"
EndSection

Voilà tout.

Comment ça marche ?

Et bien Xorg est composé de multiples “drivers” ou modules, dont un nommé evdev qui est chargé de scanner tous les appareils d’entrées et de les configurer. Du coup il va piocher dans /dev/input/ et va regarder chacun des fichiers présents correspondants à tous les appareils d’entrée détectés par votre kernel.

En fonction du type d’appareil (clavier/souris/tablette tactile/…), il va appliquer des configurations différentes. Il fait cela via les règles de type catchall.

Par chance on peut lui dire d’appliquer des règles différentes à des appareils spécifiques en rajoutant des conditions pour match. Dans mon cas, il recherche Lord_Corp dans le champs Vendor fourni par l’appareil. Donc vous pouvez mettre le petit nom de votre appareil à vous.

Comment je trouve le Vendor de mon appareil ?

Facile : xinput –list –long

Filmmenu, un ptit script pour lancer un film

Un ptit article rapide aujourd’hui pour vous présenter filmmenu. J’ai un NAS à la maison avec pas mal de disques durs et du coup pas mal de partitions. J’ai pas fait de RAID dessus (pas besoin) ce qui fait que mes données sont éparpillées entre les différentes partitions.

Toutes les données sont bien rangées dans un disque différent sauf les films qui sont répartis sur plusieurs partitions. Du coup quand je cherche un fichier particulier je sais jamais trop où le chercher. Je me suis donc fait un ptit script.

#! /bin/sh
DB="/var/db/filmmenu"
if [ $(mountpoint -q /mnt/bender) ]
then
        timeout 3 i3-nagbar -m "/mnt/bender n'est pas mount ! Un ptit coup de sshfs au préalable"
        exit
fi
if [ -r $DB ]
then
        if [  $(date -r "$DB" +%s) -lt $(date +%s --date '45 days ago') ]
        then
                timeout 4 i3-nagbar -t warning -m "DB de plus de 45 jours, update !"
        fi
                exec mpv "$(cat "$DB" | dmenu -i -l 10 -lh 40 -fn 'Droid Sans Mono-15')"
  exit
else
        printf "Création de la DB\n"
        timeout 3 i3-nagbar -t warning -m "Création de $DB, on vous prévient quand c'est fini"
        find /mnt/bender/stockage/*/films/ > "$DB"
        timeout 3 i3-nagbar -t warning -m "$DB créé, c'est tout bon. Vous pouvez relancer la commande"
fi

Je lance ce script avec un ptit Alt è dans i3. Voilà ce qu’il fait :

Mountpoint vérifie tout d’abord que le NAS est bien mount au bon endroit. Si c’est pas le cas il pond un i3-nagbar qui est un programme lié à i3 qui met une barre en haut de l’écran contenant le message qu’on lui donne.

Ensuite on teste l’existence du fichier contenant la liste des films. S’il existe on teste voir s’il a été mis à jour il y a plus de 45 jours.

En fonction de ça on créer le fichier ou bien on le met à jour en lançant un simple find qu’on balance dans un fichier texte sinon, on le donne à manger à dmenu qui créer une barre permettant de sélectionner le film à lire. Et enfin mpv récupère lit le fichier voulu.

Rapide & Simple

Mozilla annonce commencer à restreindre les nouvelles fonctionnalités aux pages chargées via HTTPS

Dans sa quête pour un web plus sûr, Mozilla vient d’annoncer qu’une bonne partie des nouvelles fonctionnalités de Firefox ne seront utilisables qu’uniquement sur des pages web accédées via HTTPS.

Autant je suis favorable à l’utilisation de HTTPS au maximum, autant ce n’est pas forcément possible de l’utiliser absolument partout.

Il existe de nombreux cas où HTTPS n’est pas utilisable. Trois exemples qui me viennent mais on doit pouvoir en trouver d’autres :

  • Si le serveur n’a pas accès à Internet, faire de l’HTTPS est compliqué voir impossible. (Sisi on peut faire du web sans être sur Internet)
  • Si la machine cliente n’a pas moyen d’être à la bonne date l’HTTPS n’est pas possible non plus. (de nombreux appareils n’ont pas d’horloge interne fonctionnant sans courant comme les raspberry)
  • Quand on se connecte à une machine plus très à jour avec une version pas si vieille que ça d’openssl mais tout de même trop vieille et donc incompatible…

C’est d’ailleurs pour cette raison que contrairement aux recommandations actuellement à la mode, je ne redirige pas le trafic HTTP vers son équivalent HTTPS. C’est un choix que je laisse au client. Au visiteur de choisir s’il veut bénéficier de plus de sécurité ou non.

Bref j’espère que Mozilla n’ira pas plus loin en retirant des fonctionnalités actuelles aux pages non sécurisées.

Le respect des licences logicielles est moins fort que le buzz nostalgique du rétro gaming

Pouwah ! Quel titre !

Cette semaine le CES a trusté mes RSS. Tel constructeur qui fait une démo d’un prototype bancal, Netflix qui s’invite avec une fausse startup pour faire de la pub, la FrenchTech qui cherche désespérémment à parader… le CES habituel. Et dans l’amas de news, il y en a une qui m’a titillé. Une compilation des news au sujet de l’ultra Gameboy.

Sympa non ? Tout ces sites professionnels tenus par des journalistes. C’est pas un joli boulot qu’ils ont fournis là ?

Bon alors déjà c’est rarement relayé mais ce qui a été montré n’est qu’un prototype. Les specs annoncés n’étaient pas celle présentées dans la bête mais peu de site l’ont signalés. Ensuite le nom. Presque aucun site n’a pris la peine de dire que Ultra Gameboy n’était pas le nom définitif. Faut pas se voiler la face, Nintendo n’autorisera pas qu’on galvaude son nom aussi facilement.

Ce que je trouve encore plus dommage c’est qu’aucun site n’a jugé bon de nous dire comment fonctionnait la bête ! Et c’est pourtant un poil assez crucial pour du matos. Est-ce un pcb de gameboy originale recyclé ? C’est du fait maison parfaitement compatible avec la Gameboy originale ? Ou bien (et c’est ce que je pense) est-ce de l’émulation ?

Pour info le constructeur Hyperkin commence à se faire un ptit nom avec ses appareils. Mais il faut aussi voir qu’ils se font un ptit nom au sein de la communauté de l’émulation pour leur non respect des licences Opensource auprès de Retroarch comme on peut le voir dans ce blog post et sa suite.

Retroarch est un projet opensource d’agglomérats d’émulateurs opensource. Le but est de fournir un système multi-plateforme (ça tourne sur pas mal de consoles modernes, sur un peu tous les OS PC modernes (ou non)) pour proposer une interface unifiée vers de multiples émulateurs appelés Cores. C’est un système modulaire très performant avec une communauté vraiment vivante faisant grandement évolué la scène retrogaming en améliorant énormément tout l’écosystème des émulateurs mais j’en parlerait plus une autre fois. Bref c’est un acteur majeur du retrogaming opensource. Pas des rigolos sortis de nulle part.

Et bien les pauvres gens de ce projet en appellent aux journalistes pour médiatiser leurs déboires avec les nombreux petits constructeurs sortis de nulle part s’amusant à vendre du matériel utilisant leur code illégalement. Bien que lancé fin Décembre 2017, il n’y a pas eu beaucoup de de relais dans la presse comme on peut le voir avec le battage médiatique de l’Ultra Gameboy. La presse spécialisée s’est jetée en masse sur l’info publiée par Gizmodo pour ne faire que citer les mêmes maigres infos en boucle sans jamais etayer leurs articles, sans s’être un poil informé sur le constructeur ou sur les entrailles de la bête. Ça ne prend guère plus de quinze minutes pour un utilisateur de moteur de recherche… BRAVO la presse informatique…

Bon voilà pour le coup de gueule contre tous les sites de merdes qui ne font que ré-enrober des news pour publier au plus vite (et ça ne va pas s’améliorer avec tous les bots de rédaction de news)(sur le coup Ars Technica m’a déçu, eux qui font un travail vraiment plus poussé habituellement).

Maintenant pour ceux que ça intéresse un peu, sachez donc qu’Hyperkin a très probablement adoré cette couverture médiatique à moindre frais mais à mon avis tente de la jouer plus réglo ce coup-ci : - Ils sont bien entendu au courant des griefs de Retroarch à leur sujet. Je ne suis pas au courant de toute l’affaire ou autre mais je pense que Ultra Gameboy était probablement le nom du projet interne qu’ils ont utilisé mais que le produit final s’apellera autrement pour pas fâcher Big N (parce que fâcher une communauté de dev sans le sous on s’en fout mais une grosse boîte populaire remplie de pognon c’est ptet moins le fun). - En cherchant quelques minutes de plus, on peut voir qu’Hyperkin s’est payé une licence Higan qui est un multi-émulateur développé par Byuu et publié sous GPL-v3.

Bref je vais tabler sur la bonne fois d’Hyperkin et tout foutre sur le dos des journalistes.

PS 18/02/2018 :

Un article intéressant qui aborde ça chez Eurogamer.

PS 09/03/2018 :

Bon bha on a du nouveau sur cette affaire. Donc en gros l’entreprise qui revend les émulateurs au fabricant est Datapower Development Limited. On apprend aussi que l’arrête de la revente de snes9x au profit de Higan par Byuu est pas innocente.

TwinAphex (le fameux Mr Matteis, dev de snes9x entre autre) aurait discuté avec Byuu le dev de Higan. Ces personnes se connaissent plutôt bien car ils collaborent régulièrement auprès de leurs différents projets opensource. Et donc Byuu s’est vu proposé un contrat d’utilisation de Higan que financièrement il ne pouvait refuser mais il a du coup décidé de forcer Datapower Dev… à ne plus jamais utiliser snes9x.

Bref, des retournements de situations ! Vivement le prochain épisode.

La mort de Vimperator : comment meurt un logiciel opensource

Et voilà que Vimperator vie ses derniers instants. Le changement d’API de firefox lui aura été fatal. Je sais pas pourquoi mais il y a un (tout) petit pincement au cœur quand je vois cette fermeture de l’issue github qui aurait pu le sauver.

C’est absolument pas une surprise. Ça fait plus d’un an qu’on est au courant que ça va mourir mais voilà c’est fait. Du coup la seule cérémonie consiste en la fermeture d’une issue. Le repo sera toujours là pour les archives du web. Un témoignage d’une belle époque.

Mais bon qu’on se rassure son héritage est bel et bien vivant. Toute une petite communauté d’addons similaires s’est créé et prend son envol. Qutebrowser profite de la fin de Vimperator pour récupérer de nombreux utilisateurs. Tout ne sera donc pas en vain et au final l’écosystème complet n’est donc que plus fort. La mort d’un logiciel libre peut donc être un bon engrais pour les autres. Bon bha au final c’est pas si triste alors !

Utiliser ZSH à la façon de VI en réduisant les inconvénients

Vi et Emacs ont inspiré et inspirent encore pas mal les devs car ils ont posés deux bases d’expériences utilisateurs qui ont depuis le temps prouvé leur efficacité. Ils s’appuient tous les deux principalement sur l’utilisation du clavier mais abordent le problème différemment.

  • Emacs s’appuient sur des raccourcis claviers nécessitant tous pleins de doigts pour appuyer simultanément sur diverses touches : Ctrl-Alt-Shift-Altgr-x …
  • Vi lui utilise des modes : un mode pour entrer des commandes, un mode pour écrire, un mode pour faire le café …

Ce sont donc deux approches différentes mais pourtant efficaces. Il est par contre assez difficile de passer de l’une à l’autre car elles nécessitent tout de même un temps d’apprentissage et d’adaptation assez long, bien que l’on puisse se contenter de nager en surface et donc de ne pas en profiter à fond.

Bref généralement au bout de quelques années de pratiques on acquière pas mal de mémoire musculaire et on se retrouve parfois frustré de pas pouvoir utiliser ça partout. Par exemple je ne supporte plus d’utiliser un navigateur web qui ne suit pas la philosophie de vi (d’où ma migration vers qutebrowser). Mais du coup : saviez-vous que même votre shell préféré (ZSH ! mais bon bash aussi et fish aussi…) peut mimer vi.

ZLE KEYMAP VIINS

L’avantage du mode vi est que l’on va pouvoir éditer les lignes de commandes comme dans vi, c’est à dire utiliser la plupart des raccourcis de vi en mode normal : x pour virer un caractère, r pour remplacer un caractère, ciw pour changer le mot actuel… pleins de raccourcis permettant de gagner pas mal de temps.

ZSH est modulaire. Le module s’occupant de la ligne de commande est ZLE : ZSH Line Editor. Et ce module utilise des keymaps qui sont des ensembles de raccourcis claviers déclenchant des actions. Il existe un keymap emacs, des keymaps vi (qui correspondent aux différents modes) et un keymap safe qui n’est pas éditable/supprimable. Il vous est possible d’en créer d’autres ou bien juste de modifier les existants. Bon du coup le but du jeu va être de foutre le keymap par défaut de ZLE en viins (vi insert). Donc dans /etc/zsh/zshrc et on y colle un

bindkey -v 

Et voilà c’est fait vous êtes désormais en mode viins par défaut. Bon du coup si vous appuyez sur ECHAP, vous vous retrouverez dans le mode normal de vi.

Améliorations

Le premier truc un poil chiant c’est que le changement de keymap ne se fait pas instantanément. Il y a un timeout de 0.4s qui est un poil trop long. Pour le réduire, il vous suffit d’exporter la variable KEYTIMEOUT à 1 par exemple pour avoir que 0.1s d’attente lors d’un changement de keymap, ce qui est devient de suite plus tolérable.

Un autre truc un peu chiant c’est qu’on ne sait pas dans quel mode on se trouve mais j’ai trouvé une astuce sur le blog de Doug Black qui consiste à faire une petite bidouille qui va bien pour afficher le mode Normal. Je l’ai à peine modifié pour aller dans mon /etc/zsh/prompt.zsh :

function zle-line-init zle-keymap-select {
    VIM_PROMPT="%{$fg_bold[yellow]%} [% NORMAL]%  %{$reset_color%}"
    RPS1="${${KEYMAP/vicmd/$VIM_PROMPT}/(main|viins)/} $LAST_COMMAND_DURATION s"
    zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select

Quelques explications : déjà RPS1 est la variable contenant le prompte de droite. D’abord on a défini la variable VIM_PROMPT qui définit l’affichage désiré pour le mode normal (en jaune c’est sympa) puis une double substitution made in zsh qui remplace le nom du keymap par la variable VIM_PROMPT sauf si le mode actuel est main ou viins. Je colle ensuite $LAST_COMMAND_DURATION qui est la variable qui contient la durée de la dernière commande exécutée.

Adaptons à nos besoins

Du coup là on a pas fait grand chose de bien méchant. On a choisi un keymap et modifié le prompt, rien de bien tordu. On peut tout de même apporter quelques modifications pour ajouter de nouveaux raccourcis. On va donc en profiter pour virer les ptits inconvénients du keymap de vi : les emmerdes pour se déplacer normalement avec les flèches et plus.

Retournons dans /etc/zsh/zshrc et ajoutons/trafiquons quelques raccourcis.

#Pour pouvoir utiliser les flêches haut et bas pour chercher les commandes dans l'historique
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
#Pour pouvoir utiliser Orig et End sur le clavier pour aller en début/fin de ligne (plus pratique)
bindkey "^[[7~" beginning-of-line
bindkey "^[[8~" end-of-line
#Pour utiliser les flêches de gauche et de droite pour se déplacer normalement
bindkey "^[[D" backward-char
bindkey "^[[C" forward-char
#Pour utiliser Suppr
bindkey "^[[3~" delete-char

Et voilà vous avez des vimmeries ainsi que des raccourcis plus classiques sur le même keymap.

Une faille de sécurité béante touchant tous les cpu Intel

Les monocultures ont de nombreuses fois prouvées qu’elles étaient un risque et pas uniquement dans l’informatique. En agriculture c’est pareil… faire pousser uniquement une seule espèce de plante est risqué. Le jour où une maladie ou bien un insecte/animal un peu gourmand s’abat sur vous, vous perdez absolument tout. Bha là c’est pour les processeurs qui prennent cher.

Monopole d’Intel

Depuis plusieurs décennies Intel a une position de leader qui par moment ressemble à un monopole. C’est le cas depuis dix ans. Alors qu’AMD sort enfin la tête de l’eau en 2017 avec sa nouvelle architecture Ryzen après près de dix ans de désert, Intel est quasiment seul sur le marché des serveurs (gamme Xeon) et ne laisse que des miettes à AMD sur le laptop/desktop. Et d’ailleurs depuis 6 ans, les gains de perfs des CPU Intel sont vraiment faibles. Mon ordinateur actuel a déjà 7 ans et n’est toujours pas vraiment dépassé (mais bon c’est un autre débat). Mais du coup ce monopole est donc une monoculture des cpu à architecture amd64.

Et donc ?

Bha apparemment il y aurait une faille de sécurité assez sévère trouvée très récemment. Les informations ne sont pas encore complètement publiée de partout, il y a un embargo. En gros elle impacterait tous les ordinateurs embarquant un cpu Intel récent (de ces dix dernières années).

Cette faille serait carrément dans l’architecture même du cpu. Un correctif logiciel pour le kernel Linux existe mais le fix ne serait pas sans conséquences. On parle de pertes de performances de 5 à 50% sur certains syscalls.

Les informations complètes seront diffusées un peu plus tard une fois que les correctifs auront été poussés un peu partout.

L’information comme quoi AMD ne serait pas impacté est arrivé dans un second temps (un second patch à vrai dire).

Logo officiel de l'attaque Meltdown

Mais c’est grave ?

Ouai vraiment grave. Cette faille serait exploitable à pleins de niveaux. Les systèmes virtualisés sont également impactés. Même du javascript dans un navigateur pourrait faire des saloperies apparemment.

Du coup bha même une machine perso serait exploitable via une page web. Tous les hébergeurs de machines virtuelles sont probablement en train de flipper et patcher à droite à gauche.

Comme dit précédemment pour l’instant on a pas tous les détails mais comme à chaque fois, on ne sait pas si la faille est déjà utilisée dans la nature.

Logo officiel de l'attaque Spectre

Et du coup faut faire quoi ?

Bha dès que le patch arrive pour votre OS, vous l’installez sans réfléchir.

Et pour la prochaine fois, vous prenez du AMD histoire de renverser un peu le monopole d’Intel. Leur nouvelle gamme fait jeu sensiblement égal avec Intel voir se débrouille mieux en nombre de cœurs.

Un peu de lecture supp :

Quelques liens pour approfondir le sujet. Pas de français pour le moment.

PS :

Ha bha visiblement il y a des soupçons de délit d’initiés chez Intel qui monte : le PDG d’Intel aurait revendu le maximum d’actions il y deux semaines alors que l’affaire n’était pas encore médiatisé. Il y a des risques qu’aujourd’hui Wall Street soit mis au courant de l’histoire et que l’action Intel baisse considérablement.

Pour info, Windows est également touché et va être patché aussi.

Pour l’instant ce ne sont que des suppositions de failles mais de nombreux indices étayent l’histoire. L’embargo sera levé ce jeudi midi.

PS2 :

4 Janvier 2018 : Bon bha on a un nom et un site : L’attaque se nomme Meltdown et Spectre et son site confirme à peu près tout ce qu’on savait sauf que c’est toujours vague concernant les processeurs affectés. Apparemment AMD pourrait être victime de la faille ansi qu’ARM. En fait la plus grande surprise vient du fait que c’est deux failles.

PS3 :

5 Janvier 2018 : On sait également que c’est effectivement exploitable via javascript et que les navigateurs s(er)ont patchés pour limiter les risques mais pas complètement supprimmer le risque. Bref, c’est la merde.

Doom et ses Mods

Voilà Noël approche et du coup probablement quelques jours de congé/wacances. Quel est le meilleur passe-temps en ces périodes de mièvreries et chansons ringardes ?

Jouer à Doom en 2017

Doom a toujours été un jeu à part pour moi. Il y assurément une part de nostalgie car c’est l’un des plus anciens dont je me souvienne. J’y ai joué très jeune. Et je n’ai jamais cessé d’y revenir de temps à autre. Doom 1 et Doom 2. Jusqu’à il y a peu j’avais jamais fait les extensions officielles. Je n’avais non plus jamais été voir du côté de la scène des mods. Et OMG quelle erreur. Il y a une cargaison énorme de contenu fait par des fans. La qualité est variable mais l’avantage d’un jeu aussi populaire et aussi moddable, c’est qu’au bout de vingt ans on trouve beaucoup d’excellent contenu. Que ce soit des maps par-ci par-là ou bien carrément des TC (Total Conversion) ou des modifications plus subtiles.

Le jeu jouit d’une popularité certaine, d’une part pour ses qualités intrinsèches de jeu vidéo (gameplay ultra nerveux, ambiance sympa, feeling addictif,…), mais également pour son côté technique. À sa sortie le jeu était une claque graphique qui poursuivait la tradition naissante d’Id de faire des jeux techniquement à la pointe. Mais en plus de ça, ils ont libéré le code du moteur du jeu quelques années plus tard. Et ont toujours poussé le développement de mods.

Quand on démarre Doom, on sait que dans les trente secondes qui suivent on sera dans la partie en train de s’amuser. C’est un plaisir instantané, on se fait pas trop chier avec une histoire, des temps de chargements, des mécaniques de gameplay faussement poussées. Tout est fait pour s’amuser tout de suite. L’action est frénétique et le feedback direct. Avec l’âge j’ai de moins en moins de temps à consacrer aux jeux-vidéos du coup quand j’ai peu de temps j’aime pouvoir tout de suite me retrouver dans cet état d’esprit. Et avec l’opulence de contenu additionnel gratuit et de qualité c’est le summum.

Entrée de NERVE avec Project Brutality et l'UVD

Entrée de NERVE avec Project Brutality et l'UVD

Les moteurs

Le moteur ayant été opensourcé, il y a eu des tas de réimplémentations du moteur. Certaines plus poussées que d’autres. Quelques-unes en ont profité pour pousser de nouvelles fonctionnalités d’autres s’évertuent à rester le plus près possible du moteur d’origine s’amusant même à reproduire les bugs. Petit tour non exhaustif des moteurs libres existants :

  • ZDoom et GZDoom sont les moteurs les plus populaires. Le gros de la communauté s’est attroupé sur eux. GZDoom a poussé le moteur vers OpenGL (le moteur d’origine n’utilise que le cpu d’où le rendu particulier). Ils sont parmi les plus compatibles avec Doom et les mods de la communauté.

  • Zandronum est un fork de GZDoom (qui est aussi un fork de ZDoom) qui a poussé le côté multiplayer un peu plus que les autres. C’est le second plus populaire. De par sa popularité, sa compatibilité avec les mods est excellente (mais pas parfaite non plus). Je l’utilise de temps à autre pour le multiplayer.

  • Doomsday Engine est un moteur un peu différent des autres. Il propose une interface toute mimi moderne bien foutue toussa. Après c’est pas spécialement ce que je recherche mais ça peut plaire.

  • Chocolate Doom est le moteur le plus proche de l’expérience originale. Perso ça ne m’intéresse pas spécialement mais si vous voulez une expérience des plus authentique c’est celui-là qu’il faut prendre.

Voilà pour le tour, j’ai principalement choisi GZDoom. J’aime le fait qu’il tente de moderniser le feeling sans pour autant révolutionner les graphismes. On retrouve une sensation de FPS moderne dans les déplacements : le strafe, la visée libre, c’est vif tout en ayant les bons vieux graphismes qui ont un charme certain.

Malmené par un Overlord dans le second niveau de NERVE

Malmené par un Overlord dans le second niveau de NERVE

Les WAD

Les WAD sont les fichiers que l’on donne à manger au moteur. Ils contiennent les assets du jeu, c’est à dire les textures, les sons, musiques, maps, campagne, ennemies, les armes… tout quoi. Il faut distinguer deux types de WAD : les IWAD et les PWAD.

  • Les IWAD sont autonomes. Ce sont les jeux complets comme Doom, Doom2, Heretic … La plupart ne sont pas opensource mais se trouvent pour une bouchée de pain sur GOG ou ailleurs. En libre vous trouverez Freedoom qui recréer des assets pour jouer librement avec un moteur libre.
  • Les PWAD sont des Patchs. Ils nécessitent l’utilisation d’un iwad pour fonctionner. Il peut s’agir d’une simple map, de musique ou d’une campagne complète voir une TC (total conversion). La communauté fait des miracles ici.

Il faut bien voir que l’on peut cumuler les pwad simultannément et que l’ordre de chargement a une importance.

Capture d'écran d'une partie de Doom sur la map17 du mod Hellbound

Petit aperçu de la map Starport de HellBound

Les mods intéressants

Un des plus populaire est le fameux Brutal Doom qui se charge de moderniser le gameplay et de rajouter des armes, des ennemis et même désormais une campagne super sympa. Le jeu devient plus nerveux et encore plus amusant. La version 21 est sur le point de sortir avec des ajouts de véhicules (oui oui !). Vu le nom vous devez un peu vous douter mais le mod se targue de proposer un peu de gore. Ça démembre, déchiquète, mutile à tour de bras. Vous pourrez même prendre possession d’un démon pour plus de fun… Ce mod a gagné de nombreux prix depuis des années, son auteur continue de pousser son bijoux depuis des années. Il s’attèle à des variantes telles que Brutal Doom 64 et évoque un éventuel Brutal Hexen !

Un ptit nouveau pousse le concept de brutal doom encore plus loin : c’est le Project Brutality. Ils ont ajouté encore de nouvelles armes, la possibilité d’en avoir deux simultanées, quelques taunts supplémentaires. Des ennemis plus coriaces et variés (mention spéciale à l’imp qui peut désormais s’accrocher au plafond, c’est le must). Un système de progression dynamique dans les ennemis et les armes. Bref c’est Brutal Doom++. La version 3 est sur les rails, elle proposera visiblement sa campagne officielle.

Il existe des mods plus restreints ne cherchant qu’à modifier des détails plus petits. Par exemple UDV est un mod qui change le HUD pour avoir un truc un peu moins moche. Il est adapté à brutal doom et project brutality pour afficher toutes les nouvelles armes et munitions. Je vous montrerai le résultat un peu plus bas :-) . Pour que ça fonctionne il faut penser à ne pas mettre l’affichage fullscreen (ingame pas la fenêtre elle-même).

Un peu de musique ? Ouai ! Doom Metal Soundtrack vol 4. Des remix sympatoches des musiques originales.

Capture d'écran du mod Pirate Doom

Changement radical d'ambiance dans Pirate Doom

Les campagnes

Quelques campagnes plus ou moins sympa. Celles-ci sont jouables avec Brutal Doom ou Project Brutality ainsi qu’UVD.

Hell on Earth Starter Pack est la campagne officielle de Brutal Doom. Il s’agit de map modernes qui se passent un peu sur terre un peu en enfer. Perso j’aime bien même si c’est globalement assez simple mais on retrouve des choses qu’on ne trouve pas ailleurs.

Ensuite il y a No Rest for the Living aussi appelé NERVE. Ces maps sont super bien branlées avec des passages secrets et un level design particulièrement travaillé. Cette campagne est vendue avec Doom3 BFG edition. Cette campagne se fait assez rapidement mais dans la joie.

Une campagne faite par un amateur mais pourtant d’une excellente qualité : Hellbound. Les maps ont été faites sur de très nombreuses années et n’ont pas forcément de continuité les unes entre les autres mais globalement ça se tient. On y retrouve des atmosphères assez différentes. J’ai adoré la map Starport.

Une campagne prometteuse mais pas terminée est Don’t Play With Hell - Black Edition. Seules quelques maps sont terminées mais WOW. Ce sont des maps modernes qui sont radicalement différentes de ce qu’on voit ailleurs. Les graphismes sont uniques : on retrouve énormément de plans inclinés (ce que le moteur d’origine ne sait pas faire) ce qui est surprenant pour un habitué de Doom. Je n’ai pas terminé la black edition qui se veux carrément un jeu complet en solo. Pour l’instant c’est vraiment sympa. Il y a un travail de scénario, de mise en scène vraiment poussé. Ça pourrait être Doom 3 mais en 1996. C’est plus lent que du Brutal Doom mais plus rapide que du Doom 3. Ils ont repris les Glory Kills du Doom 2016. Dans son genre c’est très probablement ce qui se fait de mieux.

Les Total Conversion

On passe aux Total Conversion qui ne se jouent du coup pas avec Brutal Doom ni Project Brutality.

Sortez le rhum et choquez les balancines ! On va accoster sur Pirate Doom. Bonne ambiance pour un mod qui commence comme une simple blague et qui se révèle étonnamment bon et dépaysant.

Votre ordinateur est tout juste assez puissant pour Doom mais pas assez pour Half Life ? Ça tombe bien Mr Freeman ! Paranoid est fait pour vous. C’est tellement bien fait qu’on s’y croirait vraiment. Il faut s’y reprendre à deux fois pour voir la supercherie.

Dans un style encore complètement différent on a Urban Brawl qui vous balance dans une bande dessinée. Le cell shading est finalement plutôt bien adaptée. Le rendu graphique est plutôt surprenant. Il faut au moins voir le rendu.

Comment qu’on y joue ?

Allez vite fait un mini tuto. Le mieux c’est de commencer par vous procurer doom2.wad (trouvable sur GoG et souvent en promo à 5€ ou moins). Ensuite vous installez GZDoom. Selon votre distro la suite va différer : sous gentoo il va vous falloir poser vos wad dans /usr/share/doom-data mais après c’est pas obligatoire. Ensuite créez vous un script contenant la liste de vos wad à charger dans le bon ordre :

#! /bin/sh
/usr/bin/gzdoom \
	/usr/share/doom-data/Project\ Brutality\ 2.03.pk3 \
	/usr/share/doom-data/hud/UDV_v1.62_A_BASE_GZDoomOnly.pk3 \
	/usr/share/doom-data/hud/UDV_v1.62_B_ADD_IN_Mod_ProjectBrutality.pk3 \
	/usr/share/doom-data/DoomMetalVol3.wad \
	/usr/share/doom-data/DoomMetalVol4.wad \
	/usr/share/doom-data/NERVE.WAD

Et voilà, vous lancez et ça marche :-)

Et après ?

Bha franchement vous pourriez vous pencher sur Heretic puis Hexen qui utilisent le même moteur (avec de légères modifs tout de même). C’est plus Heroic Fantasy mais ça reste des FPS vraiment agréables à jouer. Si vous êtes plus orienté action-rpg vous pouvez tenter Strife mais personnellement je n’ai pas ce jeu… Si vous n’en avez pas assez, vous trouverez de très nombreux WAD sur les Internets : fouillez du côté des Cacowards qui chaque années célèbrent les meilleures créations de la communauté.

Le drama Firefox de la fin 2017 : SpyGlass

Mozilla aura eu une sacré année. Depuis l’arrivée de Chrome et son marketing sauvage (rappelez vous les spots vidéos, les pubs physique dans tous les coins un peu civilisés, sans parler des pubs sur toute la panoplie de site ouaib de Google…) les parts de marché de Firefox se sont peu à peu étiolées. Mais Mozilla commence visiblement à se réveiller et ses efforts portent leurs fruits.

Désormais Mozilla sort des versions “oxydées” de Firefox (ça veux dire avec de plus en plus de morceaux écrits en rust (rouille… oxydé… bref, ce terme n’est pas de moi et il est semi-officiel)) et bouscule l’architecture de son navigateur pour le meilleur mais forcément avec un peu de casse. Bref les anciennes API pour les extensions sont dégagées ce qui va permettre une meilleure stabilité des nouvelles extensions. Qui plus est ça permet une meilleure sécurité globale du navigateur et permet de virer les vieilles rougnes d’addons pas vraiment à jour potentiellement pleines de failles. C’est un drama certains car pas mal d’utilisateurs se retrouvent le bec dans l’eau sans leur extension chérie (et certains ont pris la décision de quitter Firefox pour un autre navigateur utilisant la même nouvelle api que Firefox (ironic). Moi le premier j’ai plus vimperator et j’ai du coup fui sur un autre navigateur permettant de garder ces fonctionnalités. Mais au final le drame ultime de la fin 2017 n’est pas ça !

SpyGlass

Mozilla a installé, dans le dos de ses utilisateurs, une extension qui par défaut ne fait rien. Mais si par mégarde, les utilisateurs modifiaient le about:config alors cette extension peut commencer à ajouter des headers et autres références à Mr Robot. Un drame sans commune mesure !

Sérieux, si vous paniquez parce qu’une extension a été installée mais non activée sans votre consentement il faudrait prendre un peu de recul et voir voir que vous avez installé un navigateur qui (dans la majeure partie des cas) se met à jour tout seul, donc en ajoutant du code que vous pouvez probablement pas voir (contrairement à l’apparition d’une extension), probablement pas virer (contrairement à une extension).

Pire encore, si votre réaction dans ce cas est d’aller vers un navigateur non opensource vous vous exposez à exactement la même chose à chaque nouvelle version et que personne ne peut vérifier en regardant le code…

Certe le comportement de Mozilla n’est pas clean. Faire ça sans en parler c’est pas la meilleure idée qui soit. Mais c’est franchement sans conséquence et sans commune mesure avec du logiciel proprio.

 


PS

Mozilla a apparemment commencé à communiquer dans sa base de connaissances.

Drivers graphiques AMD 2017

En 2007, AMD a adopté une nouvelle stratégie concernant les drivers de cartes graphiques de sa récente acquisition, ATI. Ils ont en effet décidé d’aider le développement de drivers opensource en fournissant énormément de documentation qui s’est révélée précieuse.

Quelques années plus tard ils ont poussé encore plus loin en donnant même du temps à quelques-uns de leurs devs pour participer aux drivers opensource.

Encore quelques années plus tard ils ont même adopté une nouvelle architecture où le driver proprio et le driver opensource partagent une part commune dans le kernel permettant de mutualiser les efforts.

Et qu’est-ce qu’ils viennent de faire il y a trois jours ? Et bhé ils viennent d’opensourcer leur implémentation de Vulkan (l’api graphique à la mode). Il y a donc désormais deux implémentations opensource possibles pour les cartes graphiques AMD. L’historique a été développé depuis deux ans maintenant. Elle est fonctionnelle mais ses performances ne sont pas encore optimales. La nouvelle made in AMD devrait avoir de meilleure performance cependant elle ne sera pas intégrée à mesa.

Ils ont également fourni une nouvelle version de leur driver avec un installeur permettant de facilement choisir quels morceaux on veut utiliser (proprio ou opensource). Franchement, qu’espérer de plus ? (nVidia ? ça serait gentil de faire pareil).

Et chez Gentoo ?

J’ai récemment changé de carte graphique, je suis passé d’une bonne vieille radeon 6950 à une radeon rx580, la seule chose à faire sur ma ptite gentoo a été de changer le /etc/portage/make.conf pour y changer la variable VIDEO_CARDS=“amdgpu radeonsi , un ptit emerge -uDnav @world et poser le firmware dans /lib/firmware et d’ajouter les noms de fichiers dans /usr/src/linux/.config :

CONFIG_EXTRA_FIRMWARE="amdgpu/polaris10_ce_2.bin amdgpu/polaris10_ce.bin \
amdgpu/polaris10_k_smc.bin amdgpu/polaris10_mc.bin amdgpu/polaris10_me_2.bin \
amdgpu/polaris10_me.bin amdgpu/polaris10_mec2_2.bin amdgpu/polaris10_mec_2.bin \
amdgpu/polaris10_mec2.bin amdgpu/polaris10_mec.bin amdgpu/polaris10_pfp_2.bin \
amdgpu/polaris10_pfp.bin amdgpu/polaris10_rlc.bin amdgpu/polaris10_sdma1.bin \
amdgpu/polaris10_sdma.bin amdgpu/polaris10_smc.bin amdgpu/polaris10_smc_sk.bin \ 
amdgpu/polaris10_uvd.bin amdgpu/polaris10_vce.bin"

Et voilà, une recompil du kernel et après c’est tout bon…

Les fast-posts

Et voilà j’inaugure une nouvelle section sur mon site ouaib. Les fast posts. Ces derniers temps j’écris de plus en plus de contenu sur mon site et j’essaye de faire du contenu de meilleure qualité. Les articles deviennent un peu plus longs et nécessitent un peu plus de taff du coup.

Vous avez aussi probablement remarqué que j’ai pas mal augmenté le rythme de parution. En fait au début c’était un peu un effort et maintenant ça va bien plus facilement. Mais du coup j’aimerai écrire un peu plus souvent et régulièrement mais si je ne fais que des articles de plus en plus longs et complexes à rédiger bha ça va au final ne plus être aussi simple d’écrire. Bref vous voyez mon désarroi actuel. Donc je vais faire des fasts posts où ça sera beaucoup plus court et du coup où je réagirai probablement plus à l’actualité.

Pour l’instant je sais pas trop comment vraiment les différentier du reste. J’ai fait quelques modifs du thème que j’utilise et je ferai encore d’autres modifs dans les semaines à venir.

NIB : Mon assistant personnel IRC

Je vous présente NIB mon assistant personnel. Il me simplifie la vie depuis quelques années maintenant. J’y gère des todo, j’y fais un peu de supervision, un peu de self monitoring manuel également et il possède même quelques commandes réseaux.

J’ai une forte addiction à l’irc. J’y suis connecté 24h/24 depuis près de vingt ans ans maintenant. Je consulte jamais mes mails mais irc plusieurs fois par heure. Dès que je démarre mon ordi, je me reconnecte sur ma session ssh où tourne mon fidèle tmux/weechat. C’est ma cyber-forme de communication première (désolé blog mais ouais tu passes après). Bref si je dois avoir un assistant personnel faut qu’il soit accessible sur irc. J’y ait accès sur mon ordi, sur n’importe quel ordi via le web ou directement depuis mon téléphone via client weechat-android tournant constamment aussi.

Choix techniques

Je ne sais pas coder, tout juste lire quelques lignes de codes pour m’en dépatouiller pour tenter de débugguer un peu à droite à gauche mais guère plus. J’ai donc bidouillé du script shell pour fabriquer mon bot irc.

Il existe pas mal de bots irc déjà dans pas mal de langages différents mais bon j’ai pas envie d’avoir du vieux code pas forcément à jour ou bien des softs avec quinze milles dépendances et surtout j’ai envie de m’amuser à faire ça. Un truc léger et pas forcément rempli de fonctionnalités. Du coup bha du script shell c’est à peu près universel, un client irc facilement hackable et les commandes inotify pour aider. On tartine ça de commandes sorties de coreutils et pouf. Voilà tout ce qui est nécessaire. En bonus on peut rajouter tmux c’est quand même plus pratique.

Au final c’est très économe en ram (la vm consomme 14Mo là tout de suite) en CPU 4 Minutes de CPU par jour environ soit bien moins de 1% de CPU en moyenne et ça rentre dans moins de 100Mo de skeudur. C’est donc virtuellement hébergeable partout. Perso je le fais tourner dans un container sur mon routeur.

Le client IRC choisi est ii. C’est un client irc assez minimaliste fait par les braves gens de Suckless. Il se connecte au réseau irc voulu ainsi qu’au salon de discussion voulu et vous ouvre des FIFO dans lesquels vous enverrez le texte. Pour lire le salon vous ouvrirez le fichier texte qu’ii crée. C’est assez primitif au premier abord mais ça permet d’utiliser les logiciels de son choix pour lire/écrire c’est pas mal. C’est du coup ultra simple à scripter. Un simple echo coucou >> irc.geeknode.org/#lesalon/in et hop.

Une partie du boulot du bot est fait par le bot lui même mais pas uniquement. Le bot est également en écoute sur un port et envoi sur IRC tout ce qui arrive sur ce port. Ça permet de recevoir du texte depuis l’extérieur (Ça fait même un cheap honey pot).

Fonctionnalités

Lecture de RSS

En plus d’être addict à IRC je suis un gros utilisateur des flux RSS. Ça permet de suivre de très nombreux sites sans les consulter un par un. J’héberge une instance Tiny Tiny RSS qui est est un excellent aggrégateur de flux en web. Il est particulièrement adapté pour gérer énormément de flux et les catégoriser. J’ai une catégorie particulière où je suis les sorties de nouvelles versions de logiciel et également les failles de sécurité. Ce flux est donc assez important. Du coup chaque nouvel item de ce flux est rebalancé sur IRC via le bot histoire de vite faire les mises à jour (ou pas). Pour cela j’utilise rsstail qui pioche le flux géneré par ttrss. On dépend donc de rsstail.

Monitoring ping

Je gère quelques machines persos mais également des machines associatives dont certaines nécessitent un uptime plutôt correct. Je fait donc chaque minute un test de connexion TCP et/ou UDP sur les services critiques. En cas d’échec, le bot affiche le service qui est injoignable. Je fait ça chaque minute ce qui me permet de voir les downtimes assez rapidement et ainsi voir combien de temps ça dure. Pour faire ce teste j’utilise une fonction assez peu connue du shell : echo >/dev/tcp/la_machine/le_port) &>/dev/null . Et bien entendu je récupère (ou non) un code d’erreur en retour. Si ça échoue, j’attend quelques secondes et je lance une seconde tentative, ça évite d’avoir des erreurs pour des micro-interruptions. 0 dépendance pour ce module.

Vérif des backup

Le boulot n’est pas fait par le bot lui même mais directement sur le serveur de backup qui ne fait que transmettre le texte.

Un simple cron lançant régulièrement un tout petit script qui vérifie si le dossier du dernier backup journalier existe. Et ensuite qui vérifie que ce dossier n’est pas plus vieux qu’un jour. Basique mais suffisant. Et bien sûr si c’est pas le cas, une alerte vers le bot. Une dernière petite fonctionnalité est l’affichage de la taille du dernier backup. Ça me permet de voir vite fait si la valeur est cohérente ou pas. Ça ne me demande moins de dix secondes d’attention par jour. Pas de dépendance introduite par ce module.

Gestion de todo

Un petit script qui ajoute/supprime des lignes dans un fichier texte. Une ligne par truc à faire. Un cron qui affiche la todo tous les jours deux fois par jours. Avec ça je me sens “oppressé” du coup je la vide aussi vite que possible. Un simple todo add truc à faire et hop c’est ajouté. C’est tout à base de echo et while read. Pas de dépendance en dehors des coreutils classiques.

VoD perso

Mon NAS est connecté au net. Du coup parfois quand je suis pas dans mon LAN et que j’ai envie de matter une vidéo dispo sur mon NAS je dois chercher la vidéo. Ouais ouais le NAS est pas super bien rangé, il y a des trucs à droite à gauche (séparé sur plusieurs disques). Du coup je me suis fait une ptite commande qui va simplement find|grepper dans tous les dossiers de stockage pour trouver la vidéo désirée et qui me sort le lien. Ce coup-ci on a besoin de ssh (ainsi que la configuration d’un utilisateur et de ses clés) comme unique dépendance.

Monitoring perso

Je fais du monitoring manuel. La consommation de gaz/élec/eau que je relève manuellement une fois par semaine et je graph ça. Pour le relevé je balance ça dans le bot et c’est lui qui met en forme et balance ça dans un fichier csv. Ensuite j’ai une ptite page web avec du JS qui lit le fichier CSV et qui génère un très joli graph. Je graph aussi la conso essence de la bagnole (et le prix au passage) ainsi que le poids des habitants de la maison (chat compris). Donc là c’est principalement du sed et un ajout dans un fichier csv via ssh. La seule dépendance externe est encore une fois ssh.

Téléchargement

Ouai des fois j’ai un besoin urgent de télécharger un fichier. Je lui donne l’url et il s’en débrouille. Rien de bien méchant, un wget et hop. Toujours pas de dépendance.

Monitoring de sessions

Gérant plusieurs machines ouvertes sur le net, j’ai des serveurs SSH à droite à gauche bien évidemment. Même si tant que possible j’essaye de faire en sorte que la conf des SSHD soit bonne, on n’est à l’abri de rien. Du coup dès qu’une session est ouverte je reçois l’information de la provenance de la connexion ainsi que l’utilisateur. Ça permet de voir en live qui se connecte où. C’est génial ( “Tiens qui c’est ce Lord qui vient de se connecter sur mon routeur ?” ). Ça permet de réagir assez vite en cas de compromission ou tout simplement après coup de voir qui s’est connecté il y a six mois sur telle machine ? On voit également en live les backup se faire via ssh. On peut facilement détecter un backup qui se passe mal (une connexion qui ne dure que 5 secondes au lieu des 40 minutes habituelles par exemple).

Cette partie n’est en fait pas gerée par le bot lui même. C’est juste sur les machines surveillées, un script qui s’exécute à la connexion pour envoyer la notif au bot. Soit on fout la commande dans le sshrc qui est executé à l’établissement de la connexion réussie. Soit (et je préfère) carrément dans PAM ce qui permet d’avoir la connexion ET la déconnexion. On envoi ça via un simple netcat même si je pourrai le faire via un echo >/dev/tcp/ . Pas de dépendance sur le bot par contre un script à mettre en place sur chacune des machines surveillées et donc installation de nc.

Crypto-monnaies

J’ai un peu de crypto monnaies et je tente de grapher un peu combien ça vaut. Et surtout je mine à mon rythme du Monero l’hiver pour chauffer l’appart. Du coup je récupère la balance de mon wallet, le cours du monero, le hashrate actuel et avec un chouilla de calcul je sors la valeur en €uro de mon ptit portefeuille. C’est principalement du curl | jq et les calculs avec awk (ouais c’est pas l’outil le plus intuitif mais ça fonctionne et ça évite de rajouter un paquet supplémentaire au container. Donc toutes les trentes minutes le bot relève les infos, annonce les résultats et envoie ça dans un csv via ssh pour être graphé. Là on introduit pas mal de dépendances : curl, jq, awk et ssh.

Quelques détails d’implémentation

Le code est en bash et non en sh pure. Je sais plus exactement pour quelle raison. J’ai tenté d’utiliser le plus possible de variable en début de fichier.

J’ai découpé en multiples fonctions qui s’exécutent parallèlement. Le bot utilise de nombreuses boucles qui tournent constamment.

  • La première boucle vérifie que ii tourne. Si ce n’est pas le cas elle va le relancer et se reconnecter au salon. Ça permet en cas de relancement du bot ou de plantage de ii de se relancer mais en vrai ça n’arrive jamais. Par contre lorsque le bot se fait kill (parfois ça flood un peu trop), ii s’arrête. Du coup la boucle relance le truc.
  • La seconde boucle vérifie que nc tourne et écoute les connexions entrantes. Nc envoie tout ce qu’il reçoit dans un fichier que j’ai appelé buffer. Ce buffer permet de conserver tous les messages si jamais le reste du bot est en carafe (sait-on jamais).
    • La troisième boucle est celle qui lit le buffer et envoie les lignes vers l’irc avec un ptit délai entre chaque ligne pour éviter le flood. Elle vide également le buffer. C’est un fifo fait main.
  • Il y a ensuite une quatrième boucle qui s’amuse à lire ce qu’il se passe sur irc et dans certaines conditions va parser ce qui se raconte (en gros si c’est pas le bot lui même qui parle.
    • Une autre boucle encore qui lit ce qu’il se passe dans le shell ayant lancé le bot. Histoire de pouvoir lancer des commandes interactivement. Ça sert rarement mais parfois c’est utile. J’ai aussi bidouillé des scripts qui envoie des commandes à tmux pour “écrire interactivement” avec le bot. Bidouillage quand tu nous tiens.
    • J’ai la boucle de monitoring réseau qui tente d’établir les connexions réseau chaque minute.

Donc voilà au moins six boucles en bash qui tournent. Si ça c’est pas du multiprocess qui tue…

J’ai ensuite chacune des commandes qui est une fonction appart. Une fonction d’initialisation qui lance tout ça. Une fonction pour killer tout mais en vrai certaines fois ça kill pas tout du coup je relance le container chaque nuit pour éviter de trop accumuler. C’est crade mais pas critique dans mon cas.

Et voilà ça fait un script bash un petit peu tordu de 400 lignes mais au final il tourne sans aucun soucis depuis des mois. Ptet qu’un jour je le réécrirai en rust ou en go (wink wink).

Voilà le monstre



#! /bin/bash

ircnetwork=""
ircport=""
ircchan=""
ircdir="/home/lord/irc"
chanout="$ircdir/$ircnetwork/$ircchan/out"
chanin="$ircdir/$ircnetwork/$ircchan/in"
buffer="$chanin"buf
realnick="nib"
selfnick="<$realnick>"
launcheddate="$(date)"
rss_url=""

bold="\e[1m"
normal="\e[m"
bleu="\e[0;34m"
violet="\e[0;35m"
rouge="\e[0;33m"

trap "Send 'Je vais me pieuter!';printf 'Extinction suite à signal\n'; KillAllJobs; exit 0 " 2 3 15

KillAllJobs(){ 
	jobs -p
	jobs -p | xargs kill -9;
}

Send(){
  printf "\x033[BOT-%s]\x0f %b\n" "$(date +%H:%M:%S)" "$1" | fold -b -w 500 >> "$buffer"
}
SendNoFormat(){
  printf "%s\n" "$1" | fold -b -w 500 >> "$buffer" &
}
Log(){
  printf "%s - %b\n" "$(date '+%d/%m %H:%M:%S')" "$1"
}

Init(){
	Log "==============="
  Log "\e[0;32m   Lancement\e[0m"
	Log "==============="

  Iiloop
  iiloop_pid=$!
  Log "$violet Démarrage du bot$bold [1/5]$bleu iiloop_pid: $iiloop_pid $normal"
  Ncloop
  ncloop_pid=$!
  Log "$violet Démarrage du bot$bold [2/5]$bleu ncloop_pid: $ncloop_pid $normal"
  Rssloop
  rssloop_pid=$!
  Log "$violet Démarrage du bot$bold [3/5]$bleu rssloop_pid: $rssloop_pid $normal"
  Pingloop
  pingloop_pid=$!
  Log "$violet Démarrage du bot$bold [4/5]$bleu pingloop_pid: $pingloop_pid $normal"
  Debufloop
  debufloop_pid=$!
  Log "$violet Démarrage du bot$bold [5/5]$bleu debufloop_pid: $debufloop_pid $normal"
  Chaninputloop
  chaninputloop_pid=$!
  Log "$violet Démarrage du bot$bold [6/5]$bleu chaninputloop_pid: $chaninputloop_pid $normal"
}

Debufloop(){
# Utilisation d'un fichier tampon pour les fois où on est pas connecté et qu'on arrive pas à balancer dans la fifo d'ii.
  [ ! -f "$buffer" ] && touch "$buffer"
  while true;
	do
	  inotifywait "$buffer" -e close_write,modify > /dev/null 2>&1
	  while read buffered_line;
		do
		  printf "%s\n" "$buffered_line" >> "$chanin"
			sleep 0.5
		done < "$buffer"
		> "$buffer"
	done &
}
Rssloop(){
  while true;
	do
		Log "\e[0;36mRelancement de rsstail\e[0;m"
		Send "\x037[RSS]\x0f Relancement de Rsstail."
    rsstail -u $rss_url -n 0 -z -P -l |while read -r x;do printf '\x037[RSS] %s\n' "$x" >> "$buffer";done
	done &
}
Pingloop(){
  while true;
	do
	  TcpPortTest "xxxx" "22"
	  TcpPortTest "xxxx" "80"
	  TcpPortTest "xxxx" "443"
	  UdpPortTest "xxxx" "1194"
	  TcpPortTest "xxxx" "80"
	  TcpPortTest "xxxx" "80"
	  TcpPortTest "xxxx" "443"
		sleep 60
	done &
}
Ncloop(){
	while true;
	do
    if pgrep ncat >/dev/null 2>&1
		  then sleep 5
		else
      Log "Relancement de ncat"
			Send "Relancement de ncat"
      ncat -l -p 4321 -k >> "$buffer" &
	  fi
	done &
}
Iiloop(){
	while true;
	do
	  if pgrep ii >/dev/null 2>&1
		then sleep 2
		else
	    Log "Relancement d'ii"
	    ii -s $ircnetwork -p $ircport -n $realnick -f $realnick &
		  sleep 1
		  printf "/j %s\n" "$ircchan" > $ircdir/$ircnetwork/in
		fi
          sleep 1
	done &
}
Parsemsg(){
case $1 in
      #### HELP ####
      "help"|"aide"|"commandes"|"commands") Send "Bonjour, Je suis ne suis qu'un humble bot. Voici mes quelques commandes dispos : \x032dl, dig\x0f, \x032ip, iloth, up, film, rss\x0f, \x038debug, reboot, exit\x0f et voilà ! C'est tout !";;

      #### BOT ####
      "restart"|"rehash"|"reboot") Send "Reboot du bot" && break ;;
    	"exit"|"quit"|"ctrlc"|"ta gueule") Send "Désolé de vous décevoir patwon. La seule solution est le seppuku." return 1;;

      #### COMMANDS ####
	"rss") Send "SendRss" && SendRss &;;
	dig*) Dig "$1" &;;
	up*) Up "$1" &;;
	film*) Film "$1" & ;;
	todo*) Todo "$1" & ;;
	dl*) [ "$nick" == "<Lord>" ] &&	Dl "$1" & ;;
	plot*) Plot "$1" & ;;
	coin*) Coin "$1" &;;

      # INFOS #
      #### IP ####
      "ip") Send "IP : Choix possibles: \x2lord\x0f, \x2iloth\x0f, \x2lan";;
    	"ip iloth") Send "XXXXX";;
      "ip lord") Send "XXXXX";;
    	"ip lan") Send "XXXXX";;

      #### DEBUG ####
      "debug") Send "date: $date | time: $time | nick: $nick | msg: $msg" && Send "commandes disponibles:\x02 color, pid\x0f. Lancé depuis $launcheddate.";;
			"color") CouleurIndex ;;
			"pid") Send "iiloop_pid: $iiloop_pid" && Send "ncloop_pid: $ncloop_pid" && Send "rssloop_pid: $rssloop_pid" && Send "pingloop_pid: $pingloop_pid" && Send "debufloop_pid: $debufloop_pid" && Send "Chaninputloop_pid: $chaninputloop_pid" ;;
    esac
}

Chaninputloop(){
  tailf -n1 $chanout | while read -r date time nick msg; do
  if [ "$nick" = "$selfnick" ]  #On ignore ce que raconte le bot lui même
    then continue 
  else
	  Parsemsg "$msg"
  fi
  done &
}

Interactiveloop(){
	while read userinput
	do
		if [[ "$userinput" == /* ]]
		then
			Parsemsg "${userinput:1}"
		else
		  Send ": $userinput"
	  fi
	done
}

Kill(){
	if [ -e /proc/"$1" ]
	then
    Log "$rouge Kill $2: $1 $normal"
		disown $1
	  kill $1
	  wait $1
	  Log "$rouge $2 killed $normal"
	fi
}
CouleurIndex(){
	for ((color_index=30;color_index<=39;color_index++)) do
	  Send "\x0$color_index Couleur $color_index"
	done
}
SendRss(){
  rsstail -u $rss_url -1 -n 5 -z -P -l | for ((rss_index=0;rss_index<=7;rss_index++)) do 
    read -r x;
		printf "\x037[RSS] %b\n" "$x" >> "$buffer"
		sleep 1;
  done 
}
Dig(){
	digargs="$(printf "%s" "$1" | cut -c 5-)"
	[ ! -z "$digargs" ] && Send "$(dig +short $(printf "%s" "$1" | cut -c 5-))" || Send "Syntaxe: C'est la même que dig, tout simplement"
}
Up(){
	upargs="$(printf "%s" "$1" | cut -c 4-)"
	if [ -z "$upargs" ];
	then Send "syntaxe: up domaine port . ex: up lord.re 80"
  elif TcpPortTest $upargs;
	then
	  Send "\x039[PING]\x0f$upargs est UP !"
  fi
}
TcpPortTest(){
  if (! echo >/dev/tcp/$1/$2) &>/dev/null
	then
	  sleep 5
		(echo >/dev/tcp/$1/$2) &>/dev/null || Send "\x039[PING]\x0f Ping KO vers \x02$1:$2\x0f"
		return 1
	fi
}
UdpPortTest(){
  if (! echo >/dev/udp/$1/$2) &>/dev/null
	then
	  sleep 5
		(echo >/dev/tcp/$1/$2) &>/dev/null || Send "\x039[PING]\x0f Ping KO vers \x02$1\x0f"
	  return 1
	fi
}
Film(){
	filmargs="$(printf "%s" "$1" | cut -c 6-)"
	Send "Film: $filmargs"
	Filmresults="$(ssh nib@10.0.0.1 "find /stockage/*/films | grep $filmargs -i")"
        if [ $( echo $Filmresults | wc -l ) -gt 10 ]
	then
	  Send "Trop de résultats pour : $filmargs"
		return 0
	else
          Send "ok"
          while IFS= read -r resultat
          do
            echo $resultat | sed 's/ /%20/g' | sed 'XXXXX' | sed 's/\/films//'
          done <<< $Filmresults
        fi
}
Todo(){
	set $1
  [ ! -f "ircdir/todo" ] && touch "$ircdir/todo"
  if [ -z $2 ]
	then
	  index=1
		while read -r todoitem;
		do
		  Send "$index - $todoitem"
			let "index++"
		done < "$ircdir/todo"
		[ $index -eq 1 ] && Send "Rien à faire \o/"
		return 0
	fi
	if [ "$2" == "add" ]
	then
	  shift 2
	  Send "Ajout todo : $*"
		printf "%s - %s\n" "$(date '+%d/%m %H:%M:%S')" "$*" >> "$ircdir/todo"
	elif [ $2 == "del" ]
	then
	  Send "Suppression de l'item : $3"
		sed -i "$3d" "$ircdir/todo"
	elif [ $2 == "flush" ]
	then
	  Send "Vidage de la todo"
		> "$ircdir/todo"
  else
	  Send "Mauvaise syntaxe : todo add, todo del, todo flush ou bien todo."
	fi
	return 0
}

Plot(){
	set $1
	[ ! -f "ircdir/plot" ] && touch "$ircdir/plot"
	if [ -z $2 ]
	then
		index=1
		while read -r plotitem;
		do
			Send "$index - $plotitem"
			let "index++"
		done < "$ircdir/plot"
		Send "Syntaxe : [action] (données)"
		Send "Syntaxe : action : add / send / del / flush / info"
		Send "Syntaxe : catégories : conso / poids / voiture"
		Send "Syntaxe : ex : plot add [données]"
		Send "Syntaxe : ex : plot info (catégorie)" 
		Send "Syntaxe : ex : plot send [catégorie]"
		Send "Syntaxe : ex : plot del numéro"
		Send "Syntaxe : ex : plot flush"
		
		[ $index -eq 1 ] && Send "Rien à valider"
		return 0
	fi
	if [ "$2" == "add" ]
  then
		shift 2
		Send "$#"
		if [ $# -gt 0 ]
		then
			Send "Envoi de : $*"
			printf "%s" "$(date '+%d/%m/%y')" >> "$ircdir/plot"
			while [ $# -gt 0 ]; do
				printf ",%s" "$1" >> "$ircdir/plot"
				shift
			done
			printf "\n" >> "$ircdir/plot"
			Send "Pensez à [plot send si c'est bon]"
		else
			Send "Pas assez d'arguments :-("
		fi
	elif [ "$2" == "send" ]
	then
		if [ "$3" == "conso" -o "$3" == "poids" -o "$3" == "voiture" ]
		then
			cat "$ircdir/plot" | ssh nib@10.0.0.1 "cat >> /var/graph/$3.csv" && Send "Données ajoutées dans $3. Merci ;-)"
			> "$ircdir/plot"
		else
			Send "Mauvaise catégorie."
		fi
	elif [ "$2" == "del" ]
	then
		Send "Supression de l'item : $3"
		sed -i "$3d" "$ircdir/plot"
	elif [ "$2" == "flush" ]
	then
   		Send "Suppression des plots en cours"
		> "$ircdir/plot"
	elif [ "$2" == "info" ]
	then
		Send "Pour la conso : Gaz Élec Eau"
		Send "Pour le poids : Peluche Bab Lrd"
		Send "Pour la voiture : Km Litre Prix"
	else
		Send "Mauvaise syntaxe : plot add, plot del, plot send, plot flush ou bien plot info."
	fi
	return 0
}

Dl(){
	set $1
	[ -z "$2" ] && Send "Syntaxe: dl URL" && return 0
	Send "Bon bha je vais télécharger $2"
	wget --quiet -c -P XXXX "$2"
	Send "Dl de $2 fini. Enjoy."
return
}

Coin(){
	set $1
	balance="$(curl --silent --insecure 'XXXX' | jq -r '.stats.balance')"
	hashrate="$(curl --silent --insecure 'XXXX' | jq -r '.stats.hashrate')"
	balance=$(awk "BEGIN {print $balance / 1000000000000}")

	hashrate=${hashrate%?}
	unit=$(echo $hashrate | cut -c $((${#hashrate})))
	if [ "$unit" = "K" ] ;
	then
		echo "*1000"
		hashrate=$(awk "BEGIN {print $hashrate * 1000}")
		hashrate=$(awk "BEGIN {print $hashrate * 1000}")
	fi

	xmreur="$(curl --silent --insecure 'https://api.cryptonator.com/api/ticker/XMR-EUR' | jq -r '.ticker.price')"
	btceur="$(curl --silent --insecure 'https://api.cryptonator.com/api/ticker/BTC-EUR' | jq -r '.ticker.price')"
	pognon=$(awk "BEGIN {print $balance * $xmreur}")
	#output irc
	Send "\x038[COIN]\x0f - $(date '+%d/%m/%y %H:%M:%S') - $balance XMR @ $hashrate KH/s - XMR-EUR : $xmreur ce qui fait $pognon €     - BTC-EUR: $btceur \n"
	if [ "$2" == "send" ]
	then
		printf "%s,%s,%s,%s,%s,%s\n" "$(date '+%d/%m/%y %H:%M')" $balance $hashrate $xmreur $pognon $btceur | ssh nib@10.0.0.1 "cat >> /var/graph/coin.csv"
	fi
	
	return 0
}

main(){
  ### Pré-init #################################################################
  # Si le bot est lancé avec des arguments, ceux-ci sont envoyés sur le chan, si pas d'argument on lance le bot.
  if [[ ! -t 0 ]];
  then
    if [[ ! -z "$1" ]];
  	then
      while read -r pipedtext; do SendNoFormat "| $* $pipedtext"; done
    else
      while read -r pipedtext; do SendNoFormat "| $pipedtext"; done
  	fi
  exit
  fi
  if [[ ! -z "$1" ]] && [[ -t 0 ]];
    then
  		if [[ "$1" == /* ]]
  		then
  			#on utilise une variable intermédiaire pour virer le premier /, ça ne fonctionne pas sur $* ou $@
  		  lavar=$@
  			Parsemsg "${lavar:1}"
  		else
  		  Send "> $*"
  	  fi
  	  exit
  fi
  [ "$EUID" = "0" ] && printf "Merci de ne pas lancer le bot en root. Ciao.\n" &&	exit 
  ###############################################################################

  Init
  Interactiveloop
  Log "Redémarrage du bot"

  Kill "$iiloop_pid" "iiloop"
  Kill "$ncloop_pid" "ncloop"
  Kill "$rssloop_pid" "rssloop"
  Kill "$pingloop_pid" "pingloop"
  Kill "$debufloop_pid" "debufloop"

  exec "$0"
}

main $*

Partout où vous voyez XXXX j’ai planqué des infos sensibles.

PS : Merci Gof et Mortbise pour la correction ;-)

Ma Wishlist logicielle : Vol1

Ma liste au père nowel 2017 niveau logiciel. Je sens que ça va pas être exaucé mais qui ne tente rien…

||| : Le magic pipe

Il y a un truc qui me gonfle. Et ça me gonfle sévère : constamment, j’ouvre pleins de terminaux. Et souvent ça se fini en ssh à droite à gauche. Avec parfois des rebonds. Parfois sur des machines qui n’ont même pas accès au net (des vm toussa toussa).

Bref. Et là vous devez transferer un fichier entre deux terminaux… c’est espacé de juste quelques pixels et pourtant c’est injoignable !

FRUSTRATION

On ferme les yeux.

On inspire.

On retient ses larmes.

On lance une session tmux.

On se maudit.

On se reconnecte aux différentes machines.

On en chie pour enregistrer le scrollback buffer en priant que tout rentre dedans.

Vous voyez le topo. Donc en gros le fonctionnement : cat mon fichier ||| et dans une autre console ailleurs ||| > mon fichier . Ça parait super irréaliste. Mais franchement ce serait pas la joie ? Ça pourrait être geré au niveau de tmux par exemple ou encore un poil en dessous au niveau du terminal (s’il a un fonctionnement avec un daemon).

Ce serait tellement pratique de pouvoir faire ça.

Escape Sequence OpenSSH avec transfert de fichiers

Il m’arrive régulièrement de me connecter à une machine via SSH et là paf faut que je lui transfère un fichier. Je trouve ça dommage de devoir ouvrir un nouveau term, une nouvelle connexion pour le SCP.

Ma solution serait d’utiliser les fameuses séquences d’échappements d’OpenSSH (mais si vous savez ! Par exemple ~. pour déconnecter. Allez voir le man.). Actuellement on peut modifier les tunnels existants sur la connexion mais guère plus intéressant.

L’ajout de la possibilité d’engager un transfert de fichier dans la connexion existante (c’est permis par le protocole en lui même) serait vraiment classe. Genre ~u qui vous permet d’uploader un fichier vers le serveur SSH et ~d pour downloader un fichier. J’en demande pas plus ;-)

Apprendre au kernel linux à scanner les devices via BTRFS

Désormais heureux propriétaire d’un Raid6 BTRFS (ouai j’aime vivre dangeureusement), j’ai malheureusement dû me faire un initramfs pour pouvoir monter la partition racine. Tout ça parcequ’il faut que BTRFS scanne tous les devices avant de pouvoir monter le raid. Bon j’en ai profité pour ajouter quelques fonctionnalités supplémentaires mais bon ça fera un prochain article.

Bref si le kernel pouvait effectuer un scan de tous les devices avant de monter une partoche, ça serait parfait.

Qutebrowser

Voilà quelques mois maintenant, j’ai migré sur Qutebrowser. C’est un ptit navigateur peu connu qui ne se démarque pas par son moteur de rendu (encore qu’en fait si !). Il a la particularité de pouvoir tourner avec plusieurs moteurs de rendu différents. Il se distingue surtout par son interface utilisateur qui se veux absolument pas intuitive mais c’est clairement sa force.

MoteurS de rendu

Il propose en effet plusieurs moteurs. Tout d’abord le bon vieux webkit, tout du moins dans sa déclinaison Qt. Mais celui-là est sur le déclin et devrait disparaître à terme. Il y a ensuite webkit-ng qui est le successeur de webkit. Bon j’avoue c’est un peu pareil… Et puis il y a également qt-webengine. Haha !

Vous le connaissez pas celui-là ! Et en fait il s’agit de Blink, le moteur de chrome/chromium mais légèrement retouillé pour Qt. Donc bon c’est quand même un dérivé de webkit mais plus moderne. Bref. Selon votre distribution, vous pourrez (ou pas) choisir le moteur de rendu à utiliser. Perso j’utilise qtwebengine.

L’interface

Tout l’intéret de QuteBrowser est son interface utilisateur. Elle est inspirée par des addons Firefox ne pouvant pas être reproduit via la nouvelle API de Firefox 57 : Vimperator et Pentadactyl. L’idée de l’interface est de virer le plus possible l’interface graphique et d’utiliser massivement le clavier. Exit les boutons, aurevoir la barre d’adresse, ciao la souris !

Toutes vos interactions se feront donc au clavier. Le seul élément d’interface restant est la status bar en bas qui contient l’adresse de la page actuelle ainsi, que la position actuelle dans la page (en haut, à 10% du haut, tout en bas, bref pour savoir si vous pouvez descendre encore) ainsi que le numéro d’onglet de la page actuelle.

capture d'écran de l'interface de qutebrowser

Interface de qutebrowser

Comme vous pouvez le voir, c’est dépouillé.

Tout se fait donc avec des raccourcis claviers mimant le fonctionnement de vim. Donc le fameux hjkl (que je n’utilise pas) pour se déplacer. Le G et gg pour aller en fond de page ou au début.

Un système très important c’est le f qui va vous permettre de hinter les liens. C’est à dire que chaque lien de la page va se voir attribuer un repère que vous aller taper pour l’ouvrir. Dans mon cas j’ai modifié le comportement par défaut pour utiliser le mode number (:set hints.mode number). Il me suffit donc d’appuyer sur f puis d’entrer quelques lettres du lien en question, s’il n’y a pas d’ambiguité, la page s’ouvre. Si plusieurs résultats sont possibles chaque résultant restant aura un numéro attribué qu’il me suffira d’écrire :

capture d'écran de l'interface de qutebrowser

Activation du hint

capture d'écran de l'interface de qutebrowser

Une fois tappé home

Ça peut paraître lent et contre-intuitif au début mais au bout d’une heure ou deux c’est au final très rapide. Surtout si l’on est déjà vimiste.

Utilisation

Éditer du texte

Tout comme vim, qutebrowser est modal. Par défaut vous êtes en mode normal. Si vous vous mettez dans un champs de texte (via f par exemple), Qute devrait de lui même passer en – INSERT MODE – mais parfois c’est pas le cas (merci js) du coup faut l’activer en appuyant sur i. Pareil si vous êtes sur une page web utilisant des raccourcis claviers il faudra passer en mode insertion.

C’est bien gentil mais bon si on doit éditer du texte un peu long pour un wiki ou votre webmail, que ne rêve pas d’utiliser vim directement (ou éventuellement emacs (ouai ou nano)) ? Et bha c’est possible avec ^e dans un champs de texte. Ça lancera la commande d’édition où vous pouvez mettre ce que vous voulez. Personnellement je lance un terminal avec vim. Une fois le texte édité, vous enregistrez/quittez et hop ça apparait magiquement dans qute ! (vous pouvez choisir quel éditeur avec :set editor.command ‘[“alacritty”, “-e”, “vim”, “{}”]’ ).

La status bar

Tout comme vim, vous pouvez y lancer des commandes en commançant par : . Par exemple pour modifier un réglage c’est :set content.javascript.enabled false . En sachant qu’il y a de l’autocomplétion plutôt efficace.

C’est aussi elle qui va vous permettre de taper une recherche/adresse. Soit vous lancez la commande :open soit vous tappez o qui fait la même chose. Si vous voulez éditer l’adresse de la page actuelle c’est O. Par défaut ça effectuera une recherche sur le moteur par défaut.

Recherche

Par défaut si vous entrez une adresse qui en fait n’est pas une vraie url, qute vous enverra sur la page de recherche correspondant à ce que vous avez tapper dans le moteur par défaut.

Vous pouvez cependant rajouter des raccourcis vers d’autres moteurs de recherche. Par exemple :open w linux vous enverra sur la page wikipedia de linux, :open y slayer vous enverra vers les résultats youtube de Slayer. Pour obtenir ce résultat voici le réglage à mettre dans :set url.searchengines ‘{“DEFAULT”: “https://duckduckgo.com/?q={}", “w”: “https://fr.wikipedia.org/w/index.php?search={}", “y”: “https://www.youtube.com/results?search_query={}"}'

Réglages

Vous pouvez modifier tous les réglages via :set le.nom.du.réglage . C’est vraiment super sauf quand vous savez pas trop comment s’apelle le réglage en question. Si l’autocomplétion ne trouve pas ce que vous voulez vous pouvez vour rabattre sur l’adresse particulière : qute://settings où vous trouverez tous les réglages existants.

Les onglets

Les onglets dans qute s’apellent des buffers (comme dans vim). Comme déjà raconté en 2012, je n’utilise plus d’onglets mais des fenêtres toutes indépendantes que je gère au niveau de mon WM. Pour ça Qute est très conscilient avec :set tabs.tabs_are_windows qui est l’option la plus explicite :-)

Conclusion

C’est franchement un bon navigateur qui remplace sans trop de soucis vimperator. Certaines fonctionnalités sont pas encore là mais 90% des fonctionnalités sont là. Faut bien garder à l’esprit que c’est un navigateur assez jeune et dont le dev est aussi assez jeune. Par contre la communauté autour du projet grandit petit à petit.

Les évolutions futures sont prometteuses. Le dev principal souhaite donner la possibilité d’avoir des réglages différents par domaines. Le but à terme est de recréer un uMatrix pour Qutebrowser. C’est pile poil ce qui me fait le plus défaut depuis l’abandon de firefox.

Le dev est d’ailleurs très accessible sur irc et j’ai déjà discuté avec lui d’une éventuelle possibilité de migrer vers le moteur de rendu servo. Selon lui c’est possible mais c’est pas du tout dans les objectifs actuels.

Ce navigateur est une bonne bouffée d’air frais face aux mastodontes et montre qu’il existe des alternatives crédibles.

 

Astuce concernant les vidéos

Personnelement j’aime pas spécialement regarder des vidéos dans le navigateur mais je suis un gros consommateur de vidéo en ligne, que ce soit des sites de replay ou plus classiquement youtube voir twitch. Ce que je fait c’est qu’une fois une page ouverte contenant une vidéo intéressante, j’utilise la touche m pour filer la page à MPV afin qu’il s’en débrouille pour m’afficher la vidéo.

J’ai également ajouté un mode de hint où la page choisie ne s’ouvre pas dans qute mais est directement passée à MPV, du coup ça m’évite d’ouvrir la page puis de la filer à MPV. Pour ça j’ai choisi Fm.

:set bindings.commands ‘{“normal”: {“F”: null, “Fm”: “hint links spawn –detach mpv {hint-url}”, “m”: “spawn –detach mpv {url}”}}’

Guide ultime du serveur DNS v1

Bon bon ces derniers temps je trifouille pas mal mon DNS. Pour les deux du fond qui viennent de se réveiller le DNS c’est l’annuaire de référence de l’Internet. Mais en fait c’est très réducteur de dire ça. En vrai le DNS c’est un système de base de données qui peut faire tout un tas de truc et pas uniquement convertir des noms en adresse IP. Allez, c’est parti pour le DNS Méga Guide 2017 !

Bon il y aura quelques redites de précédents articles sur le sujet mais le but ici est d’aborder à peu près tout histoire d’être exhaustif.

D’où ça vient ?

Historiquement lorsqu’on voulait contacter une machine sur le réseau Internet, il fallait connaitre son adresse. Le nombre de machine du réseau grandissant, un fichier texte était échangé pour trouver les autres machines du réseau. C’était très manuel mais peu efficace. Et là : PAF le DNS. Bref une base de donnée distribuée/répliquée/déleguée mondiale.

Le DNS est un arbre qui fonctionne par délégation. Typiquement www.lord.re devrait en vrai se dire www.lord.re. (remarquez le point à la fin). C’est un chemin qui se lit de droite à gauche.

  • Donc on a la racine . tout à droite, c’est geré par l’ICANN.
  • Ensuite .re qui est le TLD (Top Level Domain, aussi apellé extension d’un nom de domaine), c’est non plus geré par l’ICANN mais délegué à l’AFNIC (qui gère les domaines français dont le .re qui est le domaine de la Réunion).
  • Puis on trouve .lord qui n’est plus geré par l’AFNIC mais par moi (car je le loue auprès d’un registrar).
  • Et pour finir www qui pointe vers le serveur que je gère également, mais j’aurai pu le délégué à quelqu’un.

Bon maintenant on va aller beaucoup plus loin par la pratique. On va donc monter un serveur DNS faisant autorité sur votre nom de domaine.

Se prendre un nom de domaine et lancer son serveur

Bon déjà on achète pas un nom de domaine mais on le loue pour un à dix ans auprès d’un registrar (revendeur autorisé). La plupart des registrars proposent d’héberger le service DNS chez eux mais franchement… on préfère le faire soit même !

Auprès de votre registrar vous aurez donc à remplir les Glue Records. C’est ce qui lie votre serveur DNS à votre domaine auprès du niveau supérieur. En gros c’est ce qui va permettre aux gens de contacter votre serveur DNS. Donc il va falloir indiquer le nom du serveur DNS ayant autorité sur la zone ainsi que son adresse IP. Une fois fait vous n’aurez quasiment plus rien à faire auprès de votre registrar. Dans mon cas le serveur DNS est zapp.lord.re qui a pour IP : 62.210.201.160 .

Bon maintenant installer son serveur DNS… Débrouillez-vous. Dans mon cas j’ai non pas choisis le vénérable Bind mais le brave Knot que je trouve bien plus sympa. Il vous simplifiera la vie au niveau de la configuration et gère DNSSEC tout seul comme un grand. Knot est fait par les gens de Nic.cz qui gèrent donc les noms de domaine tchèques .cz . Ce sont les mêmes gens qui ont fait le logiciel Bird qui est un logiciel de routage libre. Ils ont aussi fait les Turris dont l’Omnia qui est mon routeur actuel. Ce sont des fanas du réseau et de l’Opensource. Des gens biens. Ils poussent à fond la démocratisation de DNSSEC car ils ont fait des extensions pour les navigateurs afin de vérifier le DANE des sites que vous consultez.

Confer Knot DNS

Bon déjà on l’installe et ensuite on créer le fichier de conf. Il est ultra simple et logique je vous le met dans sa quasi intégralité ici :

server:
    user: knot:knot
    listen: [ "0.0.0.0@53", "::@53" ]
log:
  - target: /var/log/knot.log
    any : info
acl:
  - id: acl_localupdate
    address: 127.0.0.1
    action: update
control:
    listen: knot.sock
remote:
  - id: localupdate
    address: 127.0.0.1
template:
  - id: default
    storage: /var/lib/knot/zones
    acl: [ "acl_localupdate" ]
    kasp-db: /var/lib/knot/kasp
zone:
  - domain: lord.re.
    file: lord.re
    dnssec-signing: on
    dnssec-policy: default

Tout est bien rangé dans sa section, acl contient les règles d’accès (pour modifier), template permet d’appliquer des règlages similaires à plusieurs zones, et zone va contenir toutes vos zones (Thx Cpt Obvious). Bon du coup maintenant vos fichiers de zones vont devoir se fouttre dans /var/lib/knot/zones. Knot va générer de lui même les clefs et chiffrer votre zone DNSSEC.

Gérer la redondance

Monter un serveur DNS secondaire.

Cette partie sera ajoutée un peu plus tard ;-)

Publication DNSKEY ou DS record chez le registrar

La seule chose qu’il vous reste à faire auprès de votre registrar va être de publier votre DS record ou la DNSKEY de la KSK chez votre registrar. Dis comme ça, c’est effrayant mais c’est pas bien compliqué. Cette opération permet de terminer la chaîne de confiance nécessaire à DNSSEC. Selon les registrar il va vous falloir soit le DS soit le DNSKEY complet.

  • Pour obtenir le DS : keymgr lord.re list vous listera toutes les clés actives. Il faut repérer la KSK et noter son tag. Et maintenant keymgr lord.re ds 42754 (42754 étant le tag vu à la commande précédente). Et là vous devriez voir trois enregistrements. Votre registrar vous en demandera un, il s’agit en fait de la même chose mais selon trois méthode de hash différent et là, plus c’est long meilleur c’est pour votre sécurité.

  • Pour obtenir le DNSKEY un simple keymgr lord.re dnskey 42754 et voilà.

Vous devrez réiterer cette opération à chaque renouvellement de la KSK (à faire manuellement une fois tous les deux ans voir une fois par an). En gros DNSSEC s’appuie sur deux types de clés : la ZSK qui signe votre zone. Celle-ci a une taille relativement faible. Du coup on la change constamment (une fois par mois par défaut). Mais du coup pour pas se faire chier à la transmettre au registrar chaque mois, on utilise une autre clé, la KSK. La KSK signe la ZSK. Et on publie uniquement la KSK au registrar. Celle-ci est plus longue et est changée beaucoup moins fréquemment.

À partir de maintenant vous n’entendrez parler de votre registrar que pour renouveller votre nom de domaine avant son expiration :-).

Que mettre dans sa zone ?

On peut mettre tout un tas de truc, commençons par l’indispensable :

  • SOA : Le Start of Authority est indispensable puisque c’est lui qui défini qui est le maître de la zone, le mail de contact et les valeurs d’expiration. Dans mon exemple :

    lord.re.          3600    IN      SOA     zapp.lord.re. lord.lord.re. 2015033233 3600 7200 3600 180
    

Donc le serveur master (ayant autorité) est zapp.lord.re., le mail de contact est lord.lord.re. (remarquez la syntaxe étrange car l’arobase est remplacé par un point (il y a surement moyen d’avoir des adresse mail non parseable)). Vient ensuite le serial 2015033233 qui doit être incrémenté à chaque modification (vous oublierez et aurez des surprises) et les valeurs d’expirations.

  • MX : Le Mail eXchange indique le(s) serveur(s) de réception des emails. On peut en mettre plusieurs et indiquer des priorités c’est pas mal. Vous pouvez bien entendu faire pointer ça vers d’autres domaines que le votre (héberger vos mails sur mx.truc.machin et pas forcément dans votre zone).

    lord.re.                2600    IN      MX      10 zapp.lord.re.
    

    Là on voit que le serveur de mail est sur zapp.lord.re et qu’il a la priorité 10.

  • NS : Le Name Server indique les serveurs DNS ayant autorité sur la zone. Généralement on pointe vers un nom de machine et faut que ce nom de machine ait un enregistrement A valide (l’ouroboros, m’voyez).

    lord.re.                3600    IN      NS      zapp.lord.re.
    

    Le nameserver de ma zone est aussi zapp.lord.re.

  • A et AAAA : Il s’agit de l’enregistrement le plus classique. Vous liez un nom de machine à une adresse IPv4 (A) ou IPv6 (AAAA).

    lord.re.                600     IN      A       92.167.84.9
    

    Et enfin on voit que lord.re. pointe vers l’ip 92.167.84.9.

Bon généralement on se contente de ça je verrai les enregistrements plus exotiques plus loin.

Modifier sa zone

Il existe trois façon de modifier sa zone DNS.

  1. La première est la moins élégante : éditer le fichier de zone et dire à Knot de recharger la zone depuis le fichier. Franchement pas terrible. En plus faut bien penser à incrémenter le serial. Je vous le recommande surtout pas.

  2. La seconde est celle que j’utilisais pendant longtemps et que j’ai déjà décrit en Mars 2015 qui consiste à utiliser nsupdate (ou sa version made in knot, knsupdate). C’est bien, la syntaxe est pas trop affreuse mais franchement je m’en souviens jamais, je me retape mon article à chaque fois ou presque.

  3. La dernière est plus récente et passe directement par knotc pour faire faire les modifs de la zone.

1 : Édition à la barbare

On ouvre le fichier /var/lib/knot/zones/lord.re. On fait les modifs en faisant gaffe à la syntaxe, on incrémente le serial. On teste la syntaxe de la zone avec knotc zone-check lord.re et enfin on recharge avec knotc zone-reload lord.re. Voilà voilà.

2 : (k)nsupdate à l’interactive

On lance knsupdate ce qui va vous ouvrir un shell interactif.

    server 127.0.0.1 (ouai on pourrait l'utiliser à distance avec un peu de crypto)
    zone lord.re.
    update add|del lechamps 600 A 1.2.3.4 (selon si on veux ajouter ou supprimmer)
    send

Et voilà. C’est assez simple. On peut fouttre les commandes dans un fichier texte à donner à manger à nsupdate également. Ça permet de scripter le truc même si la troisième méthode est meilleure pour scripter.

3 : knotc à l’authentique

Tout va se faire via la commande spéciale knot :

    knotc zone-begin lord.re
    knotc zone-(un)set lord.re. truc.lord.re. 600 A 1.2.3.4 (que vous pouvez répéter autant de fois que le voulez)
    knotc zone-diff lord.re. (c'est optionnel mais ça permet d'avoir un résumé des modifs qui seront appliquées)
    knotc zone-commit lord.re.

et voilà c’est pris directement en compte.

Comment questionner le DNS ?

Bon l’outil pour envoyer des requêtes et lire les réponses DNS le plus sympa est dig (ou kdig pour la version made in knot). Donc un ptit dig lord.re vous sortira :

; <<>> DiG 9.11.2 <<>> lord.re
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13708
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;lord.re.                       IN      A
;; ANSWER SECTION:
lord.re.                600     IN      A       92.167.84.9
;; Query time: 13 msec
;; SERVER: 10.0.0.254#53(10.0.0.254)
;; WHEN: Wed Oct 11 19:03:54 CEST 2017
;; MSG SIZE  rcvd: 52

Bon ça raconte quoi tout ça ? Les trucs importants sont le status: NOERROR qui vous indique dans ce cas que c’est bon. Vous trouverez souvent du NXDOMAIN qui veux dire Non eXistant Domain, bref ça n’existe pas (l’erreur 404 http quoi) et également le SERVFAIL qui indique un soucis du serveur.

Ensuite les flags sont sympa surtout le ad qui indique que la chaîne DNSSEC est valide.

On trouve ensuite la QUESTION SECTION qui montre quelle était votre requête et la ANSWER SECTION qui est la réponse obtenue. On voit ensuite le temps qu’à mis la réponse à arriver ainsi que le serveur consulté.

Vous pouvez indiquer quel serveur utiliser en ajoutant @8.8.8.8 par exemple. Vous pouvez également demander un autre type d’enregistrement en le spécifiant et vous pouvez également demander une réponse validée par DNSSEC. exemple : dig lord.re @8.8.8.8 +dnssec MX ou dig @8.8.8.8 +dnssec lord.re MX (c’est plus logique dans cet ordre je trouve).

Avec ça vous couvrez la majeure partie des utilisations.

Les utilisations moins conventionelles

Traditionnelement on utilise donc plus souvent le DNS comme un simple annuaire pour traduire des noms en adresse IP. Mais on peut également se servir du DNS pour d’autres choses.

Un usage assez courant est le système de DNSBL : DNS Black List. C’est un système qui consiste à créer une liste noire de machines. C’est très utilisé dans les systèmes antispam. En gros on consulte un serveur DNS spécifique, en lui demandant quel est l’adresse de machine.qui.spamme.com ? et il répond avec une adresse IP de la forme 127.a.b.c avec a, b et c qui correspondent à des valeurs prédifinies. Si c’est différent de 0 il y a des chances que ce soit du spammeur. C’est un système au final très basique mais rapide et très léger à implémenter.

Voyons plutôt voir comment nous on peut s’en servir. Petit à petit on a rajouté pas mal de nouveaux types d’enregistrements dans le DNS dont certains vraiment très utiles voir indispensables.

Les enregistrements concernant SSH : SSHFP

Lorsque vous vous connectez à un serveur SSH, il envoi son empreinte lors de la connexion. Cela vous permet de vous assurer que vous vous connectez à la bonne machine : si l’empreinte a changé par rapport à une session précédente votre client SSH va vous l’afficher. Le soucis est donc lors de la première connexion : Comment être sûr que la première connexion est sûre ? Et bien en publiant l’empreinte dans votre zone DNS par exemple ?

L’empreinte SSH de votre serveur peut donc être collée dans un enregistrement SSHFP. Pour la générer, sur le serveur SSH lancez la commande ssh-keygen -r lord.re.

lord.re IN SSHFP 1 1 1516af909e7de59af0e4b7cbaefb81c5ddf36b70
lord.re IN SSHFP 1 2 f144fd71beb47a02cc904e305cc35c6ffe034e67b92aa54d1e382c1c1900a104
lord.re IN SSHFP 2 1 83664295d1e46c80cc3ba7865294cbd1649f6350
lord.re IN SSHFP 2 2 c1c1de2b19e6d4e451a9057a3ccc40a53ca29b69c7e2dd006ff4e8884c062ee6
lord.re IN SSHFP 3 1 1929f7d32788a5884d862d2c28a226c73fd62944
lord.re IN SSHFP 3 2 990dfb4b2f3486fb6bf5e5e5a3dd02344da6f42ce5b02992385dfbde30c5d24d
lord.re IN SSHFP 4 1 493848772bcb5b6225424e58e5274984d825f01a
lord.re IN SSHFP 4 2 335d5e9ec2d901b7ffd693fe614f73e4ad0afa40c72d9867dadfd155016c0029

Vous obtiendrez les enregistrement tout bien formatté à coller dans votre zone. Maintenant il est conseillé de dire à votre client SSH de vérifier la présence de SSHFP, donc dans /etc/ssh/ssh_config ajoutez l’option VerifyHostKeyDns yes (ou ask). Voilà un bon moyen simple d’améliorer un chouilla la sécurité de SSH. Faites le pour tous vos serveurs SSH.

Les enregistrements concernant TLS : CAA et TLSA

Là on double le nombre de champs utiles !

CAA

Comme vu il y a peu, les enregistrements CAA permettent d’empêcher la signature de certificats pour votre domaine par une autre CA que celle que vous voulez. Je le considère comme indispensable désormais. Il ne vous protègera pas d’attaque étatique (qui ont les moyens de forcer une CA à outrepasser ça) cependant pour tout ce qui est plus classique c’est une excellente défense. Bref, trois entrées dans votre zone :

lord.re.                600     IN      CAA     0 iodef "mailto:lord-x509@lord.re"
lord.re.                600     IN      CAA     0 issue "letsencrypt.org"
lord.re.                600     IN      CAA     0 issuewild "letsencrypt.org"

La première ligne indique un mail à contacter en cas de comportement suspicieux. La seconde indique quelle CA est autorisée à signer des certs classiques alors que la troisième quelle CA est autorisée à signer des certificats de type wildcard (les certificats qui fonctionnent pour tous les sous-domaines).

TLSA

Pour TLSA c’est un poil plus complexe. Il s’agit d’une des applications de la norme DANE (ou DNS Authentication of Named Entities) qui consiste à publier le certificat (ou son hash) d’un service utilisant TLS. En gros DANE pourrait permettre de se passer des CA en plaçant la confiance non plus dans un tier mais dans le DNS. Malheureusement c’est implémenté à peu près nulle part. Cependant on peut conjuguer les CA et TLSA pour accroitre la sécurité. Donc on créer un certificat, on le fait signer par une CA et on le publie dans sa zone DNS. On peut donc l’appliquer à n’importe quel service utilisant TLS : http, smtp, imap, irc, … bref à peu près tout.

Bon là on va pas se faire chier, on va faire comme tout le monde et utiliser le générateur que tout le monde utilise.

  • Donc là vous entrez les différents champs (3/1/1)
  • Vous collez le certificat (pas la clé privée !)
  • le numéro de port du service en question (443 pour https par exemple)
  • le protocole utilisé (tcp pour https)
  • le nom de domaine concerné par le certificat (www.lord.re par exemple ou juste lord.re)

Et pouf le bouton generate vous filera la jolie ligne à ajouter à votre zone. À noter que pour être conforme à DANE, il faut impérativement que votre zone soit validée via DNSSEC (c’est pas mon cas pour lord.re, pour une sombre histoire de registrar qui veux toujours pas accepter le DS record, bref -___- ).

Les enregistrements concernant les mails : SPF, DKIM, DMARC, STS et OPENPGPKEY

Ici c’est la folie. Le mail étant un des plus vieux protocole d’Internet, il y a pas mal de trucs qui s’y sont greffés pour combattre le spam et aussi améliorer l’authenticité des mails. Commençons gentiement.

SPF

C’est le plus simple de la bande. Celui-là spécifie quelles sont les machines/ip qui sont autorisées à envoyer des mails en provenance de votre domaine. En théorie si vous avez une configuration classique, les seules machines qui enverront du mail en provenance de votre domaines seront les machines déclarées en MX.

Il existe un champs de type SPF mais il est consideré obsolète (dommage), il faut placer ça dans un champs TXT.

lord.re.                600 IN  TXT "v=spf1 mx -all"

Ça veux dire les MX sont autorisés et tout le reste doit être jeté (le boulot de l’antispam). Rien d’autre à faire pour ça.

DKIM

Le Domain Keys Identified Mail est un système de signatures cryptographiques qui va signer le mail et ses entêtes. Les serveurs SMTP traitant le mail vont donc devoir vérifier que ça coïncide avec la clé publiée dans le DNS. En gros ça empêche que le messages et ses entêtes soient modifiés et cela atteste que c’est bien votre serveur qui sont à l’origine de ce mail.

Ce coup-ci il va falloir configurer votre pile mail pour qu’elle signe vos mails. Je vous laisse vous débrouiller pour ça (hors scope de cet article, mais sachez que rspamd sait très bien faire cela). Bref vous allez donc avoir une clé publique que vous allez publier dans un TXT avec cette allure :

default._domainkey.lord.re.     3600    IN      TXT     "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC06MC2/9/YtSn9BS09oMN26UdKO6DMGlCWYsodQ8P+t2CzsSzqUJxaszJmWZglqZyXRjaCMAFUoOF7GiyhXhqM4rSLGxaPHfrLK7f9YlJYAnqdhzEJdEjP8/vkJoMTJxINP9gEBi+wGSGEhoha514NHHtZ4g+QbJZliahwAjl0BQIDAQAB"

Donc les serveurs mails qui recevront vos mails avec les entêtes DKIM vérifieront votre champs DNS qui va bien pour vérifier que c’est ok. Mais rien n’indique ce qu’ils doivent faire si ça ne correspond pas.

DMARC

Ha bha le voilà le truc qui va indiquer aux autres serveurs que faire de vos mails si le SPF et/ou le DKIM déconne. DMARC est donc complémentaire aux deux précédents. C’est encore un enregistrement de type TXT qui a cette gueule

_dmarc.lord.re.    600 IN TXT "v=DMARC1;p=none;pct=100;rua=mailto:lord-dmarc@lord.re;ruf=mailto:lord-dmarc@lord.re;sp=none;adkim=s;aspf=s"

C’est plutôt explicite :

  • le p=none indique la politique que doivent adopter les autres serveurs vis-à-vis de vos mails. Avec none, c’est indifférent. Si vous êtes absolument sûr de vos règlages vous pouvez mettre quarantine voir reject pour que ça soit carrément rejeté.
  • Le rua et ruf vous permet d’être contacté par les serveurs mails pour recevoir des rapports
  • Et enfin adkim=s et aspf=s indique que vous voulez une vérif stricte du spf et dkim, c’est à dire que le nom doit être parfaitement le même (le mode r pour relaxed permet d’émettre depuis un sous-domaine contrairement au strict).

Mon conseil c’est de commencer pépère avec une politique à none et si dans six mois vous avez pas de soucis, de monter d’un cran en passant à quarantine et pourquoi pas plus tard à reject. Si c’est pas bon, vous risqueriez de vous tirer une balle dans le panard !

STS

Celui-là c’est un ptit nouveau. Il est pas encore vraiment sorti de l’œuf à vrai dire mais il est prometteur mais un peu chiant à mettre en place car il dépend du DNS mais aussi d’un serveur web… Ouai il va falloir mettre du json dans .well-known de votre serveur web. C’est pour ça que je l’ai pas encore mis en place mais je pense le faire à terme.

Donc en gros celui-là permet de spécifier comment doivent réagir les serveurs mails se connectant aux votre concernant la crypto : vous pouvez exiger de refuser la connexion si ce n’est pas chiffré. C’est donc vraiment très intéressant d’un point de vue protection de la vie privée de vos mails.

Ça a cette allure _mta-sts.lord.re. IN TXT "v=STSv1; id=20160831085700Z;". En gros ça donne un numéro de politique à suivre. Ensuite il faudra aller piocher dans le json à quoi correspond la politique correspondant à cet id. À mon avis ça aurait pu tenir dans le DNS toussa mais bon…

OPENPGPKEY

Celui-là non plus je ne l’utilise pas (en fait je ne chiffre pas du tout mes mails). Mais il permet de publier sa clé publique dans sa zone DNS. C’est un peu mieux que d’utiliser un serveur de clé publique. N’utilisant pas le truc j’approfondierai pas plus mais il existe ce générateur.

Conclusion des mails

Pour résumer on se protège du spoof grâce à DKIM et SPF. On s’assure de l’intégrité des ses mails via DKIM et DMARC. On s’assure(ra) que personne ne puisse lire les mails grâce à STS (en dehors des serveurs émission/réception) et on s’assure même que les serveurs eux-mêmes ne puissent lire le contenu grâce à PGP. Voilà notre stack mail est blindée.

Conclusion globale ?

Ouai vite fait une ptite conclusion. Le DNS contient des données qui sont publiques mais dont l’authenticité est de plus en plus critique. Modifier des requêtes DNS (enfin les réponses) à la volée pour modifier une clé PGP ou SSHFP ça pourrait avoir des conséquences assez désastreuses. C’est pour ça qu’il est indispensable de déployer DNSSEC sur votre domaine. Avec knot c’est vraiment simple. D’ailleurs est-ce que votre résolveur DNS actuel valide DNSSEC ?

Liens utiles :

Gérer ses dotfiles simplement avec git

Ça fait plusieurs fois que je vous tease sur ce sujet donc voilà je me lance. Je vais vous expliquer ma façon de gérer mes dotfiles. C’est un sujet assez récurrent chez les linuxiens et visiblement tout le monde à sa ptite façon de faire.

Certains font une soupe à base de lien symbolique dans tous les sens histoire de tout centraliser dans un seul dossier plus facilement copiable. D’autres utilisent des scripts ou softs exprès pour gérer ça comme par exemple GNU Stow. D’autres plus barbus adoptent un système basé sur du Makefile (et c’est finalement pas si crado que ça). Personnelement je ne voulais pas devoir apprendre à utiliser un autre soft. Je veux pas devoir installer un soft exprès pour ça. Je veux pas me faire chier avec des liens symboliques à faire moi même. Je veux un truc versionnable pour pouvoir revenir en arrière en cas de connerie.

Git à la rescousse

Une solution complète est d’utiliser Git. Comme ça on versionne, on synchronise facilement et puis on peut même se faire des branches pour avoir des variations sur différentes machines. Mais du coup la question qui se pose est comment on le fout en place ? Est-ce qu’on fout tout son /home/ dedans mais du coup ça va contenir à la toque de fichiers qu’on a pas forcément envie de fouttre dedans ? Et puis surtout le plus problèmatique c’est qu’on va se retrouver avec tous les dossiers de git bien moches (description, HEAD, hooks, logs, refs,…) bref pas envie que ça trône là.

La commande git qui tue

git –git-dir=/home/lord/.myconf –work-tree=/home/lord

Voilà la bête. À mettre dans un alias (par exemple config). Donc en gros toutes les saletés de git sont stockées dans /home/lord/.myconf et du coup ça devrait être propre.

Comment qu’on s’en sert ?

Bon première chose à faire c’est ajouter les fichiers que vous voulez gérer avec config add .ssh/config pour prendre un seul fichier ou bien config add .ssh pour prendre tout le dossier (attention si vous mettez vos clés privés dedans ça a des implications au niveau de la sécurité, je vous recommandes de ne pas inclure vos clés privées dedans (personnelement je ne le fais pas)).

Ensuite on vérifie l’état du bousin avec config status :

lord@hermes ~ %config status
On branch master
Your branch is ahead of 'origin/master' by 4 commits.
  (use "git push" to publish your local commits)
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        new file:   .config/mpv/scripts/fix-sub-timing.lua
        new file:   .ssh/config
        new file:   .ssh/known_hosts
Untracked files not listed (use -u option to show untracked files)

Ensuite il faut commit leur état actuel. Je vous recommande de faire des commits différents pour chaque fichier (tout du moins chaque fichiers logiquement groupés entre eux). Donc config commit .ssh/config .ssh/known_hosts -m “[SSH] ajout de .ssh/config et .ssh/known_hosts” .

lord@hermes ~ %config commit .ssh/config .ssh/known_hosts -m "[SSH] ajout de .ssh/config et .ssh/known_hosts"
[master 35259ea] [SSH] ajout de .ssh/config et .ssh/known_hosts
 2 files changed, 271 insertions(+)
 create mode 100644 .ssh/config
 create mode 100644 .ssh/known_hosts

Bon bha c’est fait. Si par mégarde vous avez mis des fichiers que vous ne voulez pas dans votre repo il va vous falloir config rm –cached .ssh/id_rsa . Le point important est le –cached qui ne supprimera pas le vrai fichier mais juste le fichier du repo. Méfiance.

Hey mais tu m’apprends à utiliser git ?! Ouai bha un tout petite peu. C’est surtout pour convaincre ceux qui ne sont pas dev, que de faire un chouilla de git c’est pas trop compliqué et que c’est super puissant comme outil.

Bon et comment on altère le passé ?

Bon déjà comment trouver la modif qui foire ? Déjà pour voir les commits c’est avec config log vous y verrez la date, le numéro de commit et le message. Si vous voulez voir ce que contient un commit config diff xxxxxxxxx. Si c’est trop confus et que vous voulez voir les modifs d’un fichier précis dans le commit config diff xxxxxxx votre/fichier.

Vous avez trouvé le commit foireux et vous voulez annuler ? Le mieux c’est de faire un config revert xxxxxxx. Vous voyez l’intéret de fractionner vos modifs dans plusieurs commits ? Plus vous ferez des ptites modifs dans un seul commit plus ce sera simple de revenir en arrière.

Si vous voulez juste voir dans quel état vous étiez à un moment donné, config checkout xxxxxxxxx est votre ami. Vous serez dans le mode dit DETACHED HEAD. Par simplicité, évitez d’y faire des modifs. Pour revenir dans l’état courant lancez un config checkout master . Et voilà.

Sachez qu’il existe les commandes reset et aussi le reset –hard mais c’est assez dévastateur. Renseignez-vous bien avant de les utiliser.

Mais du coup comment je sync ça ailleurs ?

Pendant longtemps j’ai pas synchronisé le cafoutch mais désormais je le fait dans un soucis de backup principalement. Mais ça peut servir pour utiliser sur de multiples machines. Désormais j’utilise un gogs (autohébergé via sandstorm) qui me permet d’avoir une ptite interface web mignonette. Du coup j’ai deux repos : un de backup et le gogs. Le but de l’article n’est pas de voir comment héberger ça donc sur ce point débrouillez-vous. Une fois l’hébergement solutionné il vous suffira donc dans votre repo local d’ajouter les repos distants.

Pour ajouter mon gogs j’ai donc config remote add gogs https://xxxxxxxx et pour ajouter mon backup config remote add origin ssh://xxxxxxx.

Pour y envoyer les commits il faut penser à config push gogs et config push origin. Voilà tout simplement.

Pour récupérer d’éventuelles modifs distantes on lance un config fetch suivi d’un config status encore une fois pour voir si on est retard par rapport à HEAD. Si c’est le cas, on lance un config pull. Et voilà.

Donc pour résumer avant toute chose on fetch pour s’assurer qu’il n’y a pas de modif, s’il y en a on pull et sinon, si on fait des modifs on pull. Ça couvre à peu près tout.

Et donc le plus important comment ajouter le barda sur une nouvelle machine. On se place dans le /home/votre_user. Là il va malheureusement falloir tout virer mais bon vous pourrez remettre les trucs après. Donc on commence par refouttre l’alias du début. Et puis on fait un config init ., suivi d’un config remote add origin VOTREREPO, ensuite un config pull origin (qui risquera de prendre un peu de temps et pour finir config checkout master. Pouf vous avez tout vos fichiers.

Pas aussi simple que ça en l’air ton machin

Bof non franchement ça va assez bien. Au final c’est de l’utilisation assez basique de git. J’aborde pas les branches car j’en utilise pas mais c’est pas trop compliqué non plus. Et ça vous permettra d’avoir une branche spécifique par machine (si jamais vous voulez pas exactement la même chose de partout).

Enregistrement DNS de type CAA pour protéger votre TLS

La mouvance actuelle de chiffrer de plus en plus de contenu est vraiment une bonne chose. Un peu plus de sécurité pour tout le monde c’est parfait. Surtout si c’est bien fait sinon c’est complètement contre-productif. Letsencrypt a énormément contribué à la démocratisation des certifs x509 pour le TLS grâce à son protocole bien efficace et aussi ses tarifs imbattables.

Certificate Transparency

Comme de nombreuses CA (Autorité de Certifacition : les organismes “de confiance” qui signent les certificats x509 qu’on leur soumet) désormais, Letsencrypt participe au Certificate Transparency. Il s’agit d’un log publique remplie par les CA où elles annoncent tous les certificats qu’elles signent. En gros avec ça vous ne pouvez plus prendre de certificat discrètement sans que ça ne se sâche.

Si jamais une CA sérieuse (ça veux dire à minima qu’elle participe à Certificate Transparency) signe un certificat, elle le publiera donc dans le log ce qui permettra donc de voir quand est-ce qu’il y a un nouveau certificat et émis par quelle CA. Avec ce système il est donc possible de savoir qu’un certificat a été émis, par quelle CA, et quand. Donc vous allez pouvoir savoir si un certificat a été émis dans votre dos.

Vous trouverez ici tous les certificats signés par Letsecrypt.

CAA

Le Certificate Transparency c’est donc déjà une bonne première étape mais il y a mieux ! Il est désormais possible d’indiquer quelle CA est autorisée à signer des certificats pour un domaine. Depuis Septembre 2017, les CA ont l’obligation de vérifier qu’elles sont autorisées à signer vos certificats via l’enregistrement DNS de type CAA.

C’est donc dans le DNS que l’on va indiquer quelle CA peut signer vos certificats. Si elle n’est pas présente dans le CAA, une CA ne pourra pas signer des certificats. C’est donc une énorme amélioration de la sécurité.

Mise en pratique

Bon donc dans votre zone DNS vous allez simplement ajouter lord.re. CAA 0 issue "letsencrypt.org" et hop. Seul letsencrypt peut désormais signer vos certs.

C’est tout. Si vous voulez du wildcard il faut une autre ligne : lord.re. CAA 0 issuewild "letsencrypt.org" bon c’est plutôt logique. Vous pouvez mettre plusieurs ligne CAA bien entendu si vous voulez utiliser plusieurs CA différentes.

Il est également possible de spécifier une adresse mail de contact pour être averti par la CA se faisant envoyer bouler : lord.re. CAA 0 iodef "mailto:truc@votrema.il" et zou.

On supercharge encore plus DNS et on est toujours aussi dépendant des CA

Le DNS contient de plus en plus d’informations sensibles. On peut déjà y mettre des clés publiques SSH, on y met des hash de vos certificats et maintenant on y place également les CA avec lesquelles vous collaborez. C’est donc de plus en plus un élément sensible dans la chaîne de sécurité. DNSSEC est donc de plus en plus indispensable. Sa démocratisation est indispensable. Les registrar doivent s’adapter et les logiciels également pour prendre en compte ce protocole.

Le rôle des CA est toujours aussi central. Une CA malveillante pourrait ne pas publier certains certificats dans le log publique… Elle pourrait également ne pas prendre en compte l’enregistrement CAA… Leur rôle est toujours autant basé sur la confiance et il est de plus en plus nécessaire de pousser l’adoption de DANE. Il est triste que cette norme ne gagne pas plus d’adoption générale :-( Ce serait-ty pas chouette que TLSA et CAA soient implémenté par tous les navigateurs ?

Microcache nginx pour améliorer les perfs et diminuer le downtime

Depuis que mon serveur ne me sert plus de routeur il m’arrive de le couper de temps à autres. Et pourtant mon site reste accessible. J’ai en fait, sur mon routeur, installé un container avec un nginx qui tourne et qui proxy. Les connexions se font donc via le nginx du routeur qui sert de cache quand le vrai serveur ne répond pas. Mais histoire de ne pas avoir de contenu pas à jour mais toujours d’une fraîcheur exemplaire je me contente d’un cache de maximum 1seconde.

1s de cache

Oui oui une seconde suffit. Bon dans mon cas c’est overkill car mon site est statique mais pour des sites dynamiques à fort trafic c’est clairement valable. Fournir un contenu vieux d’un seconde n’est généralement pas gênant. Par contre la différence de perf est assez énormissime.

Mais au delà de ça, si on rajoute deux trois options de configuration, vous pourrez vous prémunir des downtime (ce que je recherchais surtout).

Bon on va définir le_cache qui va être l’endroit où seront stockées nos données en cache : proxy_cache_path /var/www/cache keys_zone=le_cache:1m max_size=20m inactive=10d use_temp_path=off;

Bon sur la machine qui va vous servir de proxy vous allez dans la conf du bel nginx /etc/conf/nginx/nginx.conf vous ajoutez la conf du vhost:

server {
        listen 80;
        listen 443 ssl http2;
        server_name www.lordtoniok.com lordtoniok.com bender.lordtoniok.com www.lord.re lord.re bender.lord.re _;
        include ssl.conf;
        ssl_certificate /etc/ssl/acme/lord.re/fullchain.pem;
        ssl_certificate_key /etc/ssl/acme/private/lord.re/privkey.pem;
        location /.well-known/acme-challenge {
            alias /var/www/acme;
        }
        location / {
                proxy_cache le_cache;
                proxy_pass http://10.0.0.1;
								proxy_cache_lock on;
                proxy_cache_use_stale updating error timeout http_502 http_503;
                proxy_cache_valid 200 1s;
                add_header X-Cache-Status $upstream_cache_status;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
							#	proxy_buffering off;
        }
}

La magie se trouve dans le proxy_cache_use_stale qui fait en sorte d’envoyer le cache si le serveur upstream ne répond pas.

Désormais je peux couper le serveur sans que ça ne se voit. Ça peut permettre de mettre à jour l’esprit libre. Sur un site dynamique ça peut énormément booster les perfs sans trop de détriments (surtout avec juste 1s de cache).

Le proxy_buffering off; n’est peut-être pas adapté à votre cas mais si je ne le met pas, lorsqu’un bienveillant internaute tente de récupérer un fichier un poil gros (plus de quelques Mo) bha ça déconne de partout car la machine a peu de ram, donc ça rentre pas en ram, donc nginx tente de fouttre ça dans le cache, mais comme j’ai restreint le cache à 20Mo… bha si ça rentre pas dedans ça merdoie et ça n’envoi plus les données. Voilà voilà. Donc là je l’ai mis en commentaire car cet exemple n’est qu’un morceau de ma conf complète mais je voulais quand même vous présenter cette option.

Substring History Search dans ZSH

Les shells de nos chers unices sont de merveilleux outils qui permettent d’interagir avec nos OS. C’est mon interface principale. Je l’utilise constamment et pour tout. J’utilise très peu de logiciels graphiques. Un navigateur, un terminal et un lecteur vidéo. Voilà tout.

Par contre je dois avouer que j’ai pas une super mémoire et du coup j’ai parfois du mal à me rappeler de certaines commandes. C’est d’ailleurs pour ça que j’utilise Foldcat comme vu il y a quelques temps. Par contre ça ne fait pas tout encore. J’ai donc une botte secrète.

Historique des commandes

Le shell garde en mémoire toutes les commandes que vous lancez. Vous avez alors un fichier history ou zhistory qui traine dans votre /home. Dans pas mal de shell vous pouvez chercher dans cet historique avec Ctrl-r , c’est pas mal. Mais c’est pas non plus la panacée. On va ajouter un ptit script à notre cher ZSH pour le rendre superbement efficace sur ce point. Donc on va fouttre ce fichier /etc/zsh/zsh-history-substring-search.zsh en place puis on va faire en sorte qu’il soit utilisé. Pour ça on édite /etc/zsh/zshrc pour y placer un petit source /etc/zsh/zsh-history-substring-search.zsh si possible vers le début du fichier (là où on source tous les scripts pour bien ranger).

Il ne nous reste plus qu’à affecter une touche pour déclencher l’action. On édite encore /etc/zsh/zshrc et ce coup-ci vers la fin (où on range soigneusement tous les keybinds) bindkey "^[[A" history-substring-search-up et bindkey "^[[B" history-substring-search-down et voilà. ^[[A correspond comme vous le savez à la flêche du haut et donc ^[[B évidemment à celle du bas.

Mise en pratique immédiate.

On ouvre un nouveau shell pour que ce soit pris en compte (ou alors on source mais franchement on est flemmard jusqu’au bout). On commence à rédiger une commande genre hugo ne , puis on fait flêche du haut et là pouf votre commande se complète. Si la commande qui arrive est pas la bonne, on continue d’appuyer en haut ou en bas. Et voilà.

C’est vraiment efficace, surtout que l’on peut rentrer n’importe quel morceau de la commande recherchée, pas forcément les premiers caractères. Ça mériterait d’être dans tous les shells par défaut !

Unmount son root sans reboot

Vous avez jamais voulu démonter la partition racine de votre ptit nunux ? Non ? Pourquoi faire ?! Bhaa je sais pas moi, par exemple faire des opérations sur votre partition racine (redimensionner/changer le filesystem/réparer le fs). Sauf que bon en temps normal vous ne pouvez pas démonter la partition racine puisque votre OS est sur cette partition.

Par chance, nous vivons dans une époque merveilleuse où l’on possède tous pas mal de Giga de ram ce qui rend l’opération possible et même assez simple. Allez on y va !

Couper tout ce qui tourne

Pour pouvoir démonter votre partoche il va falloir couper tous les processus faisant des accès disques (lsof va être votre ami). Cette étape peut être faite au tout dernier moment avant le grand saut pour impacter le moins possible l’uptime de vos services.

Si vous avez suffisamment de ram vous pouvez même vous débrouiller pour ne pas couper ou juste relancer les processes mais c’est un poil plus touchy. Surtout si vous avez des données qui sont susceptibles d’être modifiées pendant que ça tourne.

Recréer son userland en ram

Bon donc le but du jeu ça va être de se créer une partition racine mais dans la ram. Donc déjà première étape, on se créer un point de montage mkdir /ramroot et ensuite on y monte du tmpfs avec mount -t tmpfs none /ramroot .

Là ça y est, tout ce que vous collerez dans /ramroot ne sera pas sur votre skeudur mais dans votre ram.

Là, deux choix s’offrent à nous : votre partition racine peut être contenue dans votre ram (c’est le plus simple) ou bien vous n’avez pas assez de ram et du coup va falloir recréer de 0 ( j’aborderai pas ce point mais en gros soit vous ne prenez que le strict nécessaire de votre rootfs, soit vous n’avez qu’à pécho un rootfs sur les interwebz ).

Bon donc cp -ax /{bin,etc,sbin,lib32,lib64,lib} /ramroot puis pour s’économiser de la ram mkdir /ramroot/usr suivi de cp -ax /usr/{bin,sbin,lib32,lib64} /ramroot/usr . Voilà on a tout l’userspace !

Tout ? Non. Il manque plus que les montages “bizarres”.

Bon bah mkdir /ramroot/dev /ramroot/sys /ramroot/proc pour créer les points de montage. Par contre là vu que ça existe déjà sur votre disque dur, on va juste “binder” avec mount –rbind /dev /ramroot/dev puis mount –rbind /proc /ramroot/proc et mount -t proc none /ramroot/proc et là c’est tout bon.

Le grand saut

Bon bah vous avez un bien bel userspace de dispo dans votre ramdisk. On peut donc se décider à migrer dedans.

Premièrement mkdir /ramroot/oldroot va accueillir notre skeudur. Et maintenant la commande miraculeuse.

pivot_root /ramroot /ramroot/oldroot

Et là votre racine est désormais votre ramdisk. Maintenant vous pouvez umount /dev/sda2 et admirer votre dur boulot.

Vous pouvez faire ce que vous vouliez faire désormais. C’est beau, hein ? Au final c’est diablement simple et super efficace.

Revenir

Vous voulez revenir sans rebooter ? Easy vous n’avez qu’à mount /dev/sda2 /oldroot et enfin pivot_root /oldroot /oldroot/ramroot et pouf vous voilà hors de votre ramdisk de retour sur votre partoche.

Refonte complète du site

Ça faisait un bail que j’avais pas trop touché au site (blog ?). Ça fait depuis quelques années qu’il ne s’agissait que d’un simple fichier index.html que j’éditais à la mano dans vim. Une seule et unique page avec tout le contenu. C’était plutôt élégant techniquement et pratique. Mais ça a aussi quelques limites. La première c’est que j’avais pas de flux rss. C’est un peu la honte. Étant moi même présentement présent un très grand utilisateur des reusseusseu ça me tiraillait. D’autant plus que je ne publie absolument pas régulièrement sur le site. Il se passe régulièrement de nombreux mois sans que je ne prenne la plume puis soudainement il va m’arriver d’écrire coup sur coup quelques articles (comme actuellement). Le rss brille dans cette situation : on consulte le site, on aime le contenu, on choppe le rss, puis le site dort pendant quleques mois et d’un coup pouf à l’improviste ça apparait dans l’agrégateur.

Bref j’ai craqué

J’ai tenté un outil ou deux pour générer manuellement le rss mais c’était soit hébergé ailleurs (coucou feed43) soit assez crado soit fallait que je me motive à pondre du xslt des familles. Et puis bon ça me trottait un peu quand même dans le crâne de tester les nouveaux cms statiques à la mode actuellement. J’ai un peu reluqué l’offre actuelle. Je connaissais un peu wok et pelican mais celui qui me faisait de l’œil c’était hugo. Je sais pas trop pourquoi d’ailleurs. Étant un lecture plutôt assidu d’HackerNews (hn pour les intimes) je dois avouer que je suis légèrement éclaboussé par la hype de rust et go. Et hugo est en go. Et le go c’est sympa ! C’est facile à compiler/installer. Pas d’emmerdes avec les dépendances. C’est performant et coup de bol il y a un ebuild (pas super à jour mais bon pas trop à la bourre non plus) dans gentoo.

Bon ça donne quoi ?

Bon alors on suit le guide officiel dans la doc :

  • Étape 1 : installation. Easy c’est packagé dans gentoo. next.

  • Étape 2 : Création d’un nouveau site. Heuuu ça tombe bien je veux faire un site ! Bon en vrai c’est une commande hugo new site le_nom_du_site

  • Étape 3 : Choisir un thême. On va voir la gallerie. Il y a pas mal de choix. J’en trouve un sympa. J’installe à coup de git. Erf il utilise js et pleins de trucs externes. Bon m’en contente pour l’instant

  • Étape 4 : Ajouter du contenu. Logique. La commande est hugo new nom/du/fichier.md . Puis on édite ce fichier dans notre éditeur de texte favoris (vim, what else ?).

  • Étape 5 : Customiser le thême. Pas bête mais j’ai dit que je verai après, donc j’ai vu plus tard.

  • Étape 6 : . Quoi ?! Pas de sixième étape ? Ha bha non la doc s’arrête là. Bon en vrai il faut modif le config.toml pour y modifier l’install. Et enfin il faut générer pour publier à grand coup de hugo. Voilà.

Ça donne quoi du coup ?

Bha franchement j’aime bien. Ça permet d’utiliser du markdown pour rédiger. Je suis pas vraiment fan du markdown mais bon je pense que je chopperai le coup de main. On peut modifier le site ouaib assez facilement, changer de thême super simplement. La génération est très rapide (moins d’une seconde). Ça gère les catégories et les tags (je les utilise de la même façon). Donc pour le lectorat c’est quand même plus agréable : le site est plus moderne. Pour l’instant je suis conquis. À voir dans la durée.

D’ailleurs ce post a été écrit il y a un mois et j’ai mis une date de publication dans le futur pour voir.

Et tu parles pas du nouveau design ?

Haha merci titre de me rappeler d’en parler ! Bon bha voilà j’ai refait un nouveau design. Donc au début j’était parti sur un thême existant (redlounge) et je pensais le modifier un peu. Mais au final quand j’ai vu qu’il fallait du js toussa toussa j’ai changé d’avis. Du coup j’ai regardé un peu son code voir comment c’était branlé et au final pour ce que je voulais faire ça allait être diablement simple.

Ni une ni deux je commence à trifouiller un truc simple dans la même charte graphique que l’ancien site (le fameux design4.css) mais je voulais en profiter pour adapter mon site aux grands écrans. Depuis peu j’ai un écran 4K et j’en ai marre des sites pas super adaptés. Donc je veux un truc qui s’adapte aux téléphones, aux ordis habituels et à la 4K. Je veux pas une usine à gaz.

Bon je commence à partir vers du flexbox, le truc un peu à la mode pour simplifier les designs flexibles. Ouai c’est vrai que ça a l’air sympa. C’est pas mal de pouvoir réordonner l’ordre d’affichage dans le css. Mais bon c’est quand même plus adapté aux sites plus complexes. J’ai pas besoin d’aussi complexe. En gros je veux une sidebar qui se fouttent à l’horizontal en haut quand l’écran est petit. J’ai donc testé sur un truc à base de column (la propriété css3). Mouai c’est pas bien pour organiser un layout, pas du tout fait pour. C’est bien pour ranger du texte mais pas plus.

Au final j’ai utilisé une ruse. Un div en position:fixed pour la sidebar et un autre div qui est juste décalé de la taille de la sidebar. Et quand l’écran est plus petit je fais plus de position:fixed et voilà. Et j’ai mis plusieurs tailles de font en fonction de la taille. Bref vous voyez le résultat actuellement.

Voilà j’apporterai probablement des modifs par-ci par-là j’imagine.

Foldcat : se rappeler de quelque chose quand on rentre dans un dossier

Vous avez une mémoire de poisson rouge comme moi ? Ça vous arrive d’installer des trucs un peu exotiques et de pas vous souvenir comment ça fonctionne. Du coup vous allez dans le dossier en question et là vous fouillez à coup de ls / tree / –help. Pas mal mais et si on avait un ptit truc qui venait nous aider.

Foldcat : le chat du dossier

Votre chat vous passe dans les panards quand vous entrez dans une pièce ? Ouai bha le script qui va suivre va faire pareil. Quand vous entrerez dans un dossier bam, le script va vous sauter au visage.

On va apprendre à ZSH à nous afficher du texte quand on rentre dans un dossier. Ce petit bidouillage fonctionne avec ZSH mais j’imagine que si vous maîtrisez bash, vous devriez pouvoir le recréer sans trop de difficulté.

Bon alors on va commencer par éditer /etc/zsh/zshrc parceque comme ça tout le monde aura droit à cette merveille. Dans ce fichier on va juste mettre un ptit source /etc/zsh/prompt.zsh . Jusque là c’est easy.

Maintenant créons ce /etc/zsh/prompt.zsh et dedans on y fout ça :

function preexec() {
	# on initialise timer pour chronométrer les commandes et oldpwd pour foldcat
  timer=${timer:-$SECONDS}
  oldpwd=$(pwd)
}
function precmd() {
  # reset le background en noir
  /bin/echo -e "\033]11;#080808\007"

  # déclenchement de foldcat. Penser à modifier le chemin de foldcat.db où vous voulez le mettre
  if [ "$oldpwd" != "$(pwd)" ] ;
  then
    /bin/grep "$PWD " /home/lord/.config/foldcat/foldcat.db | cut --delimiter='"' -f2;
  fi

  # affichage de la durée d'execution de la dernière commande
  if [ $timer ]; then
    timer_show=$(($SECONDS - $timer))
    export RPROMPT="%F{cyan}${timer_show}s %{$reset_color%}"
    unset timer
  fi
}
 # bon là c'est juste la customisation du prompt
autoload -U colors
colors
PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg_no_bold[yellow]%}%1~ %{$reset_color%}%#"

Le ptit foldcat.db

Là c’est ultra simple. Perso je l’ai foutu dans ~/.config/foldcat/foldcat.db comme ça c’est tout bien gitté avec tous mes fichiers de conf (je vous raconterai un jour je vous le promet).

/home/lord "Home sweet home" ouai ça sert à rien
/home/lord/www "site ouaib géneré par hugo. Pour publier : hugo new posts/XX-bla-bla.md ; vi content/posts/XX-bla-bla.md ; hugo ; Penser à gitter" petit aide-mémoire des familles

Et voilà le genre de contenu. C’est ultra simple, pas trop de risque de faire des conneries. Ça s’édite dans vim. On peut mettre des commentaires.

Guide d'utilisation d'IRC : niveau 5

Guide pour ircop : Protéger son réseau

Cette partie est plus un mémo personnel qu’un guide général. C’est très spécifique à l’ircoperie de Geeknode…

Premier rappel : globalement on évite les operoverride (utiliser des commandes d’op, lorsqu’on est pas op sur un chan. La modération des chans n’est à priori pas du ressort des ircop.

Gérer les relous

La plupart des relous peuvent être calmés par un /gline lerelou 1h cependant si le relou en question revient constamment un moyen très efficace est le /tempshun lerelou il pourra toujours écrire/interagir sauf que personne ne recevra ses daubes. Il ne s’en rendra pas compte. Cela dit, certains clients bizarrement foutu se retrouvent en ping timeout et du coup ça recommence…

Pour les spammeurs occasionnels qui viennent, balancent leur message puis disparaissent quelques heures/jours, il faut passer par un spamfilter. Ça marche à base de regex toussa de ce genre /spamfilter add -simple cpnNPq kill|shun|gline - le_nom_du_spam_filter le_spam

Admins habituel

  • Problème d’auth : C est capricieux avec l’envoi des mails, du coup généralement les mails de mot de passe perdus n’arrivent jamais. La technique est donc de /msg C oper superadmin on pour passer en mode berzerk puis /msg C oper forceauth bidule .
  • Suppression d’un gline : il est préferrable de d’abord les lister avec /stats G. Ensuite pour supprimmer un gline c’est simplement /gline -le@gline . Et voilà

Guide d'utilisation d'IRC : niveau 4

Guide pour op : Protéger son salon

Tout fier de votre casquette d’op, vous vous demandez comment protéger votre fief des abrutis spammeurs/emmerdeurs ? Haha voilà un ptit guide pour défendre votre chez vous.

Enregistrez votre salon

C’est la toute première chose à faire auprès de C avec /msg C chan register #votresalon, ici pas de mot de passe, par contre il faut que vous soyez identifié pour que ça fonctionne (comme toute la suite). En faisant ça, vous deviendrez le fondateur du salon (founder). Il ne peut y avoir qu’un seul fondateur qui pourra être assisté par des proprios (owners).

Gérer vos utilisateurs

C’est un très vaste sujet qui pourrait suffire à un article dédié mais on va survoler et donner quelques clés.

Il y a deux modes de gestions : soit avec des flags, soit avec des niveaux. Les flags sont le moyen le plus simple à privilégier à moins de vraiment vouloir du tordu. Il s’agit d’une simple liste d’utilisateur et pour chacun vous indiquez les accès de l’utilisateur.

Par exemple dans le salon #truc, vous voulez que l’utilisateur Lord soit op : /msg C chan access #truc Lord +oO. Désormais quand Lord rejoint #truc il pourra devenir op (+o) et il sera automatiquement op (+O). C’est pris en compte immédiatement. C’est donc un peu de boulot de remplir la liste des accès d’un salon mais c’est tout de même assez flexible et évite de se taper ça manuellement par la suite.

La liste des accès possibles se trouve via /msg C help chan access flags. Il est à noter que ça ne fonctionne qu’avec les utilisateurs enregistrés (ouai va falloir pousser vos utilisateurs à s’enregistrer pour profiter de ces raffinements).

Si vous êtes déconnecté et qu’aucun op n’est dispo mais que vous avez les accès requis pour l’être, il va vous falloir récupérer les accès. Donc pour op quelqu’un (ou vous même) il faut /msg C chan op #lechan lepseudo . Bon c’est pas mal mais si on a pas mal de monde à traficoter c’est long. Là on peut faire un /msg C chan resync #lechan pour que tous ceux qui ont un accès de configuré retrouvent leur accès. Rapide et efficace.

Les options

Bon bha maintenant que vous avez votre petite équipe d’utilisateurs/op de bien gérée, il va vous falloir modifier deux trois options. La première option intéressante est le private qui permet de planquer quelques informations sur le chan, le second est le secure qui permet de voicer/opper uniquement les utilisateurs identifiés et éventuellement protectops qui empêche les ops d’être déoppé. /msg C chan set #lechan loption on

Les modes d’accès

Il y a pas mal de modes pour les salons, cette partie va être un gros morceau. À commencer par les “modes d’accès” tels que vhoq (voice/hop/op/owner) mais ceux-là on les a déjà abordé.

Il y a également le mode b qui est en fait la liste des bans du salon.

Une fonctionnalité peu connue mais qui peut être utile est le mode I qui est une liste permettant aux gens présents sur celle-ci de joindre le chan même quand il est en mode i (inviteonly).

Les modes indispensables

Dans les modes basiques mais indispensables on retrouve le trio ntT ainsi que le s et le k.

  • n permet de bloquer les messages en provenance de personnes extérieures au salon (ouai sur irc, de base, vous avez le droit d’envoyer un message à un salon sans forcément y être).

  • t quant à lui bloque les modifications du topic aux membres de niveau h ou plus alors que le T bloquer les “notices de salon” (qui sont un moyen exotique d’irc pour afficher des messages sur le salon (généralement vous n’en voudrez pas)).

  • s permet de déclarer un salon comme étant secret. C’est à dire qu’il n’apparait pas dans les whois des utilisateurs et qu’il ne sera pas listé lors d’un /list.

  • k permet de mettre un mot de passe (key) à un salon. Bon finalement, un ptit dernier pour la route, si vous êtes en milieu hostile, vous pouvez choisir de n’accepter que les gens utilisant du chiffrement via le mode z.

Les modes “défensifs”

Bon passons aux modes pour se défendre des gentils vilains.

  • Le premier mode (le plus connu) est le m pour modération. Une fois activé, seuls les gens de niveau “+” ou plus pourront parler sur le salon. Les casses pieds se retrouvent ainsi bouche bée.

  • Il existe également le mode M qui est une variante qui est similaire sauf que les personnes identifiées même non voicées peuvent également parler.

  • À coupler avec le mode i où seuls les gens recevant une invitation (via la commande /invite) pourront joindre le canal (d’ailleurs si vous êtes à la porte et que vous voulez une invitation, faites un /knock #lesalon). Ces trois modes permettent de réagir à la majorité des attaques simples.

Les modes contre les bots

Les attaques de bots sont un peu plus relou. Généralement ça consiste en de très nombreux “utilisateurs” qui rejoignent puis quittent immédiatement avec un message ou non, ceux qui vont changer de pseudo constamment, ceux qui vont flooder le salon. Il y a plusieurs solutions pour ça.

  • c ce mode bloque tout ce qui est formatage du texte comme le gras/italique/couleurs.

  • l ( L minuscule pour ceux qui ont une font pourrie ), permet de limiter le nombre de personnes connectées au salon.

  • On bloque les hordes de knock avec le mode K (ouai ce genre d’attaque relou existe très rarement mais ça s’est déjà vu).

  • Pour contrer les changements de pseudo c’est le N.

  • Le R permet de limiter les join aux seuls membres enregistrés auprès des services (redoutable).

  • Le dernier mode intéressant et l’un des plus complexes (ça reste soft quand même) est l’antiflood f. Il permet de définir des règles et du coup possède une syntaxe différentes des autres. Typiquement /mode +f [5t]:15 signifie qu’à partir de 5 lignes de textes en 15 secondes, la personne sera kickée. Pas mal de possibilité pour ce mode sont à voir sur sa page de doc officielle ou bien directement depuis votre client irc via /quote helpop chmodef.

Bon voilà pour ce que vous pouvez faire en tant qu’op sur un salon. C’est pas exhaustif mais ça permet de pouvoir réagir dans pas mal de situations.

Concernant Geeknode : ces derniers temps on a ajouté quelques modules pour se protéger des lourdingues.

  • Le premier est l’anti-amsg. Les amsg sont des messages qui sont envoyés sur plusieurs canaux simultanément.

  • Ensuite plus sympa c’est l’anti-caps. POUR ÉVITER LES HURLEURS. Les messages contenant trop de majuscules seront passés en minuscules. C’est un poil moins aggressif.

  • Et troisièmement l’anti-masshl. Les HL ou Highlight c’est quand quelqu’un mentionne le pseudo de quelqu’un. Dans la plupart des clients irc ça créer une notification et ça change les couleurs pour quelque chose de très visible (un highlight). Bref, ce module va dropper silencieusement (ne pas envoyer le message sur le salon) les personnes sans aucun modes (pas voice,hop,op,…) faisant plus de 5 hl consécutifs (dans la même phrase ou alors 1hl par phrase dans 5 phrases d’affilées). Bref pas mal pour virer les pollueurs. Ce comportement peut être désactivé (certains bots ont tendance à hl) en mettant le salon en s ou i.

Guide d'utilisation d'IRC : niveau 3

Guide perso : Se protéger des relous

Alors la toute première des choses à faire pour se protéger c’est d’enregistrer son pseudo auprès des services. Ça évitera que quelqu’un le prenne et se fasse passer pour vous. Pour cela il faut voir avec les services : /msg C nick register unmotdepasse uneadressemail. Désormais à chaque fois que vous vous connecterez au serveur, il faudra vous identifier auprès de C via /msg C nick identify unmotdepasse

Ghoster son nick. Si quelqu’un est connecté avec votre pseudo, vous ne pouvez pas utiliser ce pseudo. Ghoster consiste donc à forcer la récupération de votre pseudo. Ça se fait simplement avec /msg C nick ghost votrepseudo votremotdepasse . L’usurpateur se retrouvera avec un pseudo aléatoire et vous serez de nouveau vous. Et pour empêcher que ça ne se reproduise il va falloir activer votre option protect : /msg C nick set protect on. Désormais, quelqu’un qui prend votre pseudo devra s’identifier au bout de 60 secondes (configurable) auprès de C sinon il se retrouvera avec un pseudo aléatoire. Bon avec ça normalement plus de soucis d’usurpation d’identité.

Planquer ses infos. Il est possible de planquer votre adresse mail ainsi que les autres informations (très recommandé). /msg C nick set hidemail on et /msg C nick set private on. À noter que les ircop auront tout de même accès à ces informations.

Modifier ses modes. Pour connaître les modes utilisateurs qui nous sont affectés, il faut lancer un joli /mode sonpseudo. On peut également voir ceux de quelqu’un d’autre. Par défaut vous devriez avoir iwz. Le i indique qu’un utilisateur extérieur d’un salon ne peut pas vous lister comme présent dans ce salon (ex : /who #geeknode ou /names #geeknode). Le w indique que vous pouvez recevoir les messages en provenance des ircop (non utilisés sur Geeknode). Enfin le z indique que vous êtes connecté de façon chiffrée avec le serveur (si vous l’êtes bien entendu).

Les modes utilisateurs intéressants pour se protéger sont DRpTZ.

Le R signifie que vous ne pouvez recevoir des queries ou pv ou msg (c’est la même chose) uniquement de la part des utilisateurs enregistrés auprès des services. Un niveau au dessus, le D lui permet de ne plus recevoir de tels messages en dehors de ceux envoyés par les services et les ircop.

Le p planque la liste des channels sur lesquels vous êtes connectés dans votre whois.

Les CTCP sont des commandes un peu exotiques dans IRC qui permettent à un client d’envoyer des commandes à un autre client (Client To Client Protocol). Ça permet par exemple d’envoyer un ping, de demander la version du client irc, demander l’heure… Bref très généralement vous en voulez pas de ce genre de truc, du coup un ptit T et hop vous bloquez ça.

Et enfin Z permet de limiter les queries/notice/ctcp uniquement aux personnes connectés de manière chiffrée.

Donc pour affecter ça : /mode monpseudo +TZ par exemple. À noter que ça ne persiste pas en cas de déconnexion. La liste complète des modes est ici dans la doc unrealircd.

  • Bon tout ça, c’est pour se protéger du côté du serveur, côté client vous pouvez faire deux trois trucs. Le premier est de garder son client irc à jour. On a tendance à l’oublier mais le client irc est connecté au net et ce des heures durant avec pas mal de loulous qui traînent, les failles de sécurité arrivent régulièrement. Ensuite vous pouvez bloquer les DCC. Le DCC c’est un moyen de connexion en p2p (ouai irc peut faire ça !) pour chatter ou s’échanger des fichiers (donc ça ne transite plus par le serveur). Si vous ne comptez pas utiliser cette fonctionnalités, désactivez-là, c’est un vecteur potentiel d’emmerdes et d’ailleurs si vous pouvez faire de même pour les CTCP, n’hésitez-pas.

Guide d'utilisation d'IRC : niveau 2

Bon bha après la première partie (non je l’ai pas encore écrite et je ne m’y attelerai probablement pas… on trouve déjà tout ce qu’il faut sur le sujet sur le wouaib), on va s’attaquer au niveau du dessus. On va s’attaquer aux modes. On va voir comment se protéger et protéger son chan voir son réseau. Cette série d’articles est rédigée suite à l’attaque des relous traditionnels de l’été qui sévit pas mal sur Geeknode où j’officie.

Un ptit koikoukess

On commence en douceur par l’architecture IRC. Donc, IRC est un protocole où des utilisateurs se connectent à un serveur. Ce serveur est interconnecté à d’autres serveurs. Cet ensemble de serveur constitue un réseau IRC. Il existe plusieurs type de serveurs : les hubs, les leaves, les services. Un Hub est un serveur où seuls les serveurs se connectent. Un Leaf (des leaves) est un serveur où les clients se connectent. Les Services sont des serveurs particuliers se connectant au(x) hub(s) et ajoutant des fonctionnalités au réseau.

Le netsplit c’est lorsqu’un un ou plusieurs serveurs du réseau ne sont plus interconnectés. Quand ça arrive on assiste à une belle purge. On se retrouve donc avec une vue partielle du réseau. Donc on ne voit qu’une partie des utilisateurs. Historiquement quand ça arrivait à l’époque, les vilains hackers tentaient un takeover (prise de contrôle) des chans pour devenir Opérateur dessus.

La commande whois permet d’avoir des informations concernant un utilisateur. /whois Lord vous affichera le pseudo, le realname, l’host, si la personne est identifié aux services, sur quels salons la personne se trouve. C’est très pratique.

Ensuite les modes. Ce sont des modifications (thx Cpt Obvious) symbolisées par des lettres. Il en existe deux types : les modes utilisateurs s’appliquant sur un utilisateur et les modes pour les chans qui s’appliquent… vous voyez le truc. Il en existe pas mal. Il faut savoir qu’IRC c’est une multitude de réseaux différents. Les modes ne sont pas forcément les mêmes sur tous les réseaux. Dans le cas de Geeknode, nous utilisons le serveur UnrealIrcd et donc les modes disponibles sont ceux d’unrealircd.

La hiérarchie des utilisateurs est assez basique. Dans un chan, dans la liste des connectés les utilisateurs sont classés en fonction de leur “niveau”. L’utilisateur de base n’a pas de symbole. On trouve ensuite le + qui indique un utilisateur voicé (on verra plus tard l’intérêt). Les voicés sont généralement les habitués du lieu. Ensuite on retrouve les % qui sont des hop ou halfop ou semi-opérateur. Ils ont quelques droits d’administration sur un salon pour les tâches de base. Ensuite on a les @ qui sont les op ou opérateurs. Ils peuvent quasiment tout faire sur un salon : changer les modes, kicker, bannir, … Il existe un ultime niveau qui n’apparait pas qui est le q qui correspond au owner, le propriétaire d’un salon. Ce mode est rarement utilisé et permet de reprendre le contrôle si un op fait le con. Il faut savoir que les modes ne sont valables que sur un seul salon. Vous pouvez être op sur #bidule, owner sur #truc mais rien sur #machin.

Les vilains qui gèrent un réseau irc sont les infâmes ircop ou aussi netadmin. C’est l’ultime barrière de défense en cas d’emmerdeurs. Ils sont là pour aider les utilisateurs ayant des soucis pour gérer leur salon ou pour ceux qui se battent avec les services.

Ce qui suit concerne plus particulièrement Geeknode : ils se planquent pour la plupart sur #geeknode et y sont op. Il ne faut pas hésiter à les contacter dans à peu près tous les cas. Par contre. Pas la peine de demander des renseignements concernant les adresses ip des utilisateurs. En cas de conflit interne entre les op d’un chan, débrouillez-vous avec l’owner pour résoudre ça, nous ne prendrons pas parti.

Le dernier point : les services. IRC est un procole ne faisant pas grand chose de base. Les services permettent d’ajouter des fonctionnalités indispensables telles que l’enregistrement et la gestion de son pseudo/chan. Ils permettent également aux ircop des les assister dans leurs tâches d’administrations (envoi de message sur un serveur ou sur tout le réseau, ajout de whitelist pour certaines ip, gestion des bots, …). Généralement les services sont un ou plusieurs bots se nommant nickserv/chanserv/memoserv/… Dans le cas de Geeknode tout est regroupé dans un seul bot, le fameux C développé en interne (son code est opensource, si vous êtes intéressé). C est bien foutu car il possède une aide pour chaque option. ex: /msg C help ou alors /msg C help nick ou bien /msg C help chan voir /msg C help nick set

Empêcher rsync de pourrir une partoche si c'est pas mount

Rhaaa Linux et son arboressence unique. Qu’est-ce que c’est bien !

Rhaaa Linux et ses montages ultra flexibles. Qu’est-ce que c’est bien !

Ouai j’adore. Réellement. C’est pas sarcastique ou ironique ni des fautes de frappes. C’est franchement bien de pouvoir morceller son arboressence et répartir ça sur pas mal de systèmes de stockage différent. Par contre il y a un ptit truc un poil relou.

Quand tu as un script qui s’execute régulièrement et que ce script sert à faire un gros backup de pas mal de machines différentes mais qu’il fait tout ça sur un disque dur qui n’est pas monté… bha tu dois te faire chier à aller faire le nettoyage. Ensuite tu montes la partoche en question et voilà. Rien d’insurmontable mais bon c’est quand même un pain dans le cul.

La solution ? Et bha en fait c’est plutôt simple : chattr +i /stockage/backup et hop. Le dossier est immutable : même root ne peut pas y écrire. Du coup si jamais la partoche est pas montée, le script n’y fouttra pas ses fichiers. Par contre ça veux dire pas de backup. Méfiance. Rassurez-vous, malgré le chattr +i, vous pouvez monter votre partoche sans aucun soucis. C’est juste parfait.

Voilà pour la ptite astuce de filou. Je l’ai trouvé dans les commentaires d’HN (une mine d’or)…

Contrôler son écran via l'ordi

Rhaaa ce que c’est chiant de devoir tripoter les boutons de son écran pour y modifier les règlages. Vous voulez voir ce qu’il se passe sur une autre entrée vidéo sans pour autant décoller votre dos de votre cher siège ? Et bha en fait c’est pas si compliqué. Toutes les sorties vidéos depuis le VGA dispose de plusieures broches dont cernaines servent non pas à envoyer le signal vidéo mais plutôt des données. On va utiliser ça. C’est facile et rapide.

I2c et DDC

En gros i2c est un bus de données à faible vitesse (enfin pas tant que ça) assez répandu. Il a été utilisé pour créer le DDC par VESA pour transferer de l’EDID via VGA, HDMI, DVI ou (e)DP bref le paradis de l’alphabet. Le DDC est donc un protocole permettant à des appareils vidéos (écran, carte graphique principalement) de communiquer afin que l’un et l’autre puisse s’accorder. L’écran transmet la résolution maximale qu’il supporte à telle fréquence toussa toussa. Mais il est en fait possible d’utiliser cette fonctionnalité pour parler à l’écran et lui faire savoir ce que l’on désire ! DDC est standardisé mais après les capacités de chaque écran diffère et parfois la façon de leur parler aussi. Ne perdons pas de temps en palabres et commençons à bidouiller.

DDCControl et DDCUtil

Je connais deux softs qui savent faire le taff. DDCControl est le plus ancien. Il repose sur une base de données des écrans pour connaître leurs capacités. Et pas de bol le soft est plus trop mis à jour. Il est hébergé chez Sourceforge. Ouai c’est un gros point négatif en 2017. Bref il est à l’agonie mais il fonctionne quand même. Il est packagé sous Gentoo.

DDCUtil est le ptit nouveau qui débarque et croyez moi, les parts de marché de DDCControl vont en pâtir (au moins dans mon cas). Il se base pas sur une base de données mais plus par le standard plus ou moins implicite qui s’est établit au fil des années chez les constructeurs. Pas dispo chez Gentoo mais sur github. Il a pas trop de dépendances donc pas de soucis à craindre.

Une fois compilé/installé pour pas trop se faire chier on vérifie que son user est dans le groupe video et maintenant on va donner des droits d’écriture dans le device i2c qui va bien pour pouvoir gérer l’écran sans être root. Donc on se rend dans /etc/udev/rules.d et on rajoute un nouveau ptit fichier contenant :

KERNEL=="i2c-[0-9]*", GROUP="video", MODE="0660"

et hop. Si on veux pas se faire chier on reboot (sinon on se relog et on reload eudev). Et maintenant à nous les joies de la flemmardise pour modifier les règlages.

Allez on commence pépère par un ptit ddcutil detect qui, si tout se déroule comme prévu, vous affichera quelques infos concernant votre écran. Bon du coup on va voir ce que vous pouvez tripatouiller via ddcutil getvcp KNOWN. Il est à noter qu’il est possible que certains règlages ne soient pas trouvés mais la liste s’agrandit à chaque nouvelle update de ddcutil. Dans la liste vous trouverez pleins de lignes comme par exemple

VCP code 0x10 (Brightness ): current value = 5, max value = 100

Ça veux dire que la luminosité à comme code 0x10 (ou juste 10), que sa valeur actuelle est de 5 et que le max est de 100. Donc si on veut augmenter la luminosité on fait ddcutil setvcp 10 25 et hop votre écran se câle sur 25 de luminosité.

Voilà vous devriez être à même de vous débrouiller. La petite astuce du tuxiste flemmard est de se créer plusieurs scripts : jour, jour+, jour++, nuit, nuit+, nuit++ qui ne font qu’invoquer ddcutil qui balancent des valeurs différentes de brighness et hop. Invoqué vite fait bien fait depuis dmenu et c’est la classe.

Changer la couleur de fond de son terminal à la volée

Ça vous arrive combien de fois de plus savoir si vous êtes sur une session ssh distante ou si vous êtes sur un terminal local ? Pour moi ça m’arrive constamment. Enfin ça m’arrivait. J’ai trouvé une petite astuce qui change tout : Changer le background d’un terminal à la volée !

Et ouai il existe un séquence d’échappement qui permet de faire ce petit miracle à condition que votre terminal le gère (par exemple xterm et très bientôt alacritty). La séquence magique est \033]11;#rrggbb\007 . Voilà voilà.

Comment utiliser ça ? Easy ! Vous éditez votre /etc/ssh/ssh_config et vous mettez

PermitLocalCommand yes
LocalCommand /bin/echo -e "\033]11;#440044\007"

et là bam : à la prochaine connexion ssh un magnifique fond violet vous sautera à la gueule. Toute fois, cela empêchera le scp, méfiance. Par contre comment remettre le fond comme il faut au retour ? Là il faut ruser un poil, on vera après. Vous pouvez également faire en sorte de mettre une couleur différente par destination ssh, soit du côté client en modifiant votre ~/.ssh/config mais du coup c’est un poil chiant car local, soit en modifiant le script d’initialisation du shell distant. Perso je rajoute le fameux echo dans le /etc/zsh/zshrc avec des couleurs différentes. Comme ça, quelque soit la machine d’origine ça fonctionne.

Bon pour récup la couleur d’origine faut feinter. Dans mon cas j’utilise zsh. Dans ce zsh j’ai rajouté un ptit truc sympa qui permet de chronométrer toutes les commandes que je lance et d’afficher la durée dans le prompt. Pour se faire, j’ai un fichier /etc/zsh/prompt.zsh avec dedans deux fonctions : une preexec() qui définie une variable timer. Et la precmd() qui récupère la variable timer, calcule les secondes écoulées et affiche le résultat dans le RPROMPT. Jusque là rien d’éxotique. Il suffit donc de rajouter le /bin/echo dans la precmd() et le tour est joué. Cette commande étant executée à la fin de chaque commande, en sortant d’une session ssh, vous retrouverez la couleur souhaitée.

C’est presque aussi efficace qu’un mollyguard pour le moment. Par contre à voir si je ne m’y accoutumerais pas trop.

Tour d'horizons des émulateurs de terminal

Coucou 2017 o/ . Et si l’on explorait les terminaux pour nunux. Enfin explorer… on va se contenter d’en présenter quelques-un un peu moins connu que la normale.

Mes exigeances envers les terms

Ne pas planter. Hoooo non ! Le term ne peut pas planter. Ensuite faut qu’il se fasse oublier. Le term ne doit pas se voir, ce n’est qu’une fenêtre vers le reste du système. Il doit être léger. J’ouvre beaucoup de term. J’en ai pas loin d’une dizaine ouverts assez fréquemment donc bon s’ils bouffent trop de ram ça va pas le faire. Il doit être rapide. Sur ce point en fait c’est un poil gadget on pourrait croire mais au final pas tant que ça, si le term bouffe du cpu, c’est pas une bonne utilisation de mes ressources.

En résumé : fiable, pas de GUI, léger et rapide. Et les features exotiques ? mouai pas besoin. À vrai dire le scrollback (voir l’historique) est à la limite de l’exotique à mon goût, donc le split, les onglets pas besoin, c’est le boulot du Window Manager. Allez faisons le tour.

Les classiques : pourquoi ils sont nuls ?

Bha ils sont populaires.

Bon c’est presque la raison principale. Déjà les terms d’environnement graphique non merci. Généralement ils sont plombés de dépendances à en gerber. Devoir télécharger des dizaines et des dizaines de dépendances pour me retrouver avec un term bloatés et qui traînent la patte c’est pas mon genre. Donc Aurevoir Gnome Terminal et tous ses potes basés sur la libvte (ouai Terminator, en dehors de ton nom, tu n’as rien pour toi vieux). Ils sont lents en plus. Aurevoir Konsole de chez kde trop de dépendances. Aurevoir aussi tous les terms “enroulable” à la guake and co.

Le seul classique qui vaille un poil le coup ce serait bien xterm. Le bon vieux basique des familles. Il est dispo partout c’est une grande force, il a peu de dépendances et il est le standard de facto donc bon toujours le garder sous la main. En dehors de ça il est lent et paraît que le code est à chier. Il est plus trop trop maintenu mais bon. Il fait le taff.

La valeur sûre

Comment ne pas citer la famille des rxvt ? Créé à la base parcequ’xterm était bloaté (et ça date pas d’hier pourtant) il a connu de nombreux rejetons. Le plus célèbre et le plus intéressant encore aujourd’hui est urxvt ou rxvt-unicode : un fork plutôt bien gaulé. Rapide, Fiable, Configurable pour ne pas avoir de GUI, super léger en ram surtout dans son mode daemon (plusieurs terms dans un seul process). Bref il répond quasiment tous mes critères. Il connait même des variantes pour avoir des onglets pour les amateurs.

À noter : comme xterm sa conf est dans un fichier .XRessources du coup avec les autres applications X simples. Et ça c’est bien !

La nouvelle vague du term indépendant

Historiquement on a donc eu le passage d’xterm vers la famille rxvt. Ensuite la vague des terms à base de vte. Et maintenant une nouvelle vague de terms indépendants (ou non). Une des grandes nouveautés est l’arrivée du Truecolor (couleur 24b, soit toutes les couleurs habituelles). Contrairement au système précédent qui fonctionne avec une palette prédéfinie (mais configurable), là l’application peut tout simplement spécifier la couleur qu’elle veut afficher.

Dans le désordre, je commence par Termite. Ouai je commence par un term VTE alors que j’annonçait ne pas en parler… bref. Bha heu je l’aime pas spécialement mais bon il est assez souvent cité dans les terms “à la mode”. Il est pensé pour être utilisé en tiling et tente d’être plutôt basique. M’enfin.

Terminology, un marginal qui se la pète mais qui au final est un poil lent, nécessite pas mal de dépendances pour des features exotiques. Je salue la prestation mais bon au final c’est bien trop bling-bling. J’ai pas envie de le démolir mais bon je le recommande pas non plus. Après si vous utilisez l’environnement Enlightenment… pourquoi pas vu qu’il en fait parti mais sinon …

Parceque c’est le plus drôle de tous, il a le droit à une petite place ici : Cancer. Ouaip Cancer terminal. C’est fin et joyeux. Il est en rust et plutôt simple. Il gère sixel c’est assez marrant mais franchement gadget. Je l’ai pas testé plus que ça.

Un de mes chouchoux est st. C’est un term très simple. Pas de fichier de conf. Si on veux modifier un règlage il faut le faire dans le config.h et recompiler. Et au final ce fichier est suffisamment bien foutu et la compilation est tellement rapide que c’est pas vraiment plus long que d’éditer un fichier de conf habituel. Je l’ai très longtemps utilisé. C’est fait par les braves gars de chez Suckless qui ont à cœur de développer des outils le moins bloatés possibles avec très peu de lignes de codes. Il est rapide et gère même le truecolor. Par contre pas de scrollback, ça peut gêner au début mais on s’y fait très bien. Je l’ai gardé quelques années sans soucis.

Mais j’ai découvert un ptit nouveau, le surprenant Alacritty. Il est simple, pas de GUI, un ptit fichier de conf bien commenté, peu de features à la noix et un peu plus gourmand que St. Codé en rust, sa particularité est d’être le plus rapide. Et bha… c’est vrai qu’il est rapide le con ! Tout l’affichage est en fait en OpenGl. Mais du coup lui faire bouffer des dizaines de lignes devient instantanné. On peut même refaire mumuse avec la libcaca en “Haute résolution” (ouai en choisissant une font toute petite pour avoir des pixels assez petits et c’est plutôt fluide). Il est très jeune et du coup encore un peu brut de décoffrage (des ptits soucis graphiques dans de très rares cas) mais du coup il est possible d’influencer un peu son developpement. Une petite communauté s’est déjà formée. Je pense qu’il a pas mal d’avenir. Bref c’est mon nouveau jouet du moment.

Bon je vais aussi vous causer de Notty. Lui est encore plus exotique car il tente de s’attaquer aux standards. Lâs de devoir se conformer à ECMA48 (le protocole que les terms suivent dont la dernière évolution date de 1991 (oui, c’est pas tout neuf)) et tente de pousser quelques innovations bien venues comme par exemple pouvoir créer et utiliser des éléments d’interfaces et s’échapper un peu des caractères. Bref un vaste chantier mais s’il gagne un peu en popularité pourrait apporter un renouveau bien senti. À savoir qu’Alacritty a déjà quelques affinités envers notty. Wait&See

La quête de l’outil parfait

Comme souvent, j’aime bien chercher des alternatives : linux au lieu de windows, gentoo au lieu de debian, bépo au lieu d’azerty, i3 au lieu de gnome, alacritty au lieu de Terminator… Et souvent on trouve des pépites : des logiciels un peu rugueux mais au final ça tombe bien je ne suis pas tout lisse. Si ma rugosité est en phase avec la rugosité de l’outil ça devient parfait \o/ Donc n’hésitez pas à tester d’autres logiciels plutôt que de vous contenter des softs les plus connus.

Redondons les archives du net

J’imagine que vous connaissez de près ou de très loin le site archive.org. Il s’agit d’un site tenu par une poignée de volontaires très passionnés s’étant donné pour mission d’archiver. À la base ils archivaient le web, puis le net puis en fait tout ce qui est composé de 0 et de 1. Sacré boulot. Mais ces gens sont vraiment très passionnés. Ils arrivent à mettre la main sur des données plus ou moins perdues/ignorées/oubliées et les rendent accessibles à tous. Le tout en les classant/organisant/archivant. Gros gros boulot. Leur tâche est titanesque mais ils s’en sortent plutôt bien. Un de leur projet les plus populaire est l’Internet Wayback Machine qui permet de consulter d’anciennes versions de site ouaibs. C’est vraiment super sympa pour voir l’évolution des modes du webdesign. Une sacré mine d’or intarissable.

Leur petit soucis

Du stockage ils en ont un sacré paquet. En 2014 c’était plus de 50 Peta octets stockés chez l’archive team. À noter qu’ils ne se content pas uniquement des données numériques mais désormais tente de sauver également des livres et autres manuels. Cependant il ne s’agit que d’une petite association avec finalement assez peu de moyen par rapport à leurs ambitions.

Une telle volumétrie numérique est un réel fardeau technique. Surtout qu’il faut tout backuper et répartir : tout stocker à un seul endroit est impensable pour la pérennité (rapellez-vous de la fameuse bibliothèque d’alexandrie). Du coup ils répartissent leurs données en plusieurs endroits géographiques. Malheureusement ça leur coûte de plus en plus cher de faire ça sérieusement. Donc en plus de faire appel au pognon du chaland, ils font également appel à leurs skeudurs. Depuis deux ans ils expérimentent un backup distribués de leurs données.

Leur solution : IA.BAK

Un peu à l’image de BOINC et Folding@Home qui utilise les ressources processeurs des volontaires, ici IA.BAK utilise le stockage des disques durs des volontaires. Le but est d’avoir au moins trois copies complètes en dehors de leurs machines propres et si possible répartis géographiquement. Dans le cas où ils perdraient leurs données, ils auraient au moins trois possibilités de récupérer les données perdues. Voyons un peu comment cela marche sous le capot. Les développeurs de logiciels utilisent le très célèbre logiciel git pour travailler à plusieurs sur le même ensemble de fichier de code. C’est vraiment puissant et flexible mais assez complexe à prendre en main et le soucis c’est que ce n’est pas spécialement adapté aux données binaires brutes. Or les archives sont en très grandes parties remplies de ce genre de données. L’archive team a du coup porté son choix vers git-annex qui est un git aux hormones. Git commence à galérer à partir d’un million de fichiers, ils ont donc choisis simplement de découper leur set de données en plusieurs groupes plus petits appelés Shard. Lorsqu’une personne décide de s’inscrire elle va décider quelle quantité de données elle est prête à héberger et va se voir attribuer un shard dans lequel le logiciel va aller télécharger à peu près la quantité de données voulue. Il y a moyen de laisser faire le logiciel tout seul ou alors il est même possible de choisir dans le shard quels fichiers ils veulent stocker (bon c’est vraiment un petit détail mais bon). Git-annex va donc télécharger tout ce petit monde, ça peut être un poil long bien entendu. Et voilà. Enfin… pas vraiment. Maintenant tous les mois il va falloir relancer git-annex qui va parcourir les fichiers afin de s’assurer que leur intégrité est bonne et histoire de pointer auprès de l’archive histoire de montrer que vous participez toujours et que les données sont disponibles en cas de besoin. Si vous ne le faites pas au bout d’un certain temps vos données seront considérées comme non backupés. Rassurez-vous en pratique vous n’avez qu’à lancer le truc, tout se fait seul sans intervention de votre part (un ptit cron qui va bien et hop).

Un projet participatif indispensable

Voilà c’est assez simple, ça ne demande qu’un peu de stockage, de bande passante et c’est tout. Ensuite vous pourrez regarder les stats de votre shard (le mien c’est le 6 et j’offre un joli Tera). Donc c’est du logiciel libre qui tourne très bien sous linux, c’est gratuit (encore heureux), ça rend service et bonus, vous aurez tout pleins de fichiers étranges que vous pourrez consulter à votre guise (pour la ptite histoire lors d’une coupure d’accès internet à la maison j’ai pris un peu le temps d’explorer ce que j’héberge et j’ai découvert qu’il existait des compétitions de hockey sous-marin en apnée et qu’il y avait des compétitions et que j’en avait quelques vidéos, bref c’est étrange ce qu’on peut découvrir sur ses skeudurs). Si vous voulez contribuer rendez-vous sur le site du projet.

Dégageons opendkim et spamassassin pour Rspamd et Rmilter

Après ce suspens insoutenable voilà la suite tant attendu. Petit résumé pour les adeptes du tldr de l’article précédent : bon j’ai foutu du postscreen sur les deux mx tout va bien sauf qu’en fait je me suis rendu compte que mes mails ne sont plus signés par opendkim et spamassassin ne me satisfait plus trop trop.

Plus d’Opendkim donc on va rmilter

Ne sachant trop pourquoi Openkdim ne faisait plus son taff. Et là j’avais pas trop envie de le débugguer. À vrai dire j’ai juste regardé si le process tournait et s’il était bien déclaré dans le main.cf de postfix. Ouai à priori tout y est. Bizarre j’ai pas souvenir d’y avoir touché. Du coup par flemme et esprit d’aventure (c’est pas si incompatible) j’ai eu envie de voir les alternatives. Depuis quelques temps j’entends parlé de Rmilter et Rspamd. Du coup je me renseigne un peu plus et visiblement Rmilter a l’air pas mal du tout. Opensource, moderne, à première vue plutôt bien branlé. Et en plus il a l’air de gérer le DKIM. Pfiou c’est inattendu. Bref ni une ni deux j’émerge tout ça sur la fière Gentoo qui sert de serveur mail. Bon pour mettre rmilter en service il suffit de le définir en tant que milter (c’est un portemanteau de mail filter, c’est t’y pas mignon comme mot ?). En gros ça fonctionne comme les autres milters, du coup je n’ai qu’à modifié le port que j’avait défini pour Opendkim (qui est lui aussi un milter) et foutre celui de rmilter et pouf ça ira pour postfix. Et maintenant on fonce dans le /etc/rmilter/rmilter.conf et là WOW O__O ! Ha c’est plutôt bien fourni là dedans. Par chance c’est principalement commenté et du coup explicite.

Bon le truc de base, le port d’écoute. Tiens, on peut brancher clamav. M’en fout mais je sais que ça fait plaisir à certains. L’antispam, ok c’est fait pour être compatible avec différents antispam dont rspamd parfait je compte y passer par la même occase… pas mal d’options plus ou moins intéressantes d’ailleurs. Redis. Hein ? Que vois-je ? Mais qu’est-ce qu’il veux faire avec ça ? hmmm c’est facultatif. hmmm c’est pour fouttre en cache et apporter quelques raffinements. Mouai allez pourquoi pas. De mémoire de base ça coûte à peu près rien à faire tourner ça. Voyons voir la suite. … limits … ouai comme d’hab. On va espérer que par défaut ce soit bien foutu. Greylisting. Ouai cool mais j’ai déjà postscreen qui fait son office comme vous l’avez lu précédemment (vous l’avez vraiment lu l’article précédent ?). DKIM. Ha bha enfin j’ai cru que ça n’arriverait jamais. Hmmm tiens la conf a l’air diablement plus courte et explicite que celle d’opendkim. C’est plutôt un bon point. En gros on défini autant de bloc que de domaines différents. Chaque bloc contient le domaine à signer, le chemin vers la clé privée, et le selector (champs dns du dkim). Bref pas de superflus et super clair. Allez passons à la suite. Bon bha en fait on est en bas du fichier, il ne reste que des include pour d’autres bouts de conf mais on s’en fout.

Bon bha yapuka lancer rmilter et reload postfix.

Confons Rspamd

Allons dans le dossier de conf de rspamd. Aoutch il y a du monde. Tiens tous les fichiers de conf indiquent bien que les modifs doivent pas être fait ici car ça risque de se faire squancher à chaque update. Donc il faut balancer les modifs perso dans un dossier override bref rien de bien méchant même si pas trop utile avec etc-update de gentoo et/ou fouttre tout ça dans un git. Bon après avoir un peu tout regardé ça a l’air plutôt bien rangé et avoir des réglages par défaut plutôt honnête. Je dirai même qu’il n’y a pas grand chose à modifier. Bon allez on se fout un ptit serveur redis en marche. Et hop on lance rspamd. Tiens il y a un rspamc pour faire mumuse. On va lui faire ingurgiter quelques mails pour lui permettre de séparer le bon mail de l’ivraie. Allez hop rspamc learn-spam /home/lord/maildir/.spam/ et ça mouline. Au bout de quelques minutes bha on a rspamd tout rassasié qui n’aura qu’à tremper ses lèvres dans le mail pour pouvoir le flagguer comme un grand. Bon bha voilà. Ça tourne. Plus qu’à attendre de recevoir des spams. Malheureusement j’en reçois quasiment plus depuis le passage de postscreen mais bon.

Testons les capacités de signatures dkim de rmilter. On envoi un mail et on reluque les headers. Ha bha ça marche.

Bon bha voilà. Ça tourne comme ça depuis quelques mois maintenant sans soucis. Avec quasiment tout par défaut. C’est donc efficace, pas eu de faux positifs ni dans un sens ni dans l’autre. Ça se pose en deux temps trois mouvements et la conf par défaut a des bons règlages. Ça bouffe un poil plus de ram qu’avant mais c’est franchement anecdotique. Au final j’ai donc une stack composée de postfix, rmilter, rspamd, dovecot, un ptit nginx et son ptit couple roundcube/rainloop. Et en dehors de Microsoft qui n’aime pas mes mails (il faut avoir bonne réputation mais quand tu leur envoi jamais de mail bha tu n’as pas de réputation… le dilemme du club privé) mais je m’en fout. Par contre s’ils pouvaient arrêter de tenter de m’envoyer du spam…

PS: Opendkim ne fonctionnait plus parce que j’avais fait une jolie faute de frappe dans le main.cf de postfix. Du coup ça miltait plus beaucoup…

Soulager son serveur mail du traitement du spam avec Postscreen

Quel titre sérieux ! Bref, jusqu’à il n’y a pas si longtemps que ça, j’avais une architecture assez basique pour le mail :

  • Un postfix pour l’émission/réception.
  • Un Spamassassin qui reluque les mails et qui les taggue s’ils ressemblent à du spam
  • Un Dovecot qui stocke les mails et les présentent aux clients mails.
  • Dovecot se chargeant par la même occasion de l’auth (via sasl) et du classement des mails (via sieve et managesieve).
  • À tout cela on rajoute quasiment la même chose en MX backup (c’est à dire un serveur qui sert uniquement si le premier serveur ne fonctionne pas).

Voilà c’est un truc assez classique pour les autohébergés. Ça fait un peu peur au début mais au final tout est super bien documenté et très présent sur les Internets.

Mais voilà que le spam commençait à être vraiment insistant. Une solution très commune à l’époque (un peu moins maintenant) est de rajouter du greylisting (voir le module postgrey pour Postfix). Le principe est simple. Un serveur extérieur contacte votre serveur pour lui délivrer un mail. Votre serveur perso va lui dire “Coco reviens un peu plus tard c’est pas tout à fait prêt ici.”. Selon le protocole SMTP, le serveur d’origine doit retenter quelques minutes plus tard de vous délivrer le mail. Ce coup-ci votre serveur, en voyant que ce serveur a déjà fait une tentative plus tôt, acceptera le mail.

La conséquence immédiate, c’est que tout les mails se prennent un délai dans les dents (on peut bien évidemment whitelister les serveurs avec lesquels vous conversez souvent) mais ce qu’il faut savoir c’est qu’envoyer des millions de mails pour spammer nécessite des logiciels particuliers. Les softs des spammeurs sont fait pour envoyer pleins de mails vite, ils n’implémentent pas correctement le protocole SMTP à la lettre. Du coup il ne retentera pas votre serveur dans le délai imparti. De ce fait vous serez blacklisté des spammeurs (ho joie). Bref c’est pas mal du tout. Perso l’idée me plaît pas mal mais le délai de réception des mails m’emmerde un poil. Du coup je ne l’ai pas mis en place pendant des années.

Revamping de la stack pour une architecture mieux redondée

Quel sous-titre sérieux !! Lassé du flot de spam grandissant je me suis penché sur les trucs un peu plus à la mode.

Voyons voir. Consultons le chan irc de chez #postfix (non ce n’est pas un hashtag). Bon bon bon. Le truc moderne efficace aujourd’hui c’est Postscreen.

En gros le greylisting c’est plus trop la mode, Postgrey tombe petit à petit en désuétude et finira par crever assez vite visiblement (enfin au rythme du mail quoi). Le remplaçant c’est Postscreen qui fait du greylisting et une évaluation plus stricte du protocole SMTP. En gros il va falloir que les serveurs qui voudront causer avec vous soient plus rigoureux sur leur respect du protocole. Si ce n’est pas le cas vous pouvez soit ignorer ces tests (mais à quoi bon (en vrai ça sert lors de la mise en place quand on reluque consciencieusement les logs) ) soit carrément couper la connexion avec le serveur peu rigoureux. Qui plus est ce module se targue de soulager votre infra mail car il agit avant même la réception du mail.

De ce fait une très grosse partie des mails seront jartés avant même d’être traités. Donc ils ne feront pas bosser votre mailqueue ni votre antispam ni votre petit dovecot. Bref moins d’utilisation cpu/réseau/ram/skeudur et BEAUCOUP moins de spam. Énormément moins de spam !

Convaincu ? Allez c’est partit, on s’installe ça !

Alors déjà vu qu’on est en 2016, j’espère quand même que votre Postfix est au moins en 2.8, si c’est pas le cas changez tout de suite de distro et passer sur un truc moins à la bourre. Bon bha voilà vous avez tout installé, reste plus qu’à confer. Gogo.

Alors on va commencer par le master.cf

smtp	inet	n	-	n	n	1	postscreen
Bon alors là ça veux juste dire que tout ce qui rentre dans le process smtp est envoyé à la commande postscreen. Donc tout ce qui rentre va être mouliné par postscreen. Maintenant il faut dire à postscreen que faire. Ça se conf avec le reste de Postfix dans le main.cf. Le mieux est quand même d'aller matter la doc officielle mais bon voilà ce que j'ai mis chez moi :
postscreen_access_list = permit_mynetworks, cidr:/etc/postfix/postscreen_access.cidr
postscreen_blacklist_action = drop
postscreen_dnsbl_sites =
zen.spamhaus.org*2
bl.spameatingmonkey.net*2
bl.spamcop.net
…
postscreen_dnsbl_threshold = 4
postscreen_dnsbl_action = drop
postscreen_greet_banner = On patiente 5 secondes, merci
postscreen_greet_action = enforce
postscreen_pipelining_enable = yes
postscreen_pipelining_action = enforce
postscreen_non_smtp_command_enable = yes
postscreen_non_smtp_command_action = enforce
postscreen_bare_newline_enable = yes
postscreen_bare_newline_action = enforce

et voilà. Donc en très gros, j’ai le fichier /etc/postfix/postscreen_access.cidr qui contient ma whitelist/blacklist faite à la mimine qui permet déjà de jarter les gros relou que je connait ou bien de leur éviter le délai. Et la deuxième truc significative c’est que j’ai un petit paquet de dnsbl qui sont consultées ce qui permet de très grandement viré les spammeurs. Perso j’en ai mis une dizaine et sachez que certaines dnsbl ne sont pas gratuite (sauf dans un usage perso/modéré ce qui est mon cas). Pour celles et ceussent qui ne savent pas ce qu’est une dnsbl :

Une DNSBL : DNS BlackList est une liste noire de machines connues que l’on consulte via le protocole DNS qui fonctionne de la sorte : “Quel est l’ip de la machine truc.machin ?” et la réponse sera de la forme 127.0.0.X où X aura une valeur prédéfinie indiquant s’il est spammeur ou non. C’est donc un mécanisme assez simple proche des api http.

Bon bha déjà avec ça normalement vous n’aurez quasiment plus de spam à traiter. Ça va grandement alleger votre inbox.


En mettant ça en place sur ma machine principale tout allait bien. Sauf qu’au bout de quelques mois je suis allé voir un peu le MX backup (la machine secondaire qui traite les mails lorsque le primaire est hs) et là BAM. Mauvaise surprise. Elle est blindée de mails. 99% de spam bien entendu. Bon du coup je lui met un bon coup de postscreen lui aussi.

Et puis en fait je me rend compte que des mails légitimes sont aussi arrivés ici. Bha ouai, quand le postscreen du mx primaire demande au gens de revenir un poil plus tard… bha certains sont trop pressés et s’adressent au mx backup. Finalement c’est plutôt logique. Et comme en plus j’ai pas spécialement bien configuré le mx backup (celui stock les mails en local au lieu de les renvoyer au primaire, erreur classique) bha je me retrouve avec un ptit merdier de mail.

Bon c’est un peu hors sujet mais pour la ptite histoire, j’ai converti le fichier mbox contenant tous les mails au format maildir que j’ai ensuite rsync vers mon maildir principal pour les fusionner et là je me suis amusé à classer 12000 mails… FUN

Bon du coup je corrige la conf du mx backup. Déjà plus trop de soucis de redondance. Énorme bon point. Plus trop de spam qui arrive à tire larigot. Énorme bon point (encore un et j’ai une image !). Bon et ce vieux spamassassin qui n’est pas si efficace que ça ? J’en profiterai pas pour le jarter ? Tiens d’ailleurs on vient de me signaler que je fait plus de signature DKIM sur mes mails sortants ! Grrr ça annonce un prochain article (et hop Cliffhanger des familles).

Nouveau routeur Turris Omnia

Après pas loin d’un an d’attente le kickstarter du Turris Omnia est arrivé à la maison \o/. Ce routeur est particulier car il est fait par les braves gens de nic.cz, l’organisme qui s’occupe entre autre des noms de domaine tchèques. Ce sont les même gens qui développent knot un super serveur DNS qui héberge de plus en plus de domaine (dont au moins un root server à l’heure actuelle). Ce sont également eux qui dev Bird un daemon de routage alternative de quagga. Bref des mecs qui s’y connaissent pas trop mal. Ils ont décidé de construire un routeur tout sympatoche et pas trop cher. Le bestiau est dual core, avec 1Go de ram (minimum) mais surtout trois minipcie pour le wifi et un modem LTE par exemple. À cela on rajoute une tripottée d’ethernet Gbps et on emballe le tout dans un boitier en feraille avec de jolies leds programmables et paf. Le dernier point qui fait craquer c’est que niveau soft c’est livré sur openwrt avec en bonus une petite surcouche supplémentaire made in nic.cz.

Franchement matériellement a part le fait que les antennes wifi avaient tendances à tourner lorsqu’on les vis (on vire les 6 vis du capot, on ressert un peu avec une pince et hop, pas de perte de garantie), rien à redire. Par contre niveau logiciel… pouarf.

enWRT c’est bien gentil mais c’est quand même un poil relou et surcompliqué pour pas grand chose. On se connecte en ssh et on reluque vite fait les règles iptables présentes : _O_MG. Il y en a des kilomètres ! L’interface web pour configurer les trucs bon autant des fois c’est mignon et fonctionnel autant quand on est habitué à tout confer soi même à la mimine en console on en voit très vite les limitations : des bouts de conf qui apparaissent de nul part, des réglages qui ne parsent pas, des choix logiciels pas facilement modifiables. La partie config Wifi par contre est vraiment bien foutue (j’en attend ptet pas grand chose), mais quel dommage que parfois les réglages soient pris en compte que la seconde fois.

Tout cela je l’avait déjà rencontré sur l’ap wifi sous openwrt, donc c’est pas directement le Turris.

OpenWRT c’est rigide mais flexible

Une chance qu’une fois abandonnée l’interface web, finalement OpenWRT reste une vraie distro nunux avec son gestionnaire de paquets, son init toussa toussa. Ce qui veux dire que c’est flexible !

Établissons un plan d’attaque pour cette machine. Je veux qu’il remplace mon vieillissant atom D510 qui me sert de routeur, donc faire une jolie gateway. Dans ce but je veux qu’il fasse également serveur NTP, résolveur DNS local, serveur DHCP. Bref des services de bases d’une passerelle. Bon commençons par le faire chopper du net. À la maison c’est fibre Orange. Donc jusqu’à peu c’est PPP par dessus un VLAN. Désormais c’est plus moderne : dhcp par dessus un vlan. Easy ! Pas de bol le client DHCP doit envoyer des options non conventionnelles pour avoir le précieux ternet. Le client de base d’OpenWRT (qui est en fait celui de busybox) ne semble pas le faire. Tant pis, on jarte et on installe le bon vieux dhclient. On planque le fichier de conf qui va bien où on veut (ça peut être malin de le planquer dans /etc/dhcp, par exemple). Et on créer un script init simpliste genre

#!/bin/sh /etc/rc.common
START=35
STOP=85
SERVICE_USE_PID=1
start() {
service_start /usr/sbin/dhclient -cf /etc/dhcp/dhclient4.conf eth1.832 -lf /var/run/dhclient.leases -pf /var/run/dhclient.pid -nw
}
stop(){
service_stop /usr/sbin/dhclient
}

et on le fout au boot (voir dans /etc/rc.d). Là normalement une fois le service lancé le Turris se retrouvera propulsé sur les autoroutes de l’information.

Bon ensuite le résolveur DNS local, par défaut c’est kresd, le pendant résolveur de knot. Au bout de deux minutes d’essai… bha ça marche mais c’est lent. C’est balot je voulait le tester depuis quelques temps mais ça coupe l’envie. Bref je le testerai plus tard au calme. Donc on le désactive du boot et on s’installe le bon vieux unbound et on le fout au boot. En deux minutes c’est reglé.

Le serveur DHCP, allez celui-là on le laisse geré via l’interface web d’openwrt. C’est un dnsmasq classique. Par contre je sais pas si c’est moi qui n’ait pas de bol ou autre mais ce couillon me pousse pas de DNS… c’est un peu dommage pour un serveur DHCP. Il a fallu tripotter la conf manuellement dans /var/etc/dnsmasq.conf pour rajouter l’option de balancer du DNS… étrange mais soit. Ptet juste un ptit bug. Passons.

Le serveur de temps. Encore une fois laissons gérer OpenWRT. Wow ça marche en dehors de la boîte !

Des containeurs dans ton routeur

L’avantage d’avoir pas mal de stockage (8Go tout de même) et pas mal de ram (1Go tout de même aussi), c’est qu’on peut faire un peu plus que routeur. Typiquement on peut faire des containers pour y héberger deux trois trucs de façon à peu près sécure. OpenWRT m’a bluffé par l’intégration de LXC direct dans l’interface web et le pire c’est que c’est pas trop mal foutu (simpliste mais fonctionnel). Bref de base ça propose pas mal de distro classique mais surtout Gentoo mais encore plus surtout Alpine Linux! J’ai pu démarrer en trente seconde un container alpine et rentrer dedans en console via un lxc-attach -n alpine. Pour l’instant rien à redire

Pour l’instant appart quelques déconvenues d’interfaces/intégration made in OpenWRT c’est vraiment tout bon. Ce routeur en a suffisamment dans le ventre pour atteindre les 500Mbps que mon abonnement me permet en consommant moins que mon ancien.

Ajouter un overlay Gentoo sans layman

Les overlays sous Gentoo sont des surcouches à l’arbre Portage. Portage est en fait une grande collection de scripts pour installer des logiciels. Gentoo de base possède énormément de ces scripts cependant il arrive que parfois le logiciel que l’on cherche n’est pas disponible officiellement. Portage possède une fonctionnalité très intéressante permettant de rajouter des branches à votre arbre ce qui permet d’ajouter de nouveaux logiciels disponible via emerge.

Jusqu’à il y a peu, il fallait passer par le logiciel layman qui n’est pas installé par défaut. Cependant il est désormais assez simple de le faire sans celui-ci.

Bon tout d’abord on va éditer le fichier /etc/portage/repos.conf/gentoo.conf. Il doit contenir quelques lignes déjà. J’espère pour vous qu’il y a le repo [gentoo] ainsi que [DEFAULT]. On va donc en rajouter un à la suite de la forme suivante :

[nom de l'overlay]
priority = 50
location = /là/ou/vous/voulez/le/stocker
sync-type = git (potentiellement un autre protocole)
sync-uri = git://url.de/l'/overlay.git
auto-sync = yes

Et voilà. Un ptit emerge –sync et éventuellement un eix-update et c’est tout bon.

Franchement, c’est pas une distro qu’elle est trop bien cette petite gentoo ?

Démarrer des applis dans tmux au boot

En voilà une chose triviale mais qui n’est pas si simple que ça. Démarrer une appli au boot, généralement c’est le boulot de l’init, ça devrait être easy (hein systemd). Mais démarrer une appli dans tmux n’est pas geré par les init existants. Donc je vais vous expliquer comment le faire.

Déjà on va commencer par le script d’init pour openRC (vous croyiez vraiment que j’allait aborder systemd ?). Donc dans /etc/init.d/tmux on met le shebang qui va bien puis dans le start() on place

start-stop-daemon -u lord -S -b -x /home/lord/tmuxboot.sh -d /home/lord > /var/log/tmuxboot.log 2>&1

Voilà, on dit à openrc de le lancer au boot et c’est bon. Il ne reste plus qu’à gerer ce fameux tmuxboot.sh pour dire à tmux que faire. Il s’agit tout simplement d’un script shell ce qu’il y a de plus basique. Tout l’astuce réside dans le fait que tmux peut recevoir des ordres provenant de l’extérieur.

#! /bin/sh
tmux new-session -d -n rtorrent '/usr/bin/rtorrent'
tmux new-window -n Htop '/usr/bin/htop'

Et voilà je pense que vous avez saisi l’idée. C’est plutôt simple et vraiment rapide à mettre en place. Enfin un article concis \o/.

Réimplémentations libres de moteurs de jeux

C’est nowel 2015. À nowel on a plein de temps. Quand on a plein de temps on aime se divertir. Et pour se divertir un bon petit jeu vidéo c’est royal. Les jeux vidéos c’était mieux avant. C’est vrai quoi. Les vieux jeux vidéos sont pour beaucoup mieux que les anciens. Ouai c’est un peu de nostalgie mêlé à de la vieuconnerie mais bon. Le soucis c’est que les vieux jeux, bha souvent ils ont besoin d’un viel OS avec de vieilles libs toussa. Par chance pas mal de devs sont confrontés à ce problème. Du coup pas mals de projets de moteurs libres fleurissent. Ils ont souvent besoin des assets originaux. Donc voilà un petit tour non exhaustifs de réimplémentatios de jeux libres. C’est parti !

Bullfrog

Un de mes favoris : CorsixTX recrée Theme Hospital le jeu culte de chez feu Bullfrog. Toujours chez Bullfrog, OpenDungeons qui lui s’attèle à Dungeon Keeper. J’avoue ne pas l’avoir testé. J’attend qu’il mûrisse un peu plus. J’ai également trouvé Swars qui est un portage de Syndicate Wars (il existe aussi pour Syndicate mais n’y ayant jamais joué…). Bref il ne manque que Theme Park et Magic Carpet et on aura fait le tour de la ludothèque de Bullfrog.

Les jeux de gestion

De la même époque, OpenRCT2 qui mime à la perfection Roller Coaster Tycoon 2 et propose des améliorations comme par exemple du multi-joueur !

Dans un genre assez proche, il y a le très connu OpenTTD pour Transports Tycoon Deluxe. Il a su se créer une sacré communauté au point d’avoir suffisamment de main d’œuvre pour pouvoir recréer de nouveaux assets permettant de se passer du jeu originel.

Freeciv est l’un des pionniers de cette mode (et grand bien lui fasse). Il existe même une version html5 jouable direct dans le browser.

Assez proche, on retrouve Freecol mais il m’attire moyen celui-là.

Le bon vieux Caesar 3 a son ptit CaesarIA qui a tenté un crowdfunding pour créer de nouvaux assets sans succès.

The Settlers 2 a aussi droit à son remake opensource : Return to the roots mais aussi Widelands qui est vachte bien!

Il sera bientôt possible de rejouer à SimCity 2000 grâce à OpenSC2K. Ça sera de l’electron donc dispo sur tous les OS et ça bouffera tout plein de ram.

Sinon on trouve Lincity-NG avec ses assets dégueux et son interface à la sim city 3. À faire en cas de grosse disette mais c’est tout.

Du RPG

Commençons doucement par FLARE qui à la base devait s’occupper de Diablo mais les avocats de chez Blizzard sont apparemment encore proche de leur licence. Du coup bha Flare tente de faire un moteur pour ce genre de jeu sans toutefois mimer trait pour trait.

Par contre il existe Freeablo. Le dev commençait bien vite et fort et malheureusement ça patine un peu. Dommage.

Toujours dans les RPG, on peut jouer à OpenMW qui s’entête à refaire le bon vieux Morrowind. Le projet est en super forme et commence même à proposer quelques améliorations par-ci par-là.

Les puristes des RPG pourront retâter Baldur’s Gate, Icewind Dale et Planescape: Torment grâce à GemRB.

Le malheureusement peu connu Arx Fatalis des français d’Arkane a aussi un tout nouveau moteur opensource : Arx Liberatis créé grâce au généreux don d’Arkane ayant placé le moteur sous GPL3. Il n’y a plus trop de mise à jour cela-dit, c’est dommage.

Les FPS

Du côté des FPS de chez id, c’est un peu de la triche… Vu que les devs originaux publient les sources de leur moteur il y a foison de réimplémentations. GzDoom est une réimplémentation en OpenGL du id tech1 donc tous les jeux à base du moteur de Doom mais il y a également Zandronum qui est sensiblement identique mais avec du multiplayer et également Doomsday qui mérite de s’y attarder. Pour plus d’info à ce propos, j’ai écrit un article dédié à Doom

GlQuake pour l’id tech 2 mais aussi DarkPlaces pour les deux implé principales.

Ensuite pour l’id tech 3 ça sera principalement à base d’ioquake3 qui est utilisé par la plupart des jeux même si certains se basent encore sur le moteur originel.

L’id tech 4 est le dernier moteur opensourcé par id… il leur reste le 5 et peut-être un jour le 6 à ouvrir mais visiblement c’est plus dans les politiques de la maison. Bref ce moteur a moins inspiré. Il y a trois implés opensource iodoom3, dhewm3 et rbdoom-3-bfg, dans l’ordre d’activité (du plus molasson au plus vivant).

Tiens avec le moteur de quake3 on a OpenMohaa qui nous replonge dans le Medal Of Honor (vous savez, le jeu précurseur de CoD (les biens)).

Il n’y a pas qu’id dans la vie. Le build engine avec son fameux Duke Nukem, Redneck Rampage ou bien Shadow Warrior a aussi droit de figurer ici avec JonoF et Eduke32. Voilà, rien de plus à dire si ce n’est que ça a moins bien vieilli que Doom je trouve. (ouai je suis un fanboy)

Le bon vieux Thief a aussi droit à son OpenDarkEngine.

Les RTS

Passons aux RTS.

Là on a le bon age of empire 2 qui a le droit à son OpenAge mais pas de bol, avec Microsoft qui resort le jeu, j’ai peur qu’il y ait quelques soucis.

On peut également citer 0AD qui s’apparente à un Age of Empire 3 sans toutefois vouloir l’être mais bon comme c’est le jeu libre/opensource avec les plus beaux assets je lui offre une petite place. Il sort régulièrement des nouvelles versions et peut se targuer d’être l’un des jeux libres les plus aboutis techniquement proche d’un jeu commercial.

Et pour les afficionados de Westwood Studios il faut plutôt chauffer son clavier/souris vers OpenRA pour se refaire les Command&Conquer, Red Alert et Dune 2000 (les meilleurs !).

L’aventure

Les jeux d’aventure de Lucas Arts sont toujours aussi casse tête et sympa à jouer. Pour ceux-là ScummVM fait des merveilles pour quasiment tous. Et quand je dit tous, on pourrait dire tous les jeux d’aventure 2D et pas uniquement les Lucas Arts

Pour les jeux en 3D plus modernes il y a ResidualVM pour redire bonjour à ce cher Manny de Grim Fandango mais aussi Escape from Monkey Island et Myst 3 Exile (la thématique du voyage globalement).

Open Tomb permet de se refaire les cinq premiers Tomb Raider mais aussi OpenLara. Je les ai pas testé mais c’est pas très tentant à vraie dire même si OpenLara nous pond des graphismes améliorés pas trop dégueux.

Les jeux de course

Pas trop de jeux de courses… Ouai j’aime pas trop à vraie dire. Mais bon il y en a quand même un qui a toujours une place dans mon cœur … Carmageddon. Bha il a le droit à un nouveau moteur opensource OpenC1 mais le projet n’a pas trop abouti !

Il y a une pétition pour ouvrir le code source de Wipeout 2097 mais avec seulement 11 gonzes dans le monde l’ayant signés…

Super Tux Kart se démène pour fournir une alternative crédible à Mario et ses potes. On y est pas encore totalement mais on sent que c’est déjà crédible et puis conduire son Tux est assez fun.

Vrac !

Le ptit jeu sympatoche Chu Chu Rockets a inspiré des devs pour Duck Marines. Frets on Fire recréer les nombreux jeux de guitare ou bien Stepmania pour tous les beatmania. C’est toujours sympa comme jeu mais difficile au début…

XoreOs s’attèle à faire une nouvelle implé de l’Aurora, un moteur pondu pour Bioware pour une palanquée de jeu.

L’indémodable Frozen Bubble pour péter ces saloperies de boulettes multi-colores qui collent au plafond.

Dans les grands classiques il y Worms et du coup c’est Hedgewars qui vous brouillera avec vos amis.

Pour les amateurs de Super Monkey Ball vous pourrez vous délecter de Neverball.

Le célèbre Kerbal Space Program inspire Open Space Program. Bon pour l’instant rien à se mettre sous le mulot mais ça pourrait devenir très intéressant un de ces jours.

Je mettrai à jour cet article au fil des temps. Reviendez !

PS : Février 2018

Ajout de blabla et de mise en forme. Lincity-ng, OpenSC2K, Frozen Bubble, Freecol, Hedgewars, Neverball, Open Space Program et Super Tux Kart

Globalement pas mal de projets dorment calmement.

Une idée d'init

Ces derniers temps, les inits ont la côte. L’invasion de systemd sur un bons paquets de banquises en est la principale cause. Il faut dire qu’avant lui il n’y avait pas eu autant de débat et peu de concurrence. Il y a pas mals d’inits différents mais la plupart sont quasiment pas utilisés en dehors des cadors du secteurs. Systemd fait parlé de lui à cause de son initiateur (haha) à la réputation sulfureuse mais également pour certains choix techniques parfois étranges mais aussi (et surtout à mon goût) pour sa capacité à changer l’ordre établis. Comme beaucoup de secteur, le ptit monde de nunux n’aime pas être bousculé dans ses ptites habitudes. Donc quand le ptit nouveau se retrouve adopté par la majorité des grosses distros, un problème s’impose : il va peut-être falloir choisir son init (ça c’est quand on a de la chance diront certains) ou bien il va carrément falloir apprendre comment ça marche. Et d’ailleurs peu de personne ne savaient ce qu’était un init avant ce drame.

Ha bha ouai tiens, c’est quoi un init ?

L’init, c’est le programme qui sera lancé par votre kernel. Petit rappel du démarrage d’un ordi : on appuis sur un bouton. Le firmware de la carte mère (le bios ou l’uefi ou le coreboot ?) va devoir démarrer tout le matos et faire des tests (de la ram, du cpu, des skeudurs…). Ensuite celui-ci va regarder dans ses règlages sur quel support il est censé booter. Il regarde ce support (skeudurs, réseau, cd (non en 2015 faut pas déconner, on ne fait plus ça (ce message est destiné aux archéologue qui découvriront ce blog et s’en serviront pour comprendre notre civilastion, ne me remerciez pas les gars)), usb). Sur ce support il va démarrer ce qu’il se trouve au début. Et ce qui se trouve au début de ce support a intéret à être un bootloader sans quoi il vous crachera une jolie erreur. Ensuite le bootloader va faire son office : il va vous permettre de choisir l’OS que vous voulez démarrer. En gros, il va regarder là où il a été configurer pour trouver un kernel, un initram éventuellement et pousser des options à destination du kernel et de l’initram. Il s’est passé pleins de trucs pour l’instant mais en fait pas tant que ça car on a toujours pas commencé à booter ! Bref. Ensuite c’est donc le kernel qui va faire sa petite soupe, il s’initialise, il mount l’initram en tant que / et lance l’init qu’il y a dedans. Généralement celui-ci est minimal et sert surtout à pouvoir booter dans de bonnes conditions (il contient des modules pour le matos, de quoi monter la vraie partition root donc éventuellement de quoi déchiffrer, de quoi supporter des fs exotiques,…) et ensuite une fois tout ça fait, un ptit coup de switch_root qui dégagera l’initram qui était en / et y mettra votre vraie partition racine. À ce moment là, le vraie init sera lancé. Pfiouuuuu. Enfin. Il va avoir pour but d’initialiser votre OS (et non le kernel). Il va donc appliquer vos règlages, démarrer les différents logiciels, monter les partitions. Et c’est là que les avis commencent à diverger. Certains pensent que le taff de l’init s’arrête là, d’autres pensent que ce serait balot de pas s’occupper d’autres aspects du système comme gérer le branchement des différents périphs, de gérer la mise en place du réseau, de s’occupper des logs, d’en profiter pour gérer les conteneurs car en 2015 on conteneurise tout ce qu’on peut si on veux pas avoir une passoire. Voilà c’est une nouvelle zone logicielle. Avant on distinguait le kernelland de l’userland, maintenant on peut rajouter le systemland. Et francehement c’est pas forcément complètement incongrue comme point de vue.

Systemland

Vous aurez reconnu que cet avis est celui adopté par les devs de systemd. Systemd n’est pas un init, c’est un systemland complet. On utilise plus du GNU/Linux (un userland GNU sur un kernel linux) mais du GNU/systemd/Linux. Ça a certains avantages comme une base commune pour pas mal d’outils qui adoptent donc un comportement et une philosophie proche. Pleins de ptits modules qui gèrent tous les aspects du système : vous installez systemd, vous avez tout ce qu’il vous faut pour initialiser/confer un système. Qui plus est son adoption par la majorité des distro apportent une uniformisation pas désagréable dans la façon de gérer le système : si vous savez confer votre Debian utilisant systemd, vous saurez confer votre Gentoo utilisant systemd… On réduit un peu les écarts entre les distros… Les outils marchent particulièrement bien ensembles et pour la plupart sont prévus pour marcher à travers le réseau et prennent en compte les technos actuels (à savoirs la virtu, les ssd, les namespace…).

Jusque là j’ai tenté de rester à peu près impartial et je m’en tiens au fait et ne rentre pas trop dans les choix techniques. À vraie dire ces points pour la plupart me semble pas être négatifs mais plutôt positifs. Surtout quand en plus ça fait tout ça de manière très rapide et que lorsque c’est bien intégré bha mine de rien ça marche. Par contre quand c’est mal intégré, ça déconne de partout. Heureusement les plus grosses distros n’auront pas de soucis à faire cette intégration proprement, surtout lorsque celle-ci disposent d’énormément de contributeurs, d’une très importante communauté et d’un cycle de release particulièrement lent et qui du coup adopet le bousin après les autres. Et bien non c’est pas vrai. Debian s’est planté comme une merde. À intégrer systemd à reculons bha ça chie de partout. Et pas qu’un peu. Et du coup pas mal de powerusers debian qui n’ont pas tâtés ailleurs se font un avis très négatif du bestiau. Et on ne peux pas les blâmer. Mais c’est pas grave. Au contraire c’est ptet une bonne nouvelle.

A new hope

Systemd s’est imposé partout (enfin pas vraiment, il a été adopté partout mais bon c’est plus marrant d’un point de vue complotiste). Et du coup, comme je le disais précédemment, a uniformisé pas mal de chose dont les fameux fichiers “.unit”. Et franchement c’est une bonne chose : les scripts init de type sysV sont quand même un gros trucs dégueulasse qui ont fait leur temps. Faut arrêter de déconner. Critiquer la complexité de systemd pour les adminsys est une vaste blague. L’adminsys qui doit créer un script d’init pour systemd aura six/sept lignes à fouttre dans un fichier .ini alors que sous sysV il aura plusieurs centaines de lignes. Certe d’un côté c’est que des commandes shell “basiques” qu’il connaitra d’ailleurs et qu’il aura déjà utilisées des centaines de fois et de l’autre c’est une “nouvelle syntaxe” où il va devoir se tapper trois mans et demi relativement concis. Donc oui il y a apprentissage nécessaire mais c’est pas forcément un mal. Et puis surtout les fichiers unit sont réutilisables d’une distro à une autre avec très peu d’ajustement à faire (à peine modifier certains chemins de fichiers et hop). Du coup on se retrouve avec une nouvelle syntaxe de conf relativement concise et très répandue. Pas mal de choix techniques de systemd ne font clairement pas l’unanimité et sont parfois carrément absurde (really dbus partout ?). Bref. Maintenant que l’init est devenu un sujet à la mode j’espère beaucoup l’arrivée d’alternatives modernes repiquant certaines idées de systemd avec des choix techniques différents.

C’est dans les vieux pots qu’on fait les vieilles soupes

Et si l’on imaginait un nouvel init. Par exemple… heuuu chsépa. init2 ? mouai c’est nul comme nom mais j’ai vraiment pas d’inspiration. Bref. On repart de 0. On décide de ne faire qu’un init pour le moment, tous les outils manquants seront ceux d’un GNU userland classique. Donc imaginons déjà un init compatible avec les fichiers .unit de systemd. On a déjà de conf pour démarrer à peu près tous les services existants, notre futur base d’utilisateurs est contente. Bon donc en gros il va falloir parser de l’ini, c’est pas bien dur. Il va donc falloir implémenter toutes les features de systemd propre à l’init. En même temps qui voudrait d’un nouvel init qui ne sâche pas fournir un /tmp isolé pour chaque unit ? qui voudrait d’un init qui ne gère pas finement l’ordre de lancement des unit (After/Before/Require/Need). Dans un premier temps si toutes les features ne sont pas implémentées ce n’est pas bien grave bien entendu. Déjà dans les choix technique : ne pas utiliser cette daube de systemd que personne ne comprend. Le truc est à peine documenter foire dans tous les sens (et dire qu’ils veulent le voir dans le kernel !). Ensuite, faut une interface en ligne de commande mieux foutue. Systemctl c’est clairement pas possible. C’est nul à chier, ça en chie pour autocompléter les units, c’est super verbeux (tellement que ça passe quasiment tout le temps via un pager, c’est dire). Et puis putain ! Les mecs te foutent un nom super chiant à autocompléter ! systemctl. Il faut appuyer combien de fois sur Tab pour le sortir cet immondis ? Surtout quand la moitié de tes commandes commencent toutes par systemd-trucmuche. Obligé de fouttre un alias sur toutes les machines qui l’utiisent. Sérieux les mecs sont des vicieux qui se martelles les parties génitales avec des martifouettes en regardant Joséphine ange gardien. C’est pas possible c’est énervant au plus haut point. Donc là, pour notre init on cherchera un nom de commande qui n’a pas cinquantes résultats proches dans l’auto-complétion des distros majeurs.

Le reste de l’environnement doit pouvoir être utilisé mais ne doit surtout pas être forcé. Aucune dépendance sur logind, journald, networkd. Là plupart de ces outils ont déjà des alternatives pas forcément aussi modernes ou intégrées mais qui ont largement fait leur preuve ont sont suffisamment kiss pour être conservées.

One more thing

Et pour l’interface, c’est là où j’ai le plus d’idée quant à l’usabilité du truc. J’imagine une TUI (bha quoi ? une text-user-interface mon cher !) toute classouille. Un truc basé sur une session tmux avec plusieurs onglets. Un premier onglet à la htop avec tous les units démarrés où l’ont peut en choisir un spécifiquement et une fois appuyé sur entrée ou espace ou autre, ouvre un nouvel onglet spécifique à cet unit. Avec dedans les infos le concernant : les différents pid, le cgroup, son uptime, et surtout le shell du process en cours en foreground. Les process ne seraient pas vraiment daemonisés mais dans un tab de tmux. Avec des raccourcis adaptés pour pouvoir stop/relancer le bousin. Ce serait à la fois léger, rapide et surtout on peut relancer le process sans quitter son shell avec le log qui s’affiche emn même temps. Et puis tous les sysadmins savent utiliser tmux (ou le devrait). Je pense que ce pourrait être une killer feature.

Tout ce vent pour rien

Et ouai. Je sais pas coder. Surtout un projet de cette criticité et de cette envergure. Et c’est bien dommage. J’imagine que de toute façon chacun à sa ptite idée de l’init idéal. Mes principales préoccupations (conf simples, conf “universelle” vis à vis des distros, interface utilisateur rapide et simple) ne seront pas celles d’autres et je le conçoit. Mais je ne conçoit pas qu’il y ait autant de râleurs vis-à-vis de systemd et aussi peu de vraies propositions d’alternatives. Les propositions consistent généralement à rester coller à sysV et du coup rajouter un peu de papier mâché dessus pour combler les nouvelles dépendances de nouveaux softs. C’est bien gentil mais tout n’est pas mauvais dans systemd et sysV a quand même pas mal vieilli et pêche par certains aspects. OpenRC est une alternative intéressante mais qui est quand même un peu trop proche de sysV. Bref je suis pas meilleur que les autres et n’apporte rien à l’édifice si ce n’est que quelques ptites idées qui n’ont rien de bien inédit mais bon.

Le clavier fait maison : PART 1

Cet article est le premier d’une série concernant l’élaboration de mon nouveau joujou. J’y aborderai la réflexion, l’élaboration et tout le toutim à propos de mon projet clavièreux.

A y est \o/ ! Mon clavier fonctionne. Ceci est le premier texte non ircien écrit avec MON clavier. Et quand je dit MON clavier, je parle de celui que j’ai construit avec mes petites mimines ! Celui que j’ai rêvé et pensé durant quelques mois. C’est le bout du voyage (ou bien une des premières étapes si ça se trouve). Et du coup voilà le journal de bord.

##Truc de hipster ton clavier ! Mais carrément ! Étudier le fonctionnement de l’outil que l’on utilise le plus toute la journée. Réflêchir aux défauts et améliorations que l’on peut y apporter. Optimiser ! Technologiquement les claviers sont archaïques et mal pensés. Le placement des touches est optimisé pour les machines à écrire, mêmes les claviers tactiles de nos chers smartphones et tablettes. C’est une abération totale. Ils sont tout le temps négligés par les utilisateurs mais aussi les constructeurs. Jusqu’à il y a peu, on ne trouvait plus que des claviers bas de gamme sans mécanismes mécaniques (au profit de dome en gomme à la qualité pitoyable, aux sensations désagréables et à la robustesse plus qu’àléatoire). Les claviers des années 80 était autrement plus solide et au confort de frappe bien meilleur que les actuels. Mais les gamers ont été flairés par les marketeux et les constructeurs de périphériques ont su qu’il y avait de la maille à se faire. Et là résurgence des claviers mécaniques dans les périphériques haut de gamme. Celà dit ce matos est souvert assez jacky et jamais ergonomique. Il existe des tas de claviers ergonomiques avec des approches différentes mais c’est souvent hors de prix et il y a toujours des ptits détails qui me chagrinent. Depuis quelques années maintenant j’ai un Typematrix 2030 sur lequel je tappe en bépo. Oui c’est un peu hipster. En attendant je tappe bien mieux en ayant réappris à écrire. Je ne regarde plus du tout le clavier et je bouge bien moins les bras (combiné à l’utilisation de logiciel privilégiant l’utilisation du clavier). À long terme, je pense éviter ou du moins réduire les TMS que l’on retrouve assez courrament chez les personnes tapant de longues heures au clavier.

Je pensait avoir atteint le stade ultime du fétichiste du clavier mais c’était sans compter les Internets ! J’ai découvert que j’avait à peine atteint le stade de l’intéressé. J’ai découvert qu’il éxiste une belle communauté d’adorateurs de claviers présentant des modèles exotiques tels que le datahand, les chording keyboards, les ptits ducky, le poker, les kinesis, le truly ergonomic… bref pas mal de trucs à étudier/éplucher. Mais il y a encore un stade plus avancé. Celui des Radins. Enfin radins… celui où tu connais suffisamment l’offre existante et où tu rêves du clavier ultime à force d’en voir pleins. Le stade du YAKAFOKON ! Quand tu trouves pas la perle, faut le faire. Et par chance il existe là aussi une belle communauté de DIY de clavier. Pas mal de récit de construction, de boutique proposant des pièces/accessoires des forums où ça cause retour d’expériences et firmware opensource. Bref on ne se sent pas seul dans la nature. Donc j’ai craqué et j’ai décidé de me lancer et de faire mon propre clavier. Un clavier adapté au bépo, de taille réduite car j’aime les ptits claviers (c’est mignon, n’est-il pas ?), des touches au feeling au poil (des cherry mx brown !). Je voulait un truc pas trop moche et pas trop haut pour pas se casser le poignet. Bref le cahier des charges se construis assez vite.

Première étape : Le layout

Le layout c’est l’agencement des touches, vous connaissez probablement l’azerty et le qwerty. Vous avez peut-être déjà entendu parlé du bépo. Pour les malheureux qui découvrent seulement maintenant il s’agit d’un agencement pensé pour écrire du français en abandonnant l’héritage obsolète de l’azerty. Saviez-vous que l’azerty est disposé comme tel afin de ralentir la frappe pour éviter que les branches métalliques des machines à écrire s’entremêlent. C’est dire si c’est pertinent de le transposer sur les claviers d’ordinateurs (pire encore sur les appareils tactiles). Bref, le bépo fait fi de ça et se base sur une étude statistiques des lettres les plus fréquemment utilisées en français. Mon clavier précédent utilisait cette disposition et me convenait presque. Je suis donc repartit de l’agencement bépo du typematrix 2030 tout en retouchant quelques détails. Mais au delà de la disposition bépo, j’ai aussi choisi de sacrifier de nombreuses touches. J’ai dégagé les touches F1, FX… j’ai viré les touches multimédia, les touches systèmes (pause, hibernation, printscreen, calculette,…). Une fois ce ménage fait je me retrouve avec 65 touches. Un clavier traditionnel en possède environ 105. J’ai largement pompé l’idée de typematrix de mettre les touches backspace, delete, enter… au milieu des lettres. Pile entre les deux mains. J’ai sacrifié la sacro sainte barre espace. Quand vous faites une espace (oui j’utilise cette tournure juste pour me la péter et montrer que je sais qu’en typographie c’est féminin) on a pas vraiment besoin d’une touche énorme si l’on ne bouge pas les mains. Pour gagner un peu de place j’ai aussi sacrifié les touches home/end/pageUp/pageDwn mais bon elles servent peu et la plupart des logiciels que j’utilisent ont une autre touche produisant le même résultat. Bon j’obtient une matrice de 13 colonnes sur 5 rangées. Toutes les touches sont carré et bien rangées de manière orthogonales. La quinconce de nos chers claviers est également une relique datant des machines à écrire. Ça n’a plus lieu d’être et en plus çà simplifiera le boulot par la suite.

Seconde étape : Commander le matos

Ça peut paraître bête mais n’étant pas un hacker de renom, j’ai quasiment jamais soudé, j’ai presque pas de matos de bricolage et j’ai jamais conçu d’objets toussa… Bref pleins de trucs à apprendre \o/ Bon bon je sais qu’il va me falloir pleins de touches, surement des composants électroniques, un belle plaque en alu (bha ouai c’est beau et frais) et bha heuu c’est tout ? Ça a l’air simple. Donc je me renseigne plus précisément je farfouine. Bref des diodes pas chères ça se trouve par centaine sur ebay à des prix défiant toute concurrence. Cool. Pour les touches, il existe wasd keyboard qui est une boutique étasunienne qui propose de tout. Pour les switchs, je savait que je voulait du cherry mx brown parceque c’est très solide. Ça fait un léger bruit très charmant, le touché est léger avec une légère tension au début. Par contre ces bébettes ça revient cher. Par chance sur un forum de fana de clavier il y a ptit gars bien sympa qui propose des tarifs miraculeux si l’on est prêt à attendre un peu et si l’on a un minimum confiance envers le gonze. Hop c’est commandé. Maintenant il me faut les caps. C’est le dessus des touches. Le plastic que vous actionnez du bout de vos gracieux petits doigts. Et là surprise ! On oublie vite le petit détail qui tue. Le bépo c’est gentil mais c’est exotique même dans la communauté DIY du clavier. Bref trouver des touches kivonbien. Ça sera impossible ou bien TRÈS cher. Wasd keyboard propose tout ce qu’il faut. C’est pas trop cher si vous êtes prêt à sacrifier le marquage. Par contre attention. Chaque rangée de lettre à un profil différent. Qui plus est il faut deux touches avec de petits ergo sur la homerow (l’emplacement de base où les doigts doivent se pauser le plus souvent possible). Du coup faut bien compter et rien oublier. Par contre on peut se faire plaisir niveau coloris et ça c’est bien marrant. On peut même pousser plus loin en choisissant des textures de touches malheuresement c’est très vite prohibitif (ça sera pour une upgrade plus tard ^__^ ). Bon il manque un peu d’étain pour les soudures. Facile et pas cher sur ebay. Bon maintenant passons au contrôleur. C’est la bébette qui permettra à votre clavier d’être compris par l’ordinateur et aussi d’inteprêter les touches. Bref la pièce maîtresse. Il en existe tout pleins plus ou moins généraliste. En bon noob, j’ai suivi les tutos et me suis donc orienté vers le Teensy2. C’est tout pitit. C’est pas cher. Ça fait ce que je veux et c’est proche de l’arduino donc potentiellement pas mal extensible. Par contre j’ai fait la connerie d’en prendre qu’un. J’ai commandé ces ptits trucs chez watterott une boite allemande qui livre vite. Me manque plus que la plaque d’alu. Dur de trouver de l’aluminium usinable en petite quantité. Au final j’ai trouvé mon bonheur chez Leroy Merlin pour une onzaine d’euros. Voilà plus qu’à attendre les livreurs.

Troisième étape : Agiter ses ptits doigts

Bon le moment à la fois redouté et attendu. Les travaux manuels. Direction le fablab local. Discutage, réflêchissage, reality-checkage. Verdict ? Bha le monde pratique diffère un peu du monde réel. 1mm dans le logiciel de dessin où on peut zoomer/dézoomer à volonté ne ressemble pas vraiment à un millimètre en vrai. Le mini prototype de 4 touches pourra en attester. Bon j’exagère à peine mais dans les logiciels de dessins on a vite tendance à perdre de vue l’échelle de ce que l’on bidouille. Voir la découpeuse laser sortir un bout de clavier d’une plaque de medium à un petit côté magie la première fois. J’ai pu me rendre compte qu’on ne peut pas forcément faire tout ce qu’on veux aussi facilement que ce qu’on pense. Toutes les découpeuses lasers ne peuvent pas découper tous les matériaux. Certaines matières se plient plus ou moins au cahier des charges. Et surtout si l’on utilise une découpe à base de fraiseuse, on doit absolument prendre en compte la forme de l’outil. Bha ouai c’est tout bête mais comment faire un carré parfait avec un outil rond qui tourne ? Là où le laser fait des découpes miraculeuses, là fraise ne peut pas travailler les angles de la même façon. Et puis une fois tout ces petits trous bien percés et agencés, je me suis rendu compte que les outils avait des marges de fonctionnement différentes de ce que je m’attendait. J’ai dû m’armé d’une jolie petite lime et ajuster une cinquantaine de carré. C’est en forgeant qu’on devient forgeron. Après deux bonnes aprems d’essais et compagnie, j’ai enfin ma jolie plaque d’alu avec toutes ses ptites touches enfichées \o/.

L’étape suivante est la réalisation du pcb. Non je déconne. Le pcb c’est bien trop pro pour un projet diy suivant la méthode de la Rache. Du coup, c’est handwiring de haute volée. Le handwiring c’est la soudure “dans le vide”, à la main, des différents composants. Direction ce coup-ci le hackerspace local. On va se dérouiller du fer à souder. Il y a donc 65 diodes à souder à l’arrière des touches. Il faut faire une matrice : il faut relier les lignes de touches ainsi que les colonnes avec une diode entre chacune. Ce faisant, le contrôlleur pourra distinguer chacune des touches sans craindre le terrible NKRO (le bip immonde que produit votre ordinateur quand vous lui pressez trop de touches à la fois). Gare au court-circuit ! Un peu d’isolant par-ci par-là pour pas que les colonnes et les lignes ne se touchent. Il ne reste plus qu’à relier tout ce petit monde au Teensy (le contrôlleur) en essayant de pas déborder et de le cramer (ouai c’est balot). Si vous êtes consciencieux, vous vérifierez qu’il n’y a pas de court-circuite et que bien entendu tout est bien soudé avec un multimètre (la Rache n’approuve pas cette attention).

Quatrième étape : Après le Hard, le Soft !

Bon si toutes les étapes précédentes se sont bien déroulés, il ne vous faut plus qu’un outil et non des moindres : l’Ordinateur. Profitez des derniers instants à utiliser votre clavier actuel car d’un instant à l’autre votre nouveau clavier risque de tomber en marche ! Bon bon bon. Trouvons un firmware… Guy Teub en propose un pas mal du tout : tmk. Opensource, pleins de features intéressantes, pleins d’exemples de personnalisation, une bonne doc et parfaitement compatible avec le teensy. Un truc pour compiler … … hmmm pas envie de dégueulasser ma bone gentoo. Go go chrooto-debian ! L’IDE arduino avec le plugin teensy. Et gcc avec support avr. Au final l’IDE arduino ne sert pas mais bon pas bien grave. Il contient le petit soft tout mignonet pour uploader son binaire dans le controleur. Après suivage de tuto, semi arrachage de cheveux et lecture de doc (sisi jvous jure !), à deux doigts d’abandonner pour la soirée, ça y est ! Le firmware a réussi à se faire compiler sans cracher pleins d’erreurs étranges ! Bon bien entendu c’est loin d’être fonctionnel mais ça y est le teensy parle HID (le protocole des périphs utilisateurs), et peut même afficher des caractères étranges. Une bonne dose de paufinage et quinze minutes après le saint graal : le clavier écrit en bépo. Hop on pousse l’ancien clavier hors de portée, on tente d’écrire une phrase, deux, trois et paf un article interminable sur le site. Le tout entremêlé de procrastination sur IRC. Bref il marche déjà suffisamment bien. Et je sais pas si c’est le fait de plancher dessus depuis quelques temps mais j’arrive déjà à écrire pas trop mal ! Bon la touche Fn marche pas, la touche coller non plus mais c’est déjà innatendu en fait. En moins de quatre heures le firmware est en place et l’ancien clavier ne sert plus qu’à décorer. Je peux utiliser le nouveau pour trifouiller le firmware. Après farfouinage dans les différents fichiers source en C, je trouve l’option à décommenter pour les touches Fn. Voilà le dernier truc qui me manquait.

Ce qui est cool avec un firmware trifouillable c’est que l’on bouge les touches à sa guise. En une semaine j’ai déjà déplacé une dizaine de touches. C’est d’une simplicité enfantine une fois que c’est assimilé, ça se fait en deux minutes montre en main.

Conclusion technique

Techniquement parlant c’est plus simple que prévu. En gros en dehors de la phase de planification. C’était torché en 4 aprems et une bonne soirée. Maîtriser un logiciel de dessin est pas indispensable. J’ai commencé en m’entêtant sur FreeCAD (parceque vu qu’il y a Free c’est surement bien), mais j’ai déchanté à cause des bugs, des problèmes de performances. Je me suis retrouvé au fablab à bosser sur SketchUp qui est moins Free mais qui fonctionne très bien est intuitif et qui exporte dans le bon format toussa toussa.

Pour la partie usinage, j’ai été pas mal épaulé au LabSUD. N’ayant jamais fait ce genre de truc je m’en suis globalement bien tiré avec un résultat pile comme je l’envisageait. Il a juste fallu jouer un peu de la lime mais une bonne demie heure à limer ça ne fait pas de mal.

La partie soudure a été un peu longue mais à deux c’est assez fun et à trois autour d’un apéro dans le jardin c’est encore plus drôle (hein unréal). C’est un peu galère si on a pas de matos bien adapté, particulièrement pour souder sur le controlleur et qu’on est en plus un peu tremblottant et peu soigneux.

La partie firmware est effrayante. Je suis pas du tout codeur. Surtout en C. Mais au final je suis parti d’un truc opensource assez populaire et vraiment excellent techniquement. Il a quelques features bien sympatoche comme par exemple la magic key qui permet de passer en mode debug sur le clavier et obtenir des infos sympatoches. Il permet également de faire des macros (typiquement pour les touches copier/coller). Il possède aussi un système de tapkey : lorsque vous maintenez enfoncé une touche, le résultat obtenu sera différent que si vous appuyez brièvement sur celle-ci. Dans mon cas, la touche Fn2 (parceque ouai vous pouvez avoir plusieurs touches Fn) produit la touche échap. C’est un gain d’une touche ce qui est appréciable car je vise un clavier “minimaliste”. La killer feature du firmware est le système de layer. Vous pouvez définir plusieurs keymaps différents qui se supperposent et passer de l’un à l’autre via les touches Fn. C’est assez génial ! Bref c’est génial et super flexible.

Conclusion

C’est loin d’être dur. C’est fun. C’est un peu cher comme clavier mais comme passe-temps utile c’est trèèèèès rentable. Pleins de gens prêts à filer des coups de mains. Et puis c’est le seul moyen d’avoir le clavier ultime. Le seul moyen d’avoir le clavier qui ne plaît qu’à vous et qui fait ce que vous voulez comme voulez. Bref c’est le pied !

J’ai envie d’en faire un autre ! Pour l’instant j’ai pas trop de point à améliorer en dehors de l’esthétique et encore.

Pour les curieux voilà des photos. Si vous voulez des conseils, des infos, des coups de mimines n’hésitez pas ;-)

Updater dynamiquement ses zones DNS

Bon un court article à mon intention. Comment updater ses zone DNS dynamiquement avec cette syntaxe de merde que j’oublie constamment ? Donc pour mettre à jour un champs A c’est simple :

server 127.0.0.1
zone lord.re.
delete lord.re A
update add lord.re. 600 A a.b.c.d
send

et voilà c’est pas compliqué mais toujours chiant à retrouver. C’est possible de fouttre le tout dans un fichier texte et de le donner à bouffer direct à knsupdate. Et si on le fait pas en local il est même possible de fournir une clé pour authentifier le truc. Pour les autres champs chiants à gérer voilà la syntaxe : les NS

server 127.0.0.1
zone lord.re.
update add lord.re. 3600 NS zapp.lord.re

et pour le SOA

server 127.0.0.1
zone lord.re.
update add lord.re. 3600 SOA zapp.lord.re. lord.lord.re. 2015033100 3600 7200 3600 180

Et voilà ;-)

Nginx HTTPS 2015

Coucou ! Comme vous le savez surement, commencer un article par “coucou” c’est con. Mais après tout pourquoi pas ? Sous des apparences à priori banales, c’est finalement plutôt original (peut-être même inédit !) pour un article technique. Et puis mine de rien ça permet d’avoir une intro qui va avec, donc on ne va pas s’en plaindre. Bon donc vu que la folie des failles SSL et compagnie tend à se calmer pour le moment, c’est peut-être le bon moment de mettre à jour sa conf Nginx. Donc on va tenter d’avoir la meilleure note possible sur le test de Qualys ssllabs. Si comme moi vous pensez que les certificats x509 (ssl) font marcher une mafia (et aussi parceque vous êtes radin), vous ferez un certificat auto-signé. Le navigateur râlera donc même si votre sécurité sera élevée.

Hey ho Let’s GO !

Bon on commence par générer les paramètres de Diffie-Hellman car ça peut prendre pas mal de temps (dix minutes sur une bonne machine). Donc dans un term on commence un jolie openssl dhparam -out dh.pem 4096. Voilà vous pouvez compter les points si vous êtes patients, sinon vous pouvez passer à la suite.

Maintenant générons le certificat et sa clé : openssl req -x509 rsa:4096 -keyout lord.re.key -out lord.re.cert -days 3650 -nodes -sha256 et voilà. Ça va aussi mouliner un peu mais ça devrait le faire. On peut donc passer à la suite.

Bon ce coup-ci on passe à la conf de Nginx. Oh Joie ! J’aime Nginx. Son fichier de conf n’est qu’illumination et fun. Bref. On va tripotter un block server : /etc/nginx/nginx.conf

server {
listen 443;
server_name lord.re;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

Bon là c’est l’intro on va dire. En gros on ne garde que les ciphers les plus solides. Et on vire SSLv1,2 et 3. Ces vieilleries on fait leur temps et devraient être bloquées partout (et pas uniquement pour https).

On continue par du classique : suite du /etc/nginx/nginx.conf

ssl_dhparam /etc/nginx/dh.pem;
ssl_certificate /etc/nginx/lord.re.cert;
ssl_certificate_key /etc/nginx/lord.re.key;

Bon ça vous l’avez déjà vu dans tous les autres tutos (sauf peut-être le dh). Le dh vous permettra de vous la péter (en plus de pas mal renforcer l’échange de clé).

Là on rajoute du bonus : toujours la suite du /etc/nginx/nginx.conf

ssl_session_cache shared:ssl_session_cache:10m;
ssl_session_timeout 8h;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=157680000;

Donc là on défini un buffer de 10Mo pour garder les sessions en cache, donc plusieurs connexions depuis un même client seront gardées en mémoire et réutilisées. Donc on évite pas mal de handshake SSL. Bon ça vaut pas du vraie pipelining http mais bon. On rajoute égalemement un entête http permettant de faire le HSTS. En gros le HSTS consiste à dire au client https de ne venir qu’en https pendant au moins la durée indiquée. Donc votre navigateur de lui-même réutiliseras https lors des prochaines visites. Et ça, c’est chouette !

Bon bha maintenant j’espère que la génération du dh, de la clé et du dh a terminée, parceque maintenant yapuka ! Bon donc maintenant systemctl restart nginx. Haha Hahahaha. Bon non je déconne. /etc/init.d/nginx restart. Mieux. Voilà vous pouvez maintenant vous la racontez avec votre super note au ssllabs. Vous n’aurez pas de A+ car pour cela il faut de l’OCSP stapling (téléchargement de la liste de révocation des certifs toussa toussa) mais comme on utilise du certificat auto-signé, on a pas de CA donc pas de moyen d’indiquer la révocation d’un certificat.

Gestionnaire de passwords : password-store

Comme vous le savez, il faut changer de mots de passe régulièrement. Comme vous le savez il faut des mots de passe de pleins de caractères et si possible des caractères à la con. Comme vous le savez il ne faut pas utiliser le même mot de passe pour plusieurs services différents.

Ouai c’est chiant mais au final des outils vont vous aider à gérer tout ça facilement et surtout ça sera très simple et utilisable avec tous les logiciels et pas uniquement votre navigateur web. Donc quels sont les ingrédients ? ..* pass ..* dmenu ..* gnupg ..* pinentry ..* git Commençons donc par installer tout ce petit monde. Il nous reste plus qu’à configurer le tout.

Configuration pour flemmarder

Donc générons une couple de clé qui servira à chiffrer tout le toutim histoire d’être à l’abris. gpg –gen-key. Répondez au questions et tant qu’à faire, prévoyez une clé suffisamment grande pour être en sécurité.

On a un peu de crypto de faite maintenant rendons le truc distribué afin de l’utiliser sur plusieures machines. pass init Là on créé le répertoire des mots de passe. pass git init là on prépare le terrain pour ce bon vieux git. pass git remote add origin votreserveur:lenomdurepo et là vous désignez le “serveur” qui sera le “point central” sur lequel vous pousserez les modifs et également sur lequel vous récupérerez les infos. À partir de là vous n’aurez pas à vous soucier de la partie git (en dehors de la synchro).

Paufinons un peu le bousin pour pas rentrer la passphrase gpg à chaque utilisation. On va utiliser un agent-gpg. Donc lorsque qingy va ouvrir une session i3 on va lui demander de sagement démarrer ça. /etc/qingy/xsessions/i3

#! /bin/sh
eval $(gpg-agent --daemon)
exec /usr/bin/i3 >> /tmp/i3.log

On rajoute également un use-agent à la fin de gpg.conf et pour terminer on créer le fichier qui va bien : .gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-qt4
no-grab
default-cache-ttl 1800

C’est assez explicite.

Et maintenant flemmardons

Donc maintenant on va l’utiliser. D’abord pour rajouter un pass existant : pass insert nom_du_pass. Pour créer un mot de pass (et le mettre dans le buffer pour pouvoir le coller) : pass generate -c nom_du_pass nombredecaractères. Vous remarque qu’il n’y a pas besoin d’entrer la passphrase gpg puisqu’ils sont chiffrés avec la clé publique pgp qui n’est pas sécurisée.

Maintenant pour lister les pass : pass. Pour en récupérer un : pass nom_du_pass, (rajouter -c pour le fouttre dans le buffer de copié/collé). Là ça vous demande votre passphrase gpg.

C’est bien mais c’est chiant d’ouvrir un terminal pour ça toussa toussa. Donc on va utiliser passmenu qui utilise dmenu pour faire une petite interface graphique des plus ravissante et surtout pratique car accessible à tout moment en un clin d’œil. /opt/bin/passmenu − Merci cdown sur github

#!/bin/bash
shopt -s nullglob globstar
export PASSWORD_STORE_X_SELECTION="primary"
prefix=${PASSWORD_STORE_DIR-~/.password-store}
password_files="( "$prefix"/**/*.gpg )
password_files=( "${password_files[@]#"$prefix"/}" )
password_files=( "${password_files[@]%.gpg}" )
password=$(printf '%s\n' "${password_files[@]}" | dmenu "$@")
pass -c "$password"

et on ajoute un ptit hotkey dans i3 bindsym $m+o exec passmenu comme ça un ptit coup de Alt+o et pouf j’ai le dmenu des pass ♥.

Et sur une autre machine ?

On commence par installer gnpupg git pass. Puis on fait un pass init, pass git init et enfin pass git remote add origin votreserveur:lenomdurepo et enfin un joli pass git pull et voilà vous avez tous vos pass ici aussi :-)

Enjoy

Monter un hébergement de site web propre et performant.

Update 2017 : Avec un peu de recul c’est pas mal depuis la conf de nginx a subtilement changé, c’est globalement compatible mais pas optimal. Qui plus est j’aborde pas le ssl, http2, …

Héberger un site web c’est simple emerge apache2 et zouuu ça marche. C’est bien gentil mais ça a des perfs de merdes, c’est crado toussa. Et s’il l’on prenait un peu de temps pour faire un truc au propre ? Préparons le FS Déjà on va faire tourner notre serveur web avec un user bien différent du système (nginx ou www-data) et donc on va lui créer son home : /home/nginx. On va ensuite faire une petite place pour les logs dans /var/log/nginx/ que l’on linkera dans /home/nginx/LOGS histoire de retrouver ça vite fait. Créons un dossier pour notre premier site ouaib : /home/nginx/lord.re. Vous le comprenez vite, nos prochains vhost seront au même endroit ;-) . Préparons un peu le fs pour les confs. On se rend donc dans /etc/nginx/ et créons un dossier vhosts. On prendra soin de créer un fichier skel contenant la conf de base qui sera repris pour les autres vhost. Bon bon ça y est cette partie est propre.

Vhost aifair

Nginx permet d’inclure des fichiers de confs à la volée et aussi d’utiliser des variables. On va donc tenter de rationaliser au mieux les confs. Créons donc le fichier de conf général : /etc/nginx/nginx.conf.

…
user nginx nginx;
worker_processes 1; (mettre le nombre de CPU)
…
http {
…
include /etc/nginx/vhosts/*;
}

Donc à partir de maintenant chaque nouveau site aura sa conf séparée à la manière de debian. /etc/nginx/vhosts/lord.re

server {
listen :80;
server_name www.lordtoniok.com lordtoniok.com bender.lordtoniok.com www.lord.re lord.re bender.lord.re;
access_log /var/log/nginx/lord.re.access_log main;
error_log /var/log/nginx/lord.re.error_log info;
root /home/nginx/lord.re/;
autoindex on;
}

Voilà une conf de base que l’ont étoffera.

Vive le static cacheable gzipable

Une première optimisation easy qui fera gagner pas mal de bande passante et rendra votre site bien plus snappy est la mise en cache. Tous vos visiteurs mettront en cache des parties de votre site pour ne pas les retélécharger à chaque changement de page et à chaque visite. Donc faisons en sorte que le navigateur de vos visiteurs cache. Deux solutions s’offrent à vous : gérer la mise en cache dans chaque vhost ou bien créer un fichier de conf pour le cache que vous incluerez dans chacun de vos vhosts (protip : c’est la bonne solution pour flemmarder).

/etc/nginx/cache.conf

location ~* \.(js|css|png|jpg|jpeg|gif|ico|html|htm|pdf)$ {
expires 1w; (votre contenu sera considéré comme valable une semaine un F5 forcera un retéléchargement rassurez-vous)
}

Et maintenant dans chaque vhost vous pouvez ajouter un include de ce fichier de conf et zouuu vous avez une jolie mise en cache. Bon pour réduire la conso de bande passante et rendre votre site encore snappier : compressons ! Donc on va faire en sorte que les fichiers non compressés soient zippés à la volée par nginx avant d’être envoyé au client. Ces règlages se trifouillent dans le bloc http de nginx :

extrait du /etc/nginx/nginx.conf

gzip on;
gzip_min_length 500; les fichiers de moins de 500octets ne seront pas impactés
gzip_buffers 4 8k;
gzip_types text/plain text/css text/javascript application/javascript application/x-javascript;
gzip_vary on; au diable ie6

On constate facilement des différences de 50% dans la taille de pages web. Avec ça vous aurez un joli gain de perfs.

− PHP − Un mal nécessaire

Bon tant qu’à parler conf nginx autant aborder la mise en place de PHP. Une fois installé (avec FPM bien entendu et en fonctionnement). La conf pourra (comme la mise en cache) être mise dans un fichier séparé à inclure. /etc/nginx/php.conf

location ~ \.php$ {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/tmp/php.socket;
}

Bon bha voilà vous avez une conf bien poussée. Si vous voulez aussi voir comment faire du reverse proxy il y a déjà un article.

Multi devices BTRFS

Étant malade ce week-end, quoi de mieux qu’un peu de machines virtuelles de BTRFS et de temps pour guérir ? Donc voilà en vue de la rénovation de mon système de stockage actuel j’ai commencé à faire mumuse avec BTRFS en mode multi-devices. Ce terme étrange signifie que l’on va avoir un système de fichier réparti sur plusieurs partitions/disque durs. Ça permet d’utiliser tous les raffinements de BTRFS. :-)

LVM RAID à la poubelle

Ouai c’est provocateur mais j’ai pas peur de le dire. Cette nouvelle génération de système de fichier risque de rendre les quelques technos de transitions assez obsolètes. Le RAID logiciel a été inventé pour mimer le comportement des cartes hardware et au fur et à mesure a quelque peu évolué mais se retrouve pleins de défauts (vérifier la parité d’une grappe de disque de 4To c’est un poil long). LVM a été inventé pour apporter un peu de dynamisme dans la gestion des partitions afin de déplacer/modifier à la volée ces dernières. BTRFS mime ces deux technologies et même apporte des nouveautés bien sympas. Concernant le RAID : BTRFS permet de passer d’un mode (0, 1, 5, 6, 10) à un autre sans interruption (juste perte de perf passagère), il évite également le soucis du bitrot (je l’aborde plus loin) et se permet d’optimiser la vérif de parité en ne checkant que les partie utilisées ce qui permet d’énormément écourter le process. Pour LVM, là encore BTRFS fait tout pareil en permettant d’ajouter de nouveaux sous-volume, de passer de l’un à l’autre, ajouter de nouveaux disque-durs/partitions à la volée. Bon il est encore marqué comme experimental mais si personne ne se jette à l’eau il le sera ad vitam æternam.

Multi-device : d’un RAID à l’autre

Commençons à faire mumuse. Dans la VM, on boot sur un liveCD qui va bien (sysrescueCD par exemple avec son kernel tout récent). On créer une partoche sur le skeudur puis on s’amuse à rajouter le second skeudur pour voir ce que ça fait.

mkfs.btrfs /dev/sda
mount /dev/sda /mnt/test
btrfs device add /dev/sdb /mnt/test/
btrfs filesystem show
… devid 1 … devid 2 …

Et hop là vous voyez vos deux devices pour un seul fs \o/. Bon ça n’émoustille pas grand monde en dehors de moi. Jusque là rien de bien magique. Commençons à raider ! Un ptit btrfs filesystem df. Cet outil sert en théorie à voir l’espace disponible (df a quelques soucis avec btrfs). Il vous affichera également l’occupation du disque par les données, les metadata, le système (?) mais également comment sont stockées ces données (type de raid). btrfs balance start -dconvert=raid1 /mnt/test

Et c’est parti pour la touillette magique. Donc là les données sont désormais en raid1 mais bon si on le fait pas pour les metadata, c’est pas terrible.

btrfs balance start -mconvert=raid1 /mnt/test

btrfs filesystem df Et là ça y est on vérifie que tout est bien en RAID1 Et maintenant pour le fun on reboot avec un disque manquant.

En tentant de mount vous aurez une belle erreur vous poussant à regarder le dmesg. Donc on va monter manuellement en rajoutant l’option degraded et là ça se mount gentiemment. Donc le but du jeu ça va être de fouttre un nouveau disque dur pour reconstruire le raid. On remet un disque dur vierge, on boot, on mount manuellement.

btrfs device add /dev/sdc /mnt/test

btrfs device delete missing /mnt/test

Et voilà :-) On pourrait même s’amuser à le transformer en RAID0 en changeant les options. La modif est transparente (peut-être interrompue et relancée) et n’impacte que les perfs pendant la touillette magique.

Bitrot

Le bitrot est l’altération des données par le système de fichier, l’appareil ou le bombardement cosmique. Le RAID traditionnel n’est pas protégé par cela. Dans un RAID classique si la donnée est altérée, rien ne le remarquera. Pire encore, l’erreur a de fortes chances de fouttre la merde et conduira probablement à un fichier merdouillé. BTRFS dans sa grande mansuétude vérifie l’intégrité des données et peut généralement corriger les erreurs. En VM c’est assez simple à tester. On choisit un des disques virtuel, on y change quelques bits par-ci par-là. Au boot, tout roulera. Dans dmesg on vera apparaître les erreurs qui seront alors corrigées.

IP Proxy Logs Nginx Reverse

Le titre ne pourrait être plus explicite ! Vous avez remarqué comme lorsqu’on fait du reverse proxy, le backend ne voit plus que l’ip du frontend ? C’est tout à fait logique puisque les requêtes proviennent exclusivement du serveur frontal qui fait son boulot. Du coup ça peut être quelque peu dérangeant

Dura lex sed lex

Vous n’êtes pas sans savoir qu’en France tous les fournisseur de contenu sur le web doivent conserver les logs de connexion. La loi n’est pas vraiment précise quant aux informations à conserver mais globalement, l’heure, l’ip et la ressource demandée est le minimum. Et ça tombe plutôt bien c’est ce que font tous les serveurs web basiquement. Donc pour éviter de se mettre en porte-à-faux vis-à-vis de la loi, il va falloir améliorer notre jolie config nginx (ce sera surement un futur article). Donc on va devoir dire à notre reverse proxy de rajouter un header dans sa requête indiquant la vraie IP de la requête.

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

À rajouter dans le bloc server ou location de votre reverse proxy Ensuite maintenant que notre serveur de backend reçoit une requête avec le header qui va bien, il faut lui dire de s’en servir !

set real_ip_from A.B.C.D;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

À rajouter dans le bloc server de votre vrai serveur web Ça y est, un ptit reload et vos logs contiendront la vraie ip. C’est également pratique dans le cas d’utilisation de PHP pour que lui aussi connaisse la vraie ip du client (logguer les éditions sur un dokuwiki par exemple).

Devtmpfs et Udev sont dans un bateau

Et voilà qu’une coupure de courant m’a réveillé de mauvais poil ce matin. Un dimanche à 6h entendre le gazouillis des onduleurs. Toujours plus oppressant. Chaque bip indiquant une mort de plus en plus proche. Et là c’est on commence à tenter de s’égayer les idées. Une épreuve de résistance pour onduleur : lequel tiendra le plus longtemps ? Celui de l’équipe téloche (ONT, lecteur multimédia, téléviseur), l’équipeserveur (serveur huhu) ou bien l’équipe ordis (les ordis, le switch et la borne wifi). Malheureusement à 6h du matin c’est l’équipe serveur qui tombe en premier, les autres glandant allégrement en écoutant le bruit des cigales commençant à s’éveiller. Bon trève de poésie. L’onduleur serveur est tombé. Faisant passer son uptime de 200 à 0 d’un coup d’un seul. Et c’est là que les ennuis commencent. Pendant ces deux cents jours j’ai fait quelques update de la gentoo dont une dont j’aurai pu me passer.

Docteur Root

Après avoir réussi à me rendormir une fois le ventilateur décidé à redémarrer grâce à l’acharnement d’EDF. Voilà que je me lève et tente innocemment de me connecter au net en me doutant que j’aurai quelques emmerdes. Et là comme convenu ça ne marchait pas. Un petit ping sur le net. NOPE. Un petit ping sur le serveur. YEP. Bon ça restreint le champs d’action. Ni une ni deux je déballe le brave chevalier ssh. Mais celui-ci ne parvient pas à passer le pont levis. J’envoi mes deux espions en renfort. Un avec le chevalier ssh du nom de -v et le second plus en retrait qui regarde de loin (tcpdump). Manifestement le pont-levis ne s’ouvrira pas. Il faut donc passer à l’arme lourd. Brancher un clavier et un écran.

Diagnostic : Udev capricieux

Au boot le kernel fait ses petites affaires gentiement. Vient ensuite le brave openrc qui commence gentiement lui aussi à faire son office jusqu’à ce qu’il se fasse poignarder dans le dos par le vil udev. Vous savez, udev, c’est ce petit logiciel magique qui gère un peu trop de truc niveau matos tout ça. Et ce petit couillon nécessite désormais une option du kernel DEVTMPFS. Je pensait bêtement que je l’avait depuis un bail mais manifestement non. Donc là le bon sens voudrait qu’on boot sur un livecd ou autre. Le soucis c’est que j’ai plus de net, pas de lecteur optique et pas de clé usb.

Opération à OpenRC ouvert

Bon donc on boot, puis on bourrine la touche I. Et là on arrive dans le mode interactif d’OpenRC. Le mode interactif demande à l’utilisateur quelles actions entreprendre pour chaque service devant être démarré. Sachant qu’udev est un composant assez critique et que sans lui ça risque de chier un peu, je me fait pas chier: au premier service, je lui dit de laisser tomber et de me filer un shell. Ceci fait, on passe le clavier en petit azerty (loadkeys fr). Étrangement ça semble de plutôt bien fonctionner, même si bien entendu rien n’est démarré. Je remonte la partoche en rw (mount -o rw /), puis on va se faire une petite compil kernel des familles et on boot dessus. Si ça c’est pas un joli dimanche d’été…

Mom part en retraite

C’est avec un pincement au cœur que je vous annonce le futur départ en retraite de Mom. C’était la petite dédibox qui me servait pour tout un tas de chose. (ouai je sais je prône l’auto-hébergement mais j’ai quand même une dédibox). (ouai normalement ça se fait pas de mettre des parenthèses en dehors d’une phrase mais s’il faut affronter l’académie française pour ça, je suis prêt à prendre le risque). Cette petite bobox m’aura bien servi pendant près de quatre ans. Heureusement je la remplace par Zoid.

Zoid est une belle bête qui aura la lourde tâche de reprendre toutes les activités de Mom. Sauf que ce coup-ci j’ai un peu plus de recul et surtout la bestiole est bien plus véloce. J’ai 16 fois plus de ram et à vue d’œil à peu près le même augmentation de puissance cpu. Donc, ça va être du proxmox (par curiosité au début mais en fait c’est plutôt bien foutu et se laisse tripotter les entrailles sans trop sourciller). Chaque service sera isolé dans son conteneur openvz.

Pour “lier” tous les webservices qui seront hébergés, un vaillant nginx sera de la partie. À lui les joies du reverse proxying dans tous les sens. À l’occasion je posterai surement la conf. D’ailleurs je vais probablement faire du reverse proxy pour Bender afin de pouvoir le joindre même si l’update DNS que j’ai mis en place foire.

Et voilà, une page de l’Internet se tourne. Le monde en parlera des siècles durant, faisant de Mom une légende. Adieu 20790.

Les snapshots BTRFS

Voilà un petit moment que ma petite gentoo perso est sur btrfs. Ce système de fichier est très sympathique de part toutes ses fonctionnalités. Une que j’affectionne tout particulièrement est le snapshot. Une sauvegarde à chaud, instantanée et qui ne bouffe quasiment pas de place. C’est ti pas la panacée en ce world backup day ? (ouais bon c’était il y a trois jours je sais).

Donc le truc à savoir avec btrfs c’est qu’il fonctionne en sous-volume (un peu comme lvm) et qu’il permet donc de faire un snapshot d’un sous-volume qui sera lui même un sous-volume ! Ouais ça en jette. Donc typiquement le truc à faire c’est de se créer une partoche btrfs, et au lieu d’y foutre son système, c’est d’y créer un sous-volume avec son système. Par exemple sur mon /dev/sda2 j’ai ma partoche btrfs. Dedans j’y ai créé un dossier «gentoo» qui est en fait un sous-volume. Donc en vrai ma racine est /gentoo et non / . Je définis le dossier /gentoo comme étant le sous-volume par défaut. Donc si l’on ne spécifie rien et que l’on mount /dev/sda2 on montera en réalité le dossier gentoo. Comme ça, même pas besoin de trippoter grub ou autre (bien que ce soit tout de même recommandé).

Bon jusque là, rien de bien terrible. Mais là où ça devient fun c’est qu’on peut maintenant snapshotter comme un petit goret. Pour cela il faut monter la partoche btrfs et non un sous-volume (ni même celui défini par défaut). Donc un petit mount /dev/sda2 /mnt/btrfs -o subvolid=0 fera l’affaire. On va dans le dit dossier pour y retrouver un bête dossier gentoo. Et là on snapshot avec btrfs subvolume snapshot gentoo gentoo_02042013. Bon bha voilà.

Ouai vous vous dites ça fini un peu vite cette histoire. C’est justement pour ça que c’est beau. C’est simple, rapide et ça marche. Enfin ça marche… Il faut être capable de l’utiliser. Pour cela rien de particulier à faire à part éventuellement le foutre par défaut avec deux commandes. Il faut d’abord trouver quel est son numéro btrfs subvolume list / et ensuite btrfs subvolume set-default XX /. Ouais c’est super simple aussi. Et ensuite pour supprimer le sous-volume un rm suffit ou alors passer par la commande prévue pour…

Donc voilà c’est quand même bien simple. Là j’ai parlé du cas particulier du sous-volume par défaut mais ça marche pour n’importe quel sous-volume pour un montage séparé comme par exemple /home .Sur ce bonne léthargie.

2013 - CSS fait main.

Mais quel indécis ! Ouais je change encore mon site. Bon en fait bootstrap c’est bien sympa mais au final déléguer toute la partie fun bha c’est pas fun. Autant j’ai toujours du mal à créer du contenu pour le site, autant j’adore faire mumuse avec le css. Du coup, bha ouais j’ai refait encore le site. J’ai quasiment pas touché au fond. J’ai simplifié le menu tout de même et supprimé quelques lourdeurs de bootstrap pour avoir presque que du contenu. Quelques ajustements par çi par là et paf un nouveau css.

En fait j’ai changé le style parce que j’ai un écran 169 et bootstrap n’en utilise qu’un gros tiers. Je passe mon temps à pester contre ce genre de design qui néglige nos chers écrans. Du coup j’ai pris mon courage à deux mains et j’ai expérimentés deux trois trucs. Premièrement, utiliser le plus possible les balises html5. Donc j’utilise du nav, de l’article toussa. C’est un poil plus sémantique (si avec ça je trust pas toutes les premières places des résultats google pour linux et livebox…).

Pour le css, j’ai fait un menu vertical. C’est ce qui me semble le plus normal avec les écrans larges : on passe notre temps à scroller vers le bas alors qu’on a trop de place horizontal. Donc autant foutre sur les côtés les éléments dispensables et privilégier le placement du contenu. On se retrouve avec 85% de l’écran pour le contenu. On rajoute quelques marges tout de même pour aérer. Le soucis immédiat c’est qu’on se retrouve avec des lignes de texte si longue que le changement de ligne devient compliqué. Plusieurs études rapportent que la lisibilité optimale d’une ligne se retrouve en deçà des 80 caractères. Je ne suis pas parfaitement d’accord sur le chiffre mais la logique est avérée. Du coup pour chaque article, si la fenêtre est assez large, le contenu est découpé en colonne. Le rendu est vraiment pas dégueu et très agréable à lire. Le hic (parce qu’il y en a toujours un) est que si l’article à lire ne se contient pas dans un seul écran, il va falloir remonter pour lire la seconde colonne ce que je trouve particulièrement pas adapté à une lecture informatique. Je vais donc devoir trouver une solution.

Tweaks de CSS

Le problème quand on utilise bootstrap c’est qu’on ressemble à tous les autres sites trendy flashouilles. Du coup j’ai tweaké un peu le bestiau. Donc déjà au lieu de modifier le css d’origine je l’ai surchargé en utilisant un custom.css . Cela permet de modifier l’apparence sans casser bootstrap. Qui plus est en cas d’update de bootstrap ça permet de garder ses modifs.

Premier truc à faire pour se différencier : changer la font. Ouai ça fait énormément. Beaucoup plus impressionnant qu’on ne pourrait le croire. Ça fait quelques baux qu’on se tappe toujours les mêmes font qui sont loin d’être les plus agréables à voir et à lire. Quelques google font (j’ai presque honte) et zou. Elles sont mimi ces petites Droid Sans et Droid Serif. Quelques couleurs par-ci par-là pour mieux distinguer les titres des sous-titres. On augmente un peu la taille du texte. Après tout c’est le contenu primordial de ce site, autant l’agrandir pour faciliter la lecture. J’ai mis en place un joli dégradé vertical s’assombrissant. Une lolanimation css sur le titre. Et voilà je m’éloigne du troupeau.

Dégager une livebox tout en conservant le service de téloche

UPDATE 2017 : Ce tuto est plus vraiment d’actualité, désormais le PPP n’est plus obligatoire, il est d’ailleurs préferrable de passer par le DHCP (qui nécessite malheureusement des options exotiques).

Ça y est ! Le Saint-Graal est arrivé à la maison ! Le FTTH. La fibre. Cette petite merveille de plastoc qui me fait rêver depuis des lustres. Je l’ai youhou youpi yata. J’ai donc un joli 100M symétrique chez l’agrume-opérateur. Une bien jolie connexion. Un débit symétrique ça vous change la vie de geek. Par contre plus d’ip fixe, ni de reverse DNS personnalisable… C’est d’ailleurs fort dommage. Et le port 25 est à oublier également. M’enfin il faut savoir faire des concessions dans la vie. Et là Livebox quelle horeur. Heureusement ce dernier détail est règlable. Par contre pour conserver le service de télévision il va falloir se retrousser les manches.

Petit rappel sur l’architecture FTTH d’un particulier en 2012

Clémentine a choisi une architecture de type GPON. C’est à dire qu’une fibre déssert plusieurs clients. Quelle idée saugrenue ! Après s’être fait chier à faire la même connerie sur le cuivre, ils refont pareil sur la fibre. En cuivre pour faire des économies les PTT ont tirés de nombreuse lignes multiplexées. Pour le téléphone c’était parfait cependant avec l’arrivée du net pour tous ça a très vite montrer ses limites. Le débit RTC traditionnel est déjà assez bas mais sur une telle ligne on ne dépasse pas les 30kbps (bits pas bytes). Et on peut direct oublier de faire passer de l’asdl sur les lignes multiplexées. J’ai encore des restes de ce traumatismes. Avec la fibre ils refont la même. Ils multiplexent plusieures clients sur une seule fibre. Pour l’instant c’est absolument pas génant mais qui sait ce qui se passera dans quelques années… Une bonne petite fibre individuelle n’aurait pas coûté beaucoup plus chère m’enfin.

Donc dans les parties communes de l’immeuble la fibre est amenée par un opérateur. Puis il faut une intervention dans chaque appartement pour y amener ce cable magique. En fait d’une fibre c’est bien 4 qui sont réellement tirées. On peut donc etre raccordé à 4 réseaux opérateurs différents. Un petit boitier est posée avec les 4 prises colorées. Cette partie là devient fixe : en cas de changement de FAI cette partie restera toujours. Un changement de FAI consistera à brancher le reste de l’installation sur l’une des quatre prises. Ce boitier n’est pas alimenté, c’est juste une prise toute bête.

Maintenant on passe à la partie appartenant au FAI : le modem ! Dans le cas de Mandarine il s’agit d’un boitier faisant le lien entre la box et la fibre. C’est plus un transceiver à vrai dire. On lui met un peu de courant, la fibre et il vous pond un ethernet. C’est à lui qu’on dois une bonne partie de la magie. Cette boiboite est parfois intégrée dans les box (pour les futures livebox il parait, ou bien dans li freebox,…). Par chance j’y ait eu droit.

Il y a ensuite la box qui récupère l’ethernet. Celle-ci s’occupe de gérer le ppp ( oui oui -___- ) et de faire le routage et toutes les saloperies que font les box. Elle permet de raccorder le décodeur TV et le téléphone. C’est bien la seule chose d’intéressant qu’elle fasse à vraie dire. En bon petit geek tout le reste est déjà fait maison et en mieux.

Que fait réellement la livebox ?

Bon alors la box sur le port 4 récupère la connexion internet. Elle s’occupe de la session PPP. Elle fait son boulot de passerelle. Elle récupère le flux tv et le déverse sur n’importe lequel de ses trois ports restant. Elle récupère la téléphonie en h323 (ou SIP je ne sais pas trop et je m’en fout royalement).

Donc pour la partie PPP c’est comme sur du bon vieux ADSL. Donc notre routeur va devoir gérer la session PPP avec les identifiants. Là où il y a une subtilité, c’est que c’est dans un VLAN numéroté 835. Hahaha qu’est-ce qu’on se marre. Non content de ne pas fournir un joli ethernet des familles mais du PPP, il est VLANisé. Et pour la petite blagounette on retrouve les VPI/VCI ATM. Du coup notre petit internet on le retrouve au bout de combien d’empilement de couches ? Bon j’imagine que maintenant vous vous doutez de la suite… Non ? Bon bha en fait on va aussi avoir du VLAN pour la téléphonie mais bon j’ai déjà dit qu’on s’en foutait ( de toute façon j’imagine qu’on a pas les infos concernant le login h323 ou SIP ( une petite sonde entre le transceiver et la box serait du plus belle effet, mais je m’en fout ) ). Et pareil pour la téloche on va avoir droit à une belle collection de VLAN. Prêt ?

Faisons mieux !

Matériellement il va nous falloir trois interfaces réseau :

eth0 pour le transceiver
eth1 pour notre LAN
eth2 pour le décodeur téloche

Et pleins de câbles pour les lier.

Logiciellement il va nous falloir une gentoo, brctl, iproute2, vconfig, ppp, rp-pppoe et un kernel qui mange du ppp. Faites un petit ip l, vous ne reverez plus comme ça.

Le but va être de tout automatiser bien entendu. Et on va se la jouer gentoo-style. Donc le gros du boulot va se trouver dans le fameux /etc/conf.d/net . On va commencer en douceur pour avoir juste un peu de net pour pouvoir retourner au plus vite sur irc.

#eth0 à poil
config_eth0=noop

#config ppp
config_ppp0="ppp"
link_ppp0="eth0.835"
plugins_ppp0="pppoe"
username_ppp0="fti/1234567"
password_ppp0="1234567"
pppd_ppp0="
defaultroute
noauth
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj"
#on ne monte pas ppp0 tant que eth0 n'est pas prête
rc_need_ppp0="net.eth0"

#on ajoute qu'un vlan pour l'instant, on en rajoutera après
vlans_eth0="835"

#et une jolie eth2
config_eth1="10.0.0.1/16"

Là vous avez donc votre interface eth0 qui se retrouvera à poil, le vlan 835 qui lui sera greffé dessus ( création d’une interface eth0.835 ) et ppp0 qui se greffera par dessus votre interface eth0.835. Vous avez donc lo, eth0, eth0.835, ppp0 et eth1. À ce moment vous êtes à deux doigts d’avoir du net sur votre LAN. Sur la passerelle ça devrait déjà être bon. Il va falloir un peu d’iptables genre un petit

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

et le tour est joué. Votre LAN est inondé de chatons boobs et autre memes. Sauf que ça coince un peu partout. Il va falloir faire mumuse avec la MTU grâce à toutes ces couches crasseuses. On gère ça encore avec

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

On respire.

Une seconde fois.

Télochons

On passe à la partie téloche, autrement apelée l’invasion des interfaces réseau. Bon donc il faut savoir que la téloche est encapsulée dans plusieurs VLANs :

835 : Internet
838 : Négo et HTTP pour le décodeur TV
840 : streaming des chaînes
841 : VoD il paraît mais bon, on s'en fout

Retournons dans le /etc/conf.d/net :

#on modifies les vlans sur eth0:
vlans_eth0="835 838 839 840 841"

#on prépare eth2
config_eth2="noop"

#on bridge nos VLANs et eth2
bridge_tv="eth2 eth0.838 eth0.839 eth0.840 eth0.841"
config_tv="192.168.1.1/24"

#on ne monte l'interface tv que lorsque eth2 est prêt
rc_need_tv="net.eth2"

C’est bon, vous avez completés votre fichier comme un boss ? Vous êtes prêt à vous lancer dans un reboot de la mort ? Le seul soucis de cette install c’est que chaque interface VLAN va avoir la fâcheuse manie de balancer une requête DHCP avec son timeout qui va avec. Vue le nombre d’interface qu’il y a vous êtes pas arrivé. Si quelqu’un trouve une solution, je suis preneur.

Un petit coup de polish : dans /etc/local.d/votrenomdescriptfavoris

#réparation des bridges
echo "0" >/proc/sys/net/bridge/bridge-nf-call-arptables
echo "0" >/proc/sys/net/bridge/bridge-nf-call-ip6tables
echo "0" >/proc/sys/net/bridge/bridge-nf-call-iptables
echo "0" >/proc/sys/net/bridge/bridge-nf-filter-pppoe-tagged
echo "0" >/proc/sys/net/bridge/bridge-nf-filter-vlan-tagged

Je détaillerai pas cette partie mais il faut se faire un ptit serveur DHCP pour le décodeur TV. En sachant que ce couillon est peu capricieux : en cas de modif IP faut le redémarrer électriquement.

Bon bha voilà, vous pouvez dégager votre livebox et la rendre à Orange tout en pouvant profiter de la téloche.

Mini-Guide minimaliste pour vim

Ça y est vous venez de suivre un tuto sur le net qui vous a fait dégainer vim pour modifier un fichier et vous êtes coincé dans cette console à la con sans pouvoir écrire et pire encore : vous pouvez pas fermer cet immondice! Bon allez voici le minimum à savoir pour ouvrir/éditer/fermer un fichier avec vim. Pour ouvrir un fichier avec vim : vim /mon/fichier C’est comme tout éditeur de fichier à peu près.

Pour modifier/écrire dans le fichier vous devez vous placer en mode INSERT. Pour cela appuyer sur la touche i. Puis faites vos petites affaires. Pour sortir du mode INSERT et faire toutes les autres manips, appuyez sur la touche échap. Pour enregistrer votre fichier tapez :w

Pour quitter :q

Si vous avez des modifications non enregistrées et que vous voulez quand même quitter sans sauvegardes :q!

et un petit pro-tip, vous pouvez faire les deux d’un coup :wq

Sachez que les commandes se valident par la touche entrée.

Je suis conscient que c’est l’absolu minimum ce que je vient de vous communiquer mais commencez par ça. Ce n’est pour l’instant pas plus efficace que n’importe quel autre éditeur ( sauf emacs bien entendu :-þ ) mais les avantages de vim poindront plus tard.

Vim : le meilleur outil du linuxien

Et voilà le classique : l’article sur vim. Tout linuxien se doit un jour ou l’autre déclarer sa flamme pour son éditeur de texte ( ainsi que son flame envers celui des autres ). Je ferai donc un énième article sur la toile pour vanter les louanges du dieu des éditeurs de texte.

Déjà faut se rendre compte de l’importance d’un éditeur de texte. Mais pour cela il faut connaître un poil son OS. Tous les OS potables sont gérable intégralement en mode texte. Mais bon ça n’est qu’une partie de l’équation. Beaucoup d’OS tentent de suivre le précepte : « Tout est fichier ! ». C’est pas absolument vrai ( tout du moins en dehors de Plan9/Inferno ) cependant on s’en rapproche quand même pas mal dans la pratique. Partant de ces deux constats, on en déduis qu’un éditeur de texte en mode console permet pas mal de démerdouillage.

Bon on a désormais besoin de se convaincre qu’un éditeur de texte comme nano ne nous suffit pas. Là c’est un peu plus dur de convaincre les gens. Quand on se destine à travailler plusieurs heures par jour avec son ordi et par extension son OS pendant au bas mot le reste de sa vie, il n’est pas trop insensé se dire qu’un investissement personnel dans la maîtrise d’un éditeur de texte sera profitable et facilement rentabilisable.

Maintenant que mon lectorat capitaliste est entièrement convaincu, je vais te convaincre toi le Kevin du fond. Vim est un outil se basant sur vi il a donc un héritage de pas loin de quarante ans. Ça remonte aux balbutiements de l’informatique mine de rien. S’il est encore utilisé et amélioré depuis tout le temps c’est un peu parce qu’il s’agit d’un outil plutôt bien branlé et à même de faire tout ce qu’on peut attendre d’un éditeur de texte, tu crois pas ? Et puis c’est tellement drôle de voir des gens essayer de fermer vim pour la première fois.

Bon allez sachez d’abord que vim est un éditeur de texte. Contrairement à Emacs ( son nemesis ) qui tend à devenir un userland complet ( à quand emacs/linux pour remplacer gnu/linux voir lennux ).

Ensuite et c’est le plus étrange au début, il est modal. Il fonctionne donc selon différents modes. Le premier permet de lancer des commandes, celui qui vous intéressera le plus au début est le mode INSERT qui permet d’entrer/d’éditer du texte, les autres on verra plus tard si vous êtes sages. Vim est parti du constat que lorsqu’on édite du texte, on est finalement pas tout le temps en train d’écrire. Et c’est finalement une bonne remarque mais vous vous en rendrez compte au fil de votre voyage en terres de vim. Car oui, il ne faut quand même pas se voiler la face, c’est une épopée qui durera. On peut en apprendre tous les jours avec ce logiciel. C’est un art qui s’approprie lentement. On ne devient pas un vim-golfeur en un week-end. Les manies que vous apprendrez sous vim pourront d’ailleurs vous servir dans tout un tas d’autres softs ( less, pentadactyl, … ). Vim a inspiré de nombreux développeurs mine de rien.

Je vais donc finir cet article pour commencer de suite le guide de survie minimum avec vim. Et j’enchaînerai vers d’autres techniques plus avancés au gré de mes envies. Et je vais de ce pas vous pondre un second article. Deux articles le même jour ça sent l’Apocalypse maya ou l’ Armageddon voir le Ragnarok!

Un nouveau navigateur pour de nouveaux océans

Ça me pendait au nez. Depuis de très longues années j’utilisait fièrement Opera. Depuis la version 7.11 à vrai dire soit plus très loin de dix ans. Tandis que le panda n’était qu’un piaf je découvrait les onglets (pas vraiment mais j’ai trop honte d’avouer que j’utilisais une surcouche d’ie).

En pas loin de dix ans j’ai découvert de très nombreuses features plus ou moins connues ou exotiques. J’ai trifouillé une grande partie de ses ini pour lui trifouiller les boyaux afin de le plier à mes exigences. Un bon vrai navigateur, multiplateforme toujours respectueux des standards et globalement en avance sur la concurrence.

L’arrivée de Firefox a commencé à mettre à mal ie au point que microsoft réalise qu’en fait un navigateur mérite des updates espacées de moins de cinq ans. Mais c’était pas encore vraiment un vrai marché concurrentiel. Firefox n’a fait que bouffer des parts de marché à un vieil outil utilisé de tous sans vraiment savoir que ce n’était pas Internet mais juste un navigateur web. On se retrouve au final sur un marché où le vénérable IE donne ses parts à firefox auprès des initiés et auprès des Michu se faisant installer un “internet moins virusé”. Pas vraiment de conviction mais bon après tout comment être convaincu par un outil qu’on ne soupçonne même pas en être un.

Puis vint khtml qui fît ses débuts sur les unices pour se transformer en Webkit qui deviendra le moteur alternatif qui pourra s’imposer grâce aux mastodontes que sont google le roi de la pub et apple le roi des moutons. Le succès ne peut qu’être assuré. Le marketing aidant et le public commençant à assimiler qu’Internet n’est pas IE, webkit pris de l’ampleur au point de faire pendant quelques temps une microsoftade en réussissant à convaincre des webdev à reprendre de la syntaxe non standardisé comme étant acquise. Bref on arrive enfin à un vrai marché avec trois gros moteur : gecko le moteur des panda, webkit le moteur des pokéball et des tueurs d’animaux et enfin trident le moteur des vieux navigateurs.

Ha mais je voulait parler d’Opera ! Cette phrase identifie parfaitement ce qui arrive à Opera depuis… tout le temps. Il ne parvient pas à faire parler de lui, il se fait oublier. Il n’a pas réussi à faire grossir sa communauté en dehors d’elle-même. Pourtant que peut-on lui reprocher ? Sa licence ? Oui c’est vrai il n’est pas opensource. Et ? Bha c’est à peu près tout au final. Les sites non compatibles sont généralement des sites mal branlés ou alors discriminant (merci le spoof-UA). Ce navigateur est bon aussi bien pour les Michu car son interface de base cache bien son jeu. La complexité du navigateur ne se voit pas. Il peut être utilisé comme un bête firefox, a un rendu proche d’un chromium et. Non je trouve pas vraiment de ressemblances avec IE désolé.

Bon fini de tergiverser, je quitte quand même Opera. Je l’aime toujours mais depuis la version 12 il plante. Il affiche aussi une barre inutile avec un bouton de menu alors que je n’en ai cure. Et puis il plante ! Je reviendrai peut-être quand ces points seront réparés…

Je suis donc passé chez les tueurs de mosaïques. Et franchement c’est pas mal un navigateur opensource. Et du coup certaines extensions permettent de le rendre utilisable. Je pense particulièrement à Pentadactyl qui octroie au navigateur une vraie interface clavier bien pensée. On saupoudre de ghostery pour virer tout un tas de merde comme sous opera et tant qu’à y être un adblockplus parce que bon faut pas trop déconner. Et pour combler le kikoo qui sommeille en moi j’ai craqué pour une petite extension permettant de contrôler grooveshark depuis la barre de pentadactyl. Et j’obtiens un navigateur pas trop dégueu.

Bon je sais pas combien de temps je vais devoir tenir loin de mon O rouge mais bon…

Vous avez remarqué que j’allonge les articles et que je les espace moins. Je vais bientôt vous pondre un article vantant les louanges de vim tiens (teaser toussa toussa). Amusez-vous bien et gare au photon rush.

PS Février 2018 :

Bon bha je sais que je retournerai jamais chez Opera. Il existe des navigateurs ayant adopté sa philosophie (Vivaldi et Otterbrowser mais j’ai été trop bien gâté par Vimperator (remplaçant Pentadactyl).

Bootstrapper le site

Et voilà. Ce qui devait arriver est arrivé. Et voilà que le site à un nouveau design. Et puis j’ai craqué pour le fameux twitter Bootstrap. C’est propre simple et classe. Ça a un peu la même gueule que tous les autres sites mais c’est vraiment pratique.

Bootstrap est un ensemble de javascript et de css pour faire des sites propres et de manière très simple. Il suffit d’appliquer des bonnes classes aux différents éléments. Un ptit span9 sur un élément et pof il récupère ce qu’il lui faut. Plus qu’à choisir un thème et zou. Avec des petites icônes sous forme d’une font à utiliser très simplement.

C’est la première fois que j’ai mon site perso sous un système non-fait maison. En même temps c’est la première fois que j’ai un site qui ait un minimum de gueule…

Je vous promet que les images vont bientôt arriver pour faire un peu plus léger. Allez vous pouvez ré-éteindre votre cerveau, je vous rebipperai d’ici deux-trois mois pour un autre article.

Un bureau moderne sous linux

Ouais un petit titre prétentieux et même trompeur diront certains (dont je ne fait pas partit, mais on s’en fout vu que ces certains n’ont pas la parole). Au final, je viens de réinstaller une gentoo sur mon bon vieux laptop d’il y a quatre ans. La petite arch qui y trônait a rendu l’âme (une sombre histoire d’update au bout de plusieurs mois sans servir) et du coup j’ai voulu revenir à cette bonne vieille gentoo. Je me retrouve avec toute une petite flottille sous gentoo, plus de traître à la maison. J’ai au final réinstaller sur un schéma très proche de mon ordi fixe. J’ai utilisé un petit PXE pour booter une debian des familles. J’en ai d’ailleurs profité pour la mettre à jour après plusieurs mois d’abandon et elle n’a pas trop souffert. Gnome3 n’est pas si pourri que ça (tout du moins pas gnome-shell), avec un peu d’habitude et quelques jours passés avec, j’imagine qu’on doit en avoir une plutôt bonne maîtrise. Mais trêves de conneries allons droit au but : la gentoo en desktop moderne.

Gentoo ! What did you expect ?

Un petit tour d’abord sur gentoo. On la dit en perte de vitesse mais que nenni. Cette distro est toujours au top et garde toujours ses atouts. C’est stable, ça fonctionne très bien, peu de surprise, tout est bien rangé, la doc est excellente et c’est personnalisable à souhait. La flexibilité !

Les paquets fournis de bases sont peu nombreux et peuvent être facilement remplacés pour la plupart. Le gestionnaire de paquet est un petit bijou et permet l’ajout de dépôt externe de façon ultra simple (c’est plus simple que chez noobentou). Bon je vais pas vous faire un paragraphe plus long, vous avez compris je suis un fanboy accompli.

Un desktop. Quand je dit ça, je l’oppose pas au laptop mais au monde des serveurs. Je suis convaincu que linux (couplé à son gnou) est un OS parfait pour un desktop (même gentoo). Tout peut y être fait appart jouer (et encore en chipotant on peut s’en sortir un peu même si ce n’est pas la panacée).

C’est un OS qui supporte des tonnes de matos, qui est bidouillable de partout avec un choix d’environnement logiciel gigantesque. Là où sous d’autres OS on en chie pour changer une icône, ici on peut tout modifier et avoir un environnement qui ne peut que nous convenir.

Je ne dit pas que c’est facile. Loin de là. Si on veux un environnement aux petits oignons parfaitement polis de partout ça va être long et il ne faudra pas être un débutant nunuxien. Pour ces personnes là, il faudra se tourner vers des distros qui ont fait ce travail à notre place. Mais qui du coup auront également pris les choix à notre place.

C’est donc un compromis. Mais la patience étant une vertu, la maîtrise d’un outil s’acquière avec le temps et surtout l’expérience dépend de l’investissement.

Modern Desktop

Bon au final c’est quoi un desktop moderne ?

Je dirais que c’est un environnement informatique que l’on maîtrise au poil de cul. Où chaque aspect nous sied et où le compromis disparaît au profit d’une satisfaction maximale.

Je suis personnellement adepte de la perfection qui s’atteint lorsqu’il n’y a plus rien à enlever. Je veux un OS qui se contrôle parfaitement à la souris mais (et surtout) au clavier. Ne plus être contrait de chopper ce satané mulot est un confort qui s’apprécie avec le temps. Il m’arrive de temps à autre de chopper le raton après seulement une heure d’utilisation de l’ordi à cause d’un site ouaib mal branlé (genre celui que vous lisez).

Un point important de l’ergonomie est également une cohérence dans les raccourcis claviers des différentes applications. Je tente en effet de garder une certaine logique. Par exemple pour fermer mon navigateur j’utilise Ctrl-Q, pour fermer mon gestionnaire de fenêtre, je déclenche un joli Alt-Shift-Q, pour éteindre l’ordinateur c’est un voluptueux Alt-Q. En sachant que les raccourcis utilisant la touche Ctrl sont ceux du navigateur, la touche Alt servira pour les raccourcis du gestionnaire de fenêtre ainsi que du gestionnaire de login (étant donné qu’un seul à la fois à le focus, cela ne pose pas de soucis).

Actuellement mon utilisation se résume à de la navigation web et des applications en consoles. Je n’ai quasiment aucune application graphique. Ça ne fait pas très 2012 comme ça mais pourtant c’est très efficace. On trouve de plus en plus d’applications web (webmail, lecture vidéo, lecture de musique,…), ça devient un environnement quasi-complet.

D’ailleurs, jetez-moi ces onglets de votre navigateur. Pourquoi s’embêter avec cela ? Vous n’avez pas déjà un gestionnaire de fenêtre dont c’est le boulot ? Ça vous permettra de réduire le nombre de raccourcis à retenir/utiliser. Ça permet également une plus grande souplesse. Vous bénéficierez de toutes les joyeusetés de votre WM, des onglets, du stacking, du fullscreen, du floating, de la mosaïque…

Et virez-moi cette barre d’adresse également. Combien de fois vous sert-elle réellement ? Lorsque vous ouvrez une page, appuyez sur une touche pour indiquer que vous entrez une url (ce qui en plus prendra le focus sans utiliser la souris) et basta. Encore un gain d’espace et toujours plus prêt du minimalisme. Si vous avez du mal à le faire par vous même testez quelques temps un navigateur propre,simple et moderne tel que surf.

Bon allez, vu que j’ai déjà dévoilé un navigateur, voici la liste des principaux éléments d’un os moderne (toujours selon moi, je devrais pas le préciser puisque c’est mon “blog”, mais bon).Voyons ça dans l’ordre d’utilisation.

Login→Fenêtres→Terminal

Login Manager

On commence par le login manager.

J’utilise qingy. C’est un login manager très léger et pourtant très puissant. Il remplace login/*getty/gdm/kdm/slim/orthos. Il a pas mal d’avantages. Déjà il est léger et possède peu de dépendances. Il peut être à la fois purement console ou bien graphique. Lorsqu’il est graphique, il ne tourne pas sous X mais sous DirectFB, ce qui permet lorsque l’on casse son X d’avoir au moins un login manager qui fonctionne (pas le cas de gdm et kdm). Même en mode console il permet de choisir sa session. On peut donc démarrer une session X (un wm, un DE) ou bien session texte (un shell, un script). Il peut se souvenir du dernier utilisateur loggué. Il peut lancer X dans le tty d’origine ce qui facilite les utilisateurs multiples simultanés. Il peut locker votre session lors d’une inactivité ou bien lors d’un changement de tty. Non il est juste parfait.

Window Manager

Vient ensuite le gestionnaire de fenêtre (WM). J’ai trainé pendant un couple (huhu) d’année sous wmii. Il était vraiment bien mais au final son architecture exotique à la plan9 bien qu’intriguante était fatiguante.

Je me suis tourné vers l’un de ses successeurs : i3. C’est à mon goût ce qu’il se fait de mieux en tiling. Il a toutes les qualités qu’on peut en attendre. C’est léger, rapide, simple et le pire c’est que ça marche ! Il permet virtuellement tous les layouts imaginables. On peut empiler les fenêtres, les gérer comme s’il s’agissait d’onglet, mettre côté-à-côte, mettre l’une sur l’autre, combiner le tout plusieurs fois. Et tout ça au clavier avec un fichier de configuration très simple (pas de langage à compiler ni à connaître). On peut lui ajouter facilement des raccourcis pour gérer un lecteur multimédia, lui ajouter une barre avec des infos. On peut modifier l’apparence des bordures des fenêtres : 1pixel seulement, une barre de titre ou même sans bordure. Bref, c’est le WM en tiling parfait.

Terminal

Pour l’émulateur de terminal le choix est assez simple. Il faut un terminal qui se débrouille bien en unicode, qui soit léger, rapide, ne plante pas et puisse être pas trop moche (je le regarde 8h/jour le pépère). J’ai choisis rxvt-unicode (urxvt pour les intimes). Il répond à tous ces critères et possède même un exotique mode client/serveur : urxvtd attend les connexions d’urxvtc. Vous avez du coup un seul démon qui tourne en mémoire et tous les clients disparaissent en lui (enfin je me comprends). Ce qui ne fait qu’un seul process pour tous les terms. Ils sont donc instantanés à l’ouverture et bouffe moins de ram.

Web 3.5

Pour le navigateur, je vous ai quelque peu induis d’erreur en vous préconisant surf. Il est bien avec un bon moteur de rendu (webkit) mais il a quelques aspects un peu trop limites à mon goût.

Je lui préfère le bon vieil Opera. Et ouai il est pas opensource libre toussa. Mais putain ce qu’il est bien ! Ultra personnalisable, léger, fait tout, toujours à la pointe des standards (ou presque), tout pleins de features.

Je l’utilise d’une façon particulière : j’ai viré toute son interface. Il n’a plus aucune barre d’outil : pas de barre d’onglets vu que je ne les utilise pas, pas de barre d’adresse vu que ça ne sert que très peu, pas de barre de statut parce que, bhaaa, je sais pas trop à quoi ça sert… Pour les onglets je gère ça au niveau d’i3. Je règle Opera pour qu’il ne gère qu’une page par fenêtre et qu’il ouvre des fenêtre en lieu et place d’onglet. C’est ensuite i3 qui les gère à ma convenance selon l’humeur du moment. Je déplace les pages web d’un bureau à l’autre, à côté d’un terminal, ou bien stacké dans un coin… Pour la barre d’adresse, j’ouvre la fenêtre pop-up d’adresse par F2. Du coup je dois appuyer sur un bouton avant d’entrer l’adresse. Au final, ça ne rajoute qu’une touche, ce qui est généralement négligeable face à la longueur d’une URL. Un reproche récurrent c’est le fait de ne plus “maîtriser” l’adresse. Les rares cas où j’édite une URL, je peux le faire en faisant réapparaître la barre d’adresse par F1.

Si votre coeur de libriste se déchire à la vue de la licence, vous pouvez vous rabattre sur surf, uzbl (tous les deux en webkit) ou bien vimprobable, pentadactyl (gecko) mais ce sera pas aussi souple/pratique/bien.

Bon bha je vous ai fait un roman mais au final c’est peut-être plus, comment dire ? … personnel, blog, expressif, parabolique, que d’habitude. J’ai tout de même le sentiment d’oublier des choses. Je compléterait peut-être par la suite.

PS février 2018 :

Bon bha globalement c’est toujours vrai. J’utilise toujours qingy, i3, le terminal j’ai migré vers alacritty mais urxvt est toujours recommandable.

Par contre niveau navigateur… bha Opera c’est devenu de la merde en barre. C’est dommage. Du coup bha j’ai migré une première fois chez Firefox puis plus récemment sur Qutebrowser.

Des flèches

↑↑↑→↓←↓→↑←↓←↑→↓←↑→↓→↑←↑→↑

Et voilà que je reviens sur mon site.

J’en reviens encore à me demander que faire de ce site ?

En faire un vrai site avec la motivation pour publier des vrais trucs un peu plus régulièrement ? Ça pourrait à la fois me motiver et à la fois vous intéresser. Bha ouai, au fond de moi je suis sûr que j’ai des trucs intéressants à dire au moins de temps à autres. Et ça peut m’intéresser également pour plus tard.

Dans ce cas est-ce que je reste sur mon système actuel d’un seul bon gros fichier html pas si crasseu que cela. Ou bien je passe à un vrai cms (si possible statique) ? Qui plus est j’ai fait mumuse avec node.js ces derniers temps. Juste pour m’amuser, n’étant pas programmeur du tout je peux pas faire grand chose.

Mais du coup est-ce que je ferai pas un sacré effort pour tenter de pondre un truc dessus et y héberger mon site/blog en l’améliorant petit à petit jusqu’à pondre d’un truc miraculeux faisant de moi une superstar du logiciel libre/opensource ? Je sais pas trop. Toujours est-il qu’il faut savoir commencer petit, être patient et avoir de quoi remplir le site web. L’apprentissage de node.js pourrait d’ailleurs être une série d’article sympas…

Bon pour aujourd’hui je vais faire un peu mumuse avec le CSS et peut-être node mais bon je ne promet rien. D’ailleurs remarquez comme j’ai fait des efforts de structurations en en découpant le wall of text en plus petit morceaux. Encore un petit effort et je mettrait des illustrations et tout !

Update 2017 : Et bhé finalement le site n’a pas changé jusqu’à aujourd’hui 25 Août 2017. J’était toujours sur une jolie page web maintenue à la main. Et là je passe sur Hugo un cms statique écrit en Go. J’ai pas plus touché de nodejs finalement non plus.

Bidouil^wRéparons de la gentoo.

Imaginons que par un improbable hasard vous tombiez sur une pauvre petite gentoo abandonnée. Vous voulez faire la mise à jour et là, pas ici, mais là, vous vous apercevez que vous avez une glib et une glibc impossible à emerger pour diverses raisons.

Il est possible d’émerger les paquets relous sur une autre gentoo fonctionnelle. Pour plus de simplicité, il est appréciable que les architectures soient identiques et si possible d’avoir le même ACCEPT_KEYWORDS. Il est toujours possible de bidouiller pour adapter ça (même pourquoi pas monter une chaîne de crossdev pour créer des paquets pour d’autres architectures, mais là n’est pas le propos).

Pour faire ce genre de manip, il faut emerger le paquet sur la machine saine avec –buildpkgonly. Il sera placé dans /usr/portage/package/catégorie/paquet.tbz2, vous le transversez vers la machine foireuse dans le même dossier et vous l’émergez avec –usepkgonly.

Protocolons !

Bon et si nous faisions du lol ? On va parler quelques protocoles usuels à la main à travers un socket (type netcat ou telnet). R2R ? (Ready to rock)

SMTP

Parlons SMTP : Envoyons un mail comme un vrai hacker. nc monserveursmtpfavoris.com 25

EHLO monserveursmtpfavoris.com
MAIL FROM: monidentité@monserveursmtpfavoris.com
RCPT TO: mondestinataire@sonsmtp.com
DATA
Un supayr mail
.

IMAP

Et voilà vous avez envoyé un mail à la mano. comme quoi SMTP c’est facile. Et si on faisait son pote IMAP ? nc monimapfavoris.com 143

. login monuser monpass
. status INBOX (messages)
. status INBOX (unseen)
. fetch monnumérofavoris full
. logout

Encore une fois c’était facile mais c’est moins intéressant tout de même…

IRC

Bon pour la prochaine un peu d’irc ? nc monserveurircfavoris.com 6667

user monpseudo monhost monserveurircfavoris.com :monident
nick monpseudo
privmsg monami : Telnet saytrolol !
pong monserveurircfavoris.com

Bon c’est déjà pas mal non ?

TLS

La petite astuce pour faire pareil en chiffrant pour se connecter sur du ssl: remplacer netcat par openssl avec openssl s_client -connect host:port

Migration

Et voilà j’ai changé d’hébergement, enfin la machine qui me sert un peu pour tout. Donc je suis passé d’une config qui fût jadis mon PC principal. Un Opteron 165 dual core overclocké et watercoolé dans un boitier Antec Twelve Hundred. Je suis passé à un petit PC sur base d’atom D510. Globalement je pense que j’ai perdu en perf mais j’ai casé ça dans un boitier Fractal Design Array R2. Je passe d’un boitier grande tour à un boitier mini ITX.

Sympa le gain de place et ce coup-ci en fanless (enfin presque) et sans watercooling (plus de petits glouglous). La config est vraiment très très silencieuse. J’ai migré les disques durs (et rajouté un petit à la famille). Ce PC sert donc principalement de routeur et de NAS (avec une capacité de six disques durs). La migration a été simple. Il a suffit de dire à grub de booter sur le bon disque (au bout du troisième essai soit près de deux minutes) et me voili voilà avec ma gentoo up and running.

Un coup de polish

Et voilà une petite modernisation du site web. Un design tout en dégradé toussa vive le css3. On peut enfin faire des trucs dynamique simplement et des designs plus travaillés sans aucunes images.

update 2017 : c’est toujours presque aussi vrai !

Un ptit coucou

Non je ne suis pas mort ! Et d’ailleurs je viens de résoudre un problème que j’ai depuis toujours sur ce laptop : faire sortir du son depuis la prise jack. En fait c’était tout con. Il suffisait de rajouter dans le modprobe.conf : ```options snd-hda-intel model=m51va position_fix=0 Bon j’avoue ce message est destiné à mon moi du futur qui réinstallera surement un nunux et se fera chier avec ce bug à la con.

Aurevoir MSN

Ça y est je me suis barré de msn … il me semble que c’était mon seul truc encore sur un réseau proprio. Je suis très proche d’un écosystème parfaitement libre. De tête, il me reste plus que les drivers nvidia et Intel sur mon laptop ( et Team Fortress² ) sur l’autre PC.

Monitorons ce qui traîne sur son réseau

Lors de mon passage de Debian vers Gentoo, je n’ai pas réinstallé Munin. Je ne m’y prends que maintenant. Munin permet de faire de petits graphs très pratique concernant à peu près tout et n’importe quoi… C’est encore une fois un système de clients/serveur. Commençons par un petit emerge munin. Et là c’est quasiment finit pour le serveur. Il ne reste qu’à ajouter les clients à interroger dans /etc/munin/munin-node.conf selon la syntaxe décrite en exemple. Sur la partie cliente, il faut définir les plugins utilisés par le biais de liens symbolique. Par exemple : ln -s /usr/libexec/munin/plugins/if_ /etc/munin/plugins/if_eth0 Certains plugins nécessite un argument comme celui-ci dessus mais pour d’autre non… Il existe un client windows avec quelques plugins intéressants. Pour les unix, sachez que les plugins ne sont que de simples scripts renvoyant des valeurs dans une syntaxe relativement simple. Sur ce bonne nuit et à la prochaine.

Mumuse avec OpenVZ

OpenVZ est un système de virtualisation pour linux particulier. En bref la machine hôte possède un kernel spécifiquement compilé et partage ce kernel avec les machines virtuelles. On est donc limité dans les OS mais par contre on obtient des performances impressionnantes. Pour plus de renseignements →→ wikipedia & google ←← Bon en fait j’ai voulu faire mumuse avec ma ptite gentoo. C’est une machine qui me sert typiquement de serveur. C’est une machine headless. Mais j’avait besoin d’application graphiques nunux pendant que j’utilise des softs uniquements windows sur mon laptop. J’ai donc créé un container openvz (machine virtuelle) avec une bonne vieille lenny où j’ai installé un Xorg. Sur le windows j’ai installé Xming (un serveur X11 très bien foutu). Puis un simple ForwardX11 dans putty et le tour est joué. Le but de ce ptit article c’est surtout de mettre les commandes nécessaires à l’utilisation d’OpenVZ (ouai je sais on le trouve un peu partout mais c’est mon site, je fait ce que je veux). Donc dans /vz/template/cache on fout le template qu’on veut.

vzctl create 101 --ostemplate distrib-version-arch --config
vzctl set 101 --hostname bla --ipadd a.b.c.d --nameserver a.b.c.d --diskspace 2G:3G --cpulimit 125 --save
vzctl start 101
vzctl enter 101
vzctl exec 101 htop

Bon je crois que c’est à peu près tout. Avec ca on peut bien faire mumuse.

Optimisation du serveur web

N’ayant qu’une tite connexion ordinaire de français en ADSL, mon upload est très limité. Du coup, lors de la visite de ce merveilleux site web, le chargement des pages est assez longs. Pour tenter d’améliorer la situation je viens d’activer la compression gzip des pages. Pour mon site web la différence est ahurissante. Je diminue par 4 la taille de la page. Donc pour cela j’ai édité le fichier /etc/lighttpd/lighttpd.conf . J’ai décommenté la ligne de server.modules pour mod_compress. Puis j’ai rajouté deux lignes :

compress.cache-dir = "/tmp/lighttpdcompress"
compress.filetype = ("text/plain", "text/css", "text/xml")

J’en ai également profité pour activer la compression pour les fichiers générés par php. Donc dans /etc/php/cgi-php5/php.ini il faut ajouter ces lignes:

zlib.output_compression = On
zlib.output_handler = On

Et voilà vous avez un site tout allegé en Ko.

Jabber me voilà !

Dans ma quête d’indépendance numérique, de liberté et de maîtrise de ma vie privée je viens de me monter un serveur jabber (ejabberd) pour à terme me débarasser d’msn, icq et companies. Donc maintenant vous pourrez me joindre par jabber à la même adresse que mon mail… C’est très propre et bien mieux que merdsn. Tiens j’ai aussi fait un chtit wiki pour me faire une petite “GED”. Bon allé, bouffez pas trop de bande passante et HF.

Nouveau kernel not for fun

Et voilà je viens de passer d’un kernel 2.27 patché pour openvz vers un tout neuf 2.33.1 .J’en ai profité pour ajouter des petits trucs indispensables qui me faisait défaut : le redirect de netfilter (et ouai je l’avait oublié), le support de nfs en mode serveur (pour améliorer mon pxe) l’ajout du support de kvm (à défaut d’openvz…). Bon sur ce amusez-vous bien cher lectorat et préparez-vous à une nouvelle version de mon CMS encore plus optimisé pour tourner sur moins d’un Mo !:wq

Un chtit coup de ViM pour changer

Ce coup-ci j’ai voulu faire un truc tout con : colorer le syslog dans vim. Donc je vais sur vim.org, je cherche un script de coloration de syslog. Je télécharge le fichier dans ~/.vim/after/syntax/syslog.vim . Ensuite il ne reste plus qu’à éditer/créer le fichier ~/.vim/filetype.vim avec dedans :

augroup filetypedetect
au! BufRead,BufNewFile /var/log/syslog set filetype=syslog
augroup END

Et voilà la prochaine fois que vous lirez vos logs vous aurez de zolies couleurs :-D

Ajout de PostGrey et …

Wow la classe ! Mon premier titre avec des points de suspensions ! Bon alors voilà j’en ai un peu marre de la masse de spam que je reçoit. Mon installation de mail est quelque peu bancale. J’ai en fait un ptit postfix, procmail, dovecot, roundcube.

Ca fait un combo qui fait un tit gmail like tout ca auto hébergé. Mais j’aimerais pouvoir m’y connecter avec thunderbird pour faire mumuse avec le plugin lightning qui permet de gérer l’agenda, calendrier, les tâches, tout cela dans le but de synchroniser avec mon téléphone portable par le biais d’un serveur funambol que je me suis installé. Bon ca commence à faire un sacré bastringue. Donc chaque chose en son temps.

Je n’arrive pas à me connecter depuis Thunderbird ni même Opera à mon serveur de mail en imap. Donc j’essaye de voir pour gérer ca. J’en ai profité pour ajouter du greylisting pour virer un peu de spam. Qui plus est mon procmail est légèrement foireux. J’ai tenté d’ajouter des règles pour classer automatiquement les mails mais malheureusement ce n’est pas pris en compte. Encore un truc louche donc bref. J’ai du pain sur la planche pour 2010. (Bha vi faut en parler aussi).

PS Février 2018 :

Hahaha quelle catastrophe cette installation au début. Je me rapelle avoir suivi deux tutos différents qui étaient pas exactement la config que je voulais du coup je modifiais des trucs à l’aveuglette sans aller voir la doc.

Relire cette galère fait du bien et pousse à lire la doc plutôt qu’un tuto pourri du net…

Au final j’ai jamais utilisé d’agenda synchronisé. J’en ai pas l’utilité.

Unicodisation

Houllla je poste de plus en plus souvent ! Je vais finir en blogueur influent d’ici peu ! Bon en fait comme annoncé précédemment j’ai fait en sorte de ne plus avoir de soucis de charset. En bref j’ai modifié mes locales pour n’avoir au final que “en_US.UTF-8 UTF-8”. J’ai créé le fichier /etc/env.d/02locale où j’y force mes variables de locales et le tour est joué. Je n’ai plus qu’à reconfigurer vim et putty pour qu’ils fassent du bel utf-8. Et maintenant je peux me la péter avec de beaux trucs incompréhensibles : Ϣ о҉ ۩ ༄ ←↓→↑ ↙↓↘ ↖↑↗

Dégooglisation

Bon allez je vais suivre un peu la mode de la degooglisation en commençant a migrer ma principale boite mail de gmail vers une boite autohébergée sur un postfix dovecot roundcube procmail. Je ne peux pas dire que c’eut ete simple mais en tout cas c’est gratifiant et je regagne un peu de liberte (c’est fichtrement plus agreable quand c’est heberge a la main).

Bon c’est peut-etre pas aussi fiable (va me falloir un onduleur) mais bon. Prochaine etape ca sera de regler le soucis d’utf8 de la gentoo. Ca merde de droite et de gauche ce bastringue. Allez j’arrete de vous emmerder avec mes fautes.

PS 12/02/2018 :

Bon bha finalement dix ans plus tard j’ai pas à me plaindre niveau fiabilité. Pas une panne. Juste quelques interruptions de quelques heures mais moins d’une journée. La mode est toujours (encore plus) à la dégooglisation. Je ne reviendrai pas en arrière de si-tôt.

Je suis toujours sur le même postfix/dovecot. J’ai remplacé roundcube par rainloop et procmail par sieve mais sinon c’est globalement similaire.

Passage en full ssl

Juste un petit passage pour dire que je viens de passer le serveur web en SSL obligatoirement. Comme ça je montre mon côté anarchiste anti hadopiste et puis ca fait plaisir à certains de me faire bouffer plus de CPU pour afficher des pages pleines de blabla chiants.

Changement de serveur

Et voilà je viens de migrer du bon gros Apache au chtit Lighty. Franchement sympas ce serv. Il est plus léger et bien plus claire dans la syntaxe de sa config. Quelle facilité pour faire des vhosts. Bon allez sur ce je vais tenter de diminuer la conso ram de lighty/mysql …

Allez, parceque je suis gentil je vous fait de la lecture

Bon bha je suis passé de Debian à Gentoo et j’ai enfin transformer ce pc en serveur… j’ai viré X. De suite beaucoup plus léger. Sans serveur web ca ne bouffe qu’une trentaine de Mo de ram. C’est déjà bien mieux que les 250 de la debian. Et puis c’est tout bien fait aux petits gnongnons. Bon c’est fini pour la lecture. A la prochaine.

Encore une fois un nouveau site !

Et ouai pour la X ième fois je refais un site de zéro ce coup-ci avec un CMS fait maison. Comme d’hab je me fais un point d’honneur à avoir un site valide et qui soit lisible partout (même les navigateurs console ce coup-ci). J’espère que le nouveau design (web 3.0 certified) vous plaira autant qu’à moi.

Fast-posts

Posts

Shares