PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Une très bonne/mauvaise année 2018

mercredi 17 janvier 2018 à 18:30

Je sais je suis pas en avance, en plus j’avais même pas fait de message pour Nowel. On va la faire courte, je suis pas super inspiré, après avoir tenté les deux techniques de vœux de nouvelle année pour qu’on ait pas une année trop pourrie, à titre personnel tout va bien même sans avoir tenu certaines des inévitables résolutions que l’on pose à chaque nouvelle année; on ne peut pas en dire autant de notre civilisation, plus que jamais mal en point.

On aborde donc 2018 avec un Macron en train de déconstruire le pays pour le donner aux multinationales, un Trump qui joue au kikalaplugross avec un nabot aussi débile et timbré que lui, et je ne sais quoi encore qui, mois après mois, ne donne plus super envie de vivre sur cette planète (Elon, grouille-toi de nous amener sur Mars qu’on recommence à zéro).

Et pourtant, je compte continuer de participer à ma mesure à une entraide pour les plus démunis face à notre numérisation à marche forcée de la société, à mettre en lumière les travers dans lesquels mes contemporains plongent sans en être conscient (destruction de la vie privée, aussi bien par les états et les sociétés privées), et même tenter de me « detroglodytiser » un peu plus, rencontrer physiquement plus de gens même si je reste plus à l’aise derrière un clavier. Ce dernier point étant probablement le plus compliqué pour moi, bizarrement.

Je vais alors jouer la carte suivante : aux personnes respectables (hors majorité des personnalités politiques donc), que vos projets se réalisent et embellissent votre vie; à tous les autres (dont la majorité des personnalités politiques, et les cons–ces deux groupes ne sont pas exclusifs), allez crever en enfer. Ceci dit, il m’arrive régulièrement de me traiter moi-même de débile, ne suis-je pas dès lors en train de me souhaiter une mauvaise année, ce qui semble bien parti avec une voiture en train de rendre l’âme et un point en moins sur le permis ?

PS : les brouillons avancent, au ralenti, mais ils avancent, un jour ça sortira. Je sais juste pas quand…

Modem 4G Huawei E3372 sous Linux, pas super accessible…

vendredi 12 janvier 2018 à 18:30

Sachant qu’Orange ne veut pertinemment pas corriger le pépin de la ligne téléphonique de ma mère qui continue de payer son abonnement (et Free la location de la boucle), abonnement qui fonctionne seulement la moitié du temps (remember la présentation de Grafana, c’était pour ça), la fibre étant promise pour le « premier trimestre 2018 » j’ai décidé de tenter l’aventure de la clé 4G le temps que ça arrive. Clé reçue en 24h, carte sim Free en moins d’une semaine, et même si au final la clé sera utilisée sous Windows, j’ai évidemment voulu la tester sous Linux. J’ai bien fait, c’est pas aussi simple qu’on le pense au premier abord.

Disclaimer : Tout ne sort pas de mon cul non plus, je me suis grandement basé sur l’excellent article bourré d’infos du site lecrabeinfo.net. Vu les moyens à engager pour avoir un full réseau (avec routeur WiFi à modifier pour passer à OpenWRT), je me suis arrêté à la première étape, avoir du réseau le plus simplement possible.

Comment ça une clé USB Mass Storage ?

En effet, j’ai branché la clé après avoir inséré la carte SIM, et tout ce que le noyau me dit, c’est qu’il a reconnu un USB Mass Storage, et un lecteur CD qui n’arrive pas à s’initialiser (contient notamment les éventuels logiciels de gestion sous Windows…) :

[seboss666@seboss666-ltp ~ ]$ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 005: ID 12d1:1f01 Huawei Technologies Co., Ltd. E353/E3131 (Mass storage mode)
Bus 002 Device 004: ID 5986:024b Acer, Inc 
Bus 002 Device 003: ID 8087:07dc Intel Corp. 
Bus 002 Device 002: ID 062a:5918 MosArt Semiconductor Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

La notice, naturellement, vous demande de vous tourner vers le logiciel de gestion windowsien pour exploiter la clé. Dans le cul donc. J’avais réactivé ModemManager dans l’espoir qu’il détecte quelque chose, mais non. J’ai trouvé ma solution grâce à une recherche Qwant, en anglais évidemment, donc je vous explique ce que j’ai fait pour la culture. Je n’ai pas suivi l’intégralité de l’article, donc libre à vous si son cas d’utilisation vous convient.

