PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Quelques liens en vrac et en français, 25° édition

dimanche 10 décembre 2017 à 10:30

La fin de l’année approche, et j’ai fait le ménage dans les articles que je n’avais pas encore lu. Dernière fournée de l’année probablement, mais rassurez-vous, je continuerai à vous partager mes lectures.

Cours ASRALL – Serveurs Web

Luc Didry, qui est un gros contributeur sur différents projets logiciels libres (dont Lufi, qui propulse framadrop), met également à disposition des cours en ligne, et celui sur les serveurs web est plutôt intéressant si vous débutez sur le sujet, car il est vrai qu’ici, je n’ai jamais vraiment revu avec vous les fondamentaux.

YouTube : le problème n’est pas l’algorithme, c’est l’argent

Cet été, YouTube a énervé plusieurs producteurs indépendants de vidéo, qui ont vu leur audience fondre comme neige au soleil, tout en constatant une baisse de leur présence dans les recommandations. Généralement sans se poser les bonnes questions, la principale venant du public elle-même. David Louapre, qui tient lui-même une chaîne YouTube, Science Étonnante, détaille un peu les raisons qui peuvent avoir influé sur ce que paraît être YouTube à l’heure actuelle, en mettant le doigt où ça fait mal.

BOINC, systemd et priorité des processus sous Linux, la suite

Dans l’épisode précédent, Paul pensait avoir résolu définitivement le problème qu’il avait avec BOINC. C’était sans compter sur la sournoiserie de systemd, qui aura demandé un peu plus d’investigations et d’essais avant de retrouver définitivement un comportement souhaité.

4 réflexes pour mieux protéger votre identité en ligne

Alors que je suis moi-même en plein processus de meilleure protection ce qui me représente sur Internet, et que l’année 2017 aura été l’année des fuites de données (et des attaques massives de cryptolocker, grâce notamment à la NSA), il est important d’adopter un comportement responsable, ce qui ne demande pas tant d’efforts que ça si on prend la peine de s’y intéresser un peu. Surtout que les dégâts seront monstrueux à l’heure de la dématérialisation de notre vie.

AXA et le redirecteur

Un article un peu technique qui vous montre comment AXA ment et contourne une bonne pratique qu’on essaie d’enseigner aux personnes pour éviter d’être victime de phishing. Moralité : dans tous les cas, les raccourcisseurs d’URL c’est le mal, et quand en plus un assureur, qui prétend donner des leçons à nos chers têtes blondes en collaboration avec la Gendarmerie Nationale, fait des saloperies, c’est vraiment la loose.

MARP et Markdown

Parmi la myriade d’outils qui existent pour faire des diaporamas/présentations/supports de conférence, je suis tombé il y a plusieurs mois sur MARP, logiciel qui exploite la syntaxe MarkDown. Et plus récemment, j’ai découvert qu’il y existait un petit pas à pas pour démarrer avec ce logiciel ma fois fort sympathique et qui pourrait largement convenir à plusieurs personnes aux besoins basiques.

Comprendre les unités de mesure informatique

Il est vrai que lorsqu’on dit à un non technicien qu’un gigaoctet ne correspond pas à un milliard d’octets, mais à un milliards 73 millions 741 mille 824 octets, ça peut surprendre. C’est pourtant assez simple, et d’ailleurs buzut s’en est chargé plutôt bien.

BASH – Les paramètres

Rigolez pas, j’ai beau utiliser bash en permanence, il ne se passe pas une journée sans que je ne sois obligé de retourner chercher l’un des nombreux paramètres que l’on peut exploiter dans un script, mon cerveau semblant vouloir leur appliquer un « quand ça veut pas, ça veut pas » permanent. J’ai donc mis la main sur ce pense-bête que je vous partage ici, si jamais vous aussi vous avez du mal à les retenir.

Les 9 conseils pour protéger vos yeux devant l’écran d’ordinateur

Alors que je suis moi-même en train de tester des lunettes à filtre « bleu » pour vérifier si mon cerveau accepte un peu mieux de passer 12+ heures par jour devant un ou plusieurs écrans, j’ai été contacté par mail pour me faire la promotion d’un site qui s’appelle le bon antivirus. Après avoir passé quelques minutes dessus, si les sujets sont majoritairement axés sécurité, ce qui colle avec le nom du site, il y a aussi quelques articles annexes dont celui-ci, à propos de nos yeux et de certains conseils pour les préserver

Pourquoi n’avoir « rien à cacher » n’est pas une raison pour accepter la surveillance de masse

Je l’avoue, je suis fatigué d’avoir encore et toujours à rejouer ce discours auprès de personnes qui trouvent cool que Google et Facebook soient gratos, qu’Amazon ne coûte pas cher, qui n’attendent que de pouvoir parler à leurs chiottes pour leur dire quand tirer la chasse d’eau à leur place… Donc voilà une énième piqûre de rappel à l’occasion de la sortie d’un nouveau documentaire sur le sujet. D’autant plus que l’État Français a définitivement basculé dans une société autoritaire, où n’importe quel citoyen est suspect par défaut.

La compression JPEG

Je n’ai toujours pas terminé mon article de vulgarisation sur la compression dans le monde numérique, mais cette plongée en détail dans le format d’image le plus utilisé depuis plus de 15 ans, et qui ne semble pas être délogé de sitôt, malgré plusieurs tentatives pour le déloger de son piédestal (Webp, BPG).


Je ne compte pas arrêter de lire, et donc cette série continuera en 2018. A bientôt pour de nouvelles lectures 😉

Comment j’ai paramétré Sublime Text pour mes nouveaux usages

jeudi 7 décembre 2017 à 18:30

Je ne suis pas développeur. Je tiens à le rappeler avant que l’on crie que je m’y prends mal, que je ferais mieux d’utiliser tel autre éditeur (il semble y avoir combat de mode entre Atom et Visual Studio Code, mais faudra que je sois possédé par le diable pour utiliser personnellement une application basée sur Electron, en dehors de Skype), ou je ne sais quelle autre remarque que pourrait balancer un « Polo la science » qui aurait la moitié de mon age et qu’on devrait attacher à une chaise devant Vi ou Emacs pour l’exemple. Mais bon, j’ai un peu évolué dans mon usage de l’outil, que j’ai présenté il y a trois ans déjà, et si ça évolue moins qu’un Firefox, un petit rafraîchissement s’impose.

Les nouveaux usages (et les anciens)

J’ai commencé à prendre l’habitude de versionner tout ce que je fais avec Git, que ce soit du script Bash, du PHP, du Python, alors qu’auparavant, la seule organisation se faisait avec les dossiers, et pas d’historique. Plus récemment, avec les travaux sur le microserveur, j’ai ajouté à mes bricolages plusieurs rôles Ansible, et par dessus va s’ajouter une séries de fichiers compose pour Docker, vu que j’ai enfin un cluster Swarm fonctionnel. Vous me direz que sur ce dernier point, c’est facile et évident à monter et opérer, mais c’est sans compter que malgré le temps que je passe dessus dernièrement, je reste viscéralement réticent à cette technologie, et l’apprentissage est donc toujours douloureux.

Bref, je me suis un peu mieux organisé, et j’ai donc un peu modifié mes outils pour un meilleur confort et un meilleur suivi, ce qui bénéficie à tous les projets. D’ailleurs, j’ai expliqué comment je publie certains des projets sur Github depuis ma propre forge.

