• Ha chevron_right

      Protégez vos flux : stunnel

      raspbeguy · pubsub.gugod.fr / hashtagueule · Monday, 13 March, 2017 - 23:00 · 3 minutes

    On ne vous le répétera jamais assez, mais il est indispensable de prendre conscience des enjeux des communications électroniques en clair. En effet, vous n'avez sûrement pas envie qu'un malandrin s'approprie vos messages et actions privées, comme votre correspondance avec votre médecin et vos opérat...

    On ne vous le répétera jamais assez, mais il est indispensable de prendre conscience des enjeux des communications électroniques en clair. En effet, vous n'avez sûrement pas envie qu'un malandrin s'approprie vos messages et actions privées, comme votre correspondance avec votre médecin et vos opérations bancaires, données qu'ils pourrait retourner contre vous pour vous faire chanter, vous voler, ou tout bonnement vous faire du mal d'une manière quelconque. Il faut à tout prix préférer les communications chiffrées, et ce pour n'importe quel protocole.

    Fort heureusement, aujourd'hui le chiffrement des flux est devenu en quelques sortes un standard grâce à l'essor des implémentation du protocole TLS et de ses variantes. Les protocoles anciens se sont pour la plupart dotés d'une surcouche sécurisée (HTTP, IMAP, SMTP, IRC) et les protocoles naissants sont aujourd'hui regardés de travers s'ils omettent la sécurité dans leurs cahiers des charges.

    Malheureusement il existe encore des protocoles/programmes irréductibles qui continuent sans répit à laisser se balader à poil des paquets sur la toile. Ne leur jetons pas tout de suite la pierre, ou du moins pas trop fort, ce choix n'est pas toujours dénué de sens comme nous le verrons par la suite.

    Ici comme dans pas mal d'articles sur Hashtagueule, il y a un déclencheur personnel du besoin qui fait l'objet du tutoriel en question. On est pas des hommes politiques, nous on vous parle de choses qu'on connaît. On a l'idée de parler de certaines choses en se frottant à des problèmes et en y trouvent des solutions. Je vais donc vous parler de l'outil Bitlbee, qui agit comme une passerelle entre divers messageries comme Jabber, Twitter, MSN et Yahoo d'un côté, et IRC de l'autre côté, ce qui permet de centraliser toutes ses messageries sur un simple client IRC. Pour ce faire, il simule un serveur IRC sur lequel se connectent les client qui veulent accéder aux services agrégé. Seulement, alors que la plupart des serveurs IRC proposent une connexion sécurisée, Bitlbee n'implante pas cette couche TLS. En partie parce que le serveur est destiné à être exécuté en local (donc pas grand risque d'intercepter les communications). Mais n'empêche que ça semble bizarre et qu'à priori ça bride pas mal les utilisations.

    En réalisant ça, j'étais d'abord outré, et ça a même remis en question mon utilisation du programme. Cependant, j'ai trouvé une solution, qui est par ailleurs proposée par les développeurs. J'ai découvert un outil magique qui s'appelle stunnel, qui permet de transformer n'importe quel flux en clair par un flux chiffré à travers un certificat TLS. Pour ceux qui s'y connaissent un peu en serveur web, il s'agit du même principe qu'un reverse proxy comme le ferait un nginx ou un HAproxy, mais pour n'importe quel flux TCP (même si HAproxy est capable de gérer les flux TCP mais c'est moins marrant).

    Du coup, il suffit de posséder un certificat adapté au nom de domaine qui pointe vers votre serveur (chose très facile en utilisant Let's Encrypt, pour peu que vous ayez un serveur web qui sert ce nom de domaine) et il vous est possible d'envelopper ce flux dans un tunnel TLS. Voici ce que j'ai ajouté dans ma configuration stunnel :

    [bitlbee]
    accept = 6697
    connect = 6667
    cert = /etc/letsencrypt/live/mon.domaine.tld/fullchain.pem
    key = /etc/letsencrypt/live/mon.domaine.tld/privkey.pem

    Le port 6667 est le port non sécurisé, et le port 6697 est le port sécurisé. Elle est pas belle la vie ?

    De plus stunnel peut fonctionner dans l'autre sens, c'est à dire servir du contenu en clair à partir d'un canal sécurisé, ce qui est pratique quand derrière on a pas de client compatible avec TLS.

    Bon, revenons sur les raisons qui poussent un programme à ne pas adopter la sécurisation des flux. Dans le cas de bitlbee, comme je l'ai dit plus tôt, c'est un serveur destiné à être atteint en local. De plus, certains projets choisissent de ne pas implémenter le chiffrement et de recommander explicitement des solutions comme stunnel pour ne pas être responsables d'une éventuelle faille dans leur implémentation. Et aussi parce que c'est gonflant de faire de la sécu quand le projet à l'origine n'a absolument pas de rapport, il faut le reconnaître.

    • Ha chevron_right

      Battle for Wesnoth

      motius · pubsub.gugod.fr / hashtagueule · Monday, 27 February, 2017 - 23:00 · 6 minutes

    Bonjour à tous ! Aujourd'hui je vais vous présenter (pour ceux qui ne le connaissent pas déjà) le jeu Battle For Wesnoth. C'est un très beau jeu mono- et multijoueur en tour par tour, stratégique, et qui fait aussi appel à la chance, le tout dans un univers de type médiéval fantastique. Battle for W...

    Bonjour à tous !

    Aujourd'hui je vais vous présenter (pour ceux qui ne le connaissent pas déjà) le jeu Battle For Wesnoth. C'est un très beau jeu mono- et multijoueur en tour par tour, stratégique, et qui fait aussi appel à la chance, le tout dans un univers de type médiéval fantastique.

    Battle for Wesnoth est un logiciel libre écrit en C++ et disponible  sous licence GPLv2. Il s'installe très facilement sous Windows (binaires disponibles) GNU/Linux, et sous Mac aussi, quoique je n'ai pas testé. Sur ma debian (idem sur Ubuntu) je l'ai installé ainsi :

    apt-get install wesnoth

    Vous avez la possibilité de jouer une campagne pour vous familiariser avec le jeu, après avoir fait le tutoriel. Comme vous le voyez ci-dessous, le jeu est facile à prendre en main, puisqu'on vous indique ce qu'il faut faire.

    Dans le jeu, on se déplace sur des cases hexagonales, vous pouvez voir un hexagone jaune autour de la pièce que mon roi a recruté.

    Les bases de la stratégie

    Le héros/roi

    Vous avez un roi qu'il ne faut pas perdre sans quoi vous perdez le jeu, et qui est le seul qui permette de recruter de nouvelles unités, seulement quand il est à certains endroits stratégiques de la carte : ici à une place particulière du château, celle entourée par des tours pointues.

    L'or

    Vous avez une certaine quantité d'or qu'il faut bien gérer, il s'agit de l'unique ressource du jeu. L'or diminue quand vous recrutez des combattants, et à chaque tour, proportionellement au nombre de combattants. Vous gagnez d'autant plus d'or que vous avez de villages (ceux avec un drapeau rouge au dessus).

    Se déplacer

    La distance de déplacement dépend du terrain pour les unités qui ne volent pas. Certaines unités vont plus vite sur l'eau, d'autres sur terre. Ici, on voit que mon roi se défend mieux dans la forêt (50%) que sur un chemin (40%).

    On se déplace mal dans les cases adjacentes à des ennemis, une partie de la stratégie repose donc parfois sur la création d'un "mur" de personnages pour empêcher la prise de villages. Pour un mur, il suffit d'espacer les unités de 0 ou 1 ou 2 cases pour que l'adversaire ne puisse pas passer.

    Combattre

    Il y a deux types d'attaques : corps-à-corps et à distance. Ici je suis dans le tutoriel, donc je n'ai qu'une attaque : "6-3" signifie que j'attaque 3 fois en faisant 6 points de dommage. Le hasard fait que j'ai touché deux fois sur trois, et que mon adversaire a riposté trois fois sur cinq. Il a "3-5", qui signifie qu'il attaque cinq fois, en faisant trois points de dommages

    Il y a des armes qui sont plus efficaces que d'autres sur un adversaire, il faut donc choisir qui attaque qui sera la plus efficace. Par défaut le jeu propose souvent l'attaque la plus utile.

    Vous pouvez voir le détail des attaques avec des statistiques avancées.

    Par exemple si un adversaire n'a pas d'attaque à distance, il peut être utile de l'attaquer à distance pour ne pas subir de dommages. Lorsque lui nous attaquera, on pourra riposter avec notre attaque corps-à-corps. Les attaques à distance se font aussi quand on est sur une case adjacente à notre adversaire, ce qui fait qu'il pourra aussi attaquer à son tour.

    La stratégie minimale

    Il y a beaucoup de modificateurs de chance qu'il faut bien utiliser (c'est une grande partie de la stratégie). Premièrement le terrain, on attaque mieux à certains endroits que d'autres. Deuxièmement le jour est divisé en deux tours ou il fait "jour", deux ou il fait "nuit", et deux périodes liminaires. Certains combattants sont avantagés le jour, d'autre la nuit, certains lors des périodes limites, enfin d'autres ne sont pas affectés.

    Il faut aussi choisir ses combattants en fonction de l'adversaire si possible. Je vous l'ai déjà dit, certaines armes sont plus efficaces que d'autres.

    Pour la suite, je vous conseille le tutoriel, il est très facile. Le jeu vient en anglais par défaut mais est complètement traduit en français.

    Vous pourrez vous diriger vers cette page du wiki pour en apprendre plus sur la stratégie, et défaire plus facilement l'IA, qui est assez fûtée.

    Une partie à plusieurs

    Sur la machine d'un joueur

    Retrouvons les passionnés du code et de l'adminsys en installant un serveur Wesnoth.

    Sous Windows, on peut lancer le serveur Wesnoth à partir du jeu. Sous debian, wesnoth est un service.

    Tout d'abord, installer le serveur wesnoth à l'aide de la commande :

    apt-get install wesnoth-1.10-server

    ou

    apt-get install wesnoth-1.12-server

    La version du serveur importe moins que celle du client, et c'est un problème que l'on verra plus tard.

    Puis démarrez le service. Il tourne sur le port 15000.

    service wesnoth-1.10-server status 
    service wesnoth-1.10-server start # si status == stop.

    Sur un serveur dédié

    Pour pouvoir jouer avec des personnées n'étant pas sur votre sous-réseau local, il faut installer le service sur un ordinateur exposé à internet. Personnellement, j'ai installé un serveur Wesnoth sur une machine virtuelle Qemu-KVM de mon serveur. Pour la simple raison que mon serveur est sous debian 8 stable codename Jessie, et que la version de Wesnoth par défaut est la 1.10, qui est l'ancienne version stable. Sous debian testing codename Stretch, on a la version 1.12 de Wesnoth.

    Je n'ai pas eu de problèmes de compatibilité client-serveur, mais j'en ai eu client-client, donc pour une partie à plusieurs, choisissez la même version (1.10 ou 1.12 au moment de publication de l'article).

    Voici la configuration que j'ai utilisée (il faut rediriger le trafic IP du port 15000 depuis le serveur vers la machine virtuelle). Cette machine virtuelle a pour adresse 192.168.122.145, il faudra que vous adaptiez en fonction de votre propre configuration :

    #!/bin/bash
    
    IP_FWD_ON=`/sbin/sysctl net.ipv4.ip_forward | cut -d '=' -f2 | tr -d '[:space:]'`
    if [ "${IP_FWD_ON}" = "1" ] ; 
    then
        /sbin/iptables -t nat -I PREROUTING -p tcp -d 192.168.1.16 --dport 15000 -j DNAT --to-destination 192.168.122.145:15000
        /sbin/iptables -t nat -I PREROUTING -p tcp -d 192.168.1.16 --dport 15000 -j DNAT --to-destination 192.168.122.145:15000
        /sbin/iptables -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
    else
        echo "Err: Routage NAT désactivé."
    fi

    Ce script (à utiliser en tant que root sur la machine hôte) vérifie que l'IP forwarding est activé, et si oui route le trafic du port 15000 vers l'IP 192.168.122.145.

    Le jeu est assez complet et mériterait une description plus avancée, notamment des races (Loyalistes, Rebelles, Nordiques, Morts-Vivants, Aliance knalgane, Dracans) des types d'attaques (perforantes, tranchantes, froid, chaud) , mais ça ferait un article long comme le bras, et c'est déjà assez bien documenté dans le jeu et dans le wiki, donc je vous laisse là avec largement de quoi jouer, et même de quoi mettre en place un serveur, éventuellement public. Vous pouvez aussi rejoindre des serveurs officiels.

    Bonne partie !

    Motius

    • Ha chevron_right

      Git recall

      raspbeguy · pubsub.gugod.fr / hashtagueule · Tuesday, 7 February, 2017 - 23:00 · 1 minute

    Si vous développez, contribuez, travaillez en groupe ou tout simplement suivez l'évolution du développement d'un programme, vous devez sûrement connaître l'outil de versionnage Git. Cet outil développé par Linus Torvalds lui-même est une référence pour la gestion de projet technique, ce que soit pou...

    Si vous développez, contribuez, travaillez en groupe ou tout simplement suivez l'évolution du développement d'un programme, vous devez sûrement connaître l'outil de versionnage Git. Cet outil développé par Linus Torvalds lui-même est une référence pour la gestion de projet technique, ce que soit pour un projet personnel ou en équipe. Git permet de tracer l'évolution de son code, structurer les fronts de développement et de pouvoir revenir à n'importe quelle version passée.

    Bon, si vous ne connaissez pas Git, cette news vous est inutile, à part pour vous présenter cette outil qui a de grande chances de vous être très utile. Si vous utilisez Git, vous connaissez donc ce besoin de vérifier rapidement les dernières évolution du code, par vous-même ou par vos collaborateurs. Ils vous est possible d'en avoir une vue via la commande git log, un peu fastidieuse à utiliser si vous voulez filtrer ce que vous voulez voir.

    Vous avez également une autre possibilité de le faire, de manière interactive et avec des option faciles et minimalistes pour vous aider à faire le tri. Il s'agit de la commande git recall qui s'installe sous la forme d'un simple script à installer. Vous pouvez alors préciser le nombre de jours dans lesquels vous souhaitez faire votre recherche, préciser l'auteur des commits qui vous intéressent, puis naviguer interactivement dans la liste des commits afin d'afficher des différentiels.

    J'espère que cela vous sera utile.

    • Ha chevron_right

      [Express] Internet en France

      raspbeguy · pubsub.gugod.fr / hashtagueule · Friday, 20 January, 2017 - 23:00

    Hier, François a vaillamment avoué qu'il avait été à l'origine le l'arrivée d'Internet en France. On l'applaudit bien fort. Franchement, il nous a bien été utile, non ? Sans lui, y aurait pas Hashtagueule par exemple. On s'ennuierait beaucoup plus, c'est moi qui vous le dit. Alors la moindre des cho...

    Hier, François a vaillamment avoué qu'il avait été à l'origine le l'arrivée d'Internet en France. On l'applaudit bien fort. Franchement, il nous a bien été utile, non ? Sans lui, y aurait pas Hashtagueule par exemple. On s'ennuierait beaucoup plus, c'est moi qui vous le dit.

    Alors la moindre des choses, c'est de le remercier. Je vous invite tous à le faire en lui envoyant un gentil courriel (parce que oui, du coup c'est grâce à lui les courriels) contenant vos éloges, vos plus beaux poèmes en son honneur ainsi qu'une rédaction portant sur votre journée parfaite en compagnie de François Fillon, minimum 500 mots.

    P.S. : à quand des candidats politiques compétents ?

    • Ha chevron_right

      Less is more, partie 1.5 : Encore une chose

      raspbeguy · pubsub.gugod.fr / hashtagueule · Wednesday, 21 December, 2016 - 23:00 · 7 minutes

    Quand vous vous préparez probablement à passer un joyer réveillon de Noël, je suis là à écrire pour votre bon plaisir. Appréciez svp. Pour la suite de cette série d'articles sur l'épuration de votre bureau, j'avais prévu de passer à la présentation d'outils courants pour les tâches quotidiennes, mai...

    Quand vous vous préparez probablement à passer un joyer réveillon de Noël, je suis là à écrire pour votre bon plaisir. Appréciez svp.

    Pour la suite de cette série d'articles sur l'épuration de votre bureau, j'avais prévu de passer à la présentation d'outils courants pour les tâches quotidiennes, mais en continuant ma propre configuration de bureau, je me suis rendu compte qu'il y avais pas mal de choses à ajouter par rapport au dernier article. En tout cas, trop de choses pour essayer de les bourrer dans un coin de marge.

    J'aimerais vous parler plus en détail de py3status qui, si vous vous en rappelez, sert à améliorer la barre d'information d'i3. Ainsi, alors que cette barre par défaut propose assez peu de modules et une personnalisation minimale, la barre améliorée avec py3status propose des fonctionnalités bien plus intéressantes. Outre la plus grande flexibilité des réglages, avec cet utilitaire il est très simple d'écrire ses propres modules, et on peu prendre en compte les clics pour le comportement des modules.

    Parmi tous les modules proposés, il y en a tant d'utiles que je n'avais pas la place au début dans ma barre. Heureusement que j'ai ensuite découvert qu'on avait droit à plusieurs barres dans la configuration i3. De plus, j'ai noté qu'il existe un pull request sur le dépôt de py3status qui permettrait de multiplier les configurations pour une seule barre, donc la possibilité de changer de modules à chaud.

    Ma configuration i3 actuelle

    Une petite description des modules affichés, de gauche à droite :

    En haut :

    • Informations sur le morceau en cours dans un lecteur compatible MPRIS.
    • Mises à jour en attentes (la première valeurs représente le nombre de mises à jours des paquets binaires et la deuxième concerne les paquets AUR).
    • Statut de mon mobile connecté via KDE Connect (peut s'utiliser sans autre composant KDE, grâce au ciel. Et oui, j'ai appelé mon mobile Philippe).
    • Niveau du volume sonore, contrôlable au clic et à la molette. Grâce à ce module, je peux me passer de l'utilitaire pa-systray.
    • Niveau de luminosité, contrôlable à la molette.
    • État de l'extinction d'écran DKMS, contrôlable au clic.
    • Sélectionneur de configuration pour écran externe, contrôlable au clic.
    • Compteur d'articles non lus sur mon instance Tiny Tiny RSS.
    • Compteur de mails non lus (le texte avant le nombre correspond au compte concerné).
    • Date et heure.
    • Icônes de notifications des programmes classiques (ici, NextCloud et nm-applet).

    En bas :

    • Bouton de capture d'écran avec envoi automatique sur un serveur choisi, contrôlable au clic.
    • Vitesse du réseau.
    • Indicateur de VPN.
    • Indicateur de connexion à internet (affiche l'IP publique par défaut, masquée ici pour des raisons évidentes).
    • Indicateur d'IPv6.
    • Indicateur de connexion WiFi (encore ce Philippe...).
    • Indicateur de connexion cablée.
    • Espace libre sur le disque.
    • Utilisation CPU.
    • Mémoire utilisée.
    • Température CPU.
    • Charge CPU.
    • État de la batterie.

    L'écriture d'un module est vraiment simple, pour peu qu'on ait des bases de Python. Si vous le faites, je vous invite à en parler en commentaire ainsi qu'à contribuer au projet en proposant un pull request. Les mainteneurs sont sympas, et pour ceux qui débutent dans la contribution dans des projets open-source, il est très gratifiant de voir son travail en temps qu'amateur se faire valider par un projet qu'on utilise tous les jours.


    Je souhaite également parler des symboles que vous pouvez voir dans mes barres d'information. Ceux qui font du frontend web reconnaîtront les glyphes du projet Font Awesome (pour le coup, rien à voir avec le gestionnaire de fenêtres Awesome). Il s'agit d'une police de caractère qui utilise une plage spéciale de la table unicode afin de mettre à disposition des symboles qu'il est pratique d'utiliser principalement pour des pages web, mais également, comme vous pouvez le voir, sur des interfaces un peu plus personnelles. Lorsque i3 tombe sur un caractère unicode que la police qu'il utilise ne peut pas afficher, il va alors utiliser la police Font Awesome en tant que police de substitution. Afin mettre ce procédé en œuvre, il est nécessaire d'installer la fonte (le paquet AUR otf-font-awesome sous Arch Linux) et de vérifier que le fichier de configuration d'i3 contienne la ligne suivante :

    font pango:monospace 8

    Vous pouvez remplacer monospace par la fonte que vous préférez. Vous serez ensuite libres de choisir une icône Awesome en le précisant dans la configuration des modules py3status (le plus souvent, il faut se tourner vers la variable format).


    J'avais oublié d'expliquer dans mon précédent article, lorsque j'ai parlé de touches de volume et de luminosité sur le clavier, comment utiliser les touches de contrôle des lecteurs de musique. C'était pourtant sur ma liste des choses importantes à dire, j'en suis confus. Laissez moi réparer ça.

    Pour utiliser ces touches, comme pour les touches volume et luminosité, il vous faudra spécifier dans votre configuration i3 que vous souhaitez mapper ces touches médias à un appel de commande. Simplement, le problème est que par défaut, il n'existe pas de commande simple pour contrôler un lecteur MPRIS. Nous avons donc besoin d'installer playerctl, un petit programme en ligne de commande qui va se charger de fournir des commandes lisibles et succinctes. Ensuite, il nous faudra ajouter dans le fichier de configuration i3 les lignes suivantes :

    bindsym XF86AudioPlay exec playerctl play-pause
    bindsym XF86AudioPrev exec playerctl previous
    bindsym XF86AudioNext exec playerctl next

    Notez que si le lecteur que vous utilisez n'est pas compatible MPRIS, il vous faudra trouver une autre astuce. Notamment si vous utilisez cmus en version release et non en version git, vous aurez besoin de faire appel à la commande cmus-remote.


    Enfin, pour terminer cet addendum, je vous parlerai du choix de la console. Entre la publication du dernier article et la rédaction de l'article que vous êtes en train de lire, j'ai fait le test d'une autre console qui s'appelle Termite. C'est une bonne console qui donne la même sensation qu'Urxvt, mais infiniment plus simple à configurer. Ça s'explique par le format du fichier de configuration : Termite se configure avec une syntaxe INI tandis qu'Urxvt se configure via un fichier Xresourses, qui suit une syntaxe vieillotte, pour ne pas dire franchement obsolète. De plus, Termite n'as pas besoin de patchs ésotériques quand on a besoin de fonctionnalités un peu spéciales, comme la prise en compte de la molette dans certains programmes pseudo-graphiques. Au fond, Urxvt n'est déjà rien d'autre qu'un patch du Rxvt original pour gérer les caractères unicodes...

    Cependant, il paraît que Urxvt possède plus de fonctionnalités que Termite. Une vieille légende prétends même que Urxvt supporterait plusieurs polices de caractères à la fois, bien que jamais je n'aie réussi à faire fonctionner ce mécanisme que, j'imagine, seuls les âmes les plus téméraires et les plus courageuses peuvent activer.

    De plus, et c'est ce qui m'a définitivement décidé à rester sur Urxvt, Termite nécessite un compositeur graphique (par exemple xcompmgr) pour gérer la transparence. Rien de très gênant là-dedans, les compositeurs graphiques minimalistes sont très légers, et il m'en coûte très peu d'ajouter une ligne pour en lancer un dans ma configuration i3. Mais malheureusement, i3 a un petit bug lorsqu'on utilise un compositeur graphique avec certaines positions de fenêtre : quelquefois, le fond d'un terminal sera non pas le fond d'écran comme on pourrait s'y attendre, mais le contenu du terminal qu'y s'y trouvait précédemment, ce qui n'empêche pas de travailler mais qui est assez gênant.

    Urxvt, quant à lui, n'a pas besoin de compositeur graphique pour la transparence, car il utilise une "fausse transparence" : pour faire simple, au lieu de demander au serveur X ce qui se trouve derrière lui, il va directement remonter au niveau de l'image de fond et mettre en transparence la portion du fond d'écran qu'il cache. Bon, pour le coup il est impossible, si on a une console Urxvt flottante, de voir une autre fenêtre par transparence, mais personnellement je m'en rappe les marrons, sachant que j'utilise extrêmement rarement les fenêtres flottantes, et absolument jamais pour des consoles. Sinon, à quoi bon utiliser i3 ?


    En espérant que ces commentaires vous seront utiles, je vous souhaite un joyeux Noël, et peut être une bonne année. Tchin tchin.

    • Ha chevron_right

      Less is more, partie 1 : la base

      raspbeguy · pubsub.gugod.fr / hashtagueule · Friday, 11 November, 2016 - 23:00 · 12 minutes

    Bonjour à tous Allez, on va dire que vous n'avez pas remarqué les quelques semaines mois de silence de notre part, je pourrais encore me ressortir des excuses moisies, mais je l'ai déjà fait dans quelques articles précédents. J'espère donc que vous ne m'en voudrez pas si je m'épargne cette peine. Be...

    Bonjour à tous

    Allez, on va dire que vous n'avez pas remarqué les quelques semaines mois de silence de notre part, je pourrais encore me ressortir des excuses moisies, mais je l'ai déjà fait dans quelques articles précédents. J'espère donc que vous ne m'en voudrez pas si je m'épargne cette peine.

    Beaucoup de choses se sont passées dans l'actualité. Entre l’avènement du porte moumoute américain et le décret du vilain Cazeneuve sur le fichage de l'ensemble des français, les occasions de faire couler de l'encre n'ont pas manqué. Mais bon, je ne vais pas vous en parler ici. Pas encore, du moins.

    Je vais plutôt vous parler de mon éternelle quête de l'environnement de bureau parfait. Vous savez, j'ai eu ma période GNOME, et elle a duré longtemps en plus. Ah, la jeunesse...

    J'ai également entre temps acquis un nouveau laptop, un Dell Inspiron 15" 7548, qui a la particularité de planter au démarrage une fois sur deux d'avoir un écran HiDPI, donc des pixels deux fois plus petits que les écrans traditionnels (on peut trouver également le terme Retina). Et là, Sainte Mère de Dieu, j'ai appris un truc. Les écrans HiDPI et Linux, c'est coton. Dans beaucoup de cas, vous aurez besoin de vos lunettes de soudeur à nanotubes pour y voir clair. Tous les programmes GTK2 par exemple sont incompatibles avec la définition de votre écran. Ce qui choque aussi, c'est le manque de cohésion et la multitudes de réglages pour obtenir un truc correct : entre le scale factor de GTK3, celui de QT5, la taille des polices, la définition donnée à xrandr --dpi, ceux donnés au serveur X... vous allez très facilement manquer d'air et perdre les pédales.

    Pour le coup, j'étais tombé sur la conclusion suivante : les seuls environnements de bureau possibles pour un écran HiDPI sont ceux basés sur GTK3, en l’occurrence GNOME et Cinnamon (je n'ai pas testé KDE, ma tolérance à la douleur a quand même ses limites). Comme j'ai fini par avoir horreur de GNOME avec sa terrible lourdeur et ses réglages atroces, j'ai tourné pendant des mois sur Cinnamon, qui est un fork de GNOME d'il y a quelques années maintenant, permettant de couper court à la plus grande partie de ses défaut.


    Face à mon manque de solutions pour utiliser mon écran sans m'esquinter les yeux, j'ai fini par me dire : au diable les environnement de bureau. Au diable GTK et son manque diabolique de rétro-compatibilité, tout ça c'est pour les faibles.

    Je me suis souvenu d'i3, un gestionnaire de fenêtre (et non un environnement de bureau) que j'avais décidé d'utiliser sur mon lieu de travail (et sur des écrans traditionnels pour le coup). On a beau dire ce qu'on veut, mais ce genre d'outil est très efficace : ça élimine le superflu et la fluidifie le travail. C'est pensé pour être totalement contrôlable au clavier, même si l'usage de la souris est possible.

    La différence entre un environnement de bureau et un gestionnaire de fenêtre est d'ordre fonctionnel. En fait, un environnement de bureau inclut généralement un gestionnaire de fenêtre, ainsi que tout un tas de fonctionnalités, comme un navigateur de fichiers, un centre de configuration, divers menus pour changer rapidement les réglages courants (net, volume...), le montage automatique de volumes externes, et tout un tas de joyeusetés. Le gestionnaire de fenêtre se concentre sur la position de vos fenêtre. i3 s'arrange pour les redimensionner automatiquement en fonction de leur nombre et de l'importance que vous leur accordez. Pour les autres fonctionnalités, vous devez aller chercher ailleurs. Fort heureusement, ces outils existent et fonctionnent en synergie et sont en général suggérés par les mainteneurs de tels gestionnaires de fenêtre. Nous en parlerons dans cet article, pas d'inquiétude.

    Sachez aussi que, de la même manière qu'il existe des conflits entre les utilisateurs de Vim et d'Emacs, ainsi que le conflit screen/tmux (je vous ai indiqué en gras ma position) qui font toujours rage sur les forums, les mailing-lists et les canaux IRC, et ce depuis décennies, il existe également un débat entre i3 et Awesome, un gestionnaire de fenêtre du même genre que j'ai également eu l'occasion de tester. Pour ne froisser personne, disons que chacun a ses bon côtés et ses défauts, même si au bout du compte, ça revient plus ou moins au même principe. Je tiens cependant à souligner la facilité de configuration et le minimalisme rafraîchissant d'i3 par rapport à Awesome.

    Bon, ça fait 5 minutes que je vous parle de bureau élégant, mais toujours pas une seule image. Le mieux c'est que je vous montre maintenant.

    Mon bureau sous i3, avec vim à gauche et htop à droite

    Mon bureau sous i3 sur écran HiDPI, avec vim à gauche et htop à droite

    Sur cette exemple, je n'ai que deux fenêtres ouvertes, mais sachez que je peux en ouvrir bien plus, et je peux également scinder les espaces verticalement et horizontalement à la fois. Pour ceux qui s'affolent en voyant que je n'ai que des terminaux ouverts et qui voudraient continuer à utiliser leurs programmes GTK, sachez que rien ne les en empêche, c'est juste que je fais en ce moment une petite indigestion des programme à interface graphique, et je les évite le plus possible, ma tension s'en porte mieux et mes proches en souffrent moins.

    Remarquer la barre du bas qui présente plein d'informations variées, comme mon espace disque, mes différentes IP (locales et publiques), mon état de batterie, la vitesse de mon réseau, et même le morceau en cours dans mon lecteur de musique. C'est encore un point qui me fait craquer pour i3, c'est à dire la simplicité pour configurer cette barre. Il est remarquable qu'i3 laisse à l'utilisateur le choix du programme à afficher dans cette barre, bien qu'il en propose un par défaut (i3status). Pour ma part, j'utilise py3status, un simple wrapper d'i3status, qui ajoute des possibilités de widgets et en réimplémente certains.

    Bon, vous avez décidé d'adopter i3 ? C'est très bien, il s'agit du pas le plus dur à franchir. Une fois qu'on a la volonté, le reste suit sans trop tarder. Sur Archlinux, vous avez donc installé le groupe i3 qui vous fournit le gestionnaire de fenêtre i3, l'utilitaire i3status et le verrouilleur d'écran i3lock. Vous avez jeté un coup d’œil au fichier de configuration qui se trouve à l'emplacement ~/.config/i3/config. Vous remarquerez que la plupart des opérations que vous pouvez effectuer à travers i3 se font grâce à la touche définie dans la variable $mod. Par défaut, il s'agit de la touche logo (la fameuse touche "ouindoze"), mais vous pouvez changer ça. En fait, vous pouvez motifier l'intégralité des raccourcis claviers, et en ajouter à votre convenance, vous pouvez vous faire plaisir. Vous n'êtes pas obligé de tout comprendre dès le début, il s'agit uniquement de se faire une idée des fonctions de base et de voir comment vous pourrez y apporter votre touche personnelle.

    Maintenant, comme j'en ai parlé plus tôt, il vous faut quelques utilitaires qui vont vous simplifier la vie pour effectuer les tâches les plus simples.

    Un émulateur de console adapté

    Bon, en vrai, un linux sans console, c'est comme une waifu sans rondeurs une Ferrari sans levier de vitesse, c'est du gâchis de potentiel et ça envoie pas du rêve. D'autre part, on a décidé de se passer le plus possible d'applications GTK/QT/portnawak, donc je ne vous conseille pas d'utiliser gnome-terminal, qui va alourdir inutilement votre interface. À la place, je vous conseille rxvt-unicode, parfois aussi appelé urvxt. Il s'agit d'un terminal puissant, avec une énorme personnalisation. Un autre choix aurait été xterm, qui dispose d'une grande compatibilité avec d'anciens systèmes le plus souvent désuets, qui commence à vieillir et dont même les développeurs ont désormais du mal à maîtriser. J'en veux pour preuve un extrait du fichier README accompagnant le dépôt d'xterm :

    Abandon All Hope, Ye Who Enter Here

    This is undoubtedly the most ugly program in the distribution. It was one of the first "serious" programs ported, and still has a lot of historical baggage. Ideally, there would be a general tty widget and then vt102 and tek4014 subwidgets so that they could be used in other programs. We are trying to clean things up as we go, but there is still a lot of work to do.

    Ça se passe de commentaires.

    Une fenêtre de terminal se lance par la combinaison $mod+enter. i3 est assez intelligent pour savoir que vous avez installé urxvt ou xterm, et il n'a pas besoin de configuration pour lancer l'un de ces programmes lorsque invoquez cette configuration. Néanmoins, si vous choisissez d'utiliser un autre terminal par défaut, il vous faudra le préciser dans ~/.config/i3/config à l'aide de la directive i3-sensible-terminal.

    De même qu'i3, urxvt a besoin de sa configuration si vous voulez le modifier un tantinet (et vous allez sûrement le faire, car urxvt a une interface atroce par défaut). Ça se passe dans ~/.Xresources. Il s'agit d'un fichier utilisé par le serveur X, donc prudence, il est possible que vous y trouviez la configuration d'autres programmes. Je vous joins mes propres réglages, à vous de les modifier à votre convenance.

    ! Fonts {{{
    Xft.antialias: true
    Xft.hinting:   true
    Xft.rgba:      rgb
    Xft.hintstyle: hintfull
    Xft.dpi:       220
    ! }}}
    
    ! General
    urxvt\*termName:  rxvt-256color
    urxvt\*loginShell:         true
    urxvt\*scrollBar:         false
    urxvt\*secondaryScroll:    true
    urxvt\*saveLines:         65535
    urxvt\*cursorBlink:        true
    urxvt\*urgentOnBell:       true
    !urxvt\*override-redirect:false
    !urxvt\*borderLess:       false
    !urxvt\*internalBorder:       0
    !urxvt\*externalBorder:       0
    
    ! Extensions
    urxvt\*perl-lib:        /usr/lib/urxvt/perl/
    urxvt\*perl-ext-common: default,matcher
    urxvt\*urlLauncher:     /usr/bin/xdg-open
    urxvt\*matcher.button:  1
    URxvt.keysym.C-f: perl:url-picker
    !  - catch ugly URLs
    urxvt.cutchars:        \`()\*<>\[\]{|}
    
    ! Appearance
    !  - use a bitmap font
    !urxvt\*font:        -xos4-terminus-medium-\*-\*-\*-12-\*-\*-\*-\*-\*-\*-\*
    !urxvt\*boldFont:    -xos4-terminus-bold-\*-\*-\*-12-\*-\*-\*-\*-\*-\*-\*
    !  - use xft for drawing fonts
    URxvt.font:xft:Monospace:size=10
    !urxvt.letterSpace: -10
    !  - cursor
    urxvt\*cursorColor: #FFFFFF
    !  - pseudo transparency
    !urxvt\*shading:    50
    !urxvt\*transparent:true
    !
    !  - color scheme
    urxvt.background:  #000000
    urxvt.foreground:  #FFFFFF
    URxvt.transparent:   true
    URxvt.shading:       30
    ! black + red
    !urxvt\*color0:     #3f3f3f
    !urxvt\*color0:      #000000
    !urxvt\*color1:      #e01010
    ! green + yellow
    !urxvt\*color2:      #00AA00
    !urxvt\*color3:      #FFFF00
    ! blue + purple
    urxvt\*color4:      #112037
    !urxvt\*color5:      #A020F0
    ! cyan + white
    !urxvt\*color6:      #5B5BC7
    !urxvt\*color7:      #fefefe
    ! bright-black + bright-red
    !urxvt\*color8:      #6a6a6a
    !urxvt\*color9:      #FF5555
    ! bright-green + bright-yellow
    !urxvt\*color10:     #90EE90
    !urxvt\*color11:     #ffff2f
    ! bright-blue + bright-purple
    urxvt\*color12:     #5B5BC7
    !urxvt\*color13:     #e628ba
    ! bright-cyan + bright-white
    !urxvt\*color14:     #7D7DFB
    !urxvt\*color15:     #ffffff

    Des volumes qui se montent tout seul

    J'aime bien pouvoir brancher ma clef USB et qu'elle se monte toute seule dans mon système avec les droits qui vont bien, et ne pas avoir à taper ce genre de commande :

    sudo mount /dev/sdX /home/raspbeguy/mnt

    Et en plus, avec cette commande, vous n'avez même pas le droit d'écriture sur votre clef en simple utilisateur, c'était vraiment casse-pied, pour rester poli.

    Heureusement, vous pouver installer udisk qui va le faire pour vous, puis udiskie, un wrapper qui va utiliser udisk  plus simplement. Pour lancer udiskie automatiquement au démarrage d'i3, écrivez juste dans la configuration d'i3 :

    exec udiskie -ans &

    et le tour est joué. Vous aurez vos volumes tout beaux qui se monteront comme des grands, des notifications à chaque branchement/débranchement de volume, et un menu dans la barre du bas permettant de démonter les volumes.

    Le réseau à portée de clic

    Il est pratique d'avoir un petit menu permettant d'avoir la main sur les interfaces réseau. Pour cela, on aura déjà besoin de network-manager, un démon système installé avec la plupart des environnements de bureau (je ne suis pas un grand fan, mais j'ai pas trouvé mieux pour le moment, sachant qu'il n'existe pas vraiment de menu simple pour netctl) et d'un programme appelé nm-applet permettant de disposer d'un tel menu.

    Le contrôle du volume

    Pour la gestion du volume sur votre machine, je vous conseille d'utiliser pulseaudio à la place d'alsa tout seul. Ça va en faire grincer des dents pour certains, mais bon, faut reconnaître que c'est quand même pratique pour changer rapidement de carte son par exemple. Pour avoir un menu dans la barre, on utilisera le paquet pasystray. Attention pour les utilisateurs d'Archlinux, au moment ou j'écris, le paquet AUR de nm-applet est mal foutu, il essaye d'installer deux version concurrentes de ce programme, et va par conséquent se bananer, vous aurez besoin de faire une installation manuelle.

    Sinon, beaucoup de claviers ont des touches média, avec contrôle du volume et d'intensité lumineuse. Il est possible d'utiliser ces touches avec i3 moyennant les bonnes lignes de configuration i3. Je vous donne cet extrait de configuration :

    # media keys
    bindsym XF86AudioRaiseVolume exec pactl set-sink-volume 1 +5%
    bindsym XF86AudioLowerVolume exec pactl set-sink-volume 1 -5%
    bindsym XF86AudioMute exec pactl set-sink-mute 1 toggle
    
    # backlight
    bindsym XF86MonBrightnessUp exec xbacklight -inc 5
    bindsym XF86MonBrightnessDown exec xbacklight -dec 5

    Notez que vous aurez peut-être à changer le "1" en "0" sur les lignes de volume, cela dépendra de votre configuration matérielle.

    Le fond d'écran

    Certains diront que c'est un réglage pas très important, mais j'estime que c'est quand même bien agréable. Personnellement, j'utilise le fond d'écran que j'ai configuré dans lightdm, ce qui m'évite de recourir à un autre utilitaire ou configuration. Si vous voulez utilisez un fond d'écran différent, vous pouvez utiliser nitrogen, qui dispose d'une interface GTK (yeurk...) pour choisir votre fond d'écran. Si vous optez pour cette solution, vous devrez ajouter cette ligne à votre configuration i3.

    exec nitrogen --restore

    J'ai donc expliqué les bases pour utiliser i3 confortablement. Dans des articles à venir, je présenterai des solutions pour se passer de programmes graphiques pour la plupart des tâches courantes.

    • Ha chevron_right

      Édito #8 : C'est la rentrée

      raspbeguy · pubsub.gugod.fr / hashtagueule · Tuesday, 13 September, 2016 - 22:00 · 3 minutes

    Aujourd'hui, Hashtagueule fait sa rentrée. On ne vous avait pas annoncé de période de pause, mais c'est ainsi. On aurait peut-être du, cela dit, à vrai dire on avait pas trop prévu de faire un break, mais bon, vous savez ce que c'est, on fait des trucs, on bricole des machins, et finalement on perd ...

    Aujourd'hui, Hashtagueule fait sa rentrée. On ne vous avait pas annoncé de période de pause, mais c'est ainsi. On aurait peut-être du, cela dit, à vrai dire on avait pas trop prévu de faire un break, mais bon, vous savez ce que c'est, on fait des trucs, on bricole des machins, et finalement on perd un peu le blog de vue. C'est pas dramatique et c'est finalement tout ce qu'il y a de plus normal, et puis de toute façon, maintenant c'est fait.

    Vous avez passé de bonnes vacances ? J'espère pour vous que vous avez un peu pris l'air et que vous êtes fin prêt à commencer une nouvelle année de travail du bon pied (quand j'y pense, c'est le genre de phrase que l'on peut sortir au moins deux fois par an, en janvier et en septembre).

    En ce qui me concerne, et bien j'ai continué à travailler pendant l'été (stage, m'voyez), et je sais que c'est aussi le cas de motius, qui vous a publié récemment un article au sujet de l'une de ses missions. Finalement, depuis hier j'ai finalement pu clore ce chapitre et prendre de vraies vacances... pendant environ 5 jours. Mais attention, quand je parle de vraies vacances, j'entends une période de grâce pendant laquelle on attend absolument rien de moi et où je n'ai rien d'autre à faire que ce qu'il me plaît. Et ça, même pour 5 jours, c'est vraiment le pied, croyez-moi. Même si ça se passe dans la maison familiale, ce qui est une très bonne chose en soi, sauf que le débit y est plus que pourri, enfin, il s'agit d'un moindre mal.

    Sinon, en parallèle, j'ai pris des weekends, je suis allé à quelques conventions, notamment ma première Japan Expo en juillet avec des amis, expérience qu'il faudra absolument renouveler.

    Je me suis également bricolé un serveur pour chez moi. Enfin, ici, bricoler, ça veut dire prendre une tour de bureau d'occase que j'ai acheté à un ami pour une bouchée de pain (moins cher qu'un Raspberry Pi, c'est dire) ainsi que 16 Go de RAM et 3 disques de 3 To pour un RAID 5 (ça c'était un peu plus cher). L'habitude et la voix de la raison me poussaient à y installer Debian, histoire d'avoir une base sage et rock-solid, mais un excès de zèle et de goût du risque m'a finalement décidé d'y  mettre Arch Linux, ma petite distribution chérie, ce qui m'a fait gagner, contre toute attente, beaucoup de confiance en moi et d'adrénaline (et bien sûr tout un tas de paquets à jour). Je me suis également décidé à prendre le taureau par les cornes, tant qu'à faire, et je me suis lancé dans la virtualisation, une technique qui m'a longtemps effrayé jusqu'à présent et que je tentais d'ignorer avec toute la force de mon esprit bare-metal. Enfin bon, ce sera décrit dans un article à venir. Je songe ainsi à migrer une grande partie de mes services personnels sur cet hôte, comme les mails, les proxy IRC, enfn ce genre de chose. Et pourquoi pas migrer Hashtagueule ? Quand on y réfléchit, ce serveur tel que je l'ai amélioré est meilleur que celui que je loue actuellement, tout ce qui me manque, c'est du bon débit...

    Suite à du ménage dans un des datacentres du boulot, j'ai hérité d'un vieux Soekris net5501, un ordinateur monocarte avec plein de RJ-45. Le bidule était utilisé en production et pas mis à jour depuis un bon bout de temps. Va donc falloir que je m'en occupe (avec une console série, sinon c'est pas marrant) et décider de ce que je vais en faire, probablement une passerelle, duh, ça me permettra de manipuler de l'OpenBSD et ça me rappellera le bon vieux temps.

    Nous sommes de retour, nous sommes détendus, reposés, nous avons le moral bon, la volonté d'acier et le pelage soyeux. Bon retour chez les Gentils.

    • Ha chevron_right

      Premier anniversaire d'Hashtagueule

      raspbeguy · pubsub.gugod.fr / hashtagueule · Friday, 5 August, 2016 - 22:00 · 3 minutes

    Comme en témoigne notre gentil registrar et son invitation à remettre la main au portefeuille pour renouveler le domaine, Hashtagueule a atteint sa première année d'existence (enfin un an plus un jour, la date étant fixée aux 6 août). Pile un an donc, ou presque, que j'ai fait cet achat compulsif et...

    Comme en témoigne notre gentil registrar et son invitation à remettre la main au portefeuille pour renouveler le domaine, Hashtagueule a atteint sa première année d'existence (enfin un an plus un jour, la date étant fixée aux 6 août). Pile un an donc, ou presque, que j'ai fait cet achat compulsif et à priori insensé de ce nom de domaine, comme hélas j'en ai désormais l'habitude...

    Un petit bilan est de bon ton en de telles occasions, je ne sais guère, c'est une première pour moi. Une année de rodage et d'échauffement je dirais. Motius et moi avons pas mal progressé, à la fois sur l'écriture, les connaissances et la technique. On a défini un flux de travail et on a aujourd'hui une machinerie qui marche à peu près.

    Nous avons également connu des difficultés, des prises de bec, ainsi que certains espoirs mis entre parenthèses, notamment concernant la constitution de l'équipe et l'ergonomie du site.

    Je pense parler au nom de l'équipe entière (bon, ça fait deux personnes) en disant que nous sommes fiers du travail accompli ainsi que du résultat et que bien sûr, nous ne regrettons rien. Bien sûr, nous sommes conscients que si nous devions tout recommencer à zéro, certaines choses auraient été faites différemment, mais dans l'ensemble, on s'en sort plutôt pas mal.

    Une petite communauté d'habitués commence à se constituer, même si elle se voit beaucoup plus sur le canal IRC que dans les commentaires par exemples. Je suis satisfait de voir que nous pouvons venir en aide à certains, et même que les gens s'entraident tout seuls. Nous nous sommes nous-même enrichis de la richesse des rencontres que nous y faisons, et c'est exactement ce que nous recherchons à travers ce projet.


    À présent, que voulons-nous pouvoir annoncer dans le bilan de l'année prochaine ? Nous avons quelques projets en magasin.

    Premièrement, nous allons bien sûr continuer d'écrire. Nous aimerions également enrichir notre équipe de rédaction, afin de diversifier les sources et les domaines, ainsi que d'apporter un flot plus dense et plus continu d'informations. Nous avons décidé de nous ouvrir plus quant au recrutement de cette équipe, qui était jusqu'à présent basé sur les relations personnelles (traduire par IRL). Donc si vous êtes tentés de donner un peu de votre temps en vous engageant en tant que Gentil du Net, n'hésitez pas à nous contacter, le moyen le plus rapide et efficace de le faire est de passer, comme d'habitude, par IRC (je crois que je vais finir par gaver tout le monde à force de parler de ça).

    Nous avons aussi le projet de créer une partie dédiée au news rapides / partage de news, qui serait à la fois utile à l'équipe pour partager des articles représentant des news pour lesquels nous n'avons pas forcément le temps de développer une vraie valeur ajoutée, mais aussi à la communauté entière, c'est à dire que n'importe qui serait en mesure de proposer du contenu dans cette rubrique (avec instauration d'une modération, bien entendu). Il faut que je compare encore les solutions existantes ou encore que je trouve quelqu'un pour nous développer ça, pourquoi pas, soyons fou. Il faut également prendre l'avis de la communauté en considération, alors dites nous votre avis.


    En résumé, comme toujours, nous avons toujours besoin de vous, chère communauté. Nous avons envie que vous nous donniez des suggestions, que vous puissiez vous impliquer dans la vie du blog, que vous parliez de nous si le concept vous plaît, en bref que vous vous sentiez chez vous et que vous nous considériez comme des amis.

    Nous sommes fiers de ce que nous faisons, notre credo n'a pas changé, même si la situation politique et sociale globale est quelque peu tendue. Ne nous arrêtons pas, gardons la tête haute et les idées claires, et plus que jamais, soyons gentils.

    P.S. : J'ai été tenté de mettre une image du gâteau de Portal en couverture, mais je me suis rappelé que c'était devenu trop cliché, et que de toute façon on ne met jamais de couverture aux éditos. Tant pis.

    • Ha chevron_right

      Du dev et du monitoring : YaPLog

      motius · pubsub.gugod.fr / hashtagueule · Monday, 1 August, 2016 - 22:00 · 7 minutes

    Bonjour à tous ! Aujourd'hui on va parler boulot, mais n'ayez pas peur, on parle du mien. Petite balade réseau et dev. Ce que j'aime le plus avec mon stage courant, c'est les défis. J'ai 6 semaines pour réaliser un prototype et sa documentation, et je peux vous dire que c'est serré. À près de trois ...

    Bonjour à tous !

    Aujourd'hui on va parler boulot, mais n'ayez pas peur, on parle du mien. Petite balade réseau et dev.

    Ce que j'aime le plus avec mon stage courant, c'est les défis. J'ai 6 semaines pour réaliser un prototype et sa documentation, et je peux vous dire que c'est serré. À près de trois quarts du projet, faisons un point sur son avancement, ce qu'il reste à faire, les technos, etc.

    Le cahier des charges

    Le monitoring réseau c'est tout sauf un sujet original. Hyper intéressant, sa mise en pratique évolue au fur et à mesure que les outils, les pratiques, et les protocoles évoluent.

    Vous vous demandez sûrement pourquoi je parle de développement dans ce cas. Il y a certes de nombreux programmes permettant de faire pas mal de choses. Voici pourquoi.

    • La meilleure raison : je n'ai pas accès (question de contrat avec l'opérateur réseau) aux routeurs, et il faudrait que j'aie la main sur une centaine de routeurs ;
    • la deuxième meilleure raison : on m'a demandé une tâche spécifique (du reporting quotidien, entre autres). Je ne dis pas que ce n'est pas possible avec un Nagios-Cacti ou un Munin, mais je n'aurais pas commencé ce qu'on m'a demandé (voir ce qui suit) dans le temps imparti ;
    • une raison pratique : on ne change pas la configuration d'une centaine de routeurs à travers le monde en 40 jours. C'est à peine suffisant pour traverser un désert.

    Que veut-on savoir ? La question initiale est "quand est-ce que ma ligne est saturée" ce qui est déjà visible sur les logs du FAI (Nagios-Cacti, exporté en petites images JPG) mais n'est pas suffisant pour plusieurs raisons :

    • on n'a pas de système d'alerte (facile à mettre en œuvre) ;
    • on n'a pas de données exploitables plus avant (l'image JPG, c'est pas beaucoup) ;

    On veut donc savoir quand est-ce que la ligne est saturée. C'est-à-dire, a priori, quand est-ce que la ligne atteint sont débit maximal.

    Le but suivant est de déterminer si une saturation est gênante. Cela comprend plusieurs facteurs :

    • l'heure : une saturation entre 2h et 4h du mat' parce qu'on fait des backup, ça ne gêne personne (ça pourrait, mais pas dans ce cas) ;
    • une saturation d'une seconde dans la journée n'est pas grave. De même, 250 saturations quasi-instantanées, réparties de 8h à 20h ne gênent pas le travail ;

    Une fois qu'on a déterminé si une saturation est gênante, on veut savoir qui elle gêne et pourquoi, afin de voir si on peut faire quelque chose pour améliorer l'utilisation des ressources.

    • Par exemple, lorsqu'un site est saturé, cela gêne-t-il 1 ou 50 personnes ? Dans le premier cas, la personne est peut-être trop gourmande en ressources, dans le second, le lien est peut-être mal dimensionné.
    • Certains processus peuvent être automatisés la nuit, certaines pratiques changées : backup du travail pendant la pause de midi et la nuit, passer de FTP à rsync pour les backup, ou au moins un système incrémental plutôt que full

    Implémentation

    Comme je sens que vous êtes des warriors,

    cyclops_warrior_concept_by_masterfulmind-d4vi7mx

    Un warrior, probablement.

    je vous propose de rentrer dans le vif du sujet avec les détails techniques.

    Unzip

    Je pars avec une archive zip, gentiment déposée par mon FAI, dans laquelle il y a des logs au format nfcapd, défini par Cisco.

    Nfdump

    Nfcapd est un fichier binaire, pas très comestible pour l'œil humain. J'ai donc trouvé nfdump, un programme qui permet de transformer les logs binaires en texte ASCII. ça ressemble à peu près à ça :

    2016-09-21 21:47:42.360     0.000 TCP         192.168.5.3:445   ->    192.168.5.249:56011        1       52     1

    csvify

    C'est mieux, mais c'est toujours pas optimal. Il y a notamment trois problèmes :

    • la taille du fichier ASCII par rapport au binaire nfcapd est importante, environ 9.5 fois plus ;
    • le texte ASCII est très irrégulier, le nombre d'espaces est très variable ;
    • sont inutiles :
      • la flèche ;
      • le protocole aussi dans la majorité des cas (si on fait des calculs de poids en octets) ;
      • les ports, sauf éventuellement dans le cas d'un téléchargement, le port source pour déterminer le type de trafic (HTTP : 80, POP/IMAP, IRC : 6667/6697...) ;
      • le "1" à la toute fin, qui désigne le nombre de flow, toujours à 1 dans mon cas, vu les options passées à nfdump.

    J'ai donc créé un préparser en C (il s'agit en fait d'une spécification flex, puis flex génère le code C correspondant, à l'aide d'automates) (il y en a deux, l'un d'entre eux affiche des couleurs, utile pour visualiser, interdit pour l'utilisation en production, parce qu'il génère bien trop de caractères d'échappement).

    En moyenne, mon préparser sort un fichier au format CSV qui fait 70% de la taille du fichier d'entrée, et est beaucoup plus normalisé. Il ne supprime cependant pas beaucoup d'informations (la flèche seulement).

    Parse/Somme et plus si affinités

    Maintenant qu'on s'est facilité la tâche, il ne reste plus qu'à analyser le tout.

    C'est le but du programme C++ suivant, qui va itérer sur les entrées du CSV qu'on a produit, et ranger les paquets aux bons endroits.

    Enfin, en théorie. Parce qu'on se retrouve devant quelques petits problèmes :

    • Il y a des paquets qui on une durée de passage au travers du réseau nulle, et pour faire des graphs, c'est pas top. Il faut donc gérer cela.
      • On attribue une valeur faible à la durée de transmission.
      • On effectuera une moyenne (moyenne simple ou mieux, implémentation de l'algorithme SMA (ici en fr) pour lisser la courbe obtenue.
    • Même si le C/C++ est rapide, la partie lecture du fichier sur disque est très rapide, la partie traitement est lente, la partie écriture des résultats sur disque est rapide.
      • On adopte donc l'architecture suivante pour le programme C++ :

    C++ n-multithread

    Architecture du programme C++

    Le thread lecteur en haut lit depuis le disque à gauche, range les éléments dans la std::queue fileQ protégée par un mutex (fileQmutex, je suis d'une originalité à toute épreuve), tandis que les n threads workers vont travailler à générer la donnée, puis vont passer leur résultat à la liste de résultats resQD. Finalement le thread écrivain va réunir la liste de résultats, et l'écrire sur disque (à droite).

    Comme vous le voyez, beaucoup de choses ont été faites, beaucoup de choix, et j'en passe de très nombreux (j'en mettrai en PS), et il reste beaucoup à accomplir, notamment :

    • la doc : pour la contiuation du projet ;
    • le manuel d'uilisation pour l'exploitation ;
    • un How-to pour installer/améliorer le bidule ;
    • utiliser la classe Traffic() du programme C++ pour effectivement ranger les paquets dans des types de Traffic (par port pour le protocole, par IP source pour les utilisateurs les plus gourmands, par IP destination pour les serveurs les plus consultés/les plus consommateurs de ressource, et pour déterminer combien d'utilisateurs sont effectivement gênés lors d'une saturation).

    Des graphs. For free.

    Une fois que l'on a écrit le CSV, il ne reste qu'à faire le graph. le programme gnuplot peut faire ça très bien.

    Un chef d'orchestre

    Tout cela est opéré depuis un script bash.

    Voilà, j'espère que ça vous a plu, si ça vous amuse, le projet est libre, disponible ici. Comme d'habitude n'hésitez pas à commenter et à bientôt !

     

    Motius

    PS : j'ai appris plein de choses, mais qui sont de l'ordre du détail pour ce projet, alors je vais en lister quelques unes ici :

    • mes CPU aiment travailler de manière symétrique. quand je mets n workers, je gagne plus en pourcentage de vitesse en passant d'un nombre impair à un nombre pair. Les chiffres :
      • de 1 à 2 CPU : 3.37 fois plus rapide (le programme n-multithread est plus lent que ne l'était le programme monothread équivalent si l'on ne met qu'un seul thread worker, n=1) ;
      • de 2 à 3 CPU : 1.12 fois ;
      • de 3 à 4 CPU : 1.67 fois ;
    • les regex sont assez lentes, il y a potentiellement une bonne optimisation possible en bidouillant des C-strings au lieu des std::string du C++ (le pré-parser C est beaucoup beaucoup plus rapide que le programme C++, aussi parce que son travail ne consiste qu'en des substitutions/suppressions), mais le temps de développement serait plus long, et le risque d'overflow/segfault possible.