Astuces diverses, récap

C’est les vacances (du moins pour moi), et même si je me concentre sur ma recherche d’appartement, je n’oublie pas le blog qui me manquait effectivement un peu, et pour lequel j’arrive à trouver de l’inspiration. Enfin presque, aujourd’hui, c’est petit pense-bête pêle-mêle (beaucoup de circonflexes là-dedans) d’astuces diverses dans différents domaines, évidemment presque toujours de la ligne de commande.

Un générateur de mot de passe alphanumérique

Les astuces vont souvent prendre la forme d’un alias, et voici donc le premier, un petit générateur de mot de passe aléatoire, par exemple pour la connexion à une base de données :

On l’appelle ensuite sans paramètre, et le résultat est immédiat :

Vous pouvez changer la taille dans la partie head -n 12 (donc ici douze caractères).

Un dig moins bavare

dig est un outil très pratique quand vous devez manipuler assez souvent des noms de domaines. Mais il est très verbeux par défaut, et l’on a pas forcément besoin au quotidien de toutes les infos. Voici donc comment le rendre plus discret :

Si vous avez malgré tout besoin de la réponse complète, il suffit de rajouter +all à la fin (exemple avant/après) :

Vous comprenez pourquoi je lui « coupe la chique » 🙂

Son propre dossier de scripts

C’est une astuce que j’ai pu présenter dans d’autres articles, mais je la remets ici au cas où. Plutôt que de coller ses scripts persos dans /bin ou /usr/local/bin, vous pouvez vous créer un dossier ~/scripts et le faire prendre en compte par Bash à votre connexion. Pour ça, ajoutez à votre fichier .bashrc :

Remplacez par votre dossier à vous hein 🙂

Vérifier que tous les ServerName/Alias ont bien une adresse IP

Petite astuce pour Apache, si vous voulez vérifier que tous les domaines configurés pointent bien dessus (par exemple pour faire le ménage), vous pouvez utiliser la routine suivante, en vous plaçant dans votre dossier sites-enabled (si vous êtes sous Debian, cherchez ailleurs sinon) :

Vous devriez obtenir une ligne par domaine présent et leur adresse IP dans la foulée si elle existe. Cela permet notamment de faire le ménage, par exemple si vous avez une quarantaine d’Alias dans le même vhost comme j’ai déjà pu le rencontrer. Et vous devriez pouvoir l’adapter assez rapidement pour Nginx.

Empêcher la désactivation du proxy Apache pour une minute

Un comportement chiant d’Apache 2.4, dans un contexte de proxy (que ce soit au travers de ProxyPass ou de SetHandler, pour la prise en charge de PHP-FPM par exemple), si la connexion au backend est perdue, Apache la désactive pour 60 secondes, et ce même si vous réparez très vite, ce qui vous oblige à également redémarrer Apache. Pénible, mais « contournable » avec la directive retry=0 (exemple) :

Lister tous les utilisateurs MySQL et leurs droits

Petit script à se mettre dans un coin, adapter le chemin du fichier de configuration (–defaults-file) qui contient le pass root :

Copier/renommer plus rapidement un fichier

La syntaxe habituelle pour copier/déplacer un fichier, c’est <commande> <origine> <destination>, exemple :

qui crée un fichier toto2.txt identique à toto.txt. Pour aller plus vite, vous pouvez utiliser la syntaxe suivante :

Et c’est pareil pour mv.

Il y en aura peut-être d’autres, il m’arrive d’en utiliser d’autres mais je ne les ai pas toujours en tête, et ne je prend pas forcément toujours le temps de les noter.


J’ai bien aimé faire le premier billet, alors je vous ai encore noté plusieurs astuces qui sont beaucoup trop courtes et où le contexte de découverte ne serait pas nécessairement intéressant pour en faire des billets à part entière. Et en écrivant ce qui est le deuxième épisode d’une nouvelle série, je pourrais presque en faire une catégorie tiens (Séries ?).

Liste d’arguments trop longue

Vous n’avez jamais eu ce message d’erreur ? Alors regardez cet exemple :

Mais c’est pas une raison pour les faire un par un, ça prendrait trop de temps. Passons plutot par find :

Dans l’absolu, ça sera toujours super long, donc vous pouvez faire autre chose en attendant.

Filtrer la sortie d’un tail -f

Vous détestez les logs verbeux autant que moi (coucou Java) ? Si vous cherchez un message en particulier lors du démarrage d’une application, vous pouvez faire un grep sur la sortie d’un tail -f plutot que de rester hypnotisé devant un écran dégueulant des milliers de lignes de logs. Sisi, c’est faisable :

Pour l’anecdote, si vous faites un grep sur vim (quoi, ça peut arriver à tout le monde ?), vous pouvez tout de même quitter vim de manière habituelle même si vous ne voyez rien.

Vérifier tous les certificats de vos sites

Si vous cumulez les certificats provenant de différents fournisseurs, il peut être intéressant, si vous les rangez au bon endroit (typiquement, avec la configuration des virtualhosts), d’en vérifier les informations pour ne pas se faire surprendre par un certificat expiré.

Peut éventuellement servir dans un rapport mensuel envoyé par mail sur l’état d’une machine.

Purger le cache ARP

Très rare, mais il peut arriver, dans certains réseaux un peu conséquents et posant quelques problèmes de stabilité (un routeur en fin de vie qui fait un peu de la merde par exemple), qu’il faille vider le cache ARP pour retrouver une connexion stable. Ça peut se faire avec une seule boucle :

Répertoire partagé VirtualBox

Dire que je me suis cassé les dents pendant des mois à faire du sudo cp <fichier> /media/sf_VM/ pour transférer des fichiers entre machine virtuelle et hôte Windows. En fait, il suffit simplement de s’ajouter au bon groupe :

Et de déconnecter/reconnecter la session (ou comme moi, mode bourrin redémarre). Et hop, on peut directement copier/déplacer des fichier dedans.

Purger uniquement certains éléments de la file de mail en attente

Quand vous avez soit subi une attaque sur un site, soit un test mal branlé d’envoi de mail de la part d’un développeur (les deux étant du vécu), il se peut qu’il faille faire le ménage sans perdre de message légitime. Exit dont l’arme atomique postsuper -d ALL, il faut un peu plus de travail, exemple sur une installation qui repose sur Postfix :

Et hop, tous les mails en @email.com à la baille. Les autres peuvent repartir une fois les vannes rouvertes et/ou votre serveur déblacklisté.

Ne pas vérifier la signature SSH d’un serveur

Cas que j’ai régulièrement quand j’essaie de me servir d’Ansible au boulot, pour une raison que j’ignore et sans que les serveurs soient compromis, il me redemande systématiquement de valider la signature de certains serveurs. Pour contourner ça, j’ai placé ces deux petites lignes à la fin de mon fichier ~/.ssh/config :

Et voilà, avec un peu plus de 150 hôtes sur lequel pousser la mise à jour d’un script (avec un nombre en constante augmentation), plus de problème à devoir rester devant pour taper « yes » à tout bout de champ. A utiliser avec précaution toutefois, parce que si jamais vous l’utilisez sur un réseau non maitrisé, c’est la porte ouverte au Man-in-the-middle.

Faire le ménage dans le fichier hosts d’Ansible

Pour reparler d’Ansible, je l’utilise entre autres pour déployer/mettre à jour un script maison sur un gros groupe de machines. Pour mettre à jour le fichiers hosts afin de purger les machines qui ont disparues, et en m’assurant qu’elles sont effectivement à la retraite, je me base sur le fichier .retry qu’il crée pour indiquer les machines sur lesquelles il n’est pas arrivé au bout du playbook. Et c’est sed qui vient à la rescousse :

Si vous n’êtes pas à l’aise, je vous conseille de faire une sauvegarde du fichier hosts auparavant.


Comme d’habitude, tout ce que je présente n’est pas forcément le plus optimisé qui soit, si vous avez des remarques à faire, des suggestions, commentaires toussa, vous commencez connaitre la musique non ? 🙂


J’ai fini par les apprécier, ces billets astuces en vrac. Alors en attendant qu’il y en ai un quatrième et qu’ils aient leur propre série dans le menu idoine, voici déjà le troisième épisode. Au programme, du serveur Web, du Bash, et d’autres joyeusetés.

Whitelister le dossier .well-known derrière un mot de passe htaccess

Sous Apache, si vous voulez créer/renouveler un certificat Let’s Encrypt, vous avez deux solutions, créer un Alias avec un dossier à part qui n’est pas protégé par mot de passe, soit autoriser les requêtes sur le dossier .well-known dans le DocumentRoot déjà protégé. Sur Apache 2.4, il suffit d’ajouter une ligne à côté des autres Require :

Supprimer les règles en doublon dans un fichier de réécriture

Dernièrement, le gros site d’un client a complètement été refondu. Qui dit refonte dit modifications des URLs, et pour ne pas trop perdre en référencement, on procède alors à des réécritures. Un peu pus de 400 réécritures dans le cas présent, mais transmises sous forme de tableau Excel, qu’il faut alors transformer en autant de règles Nginx. Le travail a été douloureux, notamment en raison de doublons qui faisaient que certaines règles n’étaient pas prises en compte. Pour supprimer ces doublons, j’ai utilisé une petite combinaison en Bash :

Il n’y a plus qu’à inclure ce fichier final. 27 doublons de supprimés, autant de règles qui ne font plus chier.

Regex de cochon

