PROJET AUTOBLOG


Blog-Libre

Site original : Blog-Libre

⇐ retour index

Tendresse et autorité

jeudi 30 mai 2019 à 17:15

Jalousie

jeudi 30 mai 2019 à 16:15

Je me surprends parfois à être jaloux. Pas jaloux de la femme, des biens, du salaire, de la vie des autres, je ne suis jaloux que de la réussite intellectuelle et/ou professionnelle de certains.

Puis je me souviens de ma vie, de mes qualités et de mes défauts, de mes envies. Je me rends compte que je ne voudrais pas être la personne que je jalousais il y a 2 mn. Je suis bien dans mes pompes. Ça me fait penser à ces pubs où on se dit « ah ouais ce serait bien ce truc » puis 2 mn plus tard « mais en fait ça me sert à rien, j’en ai pas l’utilité ». Comme si pendant un bref instant notre esprit oubliait qui l’on est, qu’il est nécessaire de sortir son cerveau du mode veille.

Attention à ne pas confondre jalousie et envie. J’ai envie de vacances, de voyages, de temps libre mais je ne jalouse pas ceux qui en ont. À la place j’ai un fils ha ha ha.

La jalousie est absente de ma vie depuis un moment, j’avais oublié ce sentiment. Je l’ai ressenti en lisant De geek à directeur technique, pendant quelques secondes j’ai eu un pincement au cœur. Je me suis ensuite souvenu que j’avais horreur des réunions de X heures plusieurs fois par semaine, je déteste être en costard-cravate, j’apprécie le mentorat moins le management, j’aime la technique pas la gestion et au final j’aime ce que je fais. Dans notre société la réussite professionnelle est souvent vue comme l’exercice d’un job à responsabilité avec un gros salaire. Pour moi c’est faire ce que j’aime, gagner correctement ma vie et vivre dignement.

Pour vaincre la jalousie, la raison doit s’en mêler. On doit se convaincre, parfois seulement se rappeler qu’on ne peut pas tout avoir, être plusieurs personnes.

S’isoler du bruit

dimanche 26 mai 2019 à 09:15

Travailler en écoutant de la musique est devenu courant. On s’isole de l’environnement sonore dans lequel on est pour augmenter notre concentration (et notre confort) au travail.

Je ne connais pas de musique qui pourrait me convenir. Si elle ne me faisait rien ressentir, je ne l’écouterai pas. Je ne suis pas concentré, tout au contraire je suis DANS la musique. Spéciale dédicace à mon collègue qui me faisait sursauter quand il se mettait à faire de l’air drums.

Je me suis tourné vers les sons d’ambiance (récupérés avec youtube-dl) : Pluie et orage au jardin, Orage en mer, Pluie et tonnerre dans la forêt brumeuse. On trouve également des sites comme Noisli (j’épingle l’onglet) et des logiciels comme ANoise. Je règle finement le son (amixer get Master, amixer set Master 70%), je ne dois plus entendre et être dérangé par l’extérieur ni être déconcentré par le bruit du tonnerre ha ha.

C’est apaisant, ça permet d’être dans ses pensées, indispensable pour moi à la maison quand j’ai besoin de calme ou envie d’écrire.

L’option ControlMaster de ssh_config

samedi 11 mai 2019 à 15:45

D’habitude j’essaie d’être synthétique, ce ne sera pas le cas cette fois, l’article sera long. Je voudrais vous montrer comment je procède lorsque je creuse un sujet et les voies tortueuses pour apprendre, comprendre.

L’option ControlMaster

D’après le man ssh_config, elle permet d’activer le partage de multiples sessions à travers une seule connexion réseau. On ne le dit pas assez mais le man c’est brut de décoffrage, celui qui comprend à quoi cette option peut servir à partir de l’explication est un génie. Je vais faire la traduction en vous parlant de son usage et de son intérêt.

Lorsqu’on se connecte à un serveur en SSH, on passe par une phase d’authentification avant d’être connecté. C’est en général très rapide, j’ai fait quelques tests sur des serveurs au boulot, je tourne à 0.3s. Cela va dépendre de nombreux facteurs : la vitesse de votre connexion (fibre, ADSL…), votre méthode d’authentification (clés SSH, clés SSH et mot de passe…), l’emplacement géographique de votre serveur, etc. L’option ControlMaster va permettre de réutiliser la connexion que vous venez d’établir, la première connexion aura toujours cette durée autour de 0.3s (aucun changement) mais la seconde connexion au même serveur se fera beaucoup plus rapidement, je tourne à 0.03s.