En fait, la clé peut évidemment fonctionner dans plusieurs modes, celui qui m’intéresse est le mode carte Ethernet USB, qui est pratiquement universel sous Linux, et notamment celui qu’on utilise lorsqu’on active le partage de connexion USB de son smartphone. Mais pour ça, il faut bricoler un peu.

On commence par installer le paquet usb_modeswitch sur ma Manjaro (usb-modeswitch sous Debian/Ubuntu), ensuite via sudo on crée/remplit le fichier /etc/usb_modeswitch.conf :

# Huawei E353 (3.se) and others
 TargetVendor=0x12d1
 TargetProductList="14db,14dc"
 HuaweiNewMode=1
 NoDriverLoading=1

Pour le détails des identifiants, se reporter à l’article original, mais bon ça va nous permettre de changer le mode de la clé, avec la commande suivante :

sudo usb_modeswitch -v 12d1 -p 1f01 -c /etc/usb_modeswitch.conf
Look for target devices ...
 No devices in target mode or class found
Look for default devices ...
 Found devices in default mode (1)
Access device 005 on bus 002
Get the current device configuration ...
Current configuration number is 1
Use interface number 0
 with class 8
Use endpoints 0x01 (out) and 0x81 (in)
Using standard Huawei switching message
Looking for active drivers ...
 OK, driver detached
Set up interface 0
Use endpoint 0x01 for message sending ...
Trying to send message 1 to endpoint 0x01 ...
 OK, message successfully sent
Read the response to message 1 (CSW) ...
 Response successfully read (13 bytes), status 0
Reset response endpoint 0x81
 Could not reset endpoint (probably harmless): -99
Reset message endpoint 0x01
 Could not reset endpoint (probably harmless): -99
 Device is gone, skip any further commands
-> Run lsusb to note any changes. Bye!

Quelques secondes plus tard, on devrait avoir ça :

[seboss666@seboss666-ltp ~ ]$ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 006: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard
Bus 002 Device 004: ID 5986:024b Acer, Inc 
Bus 002 Device 003: ID 8087:07dc Intel Corp. 
Bus 002 Device 002: ID 062a:5918 MosArt Semiconductor Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Dans mon cas deux secondes plus tard NetworkManager m’indiquait être relié à un nouveau réseau. On y est presque !

Et maintenant, comment qu’on rentre son code PIN et qu’on teste sur nPerf ?

En effet, je n’ai pas rentré le code pin de la carte SIM, donc pas de connexion « internet » pour l’instant. Une petite inspection me permet de vite trouver mes petits :

[seboss666@seboss666-ltp ~ ]$ ip a
(...)
4: enp0s20u7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether 0c:5b:8f:27:9a:64 brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.10/24 brd 192.168.3.255 scope global dynamic noprefixroute enp0s20u7
       valid_lft 86359sec preferred_lft 86359sec
    inet6 fe80::a7b2:408a:e123:9435/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[seboss666@seboss666-ltp ~ ]$ ip route show
default via 192.168.3.1 dev enp0s20u7 proto dhcp metric 20100 
192.168.3.0/24 dev enp0s20u7 proto kernel scope link src 192.168.3.10 metric 100

J’ouvre donc un énième onglet dans Firefox, et tape l’adresse http://192.168.3.1 : Paf ça fait des Chocapic ! Je tombe sur l’interface me demandant de saisir le code PIN (et me propose de l’enregistrer pour ne plus avoir à le saisir à l’avenir, faites comme vous le sentez). Dans l’excitation du moment je n’ai pas pris le temps de faire de capture d’écran.

J’avais tout de même un souci : après la saisie, le voyant clignote encore un peu et se fixe sur un Cyan sans clignoter. Petite notice qui dit qu’on est sur un 3G+/4G. Vérification sur l’interface, en effet, il dit être relié en 4G, mais la force du signal est pas dingue. Dans les paramètres réseau, on peut décocher l’option Prise en charge des réseaux 4G.

Moins de deux secondes plus tard, ça fonctionne :

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8">