Version 3 au rapport

Certes elle n’est toujours pas déclarée stable, mais je n’ai pas encore eu le moindre début de problème avec, et ça fait plusieurs mois que je l’utilise, aussi bien sous Manjaro que sous Windows. Comme la version 2 n’évolue plus et qu’il y a quelques raffinements supplémentaires dans la version 3, autant basculer dessus. D’autant que sous Manjaro, il consomme moins de 100Mo, et ça, la plupart des autres éditeurs peuvent s’accrocher pour s’aligner (je n’inclue pas les IDE au sens propre dont les fonctions sont éminemment plus nombreuses, et donc inévitablement plus consommatrices).

Et sinon, Package Control reste aux commandes pour la gestion des plugins que je vais maintenant présenter.

Le thème : j’en installe deux

En effet, j’ai toujours Flatland, mais j’installe également Material Theme, qui est celui qui est activé. Si j’installe encore Flatland, c’est pour profiter des modèles de coloration syntaxique, et j’utilise Flatland Dark en l’occurrence. Mais je vais peut-être devoir changer, car dernièrement je teste des lunettes KLIM, donc les nuances de bleu sont un pas mal estompées. Il y a, dans les thèmes par défaut, un mode « Mariana » qui semble s’accorder mieux avec ma nouvelle « vision ».

Au passage, après quelques années passées en compagnie d’Inconsolata (remember les polices pour coder), j’ai craqué pour la police Ubuntu Mono, que j’ai du coup installé sous Windows et sous Linux. C’est vraiment plus une volonté de tester autre chose, et c’est au final aussi lisible, et je trouve que ça s’accorde mieux avec le thème. Question de goût évidemment.

SublimeGit, même si pas obligatoire

En effet, sous Linux j’ai le terminal à la portée d’un F12, donc je peux avoir un onglet qui est posé dans le dossier, et l’afficher à la volée pour lancer mes commandes git quand j’en ai besoin. Mais il y a un truc sympa avec ce plugin, c’est que lorsqu’on fait un status, il ouvre un onglet pour afficher le détail, et cet onglet se met à jour en temps réel ou presque à chaque fois qu’on revient dessus (sans avoir à taper la commande à nouveau, en basculant entre onglets). J’ai trouvé ça sympa. Sinon, les commandes git sont au bout d’un simple raccourci clavier Ctrl+Shift+P.

Attention sous Windows, j’utilise depuis peu cmder, qui embarque Git for Windows, mais le plugin ne sait pas trouver cette version. J’ai contourné en installant Git for Windows de manière plus classique, qui ajoute git au PATH, et il n’y alors plus qu’à redémarrer SublimeText pour qu’il sache prendre en charge.

Emmet

Je l’ai réinstallé car je suis susceptible de me repencher sur l’interface de mon application de collection de films DVD/Bluray, et donc refaire pas mal d’HTML et de CSS, même si je vais peut-être finalement juste refaire mes vues avec la nouvelle version du thème NativeDroid de godesign.ch qui adopte le style Material Design. Et ça semble super propre.

En lien avec le boulot sur Docker Swarm, il y aura bientôt un boulot à faire sur un futur thème pour le blog. Même si ça ne devrait pas être aussi lourd que pour collect.

Varnish VCL

C’est un petit nouveau pour moi, principalement utilisé au boulot, il ajoute la prise en charge de la syntaxe des fichiers de configuration de Varnish, et m’a été recommandé par un client. Mais ça change vraiment la vie quand vous analysez ou devez modifier lourdement un fichier VCL, parce que par défaut il ne sait pas trop comment s’en sortir avec.

ColorPicker

J’ai de nouveau installé ce plugin, qui permet d’afficher un sélecteur de couleur et les codes correspondants aussi bien pour le RGB que pour le mode « Teinte/Saturation/Valeur ». Lui aussi je l’ai réinstallé principalement pour bosser sur le futur thème.

INI

Quand vous cherchez ce package (et c’est vraiment son nom), sa description indique que c’est pour Sublime Text 2. Mais si l’on consulte le dépôt sur Github, un des commentaires de commit qui modifie le README indique que ça fonctionne aussi sous Sublime Text 3. Et c’est vrai !


Pour l’instant, c’est tout ce dont j’ai besoin. Mais en cherchant le mot-clé « Ansible » sur Package Control, j’ai vu qu’il existait notamment des linter, qui pour ceux qui ne le sauraient pas encore sont des analyseurs de syntaxe, ce qui pourraient s’avérer utile avant de me faire vomir à la tronche les messages d’erreur en série liés à mes erreurs de syntaxe ou d’options manquantes sur des modules que je ne maîtrise que très peu. Ça sera donc probablement le principal ajout qui sera de la partie en 2018 sur mon organisation (pour Ansible, PHP, Python ?). Parce que Vim, c’est sympa mais à un moment donné faut savoir passer à autre chose.

Et ça, même si Vim est disponible sous Windows 😀 D’ailleurs, le setup que je vous présente ici est à la fois exploitable sous Windows et sous Linux, moyennant une petite adaptation notamment pour git. J’ai pas encore gagné à Euromillions pour savoir si c’est jouable sous Mac, à la limite si vous avez la possibilité de tester et de commenter ici pour nous faire un petit retour, ça serait cool 🙂

Comment transformer un de ses services avec Docker : gogs

mardi 5 décembre 2017 à 18:30

Maintenant que je sais utiliser mon cluster swarm, il est temps d’expérimenter l’utilisation et surtout la transformation des services existants. La première montagne à laquelle j’ai décidé de m’attaquer : ma forge Git personnelle.

Gogs est un service Git à héberger soi même. Son installation n’est pas toujours de tout repos, surtout sous Debian, d’autant plus dans la configuration où je me trouve (derrière un bastion sur un réseau privé). J’ai en plus ajouté une couche de complexité en choissant comme base de données le moteur Postgresql.

Que ça ne me retienne pas, la structure du projet est selon moi parfaite pour se faire la main et transformer cette installation en stack sur Docker Swarm. Commençons par le début, l’inventaire des logiciels et points d’entrée, et les points persistants.

Postgresql

La VM qui héberge actuellement Gogs est une Debian 8 (la 9 n’était pas encore sortie). Postgresql est donc en version 9.4, ce qui n’est pas un problème puisqu’il est encore supporté (la 9.2 vient seulement de se mettre en retraite). Je vais pouvoir disposer d’un container dédié, il y a une image officielle, j’ai donc le choix entre simplement copier le dossier data en conservant la version 9.4 (après une première analyse c’est chaud, l’installation entre Docker et Debian semble un peu bizarre), monter un 9.6 ou 10 tout neuf en important un dumpall. Dans les deux cas, le dossier data du container postgresql doit être persistant. Son port par défaut sera exposé de manière classique, on verra comment gérer l’accès en fonction du nœud.

Gogs