Je n’ai pas vu un grand intérêt à cette option au départ puisqu’on parle de gagner du temps (connexion plus rapide) à partir de la seconde connexion à un même serveur, pourquoi se connecter plusieurs fois au même serveur ? En réalité, il y a de nombreuses occasions où vous allez vous connecter plusieurs fois au même serveur et un intérêt certain :
1/ On se connecte à un serveur à 9h00, on se déconnecte puis on y retourne 2h plus tard pour voir quelque chose. En temps normal vous aurez 2 phases d’authentification, à chaque fois 0.3s pour établir la connexion. Avec l’option ControlMaster activée, la première connexion sera de 0.3s, les autres dans la journée de 0.03s. À noter que certains lanceront un screen et resteront connectés toute la journée sur le serveur, ils se contenteront de rappeler leur session screen connectée au serveur (1 seule connexion)
2/ Lorsqu’on parle de connexion, pensez à vos scripts et tâches récurrentes : rsync, git, script qui va se connecter plusieurs fois à un serveur en lançant des commandes
3/ Dans mon job j’ouvre souvent plusieurs connexions sur le même serveur : Typiquement un terminal pour suivre les logs (less +F ou tail -f), le second pour éditer un fichier de conf, le dernier pour restart un service et lancer des tests (3 connexions). À noter que certains lanceront un screen et diviseront simplement le terminal en 3 (1 seule connexion) mais tout le monde ne sait/veut pas se servir de screen
4/ On peut toujours sourire devant des temps aussi courts mais à l’usage on voit et on sent la différence. Une fois goûté, difficile de s’en passer

Comprendre (et creuser)

Dans une majorité d’articles, vous aurez sensiblement cette configuration proposée à ajouter à votre ~/.ssh/config.

Host *
    ControlMaster auto
    ControlPath /tmp/socket-%r@%h:%p
    ControlPersist 3600

Host * signifie que les options suivantes s’appliqueront à tous les serveurs. On retrouve ControlMaster auto à l’identique dans tous les articles, je vous laisse chercher à quoi correspond auto et pourquoi c’est ce qu’il faut utiliser hé hé.

J’ai ajouté la partie suivante à mon ~/.ssh/config puis j’ai commencé à bosser avec. Pour bien comprendre quel est le rôle de chaque option, il est nécessaire de commencer par une config minimale.

Host *
    ControlMaster auto

Un jour je me connecte à un serveur puis je lance une seconde connexion dessus, je termine ma tâche et ferme ma première connexion, la seconde session (seconde connexion) est alors immédiatement fermée. Désagréable et potentiellement très problématique mais cela s’explique facilement. Souvenez-vous, on partage de multiples sessions à travers une seule connexion réseau. Là on a fermé la première session/connexion (par laquelle passe la seconde session), par conséquent les deux connexions sont coupées. On a besoin de l’option ControlPersist.

L’option ControlPersist

L’option ControlPersist va avoir deux utilités différentes en fonction du chiffre renseigné. Ce chiffre (3600 par exemple) spécifie le temps que la connexion maître doit rester ouverte en arrière-plan dans l’attente d’une future connexion. 3600 correspond à 3600s, on peut également écrire 1h (pour 1 heure) ou 60m (pour 60 minutes). Je préfère les notations claires et human-readable.

Maintenant utilisons dans ~/.ssh/config.

Host *
    ControlMaster auto
    ControlPersist 5

Je me connecte à un serveur puis je lance une seconde connexion dessus, je ferme ma première connexion, la seconde session reste ouverte. On vient de résoudre le problème cité plus haut (première utilité).

Renseignons dans ~/.ssh/config.

Host *
    ControlMaster auto
    ControlPersist 20

Pour voir le gain de temps lié à l’option ControlMaster, je vous invite à lancer time ssh cascador@monserveur.bogosse.net exit, j’ai sensiblement 0.3s. Relancez la commande, j’obtiens 0.03s. L’option ControlMaster fait son job. À noter que lorsque vous fermez une session « partagée » via l’option ControlMaster, vous avez le petit message : Shared connection to monserveur.bogosse.net closed.