Le débit est pas ouf chez moi, mais j’ai l’intention de tester évidemment chez ma maman, mais je sais déjà via les techniciens Free qui sont passé que la couverture est pas trop dégueulasse malgré la distance des antennes (dans ma chambre c’était du full 4G). C’est donc une victoire ! (d’ailleurs pour pas perdre trop de choses, j’ai écrit la majorité de cet article via la connexion 3G tant que c’était frais 😀 )

Y’a encore du chemin à faire

Imaginez quelqu’un qui est un utilisateur basique d’une distribution Linux, qui se retrouve à devoir utiliser ce genre de solutions (ma frangine s’est vu « offrir » une clé 3G par Orange pendant qu’il ne voulait pas engager les travaux pour déployer un nouveau faisceau de ligne pour la raccorder en ADSL moisi). À qui dans mon entourage hors bricoleurs je peux dire « ben avec usb_modeswitch ça va tout seul, ensuite tu bricoles sur l’interface web de la clé et roulez jeunesse » ? Non, ça ne fonctionne pas.

Il y a donc encore des progrès à accomplir sur ce terrain, je ne dis pas que c’est évident, facile à faire, d’autant qu’on peut difficilement compter sur les fabricants, comme trop souvent encore. Malgré tout c’est fonctionnel, ce qui est déjà une première étape.

Mais comment ça pourrait aller mieux, alors qu’on annonce des « Always connected PCs » embarquant des modems 4G, voire carrément des puces ARM, Microsoft avançant main dans la main avec Qualcomm et adaptant Windows 10 pour qu’il fonctionne de manière transparente sur une plateforme non x86 ? Avec un Qualcomm en plus pas le plus respectueux en termes de support étendu de son matériel (plusieurs puces à destination d’Android ont vu leur support arrêté très rapidement, genre moins de trois ans, donc pas de possibilité propre d’exploiter les versions récentes d’Android), c’est une fois de plus une catégorie de matériel qu’il ne sera pas possible de libérer, même partiellement, d’autant plus si les outils pour l’exploiter derrière sont aussi rugueux.

Enfin bon, dans mon cas, ma mère va enfin pouvoir continuer de surfer, de mater ses vidéos sur YouTube, voire même maintenant goûter aux joies de Netflix et d’Amazon Prime Video, étant donné la qualité de plus en plus douteuse des contenus des chaînes de télévision classique, même spécialisées (et avec les rediffusions, même Science et Vie TV, ça devient chiant, je sais j’ai mangé pendant deux semaines). Bref, un usage post-2010 classique qui est encore refusé à un nombre beaucoup trop important de personnes dans notre pays en raison de choix stratégiques plus que douteux, aussi bien de la part de l’État que des acteurs privés…

 

Nethogs, un petit utilitaire sous Linux pour savoir qui consomme (consume ?) votre réseau

jeudi 28 décembre 2017 à 18:30

Actuellement en vacances chez ma petite sœur en Bretagne, à 4 (ma sœur, mon beau-frère, Arowan et moi) sur une connexion qui oscille entre 1 et 1,5 Mbps (bienvenue dans le monde réel), chaque octet qui entre ou sort d’un appareil compte, et les jonglages et arbitrages sont nombreux pour savoir qui peut regarder plus qu’une page de texte brute, ou jouer en mode déconnecté à un titre de sa collection Steam. Étant face à une étrangeté passagère où je voyais mon laptop utiliser les 140ko/s disponibles sans savoir quel processus était responsable, j’ai cherché des solutions, et j’en ai trouvé une fort sympathique.

iftop ne suffit pas toujours

J’ai déjà évoqué iftop dans un article qui commence à dater, mais toujours d’actualité. En effet, si tant est que la connexion responsable, si elle est seule, n’est pas spécialement parlante, même avec le reverse DNS. C’est ce qui s’est passé pour moi, et le whois de l’IP ne m’a pas non plus éclairé (un hébergeur du Royaume-Uni, cinquante raisons pour s’y connecter).

Nethogs à la rescousse

En effet, ce programme est salvateur. Apparemment présent partout (Debian et Manjaro vérifiés, les autres certainement), ce petit utilitaire vous affiche tous les processus lancés avec leur consommation de bande passante, ainsi que leur PID. Libre à vous ensuite de prendre une décision. Avec les options de base, ça donne ça :