On m’a demandé de faire une redirection d’une URI en particulier vers une autre, pour plusieurs domaines. Plutôt que de créer autant de règles en fonction des domaines (avec et sans www), j’ai groupé le tout avec une seule expression régulière, que je partage donc ici pour inspiration :

Inverser deux paramètres en bash

Qui n’a jamais pesté, depuis l’arrivée de systemd, d’avoir inversé le nom d’un service et l’opération voulue ?

Remember :

Et bien plutôt que de tout réécrire ou de jouer avec les flèches et supprimer, vous pouvez, à l’aide d’un Esc, puis t, inverser les deux derniers éléments de la commande. Un vrai bonheur :

switch-parametersÇa fait le café.

Un alias pour relancer une commande avec sudo

Avec l’utilisation quasi-généralisée de sudo dans les distributions, malgré tout, en l’occurrence si vous parcourez souvent mes articles, il se peut qu’on oublie de saisir une commande avec. Plutôt que de revenir en arrière et d’aller ajouter sudo au début, vous pouvez saisir sudo !! qui va lancer sudo avec la dernière commande complète saisie. Collez ça dans un alias, et admirez le travail :

Désactiver globalement la géolocalisation dans Firefox

Une fois n’est pas coutume, une astuce pour Firefox qui n’a pas le droit à son propre article (ce qui était arrivé pour les liens Magnet). En effet, par défaut, Firefox vous pose la question chaque fois qu’un site internet demande à utiliser votre position. Mais il n’y a aucune option dans l’interface pour désactiver globalement l’option, ce qui est assez pénible, surtout si vous enchaînez les sites qui ne s’en servent qu’à des fins publicitaires (surtout si comme moi, vous utilisez un bloqueur de pub). C’est donc une fois de plus dans about:config qu’on va modifier l’option :

Désactiver la gestion de l’alimentation au niveau de systemd

En attendant de pouvoir m’équiper pleinement de ce que je veux faire, j’ai ressorti mon vieux laptop pour m’en faire un serveur (sisi c’est possible, j’en avais déjà parlé, souvenez-vous). Mon problème, même en installation Debian minimale il se mettait en veille en rabattant l’écran, ce qui m’est totalement inutile. systemd permet de ne plus s’embêter avec ça :

Cela va remplacer les pointages des liens actuels par /dev/null. Un reboot plus tard, c’est réglé.

Convertir sa clé privée ECDSA pour Filezilla sous Windows

Filezilla supporte l’utilisation de clé SSH au format PPK (celui de PuTTY), et ce même pour les clés ECDSA. Malheureusement, la version « stable » actuelle (0.67) de PuTTYgen ne permet pas d’importer de telles clés. Qu’à cela ne tienne, il suffit de se rabattre sur la version de développement pour faire le boulot. Si vous n’avez pas besoin de PuTTY, mais juste de convertir la clé, vous pouvez juste rapatrier l’utilitaire, il fonctionne en standalone sans problème.

puttygenLes doubles crochets pour vos tests dans un script bash

Ils sont super pratiques et permettent non seulement d’utiliser une autre syntaxe pour faire des conditions multiples, mais également écarter des problèmes de types de variables :

Un no-life sur StackOverflow a détaillé les avantages non seulement des crochets, mais aussi des accolades, des parenthèses…

Calculer le poids d’un groupe de fichiers identifiés par find

J’avais besoin de calculer l’espace gagné par un éventuel nettoyage de fichiers de logs Apache de plus d’un an (puisque pour l’instant en France, c’est la limite légale). Compliqué, mais pas impossible, et à combiner différentes recherches je suis arrivé à cette commande :

La suite au prochain épisode comme on dit 🙂


Eh oui, déjà le quatrième épisode de ces astuces en vrac (ah non, en vrac, ce sont les liens), de celles qui n’ont pas nécessairement besoin d’un article dédié. On en trouve des petites conneries à faire dans plein de domaines, c’est ça que j’aime bien dans l’informatique.

Empêcher Nginx de rajouter le port quand on redirige une URI vers une autre URI

Quand votre serveur Nginx est derrière un autre proxy comme Varnish ou HAproxy, il est nécessaire de le faire écouter sur un autre port que le 80/443 s’il se trouve sur la même machine. Hors, si vos règles de redirections ne contiennent que des URIs (et pas des URLs, qui indiquent explicitement ou implicitement le port), il va par défaut rajouter le port sur lequel lui écoute, ce qui va évidemment poser des problèmes. Il suffit donc de rajouter la ligne suivante dans votre fichier de configuration :

Afficher/surveiller les stats memcache

Pour vérifier le taux d’utilisation de votre instance Memcache, vous pouvez envoyer des commandes par telnet ou en l’occurrence netcat au port d’écoute. En combinant avec l’utilitaire watch, on peut afficher les statistiques rafraîchies en temps réel :

Modifier à la volée un paramètre php (CLI)

Parfois, pour vérifier qu’un paramètre pose problème dans votre fichier de configuration de PHP, vous pouvez tester, en ligne de commande, en modifiant à la volée le paramètre (pour éviter d’impacter le reste du fonctionnement de vos sites si vous avez un fichier commun à tout le monde) :

Désactiver les demandes de notifications dans Firefox

J’ai expliqué comment désactiver les demandes de géolocalisation, si les notifications vous répugnent aussi, vous pouvez les désactiver globalement, dans about:config :

Vous le passez à false, et voilà. A part qu’après avoir testé, ça fait déconner la version Web de Twitter, alors vous êtes prévenu.

Créer une archive tar.gz au travers d’SSH avec une barre de progression

Cela évite de créer l’archive sur la machine distante avant de la copier (pratique quand on manque de place), et avec une barre de progression, c’est badass :

Le -s 1G, c’est la taille du dossier, sinon pv n’affiche pas le pourcentage ni le temps restant estimé, seulement la taille transférée, car il ne peut pas la calculer dans le cas présent. Attention, ici avec la compression ça peut s’arrêter avant les 100%, pas de panique. Au pire vous testez l’archive reçue si vous avez peur.

Vérifier la liste des plugins activés dans WordPress

J’ai eu à traiter une erreur fatale sur un WordPress dont le thème dépendait d’un plugin qui s’est avéré être désactivé. Pour vérifier la liste quand on a pas accès au backoffice mais qu’on a accès à la BDD, une seule requête suffit (pas la peine d’en rajouter) :

Et si vous avez un a:0:{} comme valeur, vous avez un gros problème.

Faire un diff de fichier au travers d’SSH

J’ai eu un doute sur la liste de fichiers à livrer fournie par un client entre sa plateforme de recette et son site de production. Pour comparer le fichier qui m’intriguait, j’ai procédé de cette façon :

Dans mon cas, la seule différence était des lignes vides, étrange mais pas grave, ouf.

Importer un dump MySQL/MariaDB au travers d’SSH en une seule commande

Lors de la migration des données d’un client vers la nouvelle machine, vous avez rsync pour les fichiers, mais pas pour les bases. Dans ce cas, vous pouvez passer par mysqldump au travers d’SSH, et injecter directement, le tout en une seule ligne :

Valider la syntaxe YAML d’un playbook Ansible avant de l’exécuter

Le YAML c’est sympa, Ansible c’est le pied, mais quand vous avez du mal à faire fonctionner les deux ensemble, vous pouvez tomber sur un laconique « ERROR! Syntax Error while loading YAML. » Sans plus de détails. Depuis peu, j’utilise yamllint qui permet de faire du check de configuration et d’indiquer clairement les erreurs de syntaxe (la plus courante étant l’indentation je pense). Exemple :

C’est pas mieux comme ça ?

Lancer des commandes bash depuis l’invite de commandes MySQL

Ça arrive parfois : on veut vérifier un truc côté OS alors qu’on est dans une session MySQL (genre le chemin d’un fichier à sourcer). On a alors le choix : sortir de la session, ça peut vite s’avérer chiant, ouvrir une deuxième console en parallèle. Et puis il y a la dernière solution, plus intéressante, de lancer directement des commandes depuis le shell MySQL :

On peut même relancer une instance de bash, dès qu’on en sort on revient automatiquement dans MySQL. C’est pas cool ça ?

Allez, c’est tout pour aujourd’hui, si j’en trouve d’autres des petites astuces vous aurez droit à un nouveau numéro. Nul doute que ça arrivera 🙂


Encore une flopée de bricoles diverses à réutiliser au besoin. Manifestement ça plaît ces articles, et la source est pratiquement intarissable (il y a beaucoup de Vim aujourd’hui). Pourquoi s’en priver dès lors ?

Un ramdisk pour MySQL

Histoire de soulager un peu le disque d’un client qui fait de la merde avec sa base de données (requêtes SELECT DISTINCT qui créent systématiquement des tables temporaires sur disque), j’ai déplacé le dossier temporaire de MySQL en RAM, avec une ligne dans fstab :

Attention, il faut couper MySQL, monter le dossier, et relancer.

Cloner une base PostgreSQL

Plutôt que faire un dump, créer la base et réimporter le dump, sous Postgres on peut dire d’utiliser une base comme modèle :

Et paf, 10 minutes de gagnées sur un client.

Installer la libdvdcss sur Ubuntu

J’ai découvert lors du dernier PSL auquel j’ai participé (je suis un rythme d’un mois sur deux…) que la libdvdcss, composant indispensable à la lecture des DVD du commerce (protection anticopie gnagnagna), n’était plus installé ni installable facilement sous Ubuntu. Voici donc les manips à faire :

  • Sur Ubuntu 12.04 à 15.04 : Terminal, se rendre dans le dossier /usr/share/doc/libdvdread4, et exécuter le script install-css.sh
  • Sur Ubuntu 15.04 et suivants : installer le paquet libdvd-pkg, et lancer dpkg-reconfigure libdvd-pkg en suivant les instructions à l’écran.