À présent lancez time ssh monserveur.bogosse.net exit, attendez 1 minute (pour rappel ControlPersist est à 20s) puis relancez la commande, j’obtiens 0.3s à la première commande et la même chose à la seconde commande. On aborde là le point 1/ cité tout à l’heure (On se connecte à un serveur à 9h00, on se déconnecte puis on y retourne 2h plus tard…). L’option ControlPersist doit être réglée en conséquence, au minimum 2h pour notre exemple. On se connecte à 9h00 sur le serveur, à 9h05 on se déconnecte, à 11h02 on se connectera en 0.03s mais si ça avait été 11h10 alors la connexion se serait faite en 0.3s. Après quelques réflexions et tests, j’ai décidé de mettre ControlPersist 4h pour ma part. Résumons : Sur chaque serveur où je me connecte une première fois, je me connecterai bien plus rapidement à la prochaine connexion dans la limite de 4h (seconde utilité).

L’option ControlPath

Tout ceci fonctionne grâce aux sockets. Un socket de contrôle est utilisé pour le partage de connexion. L’option ControlPath spécifie le chemin d’accès au socket de contrôle.

Renseignons dans ~/.ssh/config.

Host *
    ControlMaster auto
    ControlPath /tmp/socket-%r@%h:%p
    ControlPersist 5m

Si je me connecte à mon serveur (ssh cascador@monserveur.bogosse.net) alors j’aurais un fichier /tmp/socket-cascador@monserveur:22 sur mon pc. D ‘après le man ssh_config toujours : %r the remote username, %h the remote hostname, %p the remote port. Cela permet d’identifier le socket utilisé pour la connexion à un serveur précis. Si on se déconnecte du serveur, le fichier /tmp/socket-cascador@monserveur:22 sera toujours présent… pendant 5 minutes (ControlPersist 5m). En supprimant ce fichier, on rompt la connexion au serveur et si on se connecte de nouveau au serveur, ça sera en 0.3s.

Pourquoi utiliser /tmp/socket-%r@%h:%p ? Bah justement c’est pas une bonne idée. Il est probable que vous soyez seul à utiliser votre pc, dans mon cas je partage mon pc portable avec Madame. Si je verrouille ma session utilisateur, qu’elle ouvre sa session puis fait ls -l /tmp : Elle saura quel nom d’utilisateur j’utilise, le nom de mon serveur et le port SSH. Pas glop si on considère qu’en matière de sécurité, moins l’attaquant a d’informations, mieux on se porte.

J’utilise ControlPath ~/.ssh/sockets/socket-%C. Donc mkdir -p ~/.ssh/sockets; chmod 700 ~/.ssh/sockets pour commencer. Les sockets sont dans mon home (chiffré), dans un répertoire (avec les droits qui vont bien) précis ~/.ssh/sockets/ et facilement retrouvable (il peut y avoir beaucoup de choses dans /tmp). %C Shorthand for %l%h%p%r, dans les faits ça donne un truc incompréhensible et c’est ce que je veux justement, exemple : ~/.ssh/sockets/socket-2416f65bfd78bq467a7887585sd1d4g456cc78e7. Certains diront mais du coup tu sais pas de quel serveur il est question, yes mais en gros je m’en fous et je m’y retrouve avec la date de modification du fichier (socket pour être précis).

À noter que certains préconisent /tmp car au reboot les sockets seront effacés… c’est le cas peu importe où vous les mettez, ça revient un peu à dire qu’une connexion réseau survit à un reboot…

Sockets, où ils sont mes sockets

On arrive au gros drame. Ce problème est tellement énorme qu’en ce qui me concerne j’ai failli rejeter l’utilisation de ControlMaster, attention cependant il s’agit d’un cas très particulier (perte de réseau) il est probable que ça concerne une minorité de personnes. Si vous bossez au bureau, ça ne vous arrivera qu’extrêmement rarement. Je bourlingue beaucoup : Datacenter, coworking, maison… les déconnexions Wi-Fi sont assez régulières. Plantons le décor : Je suis en datacenter, je suis déconnecté du Wi-Fi, je ne peux donc plus lancer de commandes sur les serveurs sur lesquels j’étais connecté, en général je déconnecte mon OpenVPN, je ferme mon terminal (plusieurs onglets, XX connexions) puis une fois reconnecté je relance mon OpenVPN. Drame, je lance mes connexions aux serveurs mais j’attends indéfiniment que les connexion se fassent. Que se passe-t-il Sherlock ?