Les options sont peu nombreuses, mais peuvent avoir leur utilité. Au lancement, vous pouvez changer la fréquence de rafraîchissement. Pas forcément utile sur un poste de travail, d’autant plus s’il est mobile, mais sur un serveur où les applications sont « stables », pour avoir des statistiques détaillées sur une journée par exemple, ça peut le faire. Une fois lancé, la touche m permet de changer l’unité, en KB (kilooctets) par défaut, pratique pour les grosses connexions qu’on passera en MB (mégaoctets).

Pour le reste, je vous laisse lire la documentation. Dans mon cas, et je n’ai pas pris le temps de faire de capture sur l’instant, j’ai découvert que c’était pamac qui mettait à jour les miroirs en tâche de fond, donc conso CPU limitée mais réseau à fond.

Sur ce, je retourne à mes vacances (y’a une rencontre avec Julien de computerz.solutions en vue), et je vous dis à l’année prochaine pour de nouvelles aventures en vous souhaitant de bonnes fêtes de fin d’année, même si Noël est déjà passé 🙂

Planifier une action via cron dans un container Docker

mardi 26 décembre 2017 à 18:30

Lors de la transformation de l’installation de ma forge personnelle pour la passer sous Docker Swarm, j’ai développé un petit script python pour gérer la mise à jour du sous-domaine de connexion SSH. Mon besoin était simple, donc l’exécution régulière est directement gérée dans le script, mais cette solution pratique manque cruellement de souplesse quand on veut passer à quelque chose de plus fin et complexe. Voyons comment faire plus puissant, sans que ça ne soit horriblement compliqué.

Dans le monde traditionnel de l’informatique, on imagine sans mal aussi bien sous Windows (tâches planifiées) que Linux (cron mon amour), les solutions pour planifier l’exécution de tâches à intervalles plus ou moins régulier (du style, du lundi au vendredi entre 8h et 18h). Mais quand votre service tourne sous Docker, à fortiori sous Docker Swarm, c’est fini, et l’exécution doit passer par d’autres moyens.

Rapide, simple, limité : inclus dans le service

Mon service consiste en un script Python unique, qui tourne en boucle infinie, avec une pause d’une minute à chaque fois. C’est bien, mais pour appliquer la plage d’horaire d’exécution que j’ai mis en exemple juste au dessus, c’est violent à écrire en Python et ne se résume plus dès lors à un sleep(60).

Mais techniquement, vous pouvez appliquer cette méthode à tous les langages qui vous permettent de faire des boucles, donc ça reste valable selon moi pour un besoin très basique.

Cron, mais pas avec la méthode habituelle

Je remercie à Djerfy d’avoir utilisé cette astuce qui a piqué ma curiosité. Pour un bot qui nous envoie régulièrement des citations du site Chuck Norris Facts, c’est via cron que le script qui concerne la connexion à l’API et l’envoi de la citation sur le channel Telegram est exécuté. Cela demande un peu plus de boulot par contre. Il faut plusieurs informations et commandes dans plusieurs fichiers, à commencer par la définition de la stack :

environment:
            - "CRON_SCHEDULE=30 09 * * *"

On retrouve le format habituel des tâches cron (minutes, heures, jour, mois, jour de la semaine), ce qui nous donnera des possibilités bien plus nombreuses. Le Dockerfile rajoute ensuite deux fichiers au lieu d’un seul :

RUN chmod +x /app/chucknorris.py && \
    chmod +x /app/init.sh

CMD ["/app/init.sh"]

Ce n’est donc plus le fichier python qui est appelé directement, mais init.sh. Que contient ce fichier ? Plusieurs choses, mais pour ce qui nous intéresse, voici les morceaux de choix :

if [ -z "${CRON_SCHEDULE}" ]; then
    echo -ne "Empty CRON_SCHEDULE variable\n"
    exit 1
fi

# variables crond
STDOUT_LOC=${STDOUT_LOC:-/proc/1/fd/1}
STDERR_LOC=${STDERR_LOC:-/proc/1/fd/2}

# settings crond
echo -ne "# custom script for sending jokes\n${CRON_SCHEDULE} /app/chucknorris.py > ${STDOUT_LOC} 2> ${STDERR_LOC}\n" | crontab -

# run cron
su -c "/usr/sbin/crond -f"