Un bon retour en arrière pour l’utilisation par les débutants, une fois de plus.

Ouvrir directement un fichier de conf depuis un autre fichier dans vim

(Merci Kooshal) Quand on édite un fichier de configuration avec vim et qu’on tombe sur un include vers un autre fichier de configuration on peut directement ouvrir celui-ci, par exemple :

On déplace le curseur sur le fichier /etc/php/php.ini, ensuite on appuie sur g puis f, et paf, ça fait des Chocapic. Pour retourner au fichier original, Ctrl+o.

Ajouter la liste des paramètres externes dans un script bash perso

Quand vous utilisez des alias, c’est cool, il interprète directement les paramètres supplémentaires occasionnels que vous voulez lui passer (exemple avec mes alias SSH quand je veux ouvrir un tunnel en plus pour faire du SOCKS : sshvox -D 9999, sshvox étant un alias assez dégueulasse au demeurant). Quand on utilise un script pour faire la même chose (genre celui que j’utilise pour lancer un playbook Ansible), on peut se retourner vers $@ :

Évidemment, c’est du rapide/crade, en théorie il faudrait vérifier un peu les arguments. Dans un vieux script pour un serveur Call of Duty, j’ai utilisé $*, qui semble fonctionner aussi, la différence semble tenir dans le fait que $@ échappe certains caractères spéciaux, à vous de voir donc.

Vim : se rendre directement à une ligne

Plusieurs méthodes rapides plutôt que de compter : soit vim <fichier> +<n° ligne>, soit dans l’éditeur taper le numéro de ligne puis G (majuscule). Sinon, pour s’éviter de compter, on a aussi l’option ‘set nu’ pour afficher les numéros de ligne 😉

Afficher la collation par défaut d’une base

Parce que ça n’apparaît pas dans un show create database <base> :

Obtenir un shell de manière détournée avec Vim

Sur le serveur d’un client, le compte qu’on nous a attribué a le droit d’utiliser sudo, mais pas de faire un sudo su pour s’éviter justement de passer son temps à taper le sésame. Petit détournement de vim, qu’on ouvre avec sudo (sans fichier), on tape ensuite :shell, et hop, un bash avec les droits root 😛

Lancer une commande watch au travers d’SSH

Je souhaitais surveiller le remplissage d’un dossier mais avec une seule commande. Le problème, c’est qu’au départ je tombais sur une erreur « Error opening terminal: unknown. » particulièrement pas explicite. La solution réside dans un simple -t :

Afficher la n-ième ligne d’un fichier

Quand vous avez un boulet qui vous dit :

sed vous permet d’éviter l’enchaînement de head |tail -n1, et c’est plus rapide à taper en plus :

Afficher quelques infos rapides sur des domaines

J’ai pris une liste d’alias de Virtualhosts à vérifier, avant de les migrer sur une autre machine. Petite routine pour voir l’état, à savoir l’adresse IP, le code de retour HTTP, l’URL si c’est redirigé :

Supprimer le début d’une arborescence d’une archive tar

Si vous avez ce genre d’arborescence dans une archive tar :

Mais que vous voulez juste récupérer le dossier repository, il y a une option bien pratique de tar :

Et hop, la partie var/lib/docker/lbp/publish/ est supprimé à l’extraction.

Extraire directement une archive à travers SSH

Dans le même esprit de la bidouille juste au dessus, j’avais pas assez de place donc l’archive a été extraite directement depuis un autre serveur :

Accélérer les git status

En changeant de serveur et de version de git, j’ai une différence de x7 sur un git status dans le temps de traitement. Problème résolu en ajoutant le paramètre suivant au dépot :

Avant, 35s, après, 0.8s. Tranquille.


C’est reparti pour un nouvel épisode de bricoles rapides, de oneliners, de ligne de commandes, de petites configurations, bref, du divers, rien que du divers (mais beaucoup de sysadmin, sinon ça serait pas marrant).

Ajuster le volume audio de la lecture de média dans Firefox

Après avoir souffert des différences de volume et surtout d’un volume max très dérangeant, j’ai trouvé la petite ligne qui va bien dans about:config :

Tester configuration Apache en ligne

Particulièrement pratique pour les regex, et donc les règles de réécriture, ce site vous permet, en donnant votre bout de configuration et l’URL à tester, de vérifier si « ça matche ».

Whitelist .well-known dans un fichier .htaccess de Drupal pour Let’s Encrypt

En effet, par défaut ce couillon veut vous interdire tout ce qui commence par un « . » . Hors c’est justement par un « . » que commence le dossier dans lequel certbot colle le challenge qui vous permettra de générer un certificat X509 de Let’s Encrypt. IL faut donc faire la modification suivante dans le fichier .htaccess :

Merci Djerfy pour le coup de main 😉

grep en PowerShell

Oui j’ai eu à chercher un contenu dans un fichier, et si sous Linux on a le puissant grep, sous PowerShell c’est moins sexy, mais ça marche aussi :

Sauvegarder un contenu de top dans un fichier de log

Pour un petit script de diagnostic, je voulais enregistrer, en plus du processlist de mysql, le contenu de top. Mais c’est pas si facile que ça, notamment si on veut conserver le formatage :

yum : installer depuis une liste texte

Pour le déploiement d’une machine client, on me transmet une liste de paquets sous CentOS à installer pour qu’il puisse procéder à l’installation de son application (un ERP en l’occurrence). Plutôt que de tout taper, on peut coller la liste dans un fichier et la passer à yum :

Vérifier la taille d’une table MySQL

Lors d’un incident récemment j’ai eu le droit, sur un slave MySQL, à l’erreur suivante :

Avant de faire du flush ou de pester contre un manque potentiel d’espace disque ou d’inodes (qui ont de grandes chances de ne pas être en cause), vous pouvez utiliser la requête suivante pour calculer la taille de la table :

En effet Houston, on a un problème. Dans le cas présent, c’était un Drupal qui a rempli sa table de cache, le gigot étant la taille limite autorisée par innoDB sur l’installation en cours (taille du fichier sur disque). Et ça a joliment pété une réplication qui après clean de la table et relance, a mis une bonne heure pour rattraper son retard.

Aider les gens à ne plus taper sl au lieu de ls

il existe un petit paquet à installer chez les débutants pour qu’ils apprennent à taper ls au lieu de sl (ce qui peut arriver si on va trop vite). Le résultat est drôle à voir, je vous laisse tester :

Y’a même quelques options (fouillez la page de manuel).


J’aime mon métier. On est jamais une semaine sans faire quelque chose de nouveau, de bricoler certaines commandes, de gagner du temps dans l’absolu, de devoir contourner une limitation bizarre. Bref, vous l’avez compris, y’a toujours des choses à apprendre, et il serait idiot de ne pas partager tout ça.

Nettoyer les fichiers temporaires de Rsync

Après un rsync foireux (sans utiliser –append-verify), beaucoup de fichiers partiels sont restés sur le serveur de destination. Ce sont de simples fichiers cachés, pour les nettoyer, c’est pas compliqué :

Attention toutefois si des fichiers cachés légitimes se trouvent dans ces dossiers (.htaccess par exemple).

Synchroniser uniquement les permissions d’une arborescence depuis un backup

J’ai eu l’occasion de devoir uniquement réparer les permissions d’une arborescence après un chmod 755 malencontreux sur tous les dossiers d’un client (cassant des dépots Git, des traitements automatisés…). Contrairement à ce qu’on pense, ce n’est pas rsync qui va faire le taf à partir du backup :

Bien évidemment j’ai compris ça après avoir fait mon rsync…

Python/virtualenv : faire en sorte qu’un venv puisse exploiter les modules « globaux »

Un problème que j’ai découvert avec virtualenv, c’est que si on installe un module via le gestionnaire de paquets, donc accessible via tout le système, ce n’est pas le cas pour vos environnements virtuels Python, du moins par défaut. Pour corriger ce petit souci, il faut mettre à jour son environnement avec la commande suivante :

Évidemment l’alternative est d’installer le module au sein du virtualenv 😀

Utilisateur en lecture seule pour mysqlump

Un collègue a pensé que le SELECT était suffisant pour un utilisateur en lecture seule destiné à faire des dumps. Il n’était pas si loin :

diff au travers d’SSH

Quand vous devez comparer le contenu de deux fichiers, diff est un des outils les plus pratiques pour identifier les points à corriger. Il y a par contre quelques subtilités quand les deux fichiers en question ne se trouvent pas sur le même serveur :

Vérifier la date d’un certificat SSL/TLS avec OpenSSL

Soit vous utilisez votre navigateur, mais c’est lent (chargement complet du site, plusieurs clics pour afficher le contenu du certificat), un peu plus rapide avec une extension comme Calomel SSL Validation, sinon, inévitablement OpenSSL revient sur le tapis :

Relancer automatiquement la connexion MySQL pour votre API en Python

Je suis en train de réécrire l’API pour collect que j’avais commencé à l’époque, toujours en Python, mais avec Flask au lieu de Bottle, et en conservant la base MySQL plutôt que MongoDB. Mais une chose à laquelle je ne m’attendais pas, c’était que la connexion pourtant persistante que mon application crée lors du lancement finit par être coupée (par MySQL probablement). Et par défaut, il ne la rétablit pas, pour ça, il suffit d’ajouter une petite ligne au début de votre code :