Il se passe que les sockets sont toujours présents dans ~/.ssh/sockets/, quand je lance une connexion à un serveur où j’étais précédemment connecté SSH utilise un de ces sockets qui ne fonctionne plus (car j’ai perdu la connexion réseau quelques instants auparavant). Je supprime tous les sockets dans ~/.ssh/sockets/, je peux de nouveau me connecter à mes serveurs.

Ce problème, je n’ai pas vu un article en parler et pourtant quelle saloperie ! J’ai mis en place une solution qui me paraît assez propre et à l’usage, ça le fait. J’utilise beaucoup deux alias, le premier pour lancer la connexion au VPN de ma boîte, le second pour kill cette connexion VPN (alias pko='sudo pkill openvpn'). J’ai simplement ajouté ce dont j’avais besoin à la suite donc alias pko='sudo pkill openvpn; for socket in $(find ~/.ssh/sockets/ -type s); do ssh -o ControlPath=$socket -O exit toto 2>/dev/null || rm $socket; done'.

Ce sera plus lisible ainsi.

for socket in $(find ~/.ssh/sockets/ -type s); do
    ssh -o ControlPath=$socket -O exit toto 2>/dev/null || rm $socket
done

C’est une boucle basique.
for socket in : Pour chaque socket
find ~/.ssh/sockets/ -type s : Trouver les sockets (-type s) dans le dossier ~/.ssh/sockets/
ssh -o ControlPath=$socket -O exit toto 2>/dev/null || rm $socket : On lance ssh -o ControlPath=$socket -O exit toto, si le code de sortie est différent de 0 alors on rm $socket

On pourrait me faire le reproche que c’est super-ultra-méga propre parce que 1/ On sait où chercher (~/.ssh/sockets/) et a priori il n’y aura que des sockets dans ce dossier 2/ un simple rm ~/.ssh/sockets/socket-* fait le job. Ouais c’est pour vous expliquer quelle est la bonne/élégante manière de faire. Je ne sais pas si c’est nécessaire, personne ne démonte ses partages réseaux (CIFS, NFS…) « proprement » avant d’éteindre son pc par exemple.

ssh -o ControlPath=$socket -O exit toto 2>/dev/null what ??

ssh -o ControlPath=$socket -O exit est la manière propre de fermer un socket, je vous invite à man ssh puis rechercher -O ctl_cmd. On peut également faire ssh -O exit cascador@monserveur.bogosse.net.

Pourquoi toto ? Parce que si j’avais mis autre chose (genre cascador@monserveur.bogosse.net), vous auriez pensé que la commande allait se connecter au serveur pour lui dire ferme le socket. La commande qu’on envoie ici est en local, le socket qu’on va exit est en local dans le dossier ~/.ssh/sockets/ MAIS la syntaxe d’une commande ssh étant ssh hostname au minimum, on est obligé de fournir un hostname sinon on aura une erreur. À noter que certains écrivent ssh -o ControlPath=$socket -O exit localhost, je trouve ça trompeur car on pourrait croire que localhost est la seule/bonne réponse alors que vous pouvez mettre indifféremment babar, troubadour, cunnilingus…

Autre subtilité faisons ssh -o ControlPath=/home/cascador/.ssh/sockets/socket-2416f65bfd78bq467a7887585sd1d4g456cc78e7 -O exit carambar. La commande s’exécute bien, on a le code retour 0 si on fait echo $? (code retour de la dernière commande) MAIS on a un message « Exit request sent » qui lui ne sort pas sur stdout mais stderr (d’où le 2>/dev/null). Ce qui veut dire qu’on peut avoir une commande qui s’exécute bien mais une sortie sur stderr. Je ne savais pas que c’était possible, ça se trouve c’est commun mais je n’avais jamais fait attention. Tout l’intérêt de creuser les choses, on découvre.

C’est bon là, t’as fini ?

Ouais c’est bon, j’espère avoir bien illustré la différence entre la documentation et la pratique. C’est en forgeant qu’on devient forgeron. Aujourd’hui j’utilise ça.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/socket-%C
    ControlPersist 4h

À noter que vous n’êtes bien-sûr pas obligé d’utiliser ces options pour tous les serveurs, un dev qui met ces options pour sa connexion à son serveur de dev pour push/pull y aura déjà un intérêt.

Tcho !