Mais qu’est-ce que ça fait ce morceau de code ? Pour rappel, contrairement à un système Linux classique, le processus avec le PID 1 dans un conteneur Docker est le processus lancé par la dernière commande CMD du Dockerfile, ici init.sh du coup. Dans ce script, au delà d’une vérification de base, les deux premières lignes intéressantes concernent la définition de variables concernant les descripteurs de fichier pour le fameux processus 1; en gros, on peut rediriger les sorties standards et d’erreurs vers ces descripteurs, ce qui permet de visualiser les messages de notre application réelle via les commandes Docker sur l’hôte.

Ensuite, on définit un nouveau fichier de crontab avec les informations de l’environnement (c’est ce que fait le  echo |crontab -), et enfin on lance crond. Mais que fait donc le -f ? Au début, en fouillant « bêtement » le manuel de crond, je ne trouve pas trace du -f en question, mais c’est le cas dans le manuel de cron. Le switch -f indique à cron de rester en premier plan (foreground, pour les anglophiles qui se poseraient la question), et non de passer en mode démon, ce qui est une condition sine qua non sur le PID 1 pour qu’un container Docker reste en vie.

La puissance de Cron, avec ses faiblesses

J’imagine qu’il faudra un peu plus de boulot si vous devez intégrer plusieurs tâches planifiées dans le même container. On sera probablement plus avisé de séparer les tâches dans des containers séparés si ça concerne des scripts différents.

Cron n’est pas non plus la solution la plus parfaite, et j’ai déjà buté ou été obligé de bricoler (parfois dans le script lancé lui-même), pour obtenir le résultat que voulait le client. En gros, ça ne fait rien de plus ni de moins qu’un service cron sur un OS classique, mais ça permet déjà bien plus de possibilités que d’écrire et de conditionner en dur les exécutions de votre tâche.

Quelques astuces diverses, dixième

vendredi 22 décembre 2017 à 18:30

Il serait criminel de terminer l’année sans vous filer une dernière tournée d’astuces à coller sous le sapin numérique que vous avez certainement quelque part 🙂 Comme toujours, à garder dans un coin de votre mémoire ou de votre wiki personnel (ou un simple marque-pages Firefox, ça fonctionne aussi mais c’est moins facile à chercher).

Convertir une vidéo en série d’images

Un petit défi trouvé je ne sais plus où : retrouver une image précise, dans une vidéo où celles-ci défilent très vite. Plutôt que de m’emmerder à lire au ralenti, à repasser 50 fois en espérant voir quelque chose, il « suffit » de convertir et de générer un fichier image par image de vidéo. Pour ça, il faut extraire le nombre de fps de la vidéo en question, et réutiliser ce paramètre pour qu’ffmpeg fasse le boulot :

ffmpeg -i DMdLcMPW4AUQV9t.mp4 -vf fps=27.5 out%d.png

On a ensuite autant de fichiers images qu’il y a d’images dans la vidéo, et celle qu’on recherche va forcément apparaître.

L’optimisation d’image rapide pour les pressés

Pour économiser quelques précieux mégaoctets quand on travaille sur un site qui manipule beaucoup d’images, sauf à vouloir faire le traitement au moment de l’upload, on peut le faire après coup :

find . -iname "*.png" -exec optipng -o5 -strip all {} \;

find . -iname "*.jpg" -exec jpegoptim -m90 --strip-all {} \;

Les deux logiciels sont à installer et sont disponibles dans la plupart des distributions. Petit test rapide sur le dossier wordpress d’un client, passé de 416 à 322Mo. Après, il faut regarder la qualité finale des fichiers pour les jpg qui seront recompressés…

Yaourt : utiliser la puissance du multicœurs pour la compression

J’ai déjà parlé d’AUR et de la puissance de ce système de gestions de paquets (et de ses risques aussi). En voulant réinstaller MARP, j’ai découvert, au delà de la taille aberrante liée à Electron, que la compression du paquet construit se limitait à un seul cœur, et que c’était en particulier la compression qui était en cause. Pour utiliser tous les cœurs disponibles, c’est dans le fichier /etc/yaourtrc qu’il faut se rendre :

COMPRESSXZ=(xz -c -z - --threads=0)
#Si gzip, installer pigz puis
COMPRESSGZ=(pigz -c -f -n)