Le point central, puisque c’est le service lui-même. Le déploiement via Docker est grandement documenté, le dossier /data/ du container doit contenir tout ce que le service Gogs nécessite : dépôts, configurations… Le point le plus tendu pour moi, avec la configuration en bastion, va être de pouvoir relier SSH sans savoir à l’avance sur quel nœud il sera actif. La partie HTTP est facile à mettre en place (je reviendrai dessus tout à l’heure), mais SSH, c’est autrement plus compliqué. Le réseau overlay de Docker permet de router correctement les connexions à un port vers le nœud qui l’expose actuellement, je pourrais donc me contenter de définir la connexion à un nœud en particulier. Mais le concept de l’architecture est de pouvoir continuer à disposer du service même si le nœud est manquant. On verra donc comment résoudre ce problème.

Avant de parler plus finement du réseau, Je voulais vous présenter le docker-compose, mais pendant la mise en place, j’ai rencontré tellement de problèmes, que j’ai du reprendre pas mal de choses. Et comme les erreurs sont aussi intéressantes que les réussites, autant vous partager tout ça, pas à pas, pour comprendre comment j’en suis arrivé au résultat que j’exploite désormais.

Premier fail : le démarrage du conteneur Postgresql

Quand j’ai regardé la structure des dossiers entre la version actuellement installée et ce qu’allait faire en théorie le conteneur, j’ai préféré lancer le tout comme pour une première installation pour comparer, et je n’avais que cinq dépôts, repartir de zéro n’est pas non plus catastrophique. Je lance la stack, composée de deux services (un Postgresql, l’autre Gogs), et alors que j’expérimente déjà plusieurs lenteurs sur le téléchargement des images depuis le hub (un problème récurrent semble-t-il), j’ai également un comportement étrange : Postgresql ne semble pas démarrer. En fouillant plus finement, notamment la documentation sur le hub, on apprend que si Postgresql n’est pas tatillon avec l’utilisateur sur lequel il est lancé, ce n’est pas le cas d’initdb, et manifestement il n’arrive pas à initialiser le dossier. Mais rien à faire, toutes mes tentatives pour lancer ce conteneur échouent.

Après deux heures de lectures, d’essais ratés (pour accélérer les choses je lance le conteneur indépendamment sur un nœud, en spécifiant le volume de destination sans beaucoup plus de succès), après réflexion je ne touche jamais à Postgresql, même sur l’installation actuelle, du coup autant repartir de zéro sur une base sqlite. Un contournement sale, facile peut-être, mais le propre d’une architecture est aussi de faire des choix adaptés à la configuration, et ma forge personnelle ne va pas faire grand chose de violent, donc une grosse base de données n’est pas forcément le choix le plus éclairé.

Deuxième fail : l’initialisation du conteneur gogs

Ben oui, autant le dire tout de suite, évidemment ça ne s’est pas passé correctement du premier coup pour lui aussi. Premier écueil, il n’arrive pas à écrire dans le dossier. Je contourne salement avec un chmod 777, pour me rendre compte d’une chose : il essaie de changer des propriétaires sur les fichiers mais n’y parvient pas (« Operation not permitted »), idem pour certaines permissions. Pourtant l’installation semble tout de même arriver au bout et Gogs est facilement manipulable via son interface web. Jusqu’à me rendre compte que je me suis trompé sur le point de montage et qu’une partie des données est stockée dans le container, ce qu’il faut à tout prix éviter. On scratch donc tout pour tout refaire, ça va très vite, et je continue de constater ces erreurs de changements de droits et de propriétaires, sans pour autant impacter plus que ça le service, en apparence. Au moins toutes les données essentielles (configuration, base de données, dépôts) sont exportées correctement et partagées sur les nœuds.

Jusqu’au premier push via SSH : le contenu du dépôt ne s’actualise pas sur l’interface web (deuxième écueil). Après une vingtaine de minutes de recherches je découvre alors que c’est le montage NFS qui est en cause, via l’utilisation de l’option noexec dudit montage qui empêche l’exécution du hook qui met à jour les infos du dépôt pour l’interface web. Les données, elles, sont bien présentes dans le dossier gogs-repositories. Correction du montage sur les trois nœuds (merci Ansible), redémarrage du container, suppression du dépôt, recréation, push, et paf, ça fait des Chocapic.

Dernier écueil, qui semble en lien avec les soucis de droits, le miroir sur GitHub ne fonctionne pas, SSH refuse de lire la clé privée, car elle ne lui appartient pas et les droits ne le permettent pas. Tout à fait logique, mais dans l’immédiat je ne considère pas ce point comme prioritaire, je remets donc l’analyse à plus tard. Si vraiment je veux pousser une mise à jour je peux toujours ajouter un deuxième remote « github » au dépôt concerné sur mon poste et pousser dessus, mais c’est moins élégant.

Une gestion du réseau particulière

Commençons par les plus simples. Le reverse-proxy HTTP, Nginx en l’occurrence, tape en mode load-balancer sur les trois nœuds, je n’ai donc pas à me soucier du nœud sur lequel il tourne, je suis tranquille de ce côté-là, puisqu’il gère la disponibilité du service tout seul, et le réseau overlay s’occupe du routage sur le nœud actif dans tous les cas. Super simple donc. Voilà à quoi ressemble par exemple le vhost du visualizer :

upstream visualizer_swarm {
	ip_hash;
	server 192.168.1.9:8080;
	server 192.168.1.11:8080;
	server 192.168.1.43:8080;
}

server {
    listen 80;
    server_name visu.seboss666.ovh;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://visualizer_swarm;
    }
}

On comprend que le port exposé est le 8080, et qu’il ne faudrait que peu de choses pour basculer tout ça en HTTPS si je le voulais (ce que j’ai fait pour le registry, que j’aborderai après).

SSH cependant… c’est une autre affaire. Il est très compliqué de le proxyfier, voire impossible, sans même parler de le load-balancer, c’est juste une aberration protocolaire; d’où le bastion d’ailleurs, vous pouvez vous rafraîchir la mémoire si vous comprenez mal de quoi je parle. Comme on n’est jamais certain que le nœud sur lequel on va se connecter est debout, il faut un moyen d’avoir une entrée DNS à jour. Et un fichier de configuration SSH qui lance la connexion derrière le bastion sur le bon port aussi, sinon on a une surprise comme moi à tenter de pousser un dépot git sur une installation (l’hote qui héberge les conteneurs) qui ne dispose pas de forge git adaptée.

La solution va sembler tordue, mais je la trouve particulièrement intéressante pour m’attaquer à une autre fonctionnalité de Docker : la création de sa propre image, ainsi que l’utilisation de Python pour taper sur une API REST, ce que je n’ai pas encore suffisamment l’occasion de faire.

DockerFile + Python + API OVH : une sacrée expérience !

Cette solution particulière est venue de Flemzord en discutant du sujet sur Telegram : la mise à jour dynamique de l’entrée DNS en fonction du nœud actif. Et c’est tout à fait possible, j’ai la chance d’avoir l’API d’OVH sous la main pour mettre à jour ma zone. J’ai un peu tâtonné pour créer les clés nécessaires, mais au final ça a été rapide.

Pour me simplifier la tâche, je suis passé par la classe Python qu’OVH fournit et maintient sur pip. Un réflexe « de l’ancien monde » consisterait à simplement lancer le script à intervalles réguliers via une tâche cron sur l’un des managers, et mettre à jour la zone DNS si besoin, mais une fois de plus étant dans un cluster on ne peut s’assurer que le manager en question est toujours debout et en bon état. Il est donc préférable d’utiliser là aussi un conteneur, dont la particularité sera d’être lancé obligatoirement sur un manager, et de pouvoir accéder au socket pour identifier le host qui exécute gogs à un instant T.