Drupal : lister les modules installés avec Drush

Le site d’un client m’envoyait les logs Drupal dans /var/log/messages (très, très dégueulasse on est d’accord), en lui demandant de changer ce paramètre l’agence nous dit qu’il n’y a rien à faire côté Drupal. Pas de bol, après un grep dégueu j’ai identifié le module coupable . Mais il y a plus propre avec drush :

Forcer le type d’un fichier particulier avec Nginx

Quand on peut pas installer le module more_headers, et qu’nginx force application/octet-stream, un simple add_header ne suffit pas, il faut jouer un peu plus :

Whitelister le dossier .well-known pour Let’s Encrypt sur Nginx

Nginx toujours. Un client a empêché que ses certificats Let’s Encrypt soient renouvelés en ajoutant des règles de sécurité. Combiné avec une redirection forcée vers HTTPS, c’est une catastrophe. Pour empêcher Nginx de me renvoyer lors du challenge ACME, j’ai dû adapter un peu la configuration :

Je vous laisse vous torturer l’esprit pour comprendre la regex 😛 Le résultat est là : pas de redirection HTTPS lors du challenge ACME, et le renouvellement a pu se faire.


Comme d’habitude, si vous avez vous aussi des bricoles rapidos comme ça à partager, les commentaires complètent très bien 🙂 (ou au pire envoyez par mail, j’inclue dans un prochain billet en vous citant)


Contrairement à ce que beaucoup de monde a pu constater, il n’a pas été question de ralentir au niveau du boulot. J’ai donc de nouveau un petit batch de bricoles à garder dans un coin si besoin 🙂

Bloquer ICMP timestamp

Lors d’un rapport Qualys VM, j’ai découvert qu’il y avait un aspect d’ICMP qu’il était préférable de bloquer, car devenu inutile : l’ICMP timestamp. Sous Linux, avec iptables on a la possibilité de le faire :

J’ai moyennement compris les implications (potentiellement sur de la crypto, mais c’est un peu ancien), je vous laisse chercher.

Erreur au redémarrage de MySQL après une modification de innodb_log_file_size

Si vous faites une telle modification et que ça vous pète à la gueule :

Il faut supprimer les fichiers ib_logfile0 et ib_logfile1 qui se trouvent par défaut dans /var/lib/mysql. Ça ira beaucoup mieux, et il recréera automatiquement les fichiers à la nouvelle taille.

Un assistant pour les feignants qui ne font pas leur règle DMARC à la main

Comme moi quoi, voilà si vous avez besoin de mettre en place une telle règle et que votre client ne sait pas comment faire (et vous pas trop), je suis tombé sur ce petit assistant en ligne, qui vous permettra de faire ça simplement.

Calculatrice en ligne de commande

Besoin de faire un calcul rapide, genre un pourcentage, et pas d’interface graphique ni de smartphone sous la main ? Pas grave, tout est prévu sur nos bons vieux OS :

Pour avoir un aperçu des possibilités de bc, c’est par là (en anglais).

Variable d’environnement sous Nginx

Avec Apache via mod_env, SetEnv permet de définir une variable (souvent utilisé avec certains frameworks comme symfony). Sous Nginx, pour PHP ça se fait via une directive fastcgi_param :

On a ensuite accès à cette variable via la variable $_SERVER['APP_ENV'].

Importer un dump mysql avec clés étrangères (cas d’un prestashop)

Je ne débattrai pas aujourd’hui de la saleté que représente Prestashop, mais c’est lui qui m’a amené à m’approcher des clés étrangères dans MySQL (je connaissais le terme, moins leur usage). Si jamais vous faites un dump qui contient des directives drop table if exists, ça gueulera à l’import. La solution, désactiver temporairement la vérification des clés étrangères :

Rediriger un domaine spécifique vers HTTPS sur haproxy

Haproxy est particulièrement souple à l’usage, j’ai occasionnellement l’opportunité de m’en rendre compte. Dernièrement, sur une IP qui doit porter plusieurs sites, je devais effectuer une redirection HTTPS uniquement pour un domaine en particulier. Voici la configuration et les directives que j’ai utilisé :

Pourquoi le faire au niveau d’Haproxy ? Toujours gérer ce genre de redirection au plus haut de la chaîne de connexion.

Extraire le log git pour un dossier particulier

Un client qui gérait tous ses sites au sein d’un même dépôt git (c’est très con, on est d’accord), cherche malgré tout à conserver un historique des modifications effectuées à une arborescence précise. S’il est impossible de réimporter tout l’historique (ou alors j’ai pas encore trouvé), en manipulant les options de git log on peut arriver à peu près à un gros journal :

Dans mon cas, ça a donné un gros bousin de 500M.

Vérifier la propagation DNS à travers le monde

Sans prendre en considération les problèmes divers de cache qui se posent régulièrement, il est tout de même possible de vérifier si une modification de zone a bien été prise en compte pour une grande partie du monde, grâce à ce service bien pratique.

Récupérer les infos techniques d’une IP au format JSON

Encore un autre service en ligne bien pratique, gratuit dans une certaine mesure (le service n’est pas libre), permet d’identifier rapidement via curl l’origine d’une IP trouvée dans des logs web par exemple :

Vous découvrirez des choses étonnantes parfois (serveurs compromis, clients infectés, robots d’indexation étranges…).


Certaines des astuces que je partage dans cette série sont anciennes, juste je n’avais pas pensé à les poser là avant, ou bien je viens seulement de les découvrir et de commencer à les utiliser. Dans tous les cas, j’adore ce métier vivant où l’on apprend des choses tous les jours 🙂

Désactiver l’ouverture d’un onglet avec une URL par le bouton du milieu dans Firefox

Une opération qui n’existe que sous Linux, et que Mozilla considérait plus logique, le bouton du milieu étant traditionnellement associé à l’opération « coller »; Mozilla allait plus loin en ouvrant un nouvel onglet et en chargeant l’URL présente dans le presse-papier. Si ce comportement va être désactivé pour les nouveaux à partir de Firefox 57 (ce n’est pas le seul changement), il est possible d’ores-et-déjà de s’en occuper manuellement via about:config :

Mais pourquoi je découvre ça aussi tard ?

Fusionner une liste de vidéos avec ffmpeg sans réencoder

Trois morceaux, dans le même format, que j’avais besoin de recoller, si possible sans réencoder. ffmpeg sait heureusement le faire, pour ça il faut créer une liste de fichiers au préalable :

Tada !

Désactiver l’envoi de statistiques de votre base influxdb chez influxdata.com

Le pétrole du 21° siècle, que tout le monde collecte par tous les moyens possibles, souvent sans vous prévenir ni vous demander la permission. J’ai pu découvrir en réinstallant influxdb qu’il envoyait des statistiques à la maison mère sans m’avoir consulté auparavant, à part un commentaire dans le fichier de configuration :

Bien qu’en théorie les informations collectées ne sont pas sensibles en soi, Il est fort heureusement possible de désactiver ce comportement douteux avec une ligne dans le fichier de configuration :

Pensez évidemment à redémarrer le service.

Remplacer les espaces par des underscores dans les noms de fichiers

En lien avec la fusion des vidéos présentée jsute au dessus, j’ai rencontré un problème avec des espaces dans les noms de fichier. Comme c’est de toute façon le mal (ça et les accents), on peut remplacer ces espaces par des underscores :

J’adore ce format de remplacement à la volée.

Historique illimité dans Bash

Je suis en effet souvent frustré de pas me souvenir dans le détail d’une commande mais de pouvoir la retrouver dans l’historique. Seulement par défaut la longueur de l’historique est assez courte, et il y a la possibilité de le rendre illimité/permanent en paramétrant ces deux variable d’environnement de la sorte :

Convertir un jeu de png en jpg en renommant l’extension au passage

J’ai procédé à une série de captures d’écran pour une analyse poussée des données de Piwik (que j’ai pas sorti parce que j’ai un vieux bug à l’écriture de l’article, mais passons). Ces captures sont au format png, et je peux économiser en passant au format jpg. On peut faire ça avec un one-liner :

On retrouve le modèle de substitution à la volée de tout à l’heure pour les espaces 🙂

Apache : transférer l’authentification HTTP à PHP

Une agence m’a tanné parce que l’authentification Basic ne fonctionnait pas sur l’API de leur WordPress utilisée par leur application mobile. Je ne vais pas m’étendre sur la pertinence du Basic en contexte application mobile, mais il faut savoir que si c’est PHP qui génère le 401, Apache va se réserver l’entête. Pour tout de même le passer, à PHP, une seule ligne suffit, pas la peine d’en rajouter :

Évidemment, personne ne le savait, et ils partaient du principe que si leur environnement de dev fonctionnait comme ça, c’était valable pour la terre entière. Et on me demande pourquoi j’ai du mal avec les devs…

LFTP pour faire du transfert SFTP récursif

Objectif : envoyer un dossier de 14Go sur un serveur distant dont la fonction SFTP est remplie par CoreFTP, et OpenSSH ne supporte pas bien. Je suis passé par lftp :

Le mode miroir fonctionne comme un rsync 🙂

Compter le détail des threads d’un processus

Pendant qu’on essayait de comprendre pourquoi une instance Logstash loadait sa race sur VM Azure, un intervenant m’a sorti une commande bien pratique pour vérifier ce qui était lancé par le process :