A la prochaine installation/mise à jour de paquet, ça devrait être bien plus rapide. Sauf quand votre connexion est merdique…

Asciiart

Je cherche à créer un message sympa pour la connexion SSH à mes serveurs, mais et pour ça, rien de tel qu’un peu d’ascii art. Pour afficher du texte décoré, il y a figlet qui permet de faire quelques trucs sympa.

[seboss666@seboss666-ltp ~ ]$ figlet -f smslant Seboss666
   ____    __                ____ ____ ____
  / __/__ / /  ___  ___ ___ / __// __// __/
 _\ \/ -_) _ \/ _ \(_-<(_-</ _ \/ _ \/ _ \ 
/___/\__/_.__/\___/___/___/\___/\___/\___/

Vous pouvez vous intéresser à la commande figlist pour avoir une idée des « polices » possibles et faire vos propres tests 🙂

PS : figlet est à installer auparavant évidemment.

REGEX : filtrer only alphanum,_ and –

Celle-là, je la dois en grande partie à Djerfy. Sur le coup, on a pas trouvé mieux, mais ça fonctionne. Je cherchais à filtrer dans un script bash le nom de l’utilisateur saisi pour m’assurer qu’il respecte le format que je voulais, à savoir alphanumérique, underscore et tiret. On a abouti à cette routine :

ISVALID=$(echo ${NEWUSER} | sed "s/[a-zA-Z0-9-]//g;s/_//g")
if [ "x" != "x${ISVALID}" ]; then
	echo -ne "error"
fi

Si une brutasse a une meilleure méthode, en sachant que sur la partie sed si on essaie de le faire en une seule fois ça merde, je veux bien un petit partage en commentaire 🙂

Docker : changer la plage d’IP du bridge par défaut

J’ai rencontré un souci après l’installation de Docker sur ma VM Linux au boulot, je n’accédais plus au dépot SVN privé sur lequel nous publions notamment nos clés SSH à déployer sur les milliers de serveurs Linux que nous avons sous notre responsabilité. Il s’avère que c’est l’adresse par défaut du bridge docker0 et surtout la route associée qui n’était pas la bonne. Pour corriger ça, j’ai créé le fichier /etc/docker/daemon.json avec le contenu suivant :

{
"fixed-cidr": "192.168.5.0/24"
}

On redémarre ensuite le démon Docker, le bridge a changé d’adresse et de route, joie dans la demeure, les serveurs auront ma nouvelle clé dans la journée 🙂

Remplir un fichier known_hosts pour son service Gogs

Si vous avez lu mon article sur la mise sous Docker de mon service gogs, il ne vous aura pas échappé que le hook du miroir GitHub a un peu été contrarié par le fait que la première fois l’utilisateur git n’a pas enregistré l’identité des serveurs SSH distants. Si j’ai copié un fichier existant, il est également possible, depuis l’hôte Docker, d’utiliser ssh-keyscan :

ssh-keyscan -t rsa github.com >> /home/docker/gogs/git/.ssh/known_hosts

À répéter deux/trois fois pour choper les trois serveurs. Et c’est valable pour tous les services sur lesquels votre forge doit se connecter.

Gagner quelques secondes en modifiant légèrement votre Dockerfile

Ça révolutionnera pas votre utilisation de Docker, mais en limitant le nombre de commandes RUN, vous limitez la génération d’images intermédiaires et donc gagnez un peu de temps, toujours appréciable si vous enchaînez les « compilations ». Voici ce que je faisais au départ :

RUN apk update
RUN add docker
RUN pip install --no-cache-dir ovh

On peut tout regrouper en une seule « étape » :

RUN apk add -U --no-cache docker &&\
pip install --no-cache-dir ovh

Ça ne change absolument rien à la taille potentiellement délirante de votre image évidemment. Pour ça, je vais essayer d’utiliser j’ai utilisé le module Docker, mais la documentation est affreuse (comme trop souvent).

La météo dans son terminal

Très rapide, en couleur en plus, Et si vous avez besoin d’un peu de précision (genre ça vous répond le mauvais Pays), vous pouvez ajouter un ~ devant le nom de la ville pour qu’il tente une localisation :

[seboss666@seboss666-ltp ~ ]$ curl wttr.in/Melun
Weather report: Melun, France

               Overcast
      .--.     0-4 °C         
   .-(    ).   ↘ 17 km/h      
  (___.__)__)  10 km          
               0.0 mm         
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  Sat 16 Dec ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│    \  /       Partly cloudy  │               Cloudy         │  _`/"".-.     Light rain sho…│  _`/"".-.     Patchy rain po…│
│  _ /"".-.     -1-3 °C        │      .--.     1-5 °C         │   ,\_(   ).   1-4 °C         │   ,\_(   ).   1-4 °C         │
│    \_(   ).   → 12-20 km/h   │   .-(    ).   → 15-22 km/h   │    /(___(__)  ↗ 13-21 km/h   │    /(___(__)  ↗ 11-19 km/h   │
│    /(___(__)  19 km          │  (___.__)__)  18 km          │      ‘ ‘ ‘ ‘  14 km          │      ‘ ‘ ‘ ‘  18 km          │
│               0.0 mm | 0%    │               0.0 mm | 0%    │     ‘ ‘ ‘ ‘   0.3 mm | 58%   │     ‘ ‘ ‘ ‘   0.1 mm | 19%   │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  Sun 17 Dec ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│      .-.      Light drizzle  │      .-.      Light drizzle  │      .-.      Light drizzle  │      .-.      Light rain     │
│     (   ).    0-4 °C         │     (   ).    2-5 °C         │     (   ).    4-6 °C         │     (   ).    2 °C           │
│    (___(__)   ↗ 17-26 km/h   │    (___(__)   ↗ 19-28 km/h   │    (___(__)   ↑ 23-36 km/h   │    (___(__)   ↑ 23-35 km/h   │
│     ‘ ‘ ‘ ‘   20 km          │     ‘ ‘ ‘ ‘   20 km          │     ‘ ‘ ‘ ‘   19 km          │     ‘ ‘ ‘ ‘   20 km          │
│    ‘ ‘ ‘ ‘    0.6 mm | 69%   │    ‘ ‘ ‘ ‘    1.2 mm | 59%   │    ‘ ‘ ‘ ‘    1.4 mm | 75%   │    ‘ ‘ ‘ ‘    1.7 mm | 88%   │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  Mon 18 Dec ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│      .-.      Light rain     │      .-.      Light drizzle  │    \  /       Partly cloudy  │    \  /       Partly cloudy  │
│     (   ).    3-6 °C         │     (   ).    2-6 °C         │  _ /"".-.     1-5 °C         │  _ /"".-.     0-3 °C         │
│    (___(__)   ↘ 19-27 km/h   │    (___(__)   ↓ 24-32 km/h   │    \_(   ).   ↘ 14-23 km/h   │    \_(   ).   ↘ 13-21 km/h   │
│     ‘ ‘ ‘ ‘   20 km          │     ‘ ‘ ‘ ‘   20 km          │    /(___(__)  17 km          │    /(___(__)  17 km          │
│    ‘ ‘ ‘ ‘    0.7 mm | 79%   │    ‘ ‘ ‘ ‘    0.2 mm | 69%   │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘

Cartographie dans un terminal

Oui, encore un autre service qu’on s’attendait pas à trouver, et pourtant, c’est un truc de dingue :

telnet mapscii.me

Ensuite, on utilise a/z pour zoomer/dézoomer, et les flèches pour se déplacer. Bluffant.

Tribute to Star Wars

Fin d’année oblige, on termine avec quelques petites bricoles en bash qui demandent un écran d’une certaine taille en hauteur, et dans le premier cas l’installation d’ack et de lolcat (dispos dans vos dépôts préférés au moins dans Debian depuis Wheezy). On a donc la première commande :

clear ; while : ; do ack --bar | lolcat --force ; sleep 0.05 ; printf "\e[0;0H" ; done

Les développeurs doivent s’ennuyer parfois pour cacher ça dans leur code 🙂

Et le bouquet final, la plus délire de ce que j’ai pu voir je pense (après le générique via les reverse IP), raison pour laquelle je vous la donne en dernier, l’épisode 4 en ascii art à portée de telnet :

telnet towel.blinkenlights.nl

C’est un boulot de malade !

On se donne rendez-vous l’année prochaine 😉