Étant donné la spécificité du script je préfère construire ma propre image, ne serait-ce que parce que je n’ai pas trouvé grand chose d’intéressant existant sur le hub pour gérer l’API OVH + la connexion au socket docker (ou pas documenté/pas à jour). Et ça fait un exercice de plus, à la fois sur Python, et sur la construction d’une image custom. J’ai voulu partir au départ sur la version 3.5 de python, qui correspond à la version disponible sur Debian 9, puisque j’ai fait mes tests « bare » avec, via une des images basées sur Alpine fournies officiellement (3.5-alpine), mais mon script repose sur l’exécution d’une commande « docker service ps » qui nécessite du coup une version de Docker récente qui intègre le mode Swarm, hors la version de Docker correspondante dans les dépôts Alpine 3.4 utilisée s’avère être une 1.11, et il faut la 1.12. J’ai fini par intégrer une autre image tierce pour ne plus perdre de temps, pas forcément maintenue, mais qui m’a permis de débloquer la situation. Je verrais pour disposer d’un truc un peu plus propre dans le futur.

Le fonctionnement du script est simple :

Le tout dans une boucle while true: avec un sleep(60) à la fin pour faire les opérations une fois par minute. Le coup du dictionnaire c’est sale, comme j’ai les entrées DNS correspondantes aux différents hosts dans la zone, je pourrais et je ferai certainement tout via l’API dans un futur proche. L’idée était d’avoir un truc rapide qui fonctionne.

J’ai pas mal tâtonné pour le fonctionnement en brut de ce script, notamment pour l’utilisation de docker via subprocess. En effet, au début naïvement j’ai voulu passer par os.system(), sans avoir lu la documentation, et je peinais à comprendre le comportement et le résultat de la commande, avant de percuter qu’on ne récupère pas la sortie de la commande mais juste son code de retour. L’utilisation de subprocess.check_output() ne fut pas non plus de tout repos avant d’arriver à un résultat exploitable, et aura demandé une bonne demi-heure d’échecs successifs et d’erreurs peu claires pour un novice. Surtout quand, en bon débile qui se respecte, vous commencez par lancer votre script avec la version par défaut de Python sur Debian 9 qui est encore la 2.7 et pas la 3.5.

Alors que c’était mon premier, j’ai moins galéré pour le Dockerfile finalement, mais c’est plus lié à l’image, pour intégrer Docker en sus, finalement ça n’a pas été aussi long. Il ne contient que 7 lignes, qui consistent à mettre à jour les dépôts Alpine, installer Docker, installer le module « ovh » via pip, copier le contenu du dossier (script et configuration d’API OVH) et lancer le script. Bon par contre ça fait une image de presque 160Mo pour un script python de 30 lignes, c’est pas ouf, mais au moins ça fonctionne parfaitement.

Reste un problème : je ne compte pas publier cette image sur le hub Docker en l’état, entre autres parce que c’est dégueulasse au possible, il me faut donc un registry privé. La communication du daemon docker avec un registry se fait via HTTPS, et il existe une image docker simple qui remplit parfaitement le boulot. J’ai donc créé une « mini-stack » pour le registry avec un volume partagé pour les images, et un petit vhost sur la frontière avec pour l’occasion acme.sh qui m’a fait le certificat HTTPS en un tour de main (et un request_body_size à 0 pour s’éviter les erreurs 413 en poussant dessus…).

Dernier exercice nouveau pour moi, j’avais bossé sur un des nœuds tout du long pour terminer ce mini-projet, j’ai terminé en créant l’image « ovhdnsupdate » sur mon poste, en la poussant sur le registry, et en redéployant la stack avec le chemin vers cette « nouvelle » image provenant du registry privé. Et ça a fonctionné du premier coup 😛

Un fichier compose finalement très simple

Je n’ai donc pas besoin de beaucoup d’éléments, après l’abandon de postgresql, les deux que j’ai mentionné sont les seuls nécessaires, puisque le reverse-proxy se trouve pour sa part au niveau du bastion. En lieu et place d’Nginx certains passeront par Traefik qui peut tout gérer automatiquement (à la définition d’un service, si on ajoute les infos pour Traefik il va générer tout seul sa configuration et le certificat Let’s Encrypt kivabien), mais qui demande d’exposer directement son cluster, ce que je n’ai pas trop envie de faire pour l’instant.

Comme indiqué, il n’y a que les deux composants dont j’ai besoin, j’ai sacrifié les configurations existantes de Gogs à cause des structures de dossiers utilisées par le container, qui n’a pas grand chose à voir avec la structure du projet quand on l’installe en bare-metal via clonage du dépôt Git. Aucune redondance nécessaire sur les services, seulement le démarrage automatique, sebnet est le nom du réseau overlay que j’ai créé, les dossiers partagés sont dans /home/seboss666/docker qui est un montage NFS sur le NAS (pour être partagé entre les nœuds, donc pas de souci de ce côté-là).

Voilà le futur déjà présent qui se profile, et qu’on appelle l’infrastructure as code : une fois affranchi de l’installation matérielle, la définition de la configuration des hôtes via Ansible, et des cinq lignes de commandes pour créer un cluster swarm, au-delà des erreurs que j’ai pu rencontrer, il ne faut qu’une trentaine de lignes dans un fichier docker compose, une trentaine de lignes python pour mon script (quarante en comptant la configuration), 7 lignes de Dockerfile, pour définir le déploiement d’une pile d’application nécessaires à la fourniture et l’exploitation de votre service. Sachant que les premières étapes peuvent elles aussi être regroupées au sein d’un fichier dédié pour le déploiement sur une plateforme publique ou privée (je continue à faire à la main pour apprendre), via Terraform par exemple. On lance le déploiement, on attend, on profite.

Reste un dernier point qui me titille malgré tout, cette histoire de droits coincés sur le stockage NFS.

NFS, ce petit vicieux qui cache ses imperfections (et une autre de mes erreurs)

En effet, j’ai encore à travailler sur la solution pour ne plus rencontrer ce problème de changement de propriétaire qui a une source : le montage NFS. Par curiosité, j’ai fait un petit test à la main sur l’un des noeuds du cluster :

[seboss666@swarmleader ~/docker ]$ touch coucou.txt
[seboss666@swarmleader ~/docker ]$ l
total 8
drwxrwxrwx 5 seboss666 seboss666 4096 30.11.2017 11:43 gogs/
drwxrwxrwx 3 seboss666 seboss666 4096 01.12.2017 20:20 registry/
-rw-r--r-- 1 seboss666 seboss666    0 02.12.2017 09:22 coucou.txt
[seboss666@swarmleader ~/docker ]$ sudo chown ansible: coucou.txt 
[sudo] Mot de passe de seboss666 : 
chown: modification du propriétaire de 'coucou.txt': Opération non permise

La dernière fois que j’ai rencontré cette erreur, c’est lorsque j’ai monté un partage NFS en sélectionnant le protocole NFSv4 alors que la source ne supportait que le NFSv3. Là, c’est le contraire, j’ai sélectionné volontairement la v3 car j’ai déjà expérimenté des différences importantes de performances et qu’il est plus simple à optimiser de ce point de vue, mais manifestement, le NAS Asustor ne l’entend pas de cet oreille. Hors, je n’ai absolument pas la main sur la totalité de la configuration des exports et des protocoles supportés.