Oui, plus de 6000 threads pour un des plugins. On comprend mieux le load…

Stocker la liste des fichiers d’un dossier sur une seule ligne

Pour exploiter une liste de fichiers dans une commande lftp mput, j’avais besoin de garder tous les fichiers sur la même ligne. ls -x n’ayant pas aidé sur un grosse liste, j’ai du passer autrement, et j’ai trouvé ceci :

Aussi simple que ça.

A bientôt pour de nouvelles aventures 🙂


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 :

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 :

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 :

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.

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 :

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 :

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 :

À 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 :

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

Ç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 :

Cartographie dans un terminal

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

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 :

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 :

C’est un boulot de malade !

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


J’ai stocké tout ça un peu trop longtemps et il est temps que je partage une nouvelle fournée de bricoles qui vous sauve une journée de boulot, ou un weekend un peu trop accaparé par des soucis ou des maintenances d’infras persos, quand ce n’est pas un dépannage lors d’un PSL 🙂

Coreutils 8.24 et suivants : dd qui cause !

J’ai découvert ça en toute fin d’année, après la finalisation du dernier épisode (et Pierre m’en a reparlé début février quand je suis retourné à la Cité des Sciences). Avec un coreutils récent (Debian Stretch, Ubuntu 16.04, Manjaro/Arch), dd a maintenant un mode verbeux pour dire où il en est, et ça c’est cool :

Pratique quand on sait que les copies sur clé USB peuvent parfois prendre de longues minutes, surtout avec une clé USB poussive.

Rot13 « quick and dirty » en bash

Lors d’un petit délire sur un challenge de sécurité informatique, l’auteur a trouvé le moyen de s’amuser en ajoutant une petite étape à base de rot13. Quand on est pressé, qu’on a pas forcément le temps de chercher un outil tout fait, y’a moyen de le faire en bash (attention, tr est fourni avec coreutils, merci Exagone313) :

Connexion SFTP avec un client OpenSSH récent et proftpd/mod_sftp

Récemment, le prestataire d’un client rencontrait des difficultés pour se connecter en SFTP à la plateforme de ce dernier. Après vérification, et un énième juron quand aux satanés fanatiques des ordinateurs fruités, il s’avère que le souci venait de proftpd qu’on utilise pour proposer justement la connectivité chiffrée. La solution tient à la modification des Digests :

Exporter les utilisateurs d’un vieux MySQL pour l’importer dans MySQL 5.7

Situation : on me demande de migrer d’un MySQL 5.5 vers MySQL 5.7. Oracle ne supporte que les upgrades de point à point, donc il me faudrait passer par MySQL 5.6. Pas ouf, et comme les bases de ce serveur de dev ne sont pas compliquées, je veux passer par des dumps bases et users à importer ensuite. Problème, Sur les dernières révisions de MySQL 5.7, la création d’utilisateur avec la syntaxe GRANT ... TO <user> IDENTIFIED BY ... ne fonctionne plus. Petite routine maison pour contourner ce problème :

Et paf, ça fait des Chocapic.

Tunnel SSH en ligne de commande pour connexion MySQL distante

Pour chiffrer une connexion MySQL (qui est en clair par défaut, il faut le souligner), vous avez deux solutions principalement : mettre en place du TLS au niveau de MySQL, mais c’est pas évident, ou, pour du one shot, un tunnel SSH. Sous linux, rapidement :

Il suffit ensuite de se connecter avec le client mysql en tapant sur son port local :

HTTPS, SNI, et Curl sont dans un bateau…

En procédant à des tests sur la bonne installation d’un certificat X509 sur un vhost dont le domaine ne pointe pas encore sur le serveur en question, plutôt que de bricoler du fichier hosts, j’ai préféré utiliser curl, mais il était récalcitrant avec les paramètres « habituels » :

Pas grand chose à voir avec mon vhost. En fait, c’est parce que de cette manière, Curl n’envoie pas d’entête SNI pour indiquer le nom qui doit être validé par le certificat, et dans un contexte avec plusieurs vhosts, cet entête permet de chercher à sélectionner le bon certificat en fonction de l’hôte. Curl sait le faire :

Il ne lui manque que la fonction café en fait à curl…

Une meilleure détection de l’état de santé d’un backend dans haproxy

Contexte : par défaut, les checks basiques d’haproxy ne servent qu’à détecter s’il y a toujours un port en écoute au niveau des serveurs de la ferme. Si vous avez deux serveurs et que l’un des deux est à moitié pété (ça écoute toujours mais l’application ne répond plus), vous avez une réponse sur deux qui n’est pas bonne. Pour optimiser ça, on peut faire un peu mieux au niveau de la configuration :

Au passage on voit aussi comment modifier les intervalles de vérification pour réellement limiter la visibilité du problème et des dégâts que ça pourrait provoquer.

Curl et Docker : tester un service Swarm en local

J’ai eu le tour sur mon propre cluster ainsi que sur les plateformes de tests fournies lors de ma formation par Treeptik. Une fois mon service déployé, j’essaie de le tester avec curl depuis le nœud où il est déployé, mais ça répond pas. En fait, les deux environnements en question sont paramétrés avec une ipv6, mais le service au sein de docker n’écoute qu’en v4, et ça aussi, curl est capable de s’en accommoder :

Si vous devez tester/forcer en ipv6, utilisez -6, mais dans mon cas ça ne fonctionnait pas.

Terminator en plein écran dès le lancement

C’est un problème récurrent/chiant que j’ai souvent, le gestionnaire de fenêtres n’enregistre pas les positions des fenêtres quand je les ferme, si bien que je dois les repositionner à chaque lancement (il n’ya guère que Thunderbird qui « tient le coup »). Pour ma machine virtuelle Linux du boulot (et maintenant sur ma grosse bertha à la maison), je lance principalement Terminator, et j’aime bien du coup qu’il prenne toute la place. Après quelques errements liés notamment au fait que je ne connais apparemment pas assez l’anglais, j’ai trouvé la solution en modifiant la commande dans le raccourci :

Oui, je m’attendais à devoir utiliser --maximize, et apparemment les deux orthographes sont correctes


Et bien que j’attende généralement une dizaine d’astuces avant de publier, ça fait trop longtemps donc tant pis s’il n’y en a que 9. On essaiera de revenir dans les clous au prochain épisode 🙂


Allez, c’est reparti pour une nouvelle collections de petites bricoles qui facilitent la vie de toux ceux qui bricolent 🙂

Compresser à la volée une image disque

Le problème quand on fait une image d’une partition ou d’un disque, c’est qu’il va tout prendre, les un comme les zéro (pour rappel, tout est binaire à la base). Et si y’a beaucoup de zéro, c’est de l’espace gaspillé; si un disque fait 32Go mais seulement 10 sont utilisés, l’image fera tout de même 32Go. Heureusement on a des outils de compression pour ça, et même certains qu’on peut appeler à la volée à l’aide d’un pipe:

Si le temps d’exécution n’est pas un problème pour vous, vous pouvez également utiliser xz qui sera plus performant mais beaucoup plus lent (on pourrait faire un petit comparatif un jour tiens 🙂 )

Rediriger la sortie d’une commande effectuée avec sudo

Le problème de sudo, c’est qu’il n’applique l’élévation de privilège qu’à la commande en cours et pas à d’éventuelles redirections, ce qui peut s’avérer gênant quand on veut écrire dans un dossier sur lequel on a pas les droits. Dans l’astuce précédente, si on veut avoir le droit d’écrire dans /media/disk (parce que oui parfois ça marche pas bien), on peut englober la commande et sa redirection sur une nouvelle instance de bash :

Attention cependant, cette nouvelle « session » ne charge peut-être pas tout l’environnement, dans ce cas, préférez des chemins absolus pour les commandes tapées si elles sont dans des chemins non standards.

Let’s Encrypt, Apache, et directive <Limit>

Un client filtre ses accès préprod par IP avec une directive <Limit> contenant une série d’allow et de deny dans le fichier .htaccess à la racine du site. Pour permettre aux serveurs de Let’s Encrypt de contacter le dossier .well-known afin de valider le challenge, j’ai utilisé mod_setenvif :

Pourquoi pas ajouter les IP Let’s Encrypt ? Parce qu’elles ne sont pas fixes (dixit la FAQ) :

What IP addresses does Let’s Encrypt use to validate my web server?

 

We don’t publish a list of IP addresses we use to validate, because they may change at any time. In the future we may validate from multiple IP addresses at once.

Améliorer les performances wifi sous Linux

A la cité des Sciences, mais je pense que ça peut me servir ailleurs, j’ai eu quelques difficultés avec ma carte wifi qui semblait mal conserver un lien avec le point d’accès. Mon dépanneur de Chromebook (avec qui on l’a cassé, j’en ai parlé récemment dans son démontage) m’a filé une astuce, en lien avec la gestion de l’énergie. Il faut passer par l’utilitaire iw (à installer donc) :

Bon par contre, si vous êtes charrette en batterie ça sera peut-être pas recommandé 🙂

Ajouter un fichier swap pour grossir l’espace existant

En attendant de pouvoir empêcher une application de faire de la merde, et d’améliorer un peu la gestion de la mémoire du noyau, un collègue a ajouté un fichier de swap d’un 1Go en plus de la partition existante. Voici la procédure suivie, en mode administrateur :

Vous devriez voir le résultat en direct sur la taille du swap globale. Et si on veut que ça soit persistant, on peut ajouter la ligne suivante au fichier /etc/fstab :