Sources :
http://www.qanuq.com/2017/09/09/diminuer-temps-connexion-ssh/
https://developer.rackspace.com/blog/speeding-up-ssh-session-creation/
https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing
http://www.anchor.com.au/blog/2010/02/ssh-controlmaster-the-good-the-bad-the-ugly/
https://www.cyberciti.biz/faq/linux-unix-osx-bsd-ssh-multiplexing-to-speed-up-ssh-connections/
https://unix.stackexchange.com/questions/24005/how-to-close-kill-ssh-controlmaster-connections-manually
https://unix.stackexchange.com/questions/427189/how-to-cleanup-ssh-reverse-tunnel-socket-after-connection-closed

youtube-dl, récupérer les flux audio et vidéo de nombreux sites

mercredi 8 mai 2019 à 18:15

youtube-dl sous licence Unlicense permet de télécharger les flux audio et vidéo de nombreux sites dont youtube, youporn, facebook, arte.tv, france.tv, tf1.fr, vimeo, twitch… En temps normal j’aurais fait une présentation plus soignée de youtube-dl mais Next INpact a publié un article complet que je vous invite à lire (comme je soutiens la presse de qualité et que je suis une grosse feignasse). Pour l’installation, go to Mémo installation packages.

À l’occasion de la diffusion de Internet ou la révolution du partage, faisons un focus sur les principales commandes et options à connaître pour utiliser cet outil.

Les options à connaître

-F, --list-formats : Lister tous les formats des flux audio et vidéo disponibles pour une URL
-r, --limit-rate : Limiter le débit du téléchargement (500K ou 3.5M par exemple)
-a, --batch-file : Fournir une liste d’URLs à télécharger via un fichier (une URL par ligne)
-i, --ignore-errors : Continuer si une erreur se produit lors d’un téléchargement, surtout utile quand on fournit une liste d’URLs à télécharger (--batch-file)
-o, --output : Nommer le fichier de sortie à partir de template, voir les exemples et la documentation
-x, --extract-audio : Extraire le flux audio
--audio-format : Spécifier le format audio de sortie (« best », « aac », « flac », « mp3 », « m4a », « opus », « vorbis », « wav », « best » par défaut)
--audio-quality : Spécifier la qualité audio de sortie (valeur entre 0 la meilleure et 9 la pire)
-f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' : Télécharger le meilleur format mp4 disponible ou le meilleur format disponible si le mp4 n’est pas disponible, voir les exemples et la documentation

Récupérer le son d’une vidéo

Une énorme quantité de clips et chansons sont présentes sur YouTube, vous avez envie d’avoir Je danse le Mia sous le coude ?

youtube-dl --extract-audio --audio-format m4a --audio-quality 0 --output "~/Musique/%(title)s.%(ext)s" https://www.youtube.com/watch?v=wf4YT-vsq_4

Vous obtiendrez ~/Musique/IAM - Je Danse le Mia (Audio officiel).m4a.

Récupérer une vidéo

Votre pêché mignon est Capitaine Marleau (comme moi) mais vous avez loupé celui de mardi soir (shit une rediff de la saison 1 !) ?

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' --output "~/Téléchargements/%(title)s.%(ext)s" https://www.france.tv/france-3/capitaine-marleau/saison-1/304197-en-trompe-l-oeil.html

Vous obtiendrez ~/Téléchargements/Capitaine Marleau - En trompe-l'oeil.mp4.

Récupérer une liste de vidéos

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' --output "~/Téléchargements/%(title)s.%(ext)s" --ignore-errors --batch-file '~/Téléchargements/Liste_dl.txt'

Vous obtiendrez… un paquet de vidéos. Vous pouvez vous passer de l’option --batch-file en renseignant plusieurs URLs sur la ligne de commande.

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' --output "~/Téléchargements/%(title)s.%(ext)s" --ignore-errors URL URL URL

Script et alias

Voici l’alias que j’ai dans ~/.bash_aliases (vous pouvez le mettre directement dans ~/.bashrc) : alias yt='screen -dm ~/Scripts/yt.sh'. Je remplis le fichier Liste_dl.txt des vidéos que je veux télécharger puis yt, le script yt.sh est alors lancé dans un screen.

#!/bin/bash

sudo -H pip3 install --upgrade youtube-dl
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' --output "~/Téléchargements/%(title)s.%(ext)s" --ignore-errors --batch-file '~/Téléchargements/Liste_dl.txt'

Téléchargements

youtube-dl reste mon outil attitré pour le contenu légal : replay, documentaire, vidéo, musique. J’utilise openpyn quand je fais du torrent ou du direct download. Pour le reste, il y a Netflix et Mastercard.