Il s’avère que c’est finalement un « mappage » utilisateur dans les paramètres du partage NFS que j’avais positionné sur mon utilisateur, et qu’il fallait positionner à « root ». Comme je n’avais « restauré » qu’un seul dépôt pour les tests, j’ai de nouveau refait l’installation de zéro histoire d’avoir un truc réellement propre. Enfin presque, il reste un détail d’UID par défaut, mais c’est lié au conteneur gogs et sans grosse incidence sur le service en lui-même, au moins quand il essaie de changer quelque chose (propriétaire, permissions), ça fonctionne.

Mon dernier problème que je pensais lié au NFS était le mirroring GitHub, qui finalement était lié au fait que sans interactivité, pas de validation de la connexion SSH la première fois. En recopiant le fichier known_hosts de la VM d’origine, ça fonctionne !

Un projet particulièrement instructif

J’ai appris énormément avec cette conversion, autant des erreurs que des succès, les deux étant liés de près ou de loin non seulement à mon apprentissage de la technologie, mais aussi à l’installation de mon cluster (généralement on débute sur une machine unique pour faire ce genre de choses) et le choix de l’utilisation d’un partage NFS comme point de montage partagé. Mon sentiment à propos de la technologie ne change pas fondamentalement, mais mettre les mains dedans profondément est d’autant plus intéressant, voire plus que toutes les documentations et partages d’expérience, que ça permet d’en saisir les limitations dans certains contextes.

On comprend aussi beaucoup mieux les avantages et inconvénients. J’imagine que l’installation hors container d’un registry privé pour mes images Docker m’aurait pris beaucoup plus de temps, et finalement ce qui m’a ralenti c’est l’installation d’acme.sh et la génération du certificat Let’s Encrypt sur le reverse proxy, et non pas l’installation du service lui-même. Un service peut donc être particulièrement rapide à déployer, d’autant plus quand il repose sur plusieurs logiciels qui sont déployés d’une seule traite. Dans le contexte de clustering, la mise à l’échelle (lancer plusieurs instances d’un service pour absorber la charge) est aussi très grandement facilité. Je ne vais pas revenir sur les aspects négatifs de la conteneurisation, Aeris l’a déjà très bien fait et comme le concept n’a pas fondamentalement évolué, la plupart des critiques restent valides.

J’ai beau ne pas l’accueillir avec un très grand enthousiasme, la montée en puissance de la conteneurisation et la tendance au « serverless » sont une réalité, et si tous les acteurs n’ont pas nécessairement besoin ou envie d’y passer, il est impossible de ne pas au moins s’armer un minimum avant que ça ne vous tombe dessus. C’est d’autant plus vrai quand Amazon annonce que Kubernetes, qui est un orchestrateur « concurrent » de Swarm libéré par Google, qui est exploité sur sa plateforme Google Cloud Engine, sera également proposé en tant que service, en plus de l’offre maison Elastic Container Service.

D’ailleurs, Kubernetes sera certainement ma prochaine montagne. Beaucoup de concepts de clustering sont communs avec Swarm, il n’est donc pas illogique de s’y intéresser également, surtout quand on sait que c’est l’orchestrateur majoritaire sur le « marché » (si tant est qu’on peut parler de marché dans un contexte où ils sont majoritairement gratuits et open-source).

On veut les fichiers !

Il va falloir patienter un peu pour voir tout ou partie de ce que j’ai pu écrire pour terminer ce déploiement. Si les infos de connexion à l’API sont dans un fichier à part qui se trouve dans le gitignore du dépôt, les informations liées à la zone DNS, à l’identifiant de l’entrée, la gestion de la liste d’IP du cluster, tout ça est codé en dur dans le script python, et tout le monde conviendra que c’est très sale. Le boulot n’est donc pas encore complètement terminé, mais ça concerne principalement le fait de faire les choses proprement. Idem pour la définition de la stack, il faudra variabiliser l’adresse du registry pour l’image correspondant au script. A moins que je ne choisisse de faire construire l’image à la volée, mais ça me semble un peu plus compliqué à faire. Rien que lors de la finalisation de l’écriture de ce billet sacrément long, en testant une panne d’un nœud, j’ai découvert un problème avec la façon sommaire que j’utilisais pour récupérer le nœud qui héberge le service gogs, et j’ai déjà du refaire l’image et redéployer; ça m’a permis d’ailleurs d’apprendre à me servir correctement des tags, même quand on pensait avoir suffisamment appris, ça ne s’arrête jamais…

Surtout que dans l’absolu, je n’ai rien révolutionné non plus : un Dockerfile est un Dockerfile, un fichier docker-stack.yml est… enfin bref, vous avez compris. Dans l’esprit et au final, je vais tout partager, mais il faut d’abord que ça ressemble à quelque chose de potable et de réutilisable à peu de frais pour vous. Et là dans l’immédiat, j’ai mes dépôts à recréer et re-remplir 🙂

UPDATE : le dépôt est disponible à l’adresse suivante 😉

Ce dont j’ai besoin pour mon prochain smartphone

samedi 2 décembre 2017 à 10:30

Mon OnePlus X commence à présenter de plus en plus de problèmes, après seulement deux ans de bons et loyaux services (dans l’ensemble). Reboots intempestifs, pertes d’associations Bluetooth, mise en veille du réseau incontrôlable, absence de mise à jour de OnePlus (j’attends pas Android 7 parce qu’on sait que Qualcomm est un enfoiré, mais au moins les maj de sécurité sur Android 6, c’est pas la mer à boire)… Bref, il est temps d’envisager de changer de crèmerie. Et de regarder quels sont pour moi les points déterminants pour un smartphone qui va me faire, au minimum, les deux prochaines années. En espérant que ça vous donne une idée des bonnes questions à se poser, au delà du prix.

L’indépendance à l’opérateur

J’entends par là qu’il n’est pas question de passer par un opérateur pour payer mon téléphone. Parce que systématiquement les smartphones vendus par les opérateurs :

Alors certes, ça pourra paraître plus cher, mais je vous assure que sur le long terme, vous êtes gagnant à rester indépendant de votre opérateur. Et ça quel que soit le forfait que vous avez souscrit.

Surtout qu’il n’est pas rare de pouvoir payer en plusieurs fois maintenant, notamment en ligne, et même maintenant sur Amazon.

Une version d’Android pratiquement pure, et surtout à jour

Ça c’est plus personnel qu’autre chose, parce que l’interface Material Design d’Android me convient parfaitement, mais il y a un autre objectif derrière : un fabricant qui ne modifie rien ou presque pourra plus facilement mettre à jour le téléphone. J’ai déjà pu indiquer que la sécurité devait devenir une priorité pour tout le monde, alors favoriser un fabricant bon élève me semble un bon comportement.

Évidemment, si un constructeur sait tenir la distance avec sa propre surcouche, comme Samsung le fait avec certains des modèles qu’il commercialise, je ne suis pas si sectaire, comme on le verra quand j’aborderai à la fin du billet les modèles que j’ai en vue.

J’ai une préférence toute particulière pour la dernière release, 8.0, qui a permis à Google de revoir profondément l’organisation d’Android, avec Treble, pour pouvoir plus facilement déployer les mises à jour de sécurité sans pour autant remettre en question les personnalisations des constructeurs, et sans avoir à régénérer une image à jour à flasher sur l’appareil (que ce soit via OTA ou USB). Il est cependant très peu présent, même les nouveaux modèles sortent encore au mieux en Android 7.x avec, pour certains, un plan de mise à jour vers Android 8, malheureusement parfois sans Treble, donc il faut que je reste vigilant.

Écran : pas plus de 5 pouces, mais Full HD obligatoire

Je parle de l’écran, mais c’est plus le form factor qui compte, j’ai beau avoir de grandes mains j’aime bien finalement mon téléphone, sa taille est parfaite, je peu l’utiliser à une seule main. Avec la mode grandissante des « borderless », les tailles d’écran augmentent sans que l’appareil grandisse d’autant.

Je n’ai pas trop de contraintes quant à la technologie, même si l’AMOLED permet de limiter sa consommation, par contre, la résolution, je ne reviendrais pas sur le Full HD, c’est vraiment confortable quand on lit beaucoup dessus.

Une batterie au top

Je n’ai pas nécessairement besoin d’un ultra foudre de guerre, ce qui compte c’est l’autonomie. J’ai de plus en plus de mal à finir la journée sans avoir à rebrancher mon téléphone à peine rentré du travail, et ça seulement avec VLC+Firefox, quand j’écoute de la musique en lisant les infos (dans le RER entre autres). Avec le Bluetooth activé en permanence, j’avais déjà déterminé que la consommation supplémentaire était négligeable.

Je n’attend donc pas de miracles, les fabricants continuent de vouloir jouer au jeu du kikalaplugross pour faire plaisir aux développeurs feignants qui ne veulent pas faire d’effort sur la légèreté de leurs applications (Facebook lui-même recommandait à un moment d’utiliser la version web mobile du site plutôt que l’application à cause de sa consommation…), mais un peu plus d’une journée d’autonomie ça sera appréciable.

Une prise Jack, please

J’ai déjà un casque Bluetooth à pas cher, très peu endurant, et mon seul achat pour le black friday est un casque Bluetooth qui couvre mieux et tiens plus longtemps la charge. Il n’est donc pas question de râler parce que mon matériel actuel ne servira plus, surtout qu’on a encore des prises Jack sur les ordinateurs. Mais une grande partie de ma musique est au format FLAC (j’achète de plus en plus sur BandCamp), et une musique au tel format ne s’apprécie qu’avec une bonne transmission du son aux écouteurs. Hors, actuellement le protocole AD2P qui est utilisé pour transmettre l’audio via Bluetooth n’est pas adapté à une telle qualité. En effet, il compresse le son de manière destructive, une nécessité pour le faible débit de la transmission sans fil, et on trouve certains casques qui tentent de « restaurer » une information détruite, en croisant les doigts pour que le son ne soit pas trop distordu.

Donc non, pour écouter correctement de la musique au format FLAC, le moins destructeur est encore une connexion Jack, en attendant un nouveau protocole moins destructif pour une version future du Bluetooth.

MicroSD, of course

Avec la connerie française de la redevance pour copie privée, intégrer une grande quantité de stockage dans un smartphone coûte un bras, qui va dans des poches depuis longtemps loin d’être propres. Ce n’est pas un problème franco-français ceci dit, mais rien qu’en Europe on est les champions. En plus de ça, pour les données importantes, je préfère que le stockage soit portable, et rien de tel pour ça qu’une carte SD.

Le seul hic dans l’histoire, c’est que souvent, ça implique qu’un smartphone capable de faire du dual SIM perd cette capacité, le deuxième emplacement étant à double emploi, mais un seul à la fois. Et je n’exclue pas de tester plus sérieusement Free Mobile avant pourquoi pas de basculer dessus (la grosse quantité de data, illimitée en l’occurrence étant déjà abonné Free ADSL, étant d’un grand secours chez ma mère).

Photo, empreinte, NFC, USB-C ?

Le capteur photo du OnePlus X n’est pas dénué de qualités, mais il est vite mis en défaut sur une luminosité un peu faible, et l’autofocus est un peu lent à la détente. Et ces défauts s’applique aussi à la capture vidéo. Et en deux ans, on a fait pas mal de progrès, il ne devrait donc pas être compliqué de trouver un remplaçant potable.

J’ai encore un peu de mal à considérer l’utilisation d’un lecteur d’empreinte, autant on peut changer un mot de passe si on se le fait déplomber, autant je compte pas me couper les doigts pour changer d’empreintes. Donc c’est pas une priorité, ni un manque si je n’en ai pas.

Et si vous n’avez pas encore lu ou entendu mon sentiment à propos du NFC, sachez que j’abhorre notamment l’utilisation qu’on en a fait sur les cartes bancaires désormais en circulation. Et je n’ai pas envie de filer 30% de mes transactions à Google, Samsung et compagnie. Donc tant qu’on peut désactiver la fonctionnalité, c’est pas un énorme problème si y’a du sans contact d’embarqué.

Un truc qu’il faut savoir, c’est que l’intérêt de l’USB-C réside surtout dans le protocole USB 3.x qui est derrière, mais pour lequel on n’avait pas pu adapter la connectique micro-usb classique. On a donc droit à une plus grande vitesse de transfert entre l’appareil et l’ordinateur en USB, ainsi qu’une charge plus rapide, l’USB 3.x permettant d’aller au-delà de l’USB 2 en matière de puissance délivrée. Donc je cracherai pas dessus si j’en ai.

Quels sont les candidats au final ?

Un des plus évidents, c’est le Google Pixel 2, mais il cumule quelques gros points faibles, comme une batterie faiblarde par rapport à la puissance embarquée, un prix assez élevé, et surtout, il n’est pas vendu en France. Et vu le bordel pour en faire importer un, ce n’est pas mon préféré. Mais si vous avez le budget c’est un concurrent sérieux.

Il y a aussi le Motorola G5 Plus. Certes son design n’est pas le plus sexy du monde, mais la fiche technique est séduisante, surtout mis en face de son prix qui est très intéressant, et Motorola a une tradition de soutenir ses téléphones particulièrement longtemps par rapport aux autres concurrents. Toujours chez Moto, le Z2 Play est intéressant, bien qu’il soit un peu plus grand que son cousin, et inévitablement plus cher.

Plus récemment, je me suis intéressé à la fiche technique du Galaxy A5 2017, qui est très intéressante, et qui va bénéficier sous peu d’Android 8. Sur le papier, De plus, Samsung a un historique assez sympathique quant à l’ouverture de ses téléphones, il sera donc possible de le faire vivre bien plus longtemps que prévu. C’est probablement le client le plus intéressant de ce panel, il est assez agréable à l’œil en plus.

Dans les candidats moins évidents mais peut-être pertinents, j’inclurai le Honor 9, même si je suis un peu rebuté par la surcouche et un support des fréquences 4G incomplet pour les bandes exploitées en France (je pense notamment à la toute récente addition des 700Mhz, très pratique pour les intérieurs bétonnés). Il reste un peu au dessus du budget que je compte mettre dans l’appareil (aux alentours de 300 balles), mais au détour d’une bonne affaire, qui sait…

Un dernier appareil sur lequel je ne m’étais que peu penché étant donné son prix à la sortie est le LG G6, mais récemment, sa forte baisse de prix l’a remis dans la compétition personnelle. Il est en effet facile de le trouver dans les 400€ (il vous en coûtait 700 à sa sortie), son seul point faible qui pourra freiner son évolutivité est la connerie habituelle de Qualcomm d’abandonner ses puces les plus anciennes, un tour qui m’est déjà arrivé avec le OnePlux X dont la puce de 2014 est déjà abandonnée par son fabricant. De plus il est encore sous Android 7.0, et si à priori il passera sous Android 8, LG n’a rien communiqué de précis sur le sujet.

Ce dernier est probablement le plus sexy de tous les modèles présents, malgré le dépassement de budget. A priori j’attendrai début d’année 2018 pour changer de bidule, d’ici là, on aura probablement de nouveaux modèles annoncés, certains pourraient également se démarquer. Donc cette liste n’est pas définitive. En tout cas, j’espère vous avoir montré que les choix d’un appareil ne doivent surtout pas se limiter au budget et à l’apparence, mais également à son usage et sa pérennité. Car si vos appareils sont de plus en plus « intelligents », ce n’est pas une raison pour que vous deveniez de plus ne plus bête.

Alors, le Firefox nouvelle génération, il rocks ou il rocks ?

jeudi 30 novembre 2017 à 18:30

Comme j’avais d’autres priorités en tête au moment de la sortie du Messie, c’est à dire Firefox 57, j’ai laissé les autres acteurs du Web (blogueurs, sites d’information, etc) vous donner leur vision du navigateur. J’avais aussi envie d’en parler mais reste-t-il quelque chose à en dire, est-ce que ma vision du navigateur en tant que quasi-fanboy est pertinente malgré tout ? J’ai posé la question sur Twitter, en testant pour la première fois les sondages, et vous avez été sans pitié. Essayons donc de voir si je peux faire un exposé cohérent et intéressant du renouveau du panda roux.

Une numéro de version dans la continuité, mais un renouveau presque total

Il y a un an, Mozilla a amorcé une série de travaux devant aboutir au navigateur qui est sorti depuis maintenant presque un mois. Ces travaux sont regroupés sous le terme Quantum. Tout le monde n’en a que pour les extensions, et l’absence d’alternatives pour certaines d’entre elles, mais le changement est bien plus profond que ça, et n’est pas fait juste pour déranger les habitudes.

Il faut en effet se souvenir que Firefox, malgré une amélioration continue depuis sa sortie il y a 13 ans, traînait quelques boulets qu’il était compliqué de détacher de ses chevilles pour qu’il puisse courir de nouveau. En plus de revoir les fondations de fond en comble (couper les jambes qui sont attachées aux boulets et en greffer de nouvelles), ils ont décidé pour l’occasion de tenter un changement de langage de programmation, et Mozilla n’a pas fait les choses à moitié en créant carrément le langage Rust, dont l’objectif est d’apporter, au niveau du langage lui-même, une meilleure sécurité notamment sur la gestion de la mémoire, tout en garantissant un haut niveau de performances,  deux points cruciaux pour un navigateur web de nos jours.

Et tous les composants y sont passés ou vont y passer, du moteur de rendu à l’interface, en passant par l’interpréteur CSS, le moteur JavaScript, extensions… finalement ce qui fait que Firefox est encore Firefox c’est que votre dossier de profil reste le même, avec ses bases sqlite pour les différents paramètres et historiques. Certains des éléments réécrits ont été intégrés au fur et à mesure, c’est ainsi que ça fait plusieurs mois que la lecture des vidéos HTML5 est prise en charge par un composant écrit en Rust. Et vu la différence de performance dès Firefox 56 sur Android (confirmé par un de mes collègues lui aussi utilisateur du navigateur mobile), je soupçonne Mozilla d’avoir intégré d’autres couches dans cette version intermédiaire avant le grand saut.

C’était nécessaire : la sécurité du navigateur commençait à être limite, quand les autres acteurs proposent une mécanique de bac à sable isolant le navigateur du reste du système pour éviter tout intrusion grave. C’est maintenant possible, en lien notamment avec le moteur de rendu, qui est maintenant en plus pleinement capable d’exploiter tous les cœurs de votre CPU grâce à une parallélisation plus grande, donc des performances en hausse, un autre élément sur lequel Firefox était en retard. On note également une plus grande séparation entre processus qui gèrent l’interface et processus qui gèrent les sites contenus dans les onglets, améliorant de fait la stabilité globale du logiciel. Bon ceci dit, je touche du bois dans l’ensemble, ça doit faire 8 ans que je n’ai pas rencontré une grande instabilité sur Firefox.

Nécessairement des pots cassés

Je ne vais pas pleurer sur la disparition des vieux plugins NPAPI, dont la technologie d’interface avec le navigateur remonte au début des années 2000 (correction, c’est encore plus vieux), là où le multicœurs était réservé aux machines extrêmement chères que sont les stations de travail propriétaires ainsi que les supercalculateurs. Seul Flash reste encore supporté car malheureusement, si le grand public pourrait s’en passer, il existe encore trop d’applications pourtant « professionnelles » qui sont codées avec ce framework. Lui aussi j’aimerai le voir crever plus tôt que 2020. Déjà maintenant il est activé à la demande et pas par défaut.

Parmi les reproches que j’ai pu lire le plus, c’est au niveau des extensions qu’on croirait à une vraie catastrophe à entendre les gens. On pouvait s’y attendre, mais tout de même… Si Mozilla avait fait un premier pas vers une rénovation de ses extensions avec JetPack, celui-ci posait beaucoup de problèmes également, aussi bien sur la sécurité que sur la parallélisation. Décision fut prise il y a un an maintenant de passer au format WebExtensions, déjà exploité sur Google Chrome et dérivés. On pourra arguer que Firefox copie encore Chrome, mais le fait est que ce nouveau format basé sur les technologies web permet de réutiliser les composants de rendu du navigateur, et donc de profiter des performances de ceux-ci.

La conséquence cependant, et j’en ai fait personnellement les frais, c’est que certaines capacités que permettaient Jetpack ne sont plus possibles dans WebExtensions, et pour l’instant il n’y a rien à faire pour corriger cet était de fait, bien que les développeurs restent ouverts à certaines adaptations de l’API, ce qui permet à terme de faire plus de choses que chez Chrome. Ajoutez à ça les développeurs d’extensions qui ne ne veulent pas forcément refaire le travail de zéro, et forcément on a l’impression que beaucoup de monde reste sur le carreau. Cependant, Mozilla a quand même eu une ou deux bonnes idées : il y a une section qui regroupe les modules que vous ne pouvez plus utiliser, et propose un bouton pour rechercher des extensions similaires qui pourraient remplir le rôle, avec parfois à la clé de très bonnes surprises.

WebExtensions a même coexisté avec Jetpack pendant plusieurs mois, et les extensions qui deviendraient incompatibles étaient déjà marquées comme obsolètes. Pour ma part j’avais fait le boulot en amont pour m’assurer que je serai tranquille, dans l’ensemble. Malgré tout, parmi les utilisateurs qui n’ont pas eu le réflexe de vérifier ce point, il était inévitable que ça fasse quelques dégâts. Courage Cyrille. Si vous êtes effectivement coincé avec certaines extensions, vous pouvez installer à la place Firefox ESR, qui est encore basé sur Firefox 52, donc pleinement compatible, mais c’est reculer pour mieux sauter, je vous recommande de faire vos recherches et adaptations au plus vite, que ce soit pour vous ou d’autres personnes.

Les thèmes ont également pris un pion dans l’affaire. Pour ma part, j’avais déjà basculé sur le minimal dark que Firefox fournit et continue de fournir (j’aime bien les thèmes sombres), mais certaines personnes ont pu installer des choses plus exotiques (j’ai vu cet été qu’il existait encore un thème « Modern » qui était l’interface de Netscape fin des années 90,et j’utilisais le thème ARC qui n’a pas été maintenu super longtemps). Il n’y a donc plus que les personas qui sont supportées correctement actuellement, en raison d’un autre grand changement de Firefox : Photon.

Une interface plus lumineuse ?

Admirez le jeu de mots pourri, surtout pour un mec qui utilise un thème sombre. Photon est le nom de code de l’interface de Firefox, et elle a elle aussi été complètement revue. Sous le capot, exit XUL qui n’a pas super bien vieilli et qui commençait à ralentir le reste de Firefox et à limiter les possibilités d’évolution. Il y a des points qui me plaisent bien, comme un retour à des onglets qui ne ressemblent pas à ceux de Chrome (les détracteurs diront que ce coup-ci c’est Microsoft Edge qui a été copié), la barre d’adresses peut être encore mieux organisée. La nouvelle gestion du panneau latéral ne me fait personnellement ni chaud ni froid, au bout du deuxième clic j’avais compris, et de toute façon j’utilise tellement les raccourcis claviers que j’ai pas trop senti la différence.

Là où je suis un peu déçu, c’est le menu principal. J’aimais bien les « gros » boutons, le menu était entièrement personnalisable et je n’avais laissé que le strict minimum, et j’avais tendance à faire de même quand je paramétrais Firefox pour quelqu’un. Je ne sais pas ce qui a motivé le passage à un menu plus « chromesque » qui n’a pas beaucoup de charme, et qui est beaucoup plus lourd selon moi.

À gauche FF57, à droite FF56

Fort heureusement, les outils de développement sont toujours là, et fonctionnent toujours aussi bien. Les masochistes qui font du JavaScript auront même droit à un support affiné de certains framework JavaScript comme React (qui reste pourtant à déconseiller quand on voit comment Facebook joue avec la licence).

Quid de la performance et de la consommation ?

C’était l’objectif après tout, alors ? Il y a une réelle évolution dans le ressenti. Je n’ai peut-être pas senti le même effet waouh que certains, notamment parce que je suis actuellement chez ma mère où n’importe quel navigateur doit s’incliner face à une connexion pourrie, mais pour ma part, notamment sur le rendu, ou sur les défilements et interactions sur les pages fortement dynamiques ne soufrent plus de micro-freeze. Je n’ai plus de lag lors de la bascule entre onglets, le chargement des outils de développements est plus rapide, bref, dans l’ensemble vous avez compris, le travail accompli se sent, du moins sur les performances et le ressenti, tout est plus agréable à l’utilisation sur ce navigateur. Les benchmarks qui pullulent confirment globalement cette sensation.

Je n’ai pas encore pu mesurer précisément ce qu’il en est sous Windows, mais sous Linux la consommation de RAM ne me semble pas nécessairement plus faible, c’est peut-être en lien avec les extensions que j’utilise (j’en ai rajouté deux/trois depuis le mois d’Août), ou le fait que le navigateur doit actuellement supporter une trentaine d’onglets ouverts depuis plusieurs jours (la joie de bosser sur des technos qu’on ne connaît pas bien, beaucoup, beaucoup de documentation). Il me semble toutefois que le garbage collector a toujours autant de mal à faire son boulot, quand on l’active manuellement (via about:memory), on gagne facilement plusieurs dizaines de mégaoctets. Il y a encore pas mal de boulot à faire selon moi de ce côté, mais il faut aussi avouer que les sites/applications web sont particulièrement lourds de nos jours, c’est particulièrement pénible d’ailleurs (palme d’or à la console Azure).

Alors ? on vire Chrome ?

Ça fait un bout de temps que je vous dis que Chrome devrait disparaître de pas mal de machines, mais malheureusement, on connaît les méthodes de Google pour s’infiltrer partout. D’autant plus sur mobile qui est plus que jamais le terrain sur lequel on devrait se battre vu l’évolution des usages grand public. Là aussi Firefox a une position compliquée, et son arrivée tardive fait que Chrome a pu régner sans partage pendant trop longtemps, au delà de son installation par défaut, une pratique pour laquelle Microsoft s’était pris des rafales de la part de la justice européenne avec Internet Explorer sous Windows (également avec le lecteur Windows Media). On attend encore un traitement équivalent…

Il y a un autre souci, dont les techniciens sont conscients, et Mozilla devrait d’autant plus chercher à la diminuer, c’est la dépendance à Google : un navigateur qui se présente comme un défenseur de la vie privée qui embarque Google Analytics sur les pages de ses services, ça la fout mal. Je n’ai rien contre une certaine collaboration entre éditeurs, c’est même une très bonne chose selon moi, mais la liste safe-browsing, qui permet de marquer et d’alerter les visiteurs à propos de sites malveillants, est elle aussi hébergée chez Google, et chaque récupération de la liste doit certainement s’accompagner d’un enregistrement chez eux, comme s’ils n’avaient pas déjà suffisamment d’informations sur le monde entier.

Je n’ai pas de problème à faire la promotion de Firefox malgré ce paradoxe, parce que j’aime le logiciel et son positionnement, et pas seulement « par défaut » comme le pense Cyrille Borne, parce qu’il n’existe rien d’autre en dehors de la « galaxie webkit/blink » (et c’est en grande partie vrai). Mais certains pourraient également se ranger se son côté si le comportement était un peu plus cohérent.

Ce n’est qu’un début

La refondation de Firefox était nécessaire, et Mozilla ne compte pas s’arrêter là : par exemple, il y a plein d’avantages à tirer parti des solutions graphiques pour plusieurs tâches (même les solutions intégrées), et la version 59 doit introduire WebRender qui permet justement d’exploiter nos GPUs. Non seulement on pourrait encore espérer un gain en réactivité, mais également, sur les machines mobiles, de consommation, certaines opérations étant plus efficaces sur un GPU qu’un CPU.

Il y a également d’autres évolutions en cours notamment en rapport avec le ciblage de votre activité, un des combats de la protection de la vie privée, qui est d’ores-et-déjà compliquée par l’introduction d’une fonctionnalité héritée du Tor browser, qui se base sur Firefox, et qui empêche un site d’exploiter le contenu d’un cookie créé par un autre domaine (ce qui est notamment le cas avec la publicité). Bref, la fin de ce gros chantier ne marque absolument pas le début d’une pause, parce que les artisans d’une société de surveillance de masse et de profilage continuent eux d’affûter leurs armes pour détruire ce qui vous reste d’intimité et de vie privée. Et un bon comportement ne suffira pas si l’on ne dispose pas des outils et services permettant de se sentir en sécurité, et en qui on peut avoir confiance.