Evidemment, ne pas utiliser le swap c’est mieux, mais quand vous avez pas le contrôle de l’application, hein…

Tester un cipher suite en particulier avec openssl

Un client nous demande de modifier le paramètre Diffie-Hellman qui plombe ses notes sur les différents tests SSL/TLS. Je fais la modification mais par défaut en testant openssl va prendre un cipher à base de courbes elliptiques, plus récent et mieux noté, donc je vois pas le résultat :

Fort heureusement, openssl est plein de ressources et on peut choisir la « qualité » de connexion 🙂

Docker, exporter une image

Dans le cadre d’un cluster DC/OS, un problème avec la registry du client empêchait un container de se redéployer sur un autre nœud qui ne disposait pas de l’image. Fort heureusement, on a un petit contournement pour ça, si on a accès à un nœud ou l’image est déjà là :

Supprimer le début d’un fichier à partir d’une ligne

J’ai eu à extraire d’un fichier de serveur mail la pièce jointe au format PDF. Dans ce format, la pièce jointe en question est encodée en base64 à la fin du mail. La solution, chercher une ligne de référence à partir de laquelle je conserve tout, et supprime le début. Et on fait ça avec sed :

Un petit vim pour nettoyer quelques lignes superflues, et on peut décoder :

Forcer la coloration syntaxique dans vim

Lors de modifications lourdes apportées à un fichier de configuration Apache pour un client (multiples virtualhosts avec le même tronc de directives), j’ai déporté les règles communes dans un fichier à part et je l’inclus dans les différents vhosts. Pour m’assurer que la bonne coloration syntaxique est appliquée quand je charge ce fichier amputé des directives de bases qui permettent la détection automatique, j’ai ajouté une petite ligne au début du fichier :

Attention aux espaces 🙂 Pour savoir tout ce qu’il est possible de faire, vous pouvez vous manger la doc.

Tiret au début d’un nom de fichier

Il y a des gens comme ça sur terre qu’il faudrait brûler, parmi eux ceux qui me collent un tiret au début du nom d’un fichier. Pourquoi ? Ben le tiret en question est couramment utilisé pour désigner des options de commandes, et ça débouche sur ce genre de message d’erreur à la con sur une palanquée de commandes :

Guillemets simples, doubles, rien n’y fait. Pour contourner, il faut que j’utilise une autre astuce, le chemin :

Deux caractères, une frustration évacuée 🙂


C’est tout pour aujourd’hui, mais je me rend compte d’une chose : j’ai du relire tous les billets précédents pour vérifier que je n’avais pas déjà partagé certaines des astuces présentées ici, et il y a un précédent de doublon. Avec le nombre d’articles qui augmente dans la série, je vais devoir m’organiser pour éviter de perdre du temps et peut-être le votre à l’avenir 🙂


On en apprend tous les jours sur nos systèmes préférés, d’autant plus quand on manipule souvent des installations différentes (c’est pratique le boulot pour ça). Et il est temps de vous livrer une nouvelle tournée 🙂

Xtrabackup et erreur « Too many open files »

« Petite » sauvegarde à faire d’une instance Mysql de 350Go. J’utilise xtrabackup de Percona, outil magnifique mais qui s’est heurté à l’erreur suivante quand lancé avec un utilisateur particulier :

J’ai du ajouter un petit fichier dans le dossier /etc/security/limits.d/ avec le contenu suivant :

Vous pouvez adapter à vos besoins, pour ma part ça a suffi.

Extlinux, VPS SSD OVH et mauvais noyau au boot

Je suis utilisateur d’un VPS SSD OVH installé initialement en Debian 8 pour le site web de mon équipe « gaming ». Lors du passage de Jessie à Stretch, monsieur continue d’utiliser le noyau 3.16 de Debian Jessie, ce qui n’est pas des plus propres. En fait, l’installation repose sur extlinux au lieu de GRUB (j’ai pas de troll à sortir là-dessus, désolé), et je modifiais le fichier /boot/extlinux/extlinux.conf sans succès. En fait, le fichier à modifier est /extlinux.conf :

L’astuce « propre » a été finalement trouvée sur le forum OVH, avec création de liens symboliques pour à priori pouvoir supporter les mises à jour proprement sans impacter la suite des mises à jour.

Afficher les processus qui consomment du Swap

Un serveur tabasse régulièrement son swap sans qu’on aie pour l’instant la cause profonde sachant qu’il a largement de quoi rester en RAM pour bosser. Pour afficher quels processus consomment du swap, on peut utiliser le petit one-liner suivant :

UPDATE: Aeris m’a proposé sur Twitter une version que les nerds qualifieraient de plus élégante, puisque awk fait tout le taf sans la boucle for :

Comparer deux arborescences pour détecter des fichiers modifiés

Une routine crade, lente, mais utile pour tenter de détecter des traces d’attaques sur des fichiers :

Plus que jamais, pitié, mettez à jour non seulement le CMS lui-même, mais aussi les plugins.

Virtualbox, USB3, erreur bizarre lors du l’ajout d’un disque

Sur le PC du boulot, Full USB3, je dois brancher un disque dur externe à la VM Virtualbox, je me prend un joli fail :

En fait, il faut faire attention au type de contrôleur dans la configuration de la VM (nécessite le pack d’extensions à la licence limite) :

Faut mettre full USB3 pour tout le monde, et ça marche beaucoup mieux curieusement 🙂

« Le nom de fichier est trop long ou invalide » sous Windows

Ceci est la source de l’astuce précédente. Un dossier de série à transférer (bouh pirate toussa), certains titres contiennent des « ? », pas surprenant le disque a toujours été manipulé sous Linux. Sous Windows pas de solutions, je suis passé sous Linux, en ligne de commande pour filtrer uniquement ces épisodes-là :

Tada ! C’est chiant Windows. Ceci dit, Thunar m’a sorti la même erreur une fois arrivé sur mon laptop (probablement le NAS ce coup-ci, à tout le moins le CIFS). J’ai pas cherché à comprendre, j’ai renommé les fichiers avant de les transférer #PayeTaFlemme

Fusion d’images avec ImageMagick

Pour le journal de bord de mes vacances, j’ai pris deux photos d’une carte de visite d’un restaurant que je recommande volontiers si vous vous baladez un jour à Roses. Deux problèmes, les photos sont à la verticale et j’aimerais les fusionner. J’aurais pu perdre du temps dans le GIMP nouvelle génération mais j’ai voulu plutôt bricoler en ligne de commande :

C’était beaucoup plus rapide que de faire ça avec le touchpad 🙂

Lancer vlc avec l’utilisateur root

Par défaut pas le droit, mais c’est possible avec un hack dégueu :

Évidemment je recommande pas la modification de binaires à la volée, surtout que ça sautera à la prochaine mise à jour…

Désactiver les rétroliens sur vos articles WordPress

Grosse méthode de bourrin, pratique si vous n’en avez rien à foutre des rétroliens (surtout qu’il y a un historique de sécurité pas folichon), et que vous avez beaucoup d’articles. Ça se passe dans Mysql :

Si vous utilisez des plugins de cache quelconques, vous devrez peut-être avoir à les flusher, je vous recommande d’utiliser l’excellent wp-cli pour ça, ça fait le café pour vous (vous pouvez même vous en servir pour lancer les requêtes sur votre base de données).

Nettoyer/convertir le contenu d’une cellule dans Excel/LibreOffice Calc

Dans le cadre de tests de performances d’une nouvelle plateforme, j’ai rejoué le trafic avec goreplay et compare les temps de réponses retournés par Apache. Pour ce faire, j’importe les logs dans Excel, ce qui permet de prendre la ligne suivante :

Et de me faire une colonne par élément (éléments séparés par un espace, Excel s’en accomode très bien). Pour pouvoir faire un graphique sur le temps de réponse d’éléments récurrents, il faut convertir le « T=xxxx » qui est une chaîne de caractères, en entier numérique. La formule pour ça est simple :

Et vous avez bien lu, la formule est la même dans LibreOffice 🙂 (adaptez en fonction de la langue, en anglais « ent » doit être « int » et « substitue », « subtitute »)

Tester un port distant sans telnet/netcat/nmap

Ça peut arriver, sur une machine fraîchement installée dont le réseau pose problème, si on a pas prévu les paquets dans le template, il ne sont pas forcément fournis d’emblée. Fort heureusement on est sous Linux, et il est possible de passer par /dev/tcp pour faire certaines manipulations :

vous pouvez éventuellement coller ça dans un alias 🙂


Voilà, c’est tout pour aujourd’hui, amusez-vous bien avec tout ça, à bientôt 😉

 


Au delà de mon absence prolongée d’Octobre, cela faisait longtemps que je n’avais pas partagé de nouvelles bidouilles. Et c’est une fournée presque entièrement centrée sur le shell qui vous est présentée aujourd’hui. Avec un peu de Cinnamon dedans également, pas surprenant quand on découvre un nouvel environnement de bureau 🙂

Rsync sélectif

J’ai toujours eu du mal à sélectionner comme je le veux un type de fichier en particulier à synchroniser avec rsync, en particulier dans une grosse arborescence (plus de 300Go). J’ai finalement trouvé un moyen de filtrer les fichiers via find pour les passer à rsync :

Une fonction dmesg pour les anciennes distribs

Si je dis pas de conneries j’ai déjà partagé un script perl qui fait le taf (vérification faite c’est le cas). Un collègue de boulot m’a montré une fonction bash pour lancer du perl directement sans script à part :

On peut ensuite coller un alias sur le dmesg original pour être peinard :

Stocker ses creds dans gitconfig quand pas de SSH

Au taf on a basculé le Gitlab sur le SSO, et l’on ne peut pas utiliser SSH (Gitlab sur cluster OpenShift), donc auth_basic « classique » HS, on a maintenant besoin d’utiliser les access token. Une fois le token créé via l’interface de Gitlab, il faut le sauvegarder dans la config de git :

La deuxième commande vous permettra de taper ligne par ligne le contenu du fichier, il faudra valider deux lignes vides pour sauvegarder le fichier :

Grep forcer l’affichage du nom du fichier

Le contexte est un peu particulier, on me demande de chercher une adresse IP dans une arborescence de code monstrueuse par la taille, j’ai voulu limiter aux fichiers « *.php » via find mais j’avais pas les noms :

Pas pratique, car grep pense dans ce cadre qu’il est tout seul. Il suffit de tricher un peu au niveau de grep :

En rajoutant /dev/null, on fait croire à grep qu’on travaille sur plusieurs fichiers, donc il va afficher le nom du « vrai » fichier à chaque trouvaille.

Cinnamon et souris Bluetooth qui déconnecte tout le temps

Comme j’ai une prise USB en moins sur le nouveau laptop et que la souris que j’avais arrivait en fin de vie, j’ai investi dans une souris Bluetooth. Problème, le gestionnaire Bluetooth de Cinnamon n’est pas efficace, la souris ne se reconnecte pas en sortie de veille ou reboot (et même quand la souris se met en veille). J’ai du installer blueman (que j’utilisais sous XFCE), on supprime tout ce qui existe de la souris, on réassocie, la connexion Bluetooth est restaurée au resume (contournement trouvé sur le forum Manjaro).

Créer des dossiers temporaires au démarrage du système

J’ai rencontré un problème sur CentOS 7 avec un service qui tente de poser une socket dans un dossier qui n’existe plus après le reboot de la machine (le /run en tmpfs, mais le socket pas à la racine du dossier). Il existe un mécanisme qui permet via le dossier tmpfiles.d permet de s’en sortir en créant un fichier qui contient une ligne à ce format :

Au démarrage de la machine, le dossier sera recréé et le service pourra démarrer correctement.

SSH, bastion, éviter le ProxyCommand

Si vous me suivez depuis un moment vous devez savoir configurer finement SSH : dans le ssh_config de l’utilisateur, j’ai un alias *.domain.tld qui définit un ProxyCommand, soit une commande pour rebondir sur une autre machine. Mais je devais accéder à une machine sur ce domaine sans passer par le bastion. La solution était simple finalement :

Récupérer de l’espace disque gratuitement

Après un P2V, j’ai été prévenu que les partitions de la VM de destination n’étaient pas aussi généreuses que celles du physique d’origine. La raison, les blocs réservés dans ext4, sur une partition non système on peut réduire le pourcentage par défaut (voire même complètement désactiver si vous savez ce que vous faites pour éviter les cas de saturation de disque)

InfluxDB via curl

Lors d’une mise à jour de Gogs, j’ai découvert qu’ils exposaient des metrics via Prometheus. J’ai donc installé telegraf/influxdb sur mon cluster Swarm pour collecter et stocker les données. Pour vérifier que celles-ci sont bien lisibles, on peut interroger influxdb via curl :

J’utilise jq pour que ça soit un peu plus lisible comme sortie json, je vous conseille de l’essayer c’est sympa 🙂

Debian 9.5 et bug d’auto-completion

Ce n’est pas moi qui ai été touché par le bug, mais Pierre-Marie, lors du déploiement de VM via un template fourni par le client. Quand il tente d’exploiter l’auto-complétion, le shell reste coincé pendant pas mal de secondes. Apparemment le bug a aussi été vu sous Ubuntu et il existe une méthode de correction qui est décrite sur ce bug.

systemd-timesyncd pour pallier au problème de Cinnamon

Sur mon installation, la synchronisation réseau du temps se désactive tout le temps, et le fait qu’elle ne fonctionne pas quand je l’active ne doit pas être étranger à ce phénomène. En cherchant une solution j’ai découvert un petit outil qui peut rendre bien des services, qui n’est juste qu’un client NTP contrairement aux autres ténors qu’on présente généralement : timesyncd

Vous modifiez le fichier /etc/systemd/timesyncd.conf pour y renseigner vos serveurs NTP, vous activez et démarrez le service, l’affaire est jouée :


Par contre, contrairement aux liens en vrac, je n’ai plus de stock du tout, donc le prochain épisode sortira « quand il sera prêt » #DebianStyle


2019 ne fait pas exception aux années précédentes, tant qu’on se servira d’ordinateurs il y aura une foultitudes de petites astuces du quotidien qu’il sera toujours intéressant de découvrir et de partager, alors c’est parti !

De l’importance des options de dd

J’ai offert du SSD dans la famille à Noël cette année. Et j’ai fat le choix de cloner les disques d’origine pour pas me retaper des installations de Windows à la pelle. Pendant mes tests avec deux SSD, je suis surpris de la lenteur du transfert :

En fouillant un peu sur le net, dd propose des options dont une en particulier m’a permis de bien bourrer le débit :

Voilà, pour mes besoins ça a suffi, le vrai transfert lui devait durer plus d’une heure avec ces paramètres (correction, il a pris quasiment trois heures pour mon beau-frère, heureusement qu’on était au cinéma), et je suis certain qu’il y a des brutasses pour m’expliquer les formules de calcul pour maximiser encore plus les résultats.

VLC/Qt5 : souci d’échelle pour l’interface

La densité d’affichage a augmenté sur mon nouveau laptop par rapport à l’ancien (14″ Full HD au lieu de 15″ HD ready), ce qui amène des surprises. Des images valant mieux qu’un long discours :

On le voit, les contrôles sont énormes et je vous parle pas des menus. Et la mise à l’échelle d’une appli Qt dans un environnement GTK c’est pas encore ça. Fort heureusement on peut jouer sur ce comportement via une variable d’environnement, ici il faut la poser dans ~/.profile :

Vous pouvez recharger ensuite votre session, les applis Qt devraient maintenant avoir une meilleure tête. La preuve :

Lister les IPs bannies par fail2ban

fail2ban fait partie des outils que je vous recommande pour apporter une sécurité supplémentaire à votre serveur, en détectant des comportements à partir des journaux système. Pour avoir juste un petit résumé des IPs qu’il a banni, je suis tombé sur cette routine bien affreuse à lire mais tout à fait efficace :

Dans mon cas, j’ai découvert un abus de l’utilisation du data saver de Google, qui s’est donc retrouvé bloqué à l’entrée du serveur de mon client.

Exploiter X-Forwarded-For dans IIS

Oui c’est plutôt rare pour être signalé, mais lors de recherches liées à cet entête HTTP très utilisé dans des contextes de load-balancing et de proxyfication, je suis tombé sur cet article qui vous explique comment enregistrer et exploiter cet entête dans IIS, le serveur web phare des plateformes Microsoft Windows. Car on y met généralement l’adresse IP du visiteur.

Pour rappel même si c’est juridiquement un peu flou pour l’instant on est encore obligé de conserver des journaux web d’identification des visiteurs à des fins légales (par exemple en cas d’injure publique, menace de mort, harcèlement…). L’adresse IP du visiteur doit donc être enregistrée correctement.

Comprendre ce qui a merdé dans une requête MySQL

Lors de la mise en place d’une base mysql pour la gestion des utilisateurs de proftpd, on a coincé sur une requête qui vérifie si l’utilisateur est activé et pas expiré :

Y’a un warning, mais on a pas le détail du warning en question. Ben en fait pour récupérer ce warning c’est tout simple :

Oui ça parait évident à certains mais je suis pas un expert MySQL/MariaDB non plus même si je me débrouille hein 😀

Réparer pip après l’installation d’azure-cli

Je suis en train d’apprendre à déployer des applis sur un cluster AKS (Azure Kubernetes Services). A l’installation de l’azure-cli via pip, toutes la connectivité HTTPS a été pétée :

Pour réparer, c’est un peu dégueu mais ça fonctionne :

Honnêtement vu la quantité de paquets que déclenche l’installation d’azure-cli via pip, j’ai été découragé de chercher la vraie source. Évidemment adaptez le chemin d’installation du dossier OpenSSL à votre version de Python et/ou votre OS 🙂

Délester le trafic des bots, version Nginx

Denis a du prendre récemment des mesures sur son blog pour délester son hébergement de robots un peu méchants qui saturaient les ressources de sa machine. Mais il n’a fourni la directive que pour Apache. Si vous êtes sous Nginx, vous pouvez utiliser cette règle :

Je crois qu’on peut se passer du location, mais si vous avez déjà un location / vous pouvez juste ajouter le « if » dedans 😉

Docker : réutiliser les volumes d’un container existant

La formulation peut être étrange, mais vous allez comprendre. J’ai enfin monté une copie de mon blog sur mon cluster Docker Swarm pour pouvoir faire mes essais de modifications et préparer le futur. Lors d’une migration de WordPress, un outil devenu vite incontournable est wp-cli, qui permet notamment du traitement de masse sur la base de données via la configuration du blog. Sur un hébergement classique on se met à la racine du WordPress et on lance la commande. Mais dans la configuration Docker, on a pas accès à la racine puisqu’elle est dans le container, la seule persistance qui reste est le wp-content.

Docker permet cependant d’exécuter un autre container à partir des données d’un container existant, et c’est parfait pour le cas de wp-cli pour simuler justement le lancement depuis le wordpress installé dans le container voisin. La syntaxe n’est pas évidente, mais elle sauve une vie :

A exécuter sur le nœud qui exécute le container WordPress (si vous avez plusieurs containers, n’importe lequel conviendra). Et dans mon cas, je sais déjà que mon thème va me poser des problèmes pour le futur via des alertes PHP…

grep : concaténer plusieurs filtres d’exclusion ou d’inclusion de recherche

Récemment, j’ai tenté d’obtenir du sens et comparer un certain trafic de journaux web à une semaine d’intervalle. J’ai commencé à empiler les grep -v « blabla » |grep -v « blublu », facile pour itérer sur les exclusions, mais il y a plus lisible (et potentiellement plus rapide et moins consommateur) :

egrep (qui permet de déclencher le mode expression régulière), et des pipes qui séparent les modèles à exclure. Évidemment vous pouvez procéder de même pour inclure des modèles à rechercher.

Twidere : récupérer les fonctionnalités de messages privés

L’application Twidere sur Android est sympathique, mais le développement a cessé depuis un peu plus d’un an. Entre temps, Twitter a fait le gros dégueulasse avec son API et j’ai découvert que les messages privés n’étaient plus mis à jour dans l’application. En fouillant les issues Github, j’ai trouvé une solution qui a fonctionné pour moi, à savoir modifier les clés d’API dans les paramètres (settings), réseau (icône en forme de terre), Avancé, Paramètres API par défaut :

Il faut ensuite supprimer le compte et se relogger dessus, et ça rétablit le service (les messages privés de groupe sont même dispos !). Si ça ne fonctionne pas pour vous, le problème vient peut-être de la clé, auquel cas d’autres sont disponibles sur cette page github.


Voilà, je suis content de cette fournée, elle ne concerne pas que de la ligne de commande, on couvre de l’application de bureau, de l’application Android, et même du Windows, comme quoi tout est possible 🙂


J’adore mon boulot, on a constamment les mains dans de nouvelles choses, on (re)découvre certains outils dont on pensait avoir une bonne maîtrise, et ça fait de nouvelles astuces à partager, en plus ça fait longtemps 🙂

Le piège du $_ENV vide dans PHP

Lors d’une migration d’un site sous Magento d’une VM Debian très mal configurée à un cluster AKS (Azure Kubernetes Service, je déconseille, allez sur un autre cloud provider), j’ai rencontré une difficulté liée à la récupération des variables d’environnement, la superglobale $_ENV de PHP était vide alors que phpinfo() me donnait bien ces variables.

Il s’avère que c’est lié à une configuration de la directive « variables-order » :

Voilà, par défaut il ne remplit que $_GET, $_POST, $_COOKIE, et $_SERVER (vous les avez les lettres ?). Dans un contexte plus classique on mettrait ces variables dans Apache et on les récupérerait via $_SERVER, mais ça ne s’appliquait pas ici.

Un repo git en souffrance : cannot lock ref ‘refs/remotes/origin/master’

J’ai eu cette erreur bizarre en bossant sur mon api de collection de films, en cherchant un peu, j’ai le coupable :

Normalement il devrait y avoir un hash md5 correspondant au dernier commit enregistré du dépôt distant, je ne sais absolument pas comment ça s’est produit mais c’est dégueulasse. Ceci dit ce n’est pas complètement bloquant, j’ai pu pousser mes modifications malgré tout, mais ça l’a perturbé quand même. Pour réparer il faut plusieurs commandes (et une sauvegarde en cas de besoin) :

Si ça vous arrive sur une autre branche que master, vous devrez évidemment adapter le nom. Vous pouvez tenter un git pull pour vérifier qu’il n’y a plus d’erreur.

Sublime Text : afficher les espaces et les tabulations

Quand vous n’avez pas à disposition un linter potable, au hasard pour Python, vous tombez facilement sur des erreurs d’indentation mixte espaces/tabulation, ce qui est interdit en Python 3. Dans Sublime Text, pour mieux mettre ça en lumière, vous pouvez afficher les « espaces blancs », qui auront alors une forme différente en fonction du contexte :

Et comme une image vaut mieux qu’un long discours…

Les espaces sont représentés par des points, les tabulations par des traits horizontaux

Find : chercher les fichiers et/ou dossiers vides

Alors j’avoue j’ai plus le contexte de ce qui m’a poussé à faire cette découverte, mais voilà, si vous voulez faire le ménage des dossiers vides, ou déjà les identifier, c’est comme ça :

Par contre, je me souviens avoir lu en fonction des sources qu’il pouvait y avoir des différences entre la version BSD et la version GNU de find (ah, ces libristes…).

wp-cli et « this does not seem to be a wordpress installation » : attention au yaml !

J’ai déjà évoqué wp-cli sur l’article qui me permet d’agréger les astuces diverses sur une page de récap. Cet outil puissant devrait vraiment faire partie des indispensables de tout administrateur WordPress. Mais parfois, il réserve quelques surprises, comme ici sur un WordPress fraîchement livré par une agence de développement, en voulant remplacer le domaine par celui de l’environnement concerné :

Et ça, même en passant le bon chemin (par défaut on l’exécute à la racine du WordPress). Il s’avère que les petits malins de l’agence ont glissé un petit fichier wp-cli.yml, interprété par l’outil, qui contenait la directive suivante :

Évidemment, ça va fonctionner beaucoup moins bien. Une fois retiré ce fichier, wp-cli a fait son boulot comme un charme.

Sublime Text, crawl, cpu au secours !

J’ai eu un problème au boulot avec Sublime Text avec une arborescence conséquente, plusieurs Gigaoctets et des centaines (milliers ?) de fichiers, à chaque ouverture Sublime Text me tabasse le CPU pendant plusieurs minutes, parfois la dizaine facile. Et lors de la création du contexte de build pour Docker, la mémoire vive explose à son tour. Mais certains dossiers ne sont même pas inclus dans le dépôt, ni dans l’image Docker de destination, donc pas la peine de perdre son temps à les parcourir.

Et bien il y a une option dans Sublime Text pour ça, il suffit d’ajouter à son fichier de configuration :

Dans mon cas, c’est le sites/static_* qui m’a permis de gagner 2Go de contexte de build, et 8 minutes de consommation CPU au lancement, dû au crawl. Vous pouvez ajouter les vôtres, vous me remercierez ensuite 🙂

AWS EC2 et resolv.conf écrasé : retrouvez le bon DNS

Lorsque comme LBN vous gérez certaines configurations globales via un outil comme chef, il arrive parfois que l’on fasse des conneries, et qu’on paramètre certaines choses de travers sur des plateformes spécifiques. Dans mon cas les résolveurs DNS renseignés sur une instance EC2, qui à l’origine sont fournis par AWS via DHCP, ont sauté et été remplacés par des résolveurs qui ont plusieurs problèmes, le principal étant de ne pas être publics et donc de refuser la résolution récursive :

Pour récupérer celui d’AWS, qui peut varier en fonction de la région, la zone de disponibilité, des subnets, on peut soit forcer un dhclient, soit regarder les anciennes réponses, car dhclient enregistre les baux dans un fichier, /var/lib/dhclient/dhclient-eth0.leases :

Mieux que de reboot le serveur hein ?

Désactiver/interdire HTTP 1.0 sur Apache/Nginx

De nos jours, et à moins d’un besoin très, très spécifique, il n’est plus nécessaire de conserver ce protocole qui remonte à trop longtemps pour être honnête. Et en effet, dernièrement, à part via des outils peu scrupuleux qui tabassaient des plateformes ou tentaient de l’exploitation de faille, je n’ai pas vu d’utilisation légitime d’HTTP 1.0. Pour le bloquer au niveau de nos serveurs web préférés, il faut ajouter les directives suivantes :

Évidemment, si vous avez une utilisation légitime d’HTTP 1.0 (et encore, ça me surprend quand même j’ai découvert que file_get_contents() en PHP fonctionnait comme ça…), il faudra procéder autrement (peut-être ajouter un filtrage IP supplémentaire).

Du lien symbolique « automatique » à partir d’un dossier

Quand on installe des certificats X509 pour des clients, on a l’habitude de créer des dossiers par année d’installation, et de créer des liens symboliques vers les fichiers dans le dossier en cours, liens qui servent ensuite dans la configuration du serveur web. Quand les fichiers du dossier de l’année ont déjà le bon nom, pour faire les liens symboliques, on peut le faire en une seule commande :

Pour chaque fichier du dossier 2019, ça va créer le lien dans le dossier courant, lien qui porte le même nom que le fichier source. Très pratique 🙂

Améliorer les performances des volumes Docker

J’ai du pas mal manipuler de Docker ces dernières semaines, et aussi bien dans ma machine virtuelle que sur les plateformes client, les performances du stockages sont un point d’attention à ne pas laisser de côté. Docker permet quelques manipulations sur ce point, sur la machine virtuelle, je ne peux que vous recommander, si vous ne faites que des tests, d’abuser du cache. Une des méthodes les plus simples, dans le fichier docker-compose, déclarer votre volume de cette manière :

Pour les détails et les impacts sur les performances (et l’intégrité des données), je vous laisse avec cet article en français, une fois n’est pas coutume, qui s’est penché sur le sujet.


Trois mois mine de rien, il était temps de remettre ça. J’ai plus rien en stock par contre dans l’immédiat, et je ne sais pas encore quand je vais pouvoir remettre ça.