Vue normale

Aujourd’hui — 25 décembre 2024Flux principal

Netlibre, un service libre et un nom de domaine gratuit

25 décembre 2024 à 00:13

Le service netlibre, revu et corrigé

Le service netlibre fournit gratuitement des noms de domaine et une interface simple pour les modifier. Récemment, ce service a été mis à jour.

Vous voulez en savoir plus sur le service ? Vous êtes déjà bénéficiaire du service ou souhaitez le devenir ? Venez lire la suite !

Dans cet article, je vais me focaliser sur le service netlibre. L’histoire, l’ancienne version, la nouvelle et le futur du service. Et en bonus, les problèmes rencontrés. Les aspects purement techniques feront l’objet d’autres articles.

Sommaire

Trop Long ; Pas Lu (note aux utilisateurs actuels et pressés)

La nouvelle version de netlibre représente une réécriture complète du service. Points à retenir : bien meilleure stabilité, les domaines peuvent être gérés à plusieurs et même transférés entre utilisateurs, et bien davantage de vérifications sont faites sur les entrées des utilisateurs pour prévenir un maximum d’erreurs.

Pour les utilisateurs actuels : votre compte a été migré. Vous pouvez voir vos domaines depuis la nouvelle interface. Le contenu des zones n’a cependant pas été repris (pour des contraintes techniques), il faudra les re-remplir mais je pourrai vous fournir vos zones sur demande.

Pas d’inquiétude : les zones actuelles sont toujours servies, il n’y a pas eu de coupure du service DNS. Tant que vous ne faites pas de modification de votre zone sur l’interface, l’ancienne zone reste servie.

Une adresse email vous est demandée lors de votre connexion, elle est désormais obligatoire. Elle permet la récupération de mot de passe, de vous tenir informé des interruptions (volontaires ou non) du service ainsi que des mises à jour.

Connectez-vous au moins une fois dans les 6 mois. Pour faire du ménage je supprimerai les comptes qui ne se connectent pas au moins une fois dans les 6 mois suivant la publication de cet article.

Présentation du service

Le service netlibre fournit des noms de domaines (ou noms de SOUS-domaines si vous préférez) gratuitement. Ainsi, n’importe qui peut se réserver un nom de domaine en « *.netlib.re » ou « *.codelib.re ». L’administration du domaine se fait en quelques clics, sans compétences requises. Ce service est donc utile pour n’importe qui souhaitant un nom de domaine, à titre individuel ou pour une association par exemple.

Il est également possible de mettre à jour dynamiquement une adresse IP d’un enregistrement. Avoir une adresse IP dynamique n’est donc pas un frein à l’utilisation du service ; ce qui est courant pour les connexions à Internet chez les particuliers.

Le code source du service est entièrement libre, que ce soit l’interface, le service d’authentification ou le service dnsmanager qui lie l’interface web au serveur de noms. Tout est libre, sous licence ISC.

Histoire

Cela fait désormais plus de 9 ans que le site netlibre permet de réserver et de gérer des noms de domaines, gratuitement (le service est même encore plus vieux que ça, mais c’était beaucoup plus confidentiel). Un article sur LinuxFr.org avait été posté, puis 9 ans se sont écoulés non sans peine.

L’objectif initial était de me permettre de gérer des zones simplement et mettre à jour des adresses IP de manière automatique. De mémoire, selon mes recherches de l’époque, rien n’existait en libre pour faire cela ; les outils s’en approchant étaient trop complexes pour la simple gestion d’une zone. J’ai donc développé un outil permettant de visualiser de manière claire une zone et de modifier les entrées comme on pouvait le voir sur des sites professionnels. C’était à la fois directement utile pour moi, et un petit défi technique qui m’intéressait. Comme cela semblait utile pour d’autres personnes, j’ai partagé avec grand enthousiasme mon petit bricolage.

Malgré l’engouement du début, le site a très peu évolué par la suite, par manque de temps et d’énergie. Il remplissait son rôle pour mon usage, donc pendant des années je n’y ai pas touché du tout. Quand j’ai voulu m’y remettre, avec quelques années d’expérience supplémentaires, le code me semblait trop bancal pour m’y investir davantage. Les problèmes rencontrés demandaient une réécriture complète. La dernière section de l’article donne des détails.

netlibre, c’est désormais 9 ans, 7000+ utilisateurs et 32 000 zones. Qu’on s’entende bien, une bonne partie de ces comptes et de ces zones sont à jeter car des robots sont passés par là. D’ailleurs, le service, avec ses quelques dizaines de milliers de domaines, reste assez modeste. Néanmoins, j’ai été contacté par de nombreux utilisateurs au fil des années. Le site est réellement utilisé, et ça, c’est à la fois une victoire et une vraie surprise.

L’ancienne version

L’ancienne version du site a été modifiée jusqu’à très récemment (quelques mois) pour corriger de gros problèmes, notamment d’infrastructure. Cette version permettait de s’inscrire, demander des zones et les gérer (ajout, suppression, modification) avec une interface simple, comme on peut voir sur OVH ou Gandi. Mais elle n’était pas finie : impossible de se désinscrire ou récupérer son mot de passe, de nombreux enregistrements DNS étaient inaccessibles, etc.

Sauf que voilà, l’architecture logicielle rend la modification assez désagréable. J’ai donc décidé de repartir de 0, avec un meilleur découpage du service et des techno adaptées.

La nouvelle version

Depuis quelques semaines déjà, la nouvelle version est désormais en ligne. Les détails techniques derrière le service (code, langages, infra, sécurité, outils…) feront l’objet d’autres articles. Dans cette section, je vais parler des changements par rapport à l’ancien service.

Le partage de domaines est désormais possible, ce qui est utile pour des associations. Plusieurs personnes pourront donc posséder le même domaine et modifier la zone. Pas d’inquiétude si un membre de l’association n’est pas disponible, vous gardez le contrôle.

Des enregistrements protégés. Certains enregistrements DNS sont désormais en lecture seule pour éviter de supprimer des informations nécessaires au bon fonctionnement des zones. Ainsi, les enregistrements SOA et NS sont maintenant protégés.

De nouveaux enregistrements sont disponibles : SPF, DKIM et DMARC. Comme vous le savez probablement, ce sont des enregistrements qui se traduisent par des entrées textes (« TXT »). Des interfaces dédiées sont maintenant disponibles pour éviter une longue lecture de RFC pour savoir comment formater certaines options. Ces enregistrements sont plutôt complexes, donc aider les utilisateurs (même expérimentés) me semblait nécessaire.

De même, l’enregistrement CAA est désormais disponible. N’hésitez pas à me faire des suggestions pour de futurs enregistrements.

Une adresse email est désormais nécessaire. Les utilisateurs peuvent donc enfin récupérer leur mot de passe perdu. Ils seront également prévenus d’une panne, d’une mise à jour, d’un changement sur le site, etc.

Suppression de compte. Les utilisateurs peuvent désormais supprimer leur compte. Cela supprimera l’ensemble de leurs domaines (et zones) par la même occasion.

Un jeton de mise à jour. Afin de mettre à jour une adresse IP (enregistrement A ou AAAA) pour un serveur avec une IP dynamique, un mécanisme à base de jetons a été implémenté. Ainsi, accéder à une URL telle que https://www.netlib.re/token-update/<jeton> permet au service netlibre d’associer l’adresse IP du client à un enregistrement A ou AAAA (pour lequel on a généré ce jeton).

Par exemple, la zone toto.netlib.re possède un enregistrement A serveur.toto.netlib.re. L’utilisateur génère un jeton (ressemblant à 65b609fc-4a53-4a58-aae3-9824551a0fa5) pour cet enregistrement. Enfin, l’utilisateur lance (depuis son serveur) curl https://www.netlib.re/token-update/65b609fc-4a53-4a58-aae3-9824551a0fa5 pour que l’enregistrement serveur.toto.netlib.re pointe vers son adresse IP.

Je ne pense pas qu’il soit possible de faire plus simple. Un simple wget ou curl dans un crontab suffit pour maintenir à jour l’adresse de son serveur. Ce mécanisme permet probablement beaucoup moins de choses qu’un vrai service DynDNS, mais le cœur du service est là et sans aucune configuration !

Fin du mode « expert » qui permettait d’écrire soi-même le fichier de zone bind9. Entrer soi-même le fichier de zone semblait être une bonne idée, mais cela mène surtout à des problèmes d’infrastructure. Pour bien faire, il aurait fallu que les utilisateurs aient accès aux logs pour apprendre de leurs erreurs et corriger leurs zones, sauf que c’est inutilement complexe. Le mode « expert » devait pallier quelques lacunes de l’interface qui ne gérait qu’une petite partie des enregistrements possibles. Maintenant que l’interface permet de configurer les enregistrements DNS les plus courants, le mode expert perd une grande partie de son intérêt.

Plein de vérifications supplémentaires pour éviter des erreurs (simples et moins simples). Ces vérifications portent sur les adresses IPv4 et IPv6, les adresses email (grammaire décrite dans la RFC 5322), les noms de domaine et les labels (grammaires décrites dans les RFC), ou encore les options SPF, DKIM et DMARC. Cela est utile à tout le monde, y compris à des administrateurs expérimentés mais inattentifs.

Une interface didactique. L’interface se veut agréable à utiliser et rappelle régulièrement les bases aux novices. Par exemple, pas besoin d’aller chercher des informations complémentaires dans des RFC pour manipuler du SPF, DKIM ou DMARC. J’espère apporter à l’avenir ce niveau d’aide à la configuration pour d’autres enregistrements.

Inclusion de netlibre dans la PSL. Le domaine netlibre est désormais dans la Public Suffix List, le domaine codelib.re devrait suivre.

Migration : pourquoi une migration partielle

Comme décrit en début d’article, les comptes sont repris dans la nouvelle version du site. Votre identifiant et votre mot de passe sont toujours valides. De même, les zones sont toujours servies, il n’y a pas eu de coupure de service. En revanche, les zones n’ont pas été traduites dans la nouvelle interface, vous les verrez donc vierges. La raison est simple : le temps et l’énergie. Traduire des zones Bind9 (dans un format non trivial et parfois pleines d’erreurs) est assez long et peu engageant.

Maintenant que le service a été migré, vos domaines sont toujours présents et vous sont toujours réservés. L’ancien contenu des zones peut vous être envoyé pour vous aider à les reconfigurer sur la nouvelle interface, si c’est réellement nécessaire pour vous.

Le futur

Dans cette section je parlerai de propositions d’évolution pour le service, mais rien n’est gravé dans le marbre. J’ai par ailleurs encore du travail à faire sur cette nouvelle version. Tout ce qui est présenté ici viendra après ce qu’il me reste à faire, c’est-à-dire de nombreuses vérifications côté serveur (y compris de la surveillance de l’infra et autres joyeusetés inhérentes au développement de services en ligne) et une bonne pause bien méritée !

Traduire l’application. Contrairement à l’ancienne version, le site est désormais en anglais, pour diverses raisons. J’aimerais donc y apporter une traduction en Français, puis d’autres langues si des gens veulent bien s’y atteler.

Gérer vos zones. netlibre pourrait permettre de gérer des zones venant d’ailleurs. Par exemple, vous possédez « toto.fr » et vous souhaitez utiliser l’interface de gestion de netlibre. L’interface a été pensée pour être agréable à utiliser, ce serait dommage de ne pas en profiter pour d’autres domaines.

Déléguer des zones. À l’inverse, il serait également intéressant de permettre la délégation des zones netlibre. Cela reviendrait à prendre un nom de domaine de chez netlib.re sans utiliser l’interface de gestion.

Ouverture d’une API. La création de comptes, la réservation de noms de domaines et la modification de zones pourraient être automatisées. Cela pourrait être utile par exemple à une association qui souhaiterait automatiser la procédure pour ses membres. Cela était déjà prévu il y a 9 ans, et maintenant que le code est un peu plus sérieux, il est désormais pertinent de se re-poser la question.

De nouveaux enregistrements DNS. Divers enregistrements pourraient être implémentés pour offrir une interface toujours plus complète, y compris pour des utilisateurs avancés. Ainsi, des enregistrements tels que LOC, RP ou HINFO pourraient voir le jour. DNSSec pourrait être de la partie également. Je n’utilise pas personnellement ces fonctionnalités donc je ne me sens pas non plus pressé de les implémenter. Si cela vous tient à cœur, merci de m’en informer, ça pourrait me motiver.

De nouveaux domaines ? Le service propose actuellement des noms de domaines en « .netlib.re » ou « .codelib.re ». Je suis ouvert à la discussion si des gens veulent financer d’autres noms de domaines ou céder les leurs.

Le retour du mode « expert » ? Pour des personnes expérimentées, cela a du sens. En lieu et place de l’écriture d’un réel fichier de zone Bind9, une entrée libre avec un format proche d’un fichier de zone Bind9 serait envisageable. Les enregistrements seraient compris et vérifiés par l’interface puis traduits dans la représentation intermédiaire utilisée par netlibre. Le meilleur des deux mondes. Pas de fausse joie cependant, comme cela nécessiterait pas mal de code, ce n’est pas au programme pour tout de suite.

Alternatives à netlib.re

J’ai vu de nombreux sites proposant des services autour du DNS. Pour citer quelques exemples :

  • eu.org n’est pas pour des novices, et visiblement tout est géré à la main sans interface pour s’inscrire… difficile de faire plus éloigné des objectifs de netlib.re ;
  • freedns.afraid.org ne fournit pas le code source et n’est pas très ouvert aux novices, mais à part ça le service semble assez complet ;
  • ydns.io ne fournit pas le code source et ne propose pas une gestion d’un domaine qu’ils offrent, seulement un enregistrement A ou AAAA ;
  • nsupdate.info les inscriptions sont fermées ;

Ces services sont sans doute très bien. J’envie même certaines de leurs fonctionnalités, que j’implémenterai peut-être plus tard pour netlibre. Mais il manque systématiquement le code source, ou l’interface n’est pas faite pour un novice, ou le service ne propose pas tout à fait les mêmes fonctionnalités.

Je pense donc sincèrement que netlibre a sa place au milieu de tous les autres. Il se démarque ne serait-ce que par son code libre et son interface simple. À l’avenir, j’espère qu’il se démarquera par sa complétude.

Bonus : les problèmes survenus ces 9 dernières années (pour les curieux)

De nombreux problèmes sont survenus au fil du temps. Le site a été instable pendant longtemps, pour de multiples raisons :

  • une des bibliothèques utilisées gère mal les enregistrements sur plusieurs lignes, menant à des boucles infinies. Cela a été corrigé il y a quelques mois à peine (!) et seulement en local car je n’ai pas pris le temps d’envoyer mes corrections (!!). Pour cette raison, il n’était même pas possible d’avoir un enregistrement DKIM via l’interface de netlibre ;
  • une maintenance quasi-absente pendant longtemps, par manque de temps et d’énergie ;
  • des plantages à répétition à cause de l’infrastructure (bind9 qui redémarre en boucle à cause d’une erreur de configuration en crachant des tonnes de logs qui saturent le disque) ;
  • des mises à jour qui cassent tout (à cause d’un déploiement un peu bancal) ;
  • une architecture logicielle en mode bricolage avec des lancements de commandes lorsque l’utilisateur appuie sur certains boutons ;
  • des lancements de commandes qui ne libèrent pas correctement leur descripteur de fichier (je n’ai pas trouvé pourquoi ni comment corriger) ;
  • un manque de vérifications (notamment à cause du mode expert), menant à des erreurs côté Bind9 sans que l’utilisateur en soit informé.

Le plus gros problème a surtout été un manque de vérifications. Les bénéficiaires du service ont régulièrement innové pour détruire leurs zones. Entre la suppression des entrées NS et SOA (merci le mode expert) et les nombreuses valeurs invalides (auxquelles il fallait s’attendre, bien entendu), beaucoup de zones sont invalides sans même que les utilisateurs ne le sachent (autrement qu’en faisant des requêtes DNS).

Et j’en oublie sans doute bien d’autres. Tout ça parce que… netlibre à la base, c’est un projet perso, vite-fait, pour moi. J’avais espoir qu’il serve à quelques dizaines d’autres personnes, max. Le service netlibre s’est beaucoup plus développé que prévu et j’ai bon espoir que le service soit désormais un peu plus à la hauteur.

Commentaires : voir le flux Atom ouvrir dans le navigateur

À partir d’avant-hierFlux principal

Campus du Libre 2024 (Lyon) : Demandez le programme

La programmation du Campus du libre qui aura lieu le 23 novembre 2024 sur le Campus de la Manufacture des Tabacs de l'Université Jean Moulin Lyon 3 est disponible.

Campus Du Libre 2024(Bannière)

Sur la journée, ce sont une quinzaine de conférences, une dizaine d'ateliers, un village associatif qui seront proposés aux publics. Il y aura aussi des animations singulières : découverte de jeux vidéos libres et de outils libres pour en concevoir d'autres, une flash party (libération de téléphone mobile), install party (libération d'ordinateur) ainsi que des expositions.

Cet événement annuel se déplace à chaque édition sur un campus lyonnais avec pour objectif de sensibiliser au numérique libre.

Des publics divers sont attendus, allant de la communauté universitaire aux entreprises du numérique, des usagers avertis comme des novices souhaitant découvrir un numérique de confiance.

Attention : pour les libérations de téléphones et d'ordinateurs, il convient de s'inscrire en amont pour permettre aux équipes de bénévoles d'identifier les méthodologies d'installation les mieux adaptées à vos appareils.

Commentaires : voir le flux Atom ouvrir dans le navigateur

Nouveautés de novembre 2024 de la communauté Scenari

Scenari est un ensemble de logiciels open source dédiés à la production collaborative, publication et diffusion de documents multi-support. Vous rédigez une seule fois votre contenu et vous pouvez les générer sous plusieurs formes : site web, PDF, OpenDocument, diaporama, paquet SCORM (Sharable Content Object Reference Model)… Vous ne vous concentrez que sur le contenu et l’outil se charge de créer un rendu professionnel accessible et responsive.

À chaque métier/contexte son modèle Scenari :

  • Opale pour la formation ;
  • Dokiel pour la documentation ;
  • Optim pour les présentations génériques ;
  • Topaze pour les études de cas ;
  • et bien d'autres…

🖥️ Prochain mini-webinaire : « créer un conducteur de formation avec le modèle Parcours » 15 novembre<br/>

🖥️ Prochain mini-webinaire : « créer un conducteur de formation avec le modèle Parcours » 15 novembre

La session aura lieu le vendredi 15 novembre de 17h à 18h heure de Paris, à l’adresse https://scenari.org/visio/miniwebinaire.

Pour que la session colle au mieux aux besoins de la communauté, tu peux participer à ce fil de discussion sur le forum.

Pour faire connaissance avec Parcours, tu peux voir la mini-vidéo de présentation.

Les sessions précédentes sont sur la page dédiée de scenari.org et dans notre canal peertube.

Pour proposer des sujets, rends-toi sur ce fil de discussion.

📣 Rencontres Scenari 2025 - Strasbourg 11-12-13 juin

📣 Rencontres Scenari 2025 - Strasbourg 11-12-13 juin

Scoop !

Les Rencontres Scenari 2025 se dérouleront à l'Université de Strasbourg les 11, 12 et 13 juin !

Grand merci aux membres strasbourgeois de la communauté Scenari 💜

Bloque ces dates dès maintenant !

Et si tu fais des choses intéressantes avec Scenari, penses-y car dans quelques semaines nous lancerons l'appel à contributions 😃

📣 Stagiaire à l'asso, mission : prise en main de Scenari par les débutant⋅e⋅s (dans le secondaire)

📣 Stagiaire à l'asso, mission : prise en main de Scenari par les débutant⋅e⋅s (dans le secondaire)

Nous accueillons pendant 6 mois Éric en stage dans l'association, dans le cadre de son master 2 en ingénierie pédagogique numérique à l'université de Clermont - Auvergne (UCA).

Éric connaît le système éducatif national et ses enjeux puisqu'il est Conseiller Principal d'Éducation, et a été directeur-adjoint de lycées agricoles.

Sa mission principale dans l'association sera de travailler sur la prise en main et développement des outils Scenari, notamment dans le secondaire (analyse des besoins, des blocages, création d'un contenu d'auto-formation pour les grands débutants, promotion, …).

Parallèlement il se rapprochera des membres de la communauté pour nourrir la réflexion de son mémoire de recherche.

Tu recevras bientôt une communication sur le sujet.

📣 Un bel exemple de documentation faite avec Dokiel

📣 Un bel exemple de documentation faite avec Dokiel

L'université de Sherbrooke (Québec - Canada), adhérente de l'association, a réalisé une documentation de ses outils numériques avec Dokiel.

Il⋅elle⋅s utilisent le questionnaire au début pour profiler leur contenu en fonction du type d'usager (membre du personnel ou personne étudiante), et ont fait aussi un habillage personnalisé. Bravo ! 👏

Retrouve cette ressources et d'autres dans la section « fait avec Scenari » sur le forum.

📣 Nouvelles vidéos de présentation des principaux outils Scenari

📣 Nouvelles vidéos de présentation des principaux outils Scenari

Les vidéos de présentation des outils Scenari sont sur le canal peertube de l'association.

Il y a Canoprof, Dokiel, IDKey, Lexico, Opale, Parcours, Process, SCENARIbuilder, SCENARIstyler, SCENARIsuite-starter, Topaze, Webmedia.

À utiliser et diffuser sans modération :)

📣 Appel à interventions #BlueHats le 4 décembre 2024 au salon Open Source Experience

📣 Appel à interventions #BlueHats le 4 décembre 2024 au salon Open Source Experience

Le réseaux #BlueHats, que nous appuyons régulièrement lors des Rencontres Scenari, bénéficiera d'un espace au salon Open Source Experience pour parler de logiciel libre dans l'Administration.

Si tu fais partie du secteur public, tu peux t'inscrire pour parler de tes usages de Scenari (ou tout autre logiciel libre).

Ça peut être un excellent moyen de diffuser notre outil favori ! 🥁

Envoie ta proposition d'intervention de 5 à 20 minutes d'ici le 15 novembre 23h59 à bluehats@code.gouv.fr 📅

Plus d'info sur le bulletin #BlueHats.

✨ Le savais-tu ?

✨ Le savais-tu ?

L'éditeur Scenari embarque un correcteur d'orthographe et de grammaire.

Pour l'activer il suffit de cliquer sur l'icone « conseils » en forme d'ampoule et de cocher l'option « orthographe et grammaire » (assure-toi qu'un serveur Language Tool est bien spécifié dans la configuration - roue crantée).

Les mots ou expressions à vérifier seront surlignés dans le contenu et par simple clic droit (ou touche f4) tu auras accès aux suggestions de correction.

correcteur d’orthographe et de grammaire dans l'éditeur Scenari

Consulte la documentation pour en savoir plus.

Commentaires : voir le flux Atom ouvrir dans le navigateur

Fedora Linux 41 est dans la place

En ce mardi 29 octobre 2024, les utilisateurs du Projet Fedora seront ravis d’apprendre la disponibilité de la version Fedora Linux 41.

Fedora Linux est une distribution communautaire développée par le projet Fedora et sponsorisée par Red Hat, qui lui fournit des développeurs ainsi que des moyens financiers et logistiques. Fedora Linux peut être vue comme une sorte de vitrine technologique pour le monde du logiciel libre, c’est pourquoi elle est prompte à inclure des nouveautés.

Bureau GNOME

Sommaire

Expérience utilisateur

Passage à GNOME 47. Cette nouvelle version de l’environnement phare de Fedora propose de nombreuses améliorations. Tout d’abord, il est maintenant possible de personnaliser une couleur "accentuée" (accent color) qui influencera la couleur de nombreux éléments graphiques comme des boutons. Cela intègre donc un changement en place chez Ubuntu depuis quelques années. Pour ceux disposant de petits écrans, certains boutons et autres icônes sont agrandies pour rendre leur interaction plus aisée dans ce contexte.

L’interface a été en partie remaniée au niveau des boîtes de dialogue pour rendre leur interaction plus simple notamment avec des petits écrans avec des boutons plus gros et plus espacés entre eux. Et bien sûr ces boutons tiennent compte maintenant de la couleur accentuée explicitée précédemment. L’interface pour ouvrir ou sauvegarder un fichier repose maintenant sur le code du navigateur de fichiers nommé Fichiers plutôt que d’utiliser un code indépendant jusqu’ici. Cela simplifie la maintenance mais permet surtout de fournir l’ensemble des fonctionnalités du navigateur de fichiers pour cette tâche. Par exemple il est possible de renommer des fichiers depuis cette interface, de changer l’ordre d’affichage en vue icônes, prévisualiser les fichiers sans les ouvrir, etc. Par ailleurs, le navigateur de fichiers s’améliore aussi. Les périphériques réseaux sont maintenant classifiés permettant d’identifier les ressources où on est déjà connecté, qu’on a précédemment utilisé et les autres. L’ensemble des disques durs internes sont également affichés dans la barre latérale et groupés ensemble pour rendre cela plus accessible et facile d’utilisation. Il est possible également de supprimer les dossiers par défaut dans la barre latérale pour faire de la place si on le souhaite. Et quelques autres changements plus mineurs.

Dans la configuration de l’interface, il est possible via le menu Accessibilité de configurer le changement automatique de focus d’une fenêtre à une autre par le simple survol de la souris. Option désactivée par défaut. De même lors de l’ajout de nouvelles dispositions clavier, la prévisualisation de cette disposition peut être effectuée avant de la sélectionner pour s’assurer que c’est bien celle souhaitée. De manière générale, l’affichage des préférences est plus cohérente dans le choix des éléments graphiques pour les représenter à travers l’interface.

Les comptes en ligne progressent également, les informations IMAP ou SMTP sont préremplies en se basant sur l’adresse électronique. La synchronisation du calendrier, des courriels et des contacts a été ajoutée pour les comptes Microsoft 365 pendant que la configuration d’un nouveau compte WebDAV permet de découvrir les services accessibles depuis ce compte pour faciliter l’expérience utilisateur.

Le navigateur web maison n’est pas en reste et propose quelques améliorations dont le pré remplissage des formulaires en se basant sur les entrées précédentes ce qui est disponible dans de nombreux navigateur. L’option peut être désactivée dans les préférences si nécessaire. Les marques pages ont été aussi remaniés en étant affichés dans un volet latéral et en proposant une barre de recherche intégrée pour retrouver celui qu’on souhaite. Le navigateur peut afficher le nombre de trackers publicitaires qui ont été bloqués. Malheureusement la synchronisation des éléments via Firefox Sync n’est plus possible en ce moment à cause d’un changement dans la procédure d’authentification par Mozilla.

L’application calendrier a été également améliorée avec par exemple une icône de cadenas qui s’affiche pour les événements qui sont en lecture seule. La mise en page est plus cohérente notamment dans l’espacement entre les éléments visuels. L’importation ou l’édition d’événements gèrent mieux les calendriers cachés ou en lecture seule. L’application de cartographie a été aussi légèrement améliorée en utilisant les cartes vectorisées par défaut et en proposant les trajets en transport en commun en exploitant le service Transitous plutôt qu’une solution commerciale.

Pour les amateurs d’enregistrement de leur écran en vidéo, cette tâche peut être effectuée dans la mesure du possible avec de l’accélération matérielle ce qui diminue la consommation d’énergie et améliore les performances du système dans ce cadre. Dans la même veine, le rendu effectué par la bibliothèque graphique GTK se fait via Vulkan dorénavant ce qui améliore les performances en particulier pour les machines plus anciennes et avec moins d’effets visuels indésirables due à la lenteur de certaines opérations. Dans la même veine, il y a une amélioration des performances des applications vidéos, photos et du navigateur web maison par la réduction quand c’est possible du nombre de copies en mémoire des données d’une vidéo ou d’une image.

Pour ceux qui ont accès à leur session à distance, il est dorénavant possible de rendre cette session persistante. En cas de déconnexion il est possible de revenir plus tard et de retrouver la session dans l’état où elle était.

Pour les utilisateurs avancés, il y a des changements expérimentaux qui sont proposés. Si vous souhaitez utiliser la mise à échelle fractionnaire de l’interface pour les applications utilisant X11 via XWayland, vous pouvez l’activer via la commande suivante :

$ gsettings set org.gnome.mutter experimental-features '["scale-monitor-framebuffer", "xwayland-native-scaling"]'

Couleur d’accentuation dans GNOME

L’environnement de bureau léger LXQt passe à la version 2.0. Cette mise à jour importante est essentiellement technique avec un port complet vers la bibliothèque graphique Qt 6 au lieu de Qt 5 qui n’est bientôt plus maintenue. La prise en charge de Wayland est disponible à titre expérimental, cela devrait être stabilisé pour la version 2.1 à venir.

L’éditeur d’image GIMP utilise la branche de développement qui deviendra la version 3. Cette décision a été prise car GIMP devenait la raison principale pour maintenir le langage Python 2.7 dans la distribution qui n’est plus maintenue depuis quelques années. Alors que GIMP 3 devrait sortir sous peu, il a été décidé de prendre potentiellement un peu d’avance pour permettre de supprimer cette dépendance assez lourde et complexe de Fedora.

Outre cette décision, cette version de l’application propose entre autres une meilleure gestion des couleurs avec notamment la visualisation, l’import ou l’export d’images avec la colorimétrie CMJN. Les tablettes graphiques ont une expérience utilisateur améliorée avec notamment la possibilité de personnaliser l’action des boutons de ce matériel sous Wayland, et la prise en charge des écrans avec une définition HiDPI est aussi améliorée. L’édition non destructive est également possible pour séparer l’application des effets des calques de l’image pour permettre de revenir dessus plus tard. Si on le souhaite, un calque peut se redimensionner automatiquement lors de son édition lors d’un dessin par exemple. Et bien d’autres changements.

Le gestionnaire de listes de tâches Taskwarrior évolue à la version 3. Cette version a surtout changé la manière de stocker les données sauvegardées et n’est pas rétrocompatible avec l’ancienne méthode. Il est donc nécessaire d’exporter les tâches avec l’ancienne version par l’usage de la commande task export et de les importer avec la nouvelle version avec la commande task import rc.hooks=0. La tâche de sauvegarde est aussi confiée à un nouveau module TaskChampion écrit en Rust.

La mise à jour du cœur des systèmes atomiques de bureau peut se faire sans droits administrateurs, mais pas les mises à niveau de celui-ci à savoir par exemple passer d’une version Fedora Linux Silverblue 40 à Fedora Linux Silverblue 41. Cela était déjà le cas pour Fedora Silverblue avec l’usage de GNOME Logiciels mais a été de fait généralisé. L’objectif est de simplifier la procédure de mise à jour du système, qui dans le cadre d’un système atomique est considéré comme plus sûre que dans un système traditionnel de par sa conception qui permet facilement de revenir à l’état précédent et par la faible quantité de logiciels installés dans le cœur du système.

Les autres opérations ne sont pas considérées à ce stade car trop risquées pour être confiées à un simple utilisateur. Pour certaines opérations le mot de passe administrateur sera systématiquement demandé telles que l’installation d’un nouveau paquet local, la mise à niveau complet du système (qui consiste en une opération de rebase avec une autre branche de travail), ou changer les paramètres du noyau. Pour d’autres comme l’installation d’un paquet provenant d’un dépôt, la mise à jour, le retour dans un état précédent ou l’annulation d’une commande peut se faire sans demander systématiquement le mot de passe, comme lors de l’usage de commandes via sudo si les opérations ne sont pas trop espacées.

Mise à disposition des images Spin KDE Plasma Mobile et Fedora Kinoite Mobile. L’objectif est de fournir une image native avec cet environnement qui fonctionne aussi bien pour téléphone que pour les tablettes ou petits ordinateurs portables 2-1 avec possibilité de détacher l’écran tactile du clavier.

De même le gestionnaire de fenêtres en mode pavant Miracle exploitant Wayland est proposé dans Fedora et bénéficie de son propre Spin. Cette interface moderne prend en charge aussi les fenêtres flottantes, prend en charge les dernières montures de Wayland tout en permettant l’usage des pilotes propriétaires de Nvidia. Il consomme également peu de ressources ce qui le rend intéressant dans l’usage de machines peu performantes ou anciennes tout en exploitant une pile graphique très moderne et flexible.

L’installation de Fedora Workstation se fera avec le protocole d’affichage Wayland uniquement, les sessions GNOME X11 restent disponibles et installables après. Cela suit l’effort entrepris depuis longtemps de faire de Wayland le protocole d’affichage par défaut de Fedora et par l’abandon progressif de X11 par GNOME également. L’état actuel du système permet de franchir ce cap par défaut ce qui allège également un peu le média d’installation. Cependant pour ceux qui veulent toujours utiliser GNOME avec X11 après l’installation pour différentes raisons, il reste possible d’installer les paquets gnome-session-xsession et gnome-classic-session-xsession depuis les dépôts officiels.

Prévisualisation du clavier dans GNOME

Gestion du matériel

L’installation du pilote propriétaire de Nvidia via GNOME Logiciels est compatible avec les systèmes utilisant l’option Secure Boot. Ce mode de sécurité s’assure que tous les éléments de la chaine de démarrage de la machine sont signés avec une des clés cryptographiques autorisées. L’objectif est d’éviter qu’une tierce personne puisse modifier un de ces composants dans le dos d’un utilisateur afin de réaliser une attaque plus tard. Le chargeur de démarrage GRUB, le noyau Linux et ses pilotes sont évidemment concernés, et installer le pilote propriétaire de Nvidia qui n’est pas signé pouvait rendre la machine impossible à démarrer.

Même si Fedora ne fournit pas ce pilote, car il est non libre, l’objectif reste d’avoir un système fonctionnel et simple à utiliser. Dans ce contexte, GNOME logiciels permet d’outre passer cette limitation en utilisant l’outil mokutil pour auto signer le pilote Nvidia. L’utilisateur devra saisir un mot de passe à l’installation du paquet, et au redémarrage suivant cet outil sera affiché pour confirmer la clé de sécurité et ainsi autoriser le chargement du dit pilote sans encombre.

Prise en charge des caméras MIPI pour les systèmes utilisant Intel IPU6 qui concerne de nombreux ordinateurs portables actuels. En effet, de nombreux modèles utilisent le bus MIPI CSI2 au lieu du traditionnel USB UVC qui était la norme jusqu’à présent. En effet ce protocole permet des bandes passantes plus élevées, en consommant moins d’énergie et plus facile à intégrer. Sauf que la prise en charge de ce bus n’était pas pleinement gérée, car les images envoyées sont un peu brutes et nécessitent des traitements notamment concernant la balance des blancs ou le dématriçage de l’image ou le contrôle pour l’exposition et le gain. Cela est complexe, car chaque caméra a ses propres caractéristiques qui nécessitent une approche au cas par cas en espace utilisateur. Un travail d’intégration a été fait entre le noyau Linux, libcamera, pipewire et Firefox pour rendre cela possible. Le noyau Linux fourni l’API de base et un pilote pour chaque type de modèles, avec un pilote commun pour la prise en charge du protocole en lui-même. Le flux vidéo est récupéré par libcamera qui applique des traitements tels que le dématriçage en prenant en compte le modèle considéré, qui envoie le flux vidéo obtenu par pipewire vers le navigateur Firefox.

L’installateur Anaconda prend en charge le chiffrement matériel des disques via le standard TCG OPAL2 disponible sur certains péripériques SATA ou NVMe, mais cela nécessite de passer via un fichier kickstart pour personnaliser l’installation. L’outil cryptsetup n’a pris en charge ce standard que très récemment, l’objectif est de fournir les arguments --hw-opal-only ou --hw-opal à cet utilitaire dans le fichier kickstart. Le premier argument n’active que le chiffrement matériel, ce qui est recommandé uniquement pour des périphériques où l’usage du CPU pour cette tâche nuirait grandement aux performances, alors que le second utilise un chiffrement matériel et logiciel. Il n’est pas prévu de fournir cette fonctionnalité par défaut et restera pendant un moment une option pour les utilisateurs avancés, car la sécurité de l’ensemble dépend de la qualité des firmwares de ces périphériques de stockage et qui doivent être maintenus à jour dans le temps ce qui n’est pas garanti.

Utilisation par défaut de l’outil tuned au lieu de power-profiles-daemon pour la gestion de l’énergie de la machine. C’est l’outil qui permet notamment de passer du mode économie d’énergie à performance pour moduler la puissance du CPU en fonction de la consommation d’énergie souhaitée, ce qui est très appréciable sur les ordinateurs portables en particulier. Cependant power-profiles-daemon est très simple, en dehors de ces modes très génériques et d’appliquer cela sur les CPU ou les plateformes matérielles supportées, il ne permettait une configuration plus fine ou l’ajout de modes personnalisées. Les utilisateurs avancés étaient contraints d’installer un utilitaire additionnel comme tuned pour cela. Il a été ajouté un paquet tuned-ppd qui fourni une API DBus compatible avec l’interface de power-profiles-daemon, ainsi les applications telles que le centre de configuration de GNOME, Plasma ou Budgie peuvent s’en servir directement à la place sans régression, tout en permettant aux utilisateurs avancés d’aller plus loin s’ils le souhaitent en modifiant le contenu de /etc/tuned/ppd.conf comme en changeant les réglages périphérique par périphérique.

Mise à jour de ROCm 6.2 pour améliorer la prise en charge de l’IA et le calcul haute performance pour les cartes graphiques ou accélérateurs d’AMD. Il fournit entre autres des nouveaux composants tels que Omniperf pour l’étude et l’analyse de performance, Omnitrace pour tracer l’exécution des fonctions sur le CPU ou le GPU, rocPyDecode comme implémentation de l’API rocDecode en Python pour l’analyse des données de profilage faits avec cet outil en C ou C++ ou ROCprofiler-SDK pour identifier les points bloquants de performance. Il prend en charge également les dernières versions des outils PyTorch et TensorFlow.

L’outil de développement et de débogage des tables ACPI nommé acpica-tools ne prend plus en charge les architectures gros boutistes tels que s390x. En effet, ce standard qui est conçu pour les machines petits boutistes n’a pas beaucoup de sens pour cette architecture, les paquets qui en avaient besoin pour s390x ont de moins en moins cette dépendance et comme l’usage de cette architecture reste faible surtout pour cet usage, il a été décidé de retirer la prise en charge de cette spécificité. 49 correctifs sur 69 concernant ce paquet sont liés à cette prise en charge, car le projet n’a jamais voulu les adopter par manque d’intérêt, ce qui impliquait beaucoup de test et de développement ralentissant la fréquence des mises à jour du paquet. Ces correctifs sont maintenant supprimés.

PHP ne prend plus en charge les processeurs x86 32 bits. Il n’y avait déjà plus de paquets PHP 32 bits dans les dépôts, mais PHP était toujours compilé pour permettre à d’autres dépendances de l’être pour cette architecture. Des restrictions ont été ajoutées à ces dépendances pour que cela ne soit plus bloquant. PHP était souvent utilisé dans le cadre de tests ou pour gérer des plugins ou extensions qui pouvaient être désactivées. L’architecture x86 32 bits n’est pour rappel plus pris en charge par Fedora depuis quelques années maintenant, ces paquets ne sont utilisables que sur des machines x86 64 bits pour des raisons de compatibilité. Ce nettoyage permet en contrepartie un gain de temps machine et de développeurs, car il n’y a plus à gérer ce cas de figure.

Internationalisation

Le gestionnaire d’entrées IBus par défaut pour la langue traditionnelle chinoise de Taiwan passe de ibus-libzhuyin à ibus-chewing. En effet la bibliothèque chewing sous-jacent semble avoir une communauté dynamique qui fournit une bonne maintenance contrairement à libzhuyin qui n’est d’ailleurs pas maintenu en ce moment par un locuteur de cette langue ce qui pose quelques difficultés. Le code semble également mieux organisé et plus maintenable.

Nouvelles options de focus dans GNOME

Administration système

Le gestionnaire de paquet dnf est mis à jour vers sa 5ᵉ version. Cette version écrite en C++ au lieu de Python est bien plus rapide à l’usage et consomme moins d’espace disque et requiert moins de dépendances pour tourner, l’ensemble est 60% plus léger sur le disque. Par ailleurs dnf5daemon remplace PackageKit comme couche de compatibilité pour dnf dans GNOME Logiciels, ce qui permet notamment le partage des caches entre l’interface console et l’interface graphique évitant un gaspillage d’espace disque et de bande passante. Niveau performance, certaines opérations sont maintenant parallélisées comme le téléchargement et le traitement des données des dépôts qui doit être jusqu’à deux fois plus rapide. Les plugins sont également mieux intégrés ce qui en simplifie leur installation et leur maintenance. Cependant certains plugins n’ont pas été encore portés, vous pouvez suivre l’avancement pour ceux qui manquent à l’appel. Mais cela ne devrait concerner que peu d’utilisateurs. Certaines options de la ligne de commande n’existent plus par ailleurs, cela vous sera rappelé si vous les invoquiez. L’historique des précédentes transactions de paquets comme les mises à jour ou installations ne sont pas compatibles entre l’ancienne et la nouvelle version, vous ne pourrez donc pas voir vos anciennes transactions pour les annuler par exemple.

Tandis que la commande rpm utilise la version 4.20. Cette version permet de lister ou de supprimer les clés pour signer les paquets via la commande rpmkeys alors que l’outil rpmsign permet de signer les paquets avec l’algorithme ECDSA. La commande rpm elle-même permet d’afficher une sortie en format JSON, en plus du format XML déjà pris en charge depuis longtemps. Un nouveau plugin rpm-plugin-unshare apparaît pour empêcher à des scripts d’installation de faire certaines opérations sur le système de fichiers ou via le réseau pour des raisons de sécurité. Côté création de paquet, l’introduction de la directive BuildSystem est sans doute la plus importante pour permettre de définir de manière unique et générique la création de paquets basés sur des outils communs tels que autotools ou cmake. L’empaqueteur n’aurait pas besoin de rappeler pour ces outils courants chaque étape pour la création du paquet, sauf en cas de particularité, ce qui permet une meilleure maintenance et cohérence au sein de la distribution par exemple.

Les systèmes Fedora atomiques de bureau et Fedora IoT disposent de bootupd pour la mise à jour du chargeur de démarrage. La mise à jour du chargeur de démarrage au sein d’un système atomique n’est pas trivial, car ce n’est pas une opération facile à fiabiliser. Par conséquent rpm-ostree ne prenait pas cela en charge, et c’est pourquoi bootupd a été créé et est maintenant intégré dans ces versions. Il était déjà présent depuis quelque temps sur la version CoreOS ce qui a déjà donné un retour d’expérience en conditions réelles. Il peut prendre en charge les systèmes UEFI et BIOS, mais la mise à jour reste une étape manuelle pour être automatisée dans le futur, notamment quand le composant shim sera à jour pour rendre la mise à jour moins risquée sur les systèmes UEFI si la mise à jour est coupée au milieu de l’opération comme lors d’une coupure de courant ou lors d’un plantage. Il permet également de pouvoir bloquer l’usage de versions du chargeur de démarrage plus anciens ayant des failles connues, par l’usage de Secure Boot dbx et le paquet ostree-grub2 pourra être progressivement retiré, ce qui notamment mettra un terme au bogue où chaque déploiement est affiché deux fois dans l’interface de sélection de GRUB et devrait réduire le risque d’avoir certains problèmes lors de la mise à jour du système.

Les images atomiques de Fedora proposent les outils dnf et bootc, ce premier est utilisable dans un contexte de développement pour l’instant mais le second peut commencer à servir à déployer des images du système qui sont bootables. Plus tard il est prévu que dnf puisse remplacer rpm-ostree pour certaines actions. En attendant, en cas d’usage de dnf sur de tels systèmes, le message d’erreur sera plus explicite concernant les outils à employer pour réaliser ces actions. L’objectif est de fournir aux administrateurs systèmes des outils plus familiers pour ces différentes actions tout en ayant un outil clairement identifié pour chaque type de tâches.

Introduction de l’outil fedora-repoquery pour faire des requêtes sur les dépôts comme savoir la version exacte d’un paquet spécifique dans une autre version de Fedora, la date de mise à jour d’un dépôt, ou connaître les paquets qui dépendent d’un paquet spécifique (dépendance inverse donc), etc. Il fonctionne par-dessus dnf concernant cette fonction mais permet de facilement obtenir des informations depuis les dépôts Fedora, CentOS ou EPEL.

La bibliothèque de sécurité OpenSSL n’accepte plus les signatures cryptographiques avec l’algorithme SHA-1. Cet algorithme n’est plus considéré comme sûr, car il devient de plus en plus facile de générer des collisions à la demande. Si vous souhaitez les autoriser à nouveau pour des raisons légitimes, malgré le risque de sécurité, cela reste possible de le faire via la commande

# update-crypto-policies --set FEDORA40

Commande qui devrait être prise en charge pendant quelques versions encore.

Le gestionnaire de réseaux NetworkManager ne prend plus en charge la configuration dans le format ifcfg qui était déjà désuet depuis des années. Cela fait suite aux tentatives progressives d’utiliser massivement le format keyfile. Fedora Linux 33 en l’utilisant comme format par défaut pour les nouveaux profils de connexions, tandis que Fedora Linux 36 a poussé la prise en charge de l’ancien format dans un paquet dédié non installé par défaut nommé NetworkManager-initscripts-ifcfg-rh et enfin Fedora Linux 39 a entamé la conversion automatique vers le nouveau format. Et depuis longtemps NetworkManager ne fait que maintenir ce format, de nombreuses options ou types de connexions n’étant de fait pas possibles avec l’ancien format. Cela permet de préparer la suppression future de la prise en charge de ce format de fichier de NetworkManager lui-même.

Dans la même veine, le paquet network-scripts a été retiré, mettant fin à la gestion du réseau via les scripts ifup et ifdown. Depuis 2018 ces outils sont considérés comme obsolète et soumis à une suppression planifiée future. D’ailleurs le projet officiel ne fait plus une maintenance très active de ces outils.

Les interfaces réseaux pour les éditions Cloud vont utiliser les nouveaux noms par défaut (par exemple enp2s0f0) comme adoptés par les autres éditions il y a des années au lieu de conserver les noms traditionnels (tels que eth0). Cela signifie que le noyau ne recevra plus pour ces systèmes le paramètre net.ifnames=0 pour maintenir cet ancien comportement. Le reste de l’écosystème avait adopté la nouvelle nomenclature avec Fedora… 15 en 2011 ! Ce retard est attribuable à certains problèmes avec certains outils tels que cloud-init avec cette convention de nommage qui ont été résolus à la fin des années 2010 seulement. Ainsi les périphériques auront maintenant une correspondance physique, leur rôle devrait être plus facilement identifiable et limiter le risque de problèmes suite à des changements dynamiques des interfaces.

Le gestionnaire de virtualisation libvirt utilise maintenant par défaut le pare-feu nftables au lieu de iptables pour son interface réseau vibr0. En effet Fedora utilise par défaut nftables maintenant et par ailleurs utiliser iptables signifiait créer des règles nftables sous le capot. Cette transition est faite pour améliorer les performances et réduire le risque d’une suppression accidentelle de règles par une application tierce, car tout sera mis dans les règles associées à la table libvirt_network. iptables sera cependant utilisé si nftables n’est pas présent dans le système et le comportement peut être changé dans le fichier de configuration /etc/libvirt/network.conf.

L’outil Netavark pour gérer la pile réseau des conteneurs, notamment avec podman, utilise également par défaut le pare-feu nftables au lieu de iptables. Les avantages du changement sont assez similaires à ce qui est expliqué au point précédent, les règles associées à l’outil seront mises dans la table dédiée netavark. La possibilité d’envoyer les règles par lot peut améliorer de manière légère le temps de démarrage des conteneurs par ailleurs.

Le gestionnaire de conteneurs Kubernetes a des nouveaux paquets versionnés, permettant d’avoir plusieurs versions en parallèle. Ici les versions 1.29, 1.30 et 1.31 sont proposées avec des noms comme kubernetes1.31. Cela devenait nécessaire car Kubernetes maintient 3 versions sur une période de 4 mois par version seulement ce qui rend nécessaire un tel montage. Cela permet aussi de découpler la version de Kubernetes avec la version de Fedora Linux ce qui facilite la gestion pour les administrateurs.

L’implémentation des interfaces de Kubernetes fait par l’OCI a ses propres paquets cri-o et cri-tools qui sont également versionnés pour pouvoir suivre les versions de Kubernetes.

GIMP 3

Développement

Mise à jour de la suite de compilation GNU : binutils 2.42, glibc 2.40 et gdb 15.

Pour la suite d’outils binutils, cela se concentre surtout sur la prise en charge plus étendue des instructions des architectures Aarch64, RISC-V et x86_64. Il gère notamment les registres supplémentaires et les instructions associées proposés par l’évolution de l’architecture x86 avec Intel APX. L’assembleur BPF améliore son interopérabilité avec les outils de LLVM en suivant les mêmes conventions.

La bibliothèque standard C commence une prise en charge expérimentale de la norme C23. La capacité de renforcer la sûreté des programmes compilés avec le compilateur Clang a été aussi améliorée pour se rapprocher de ce qui est possible de faire avec le compilateur GCC. De nombreuses fonctions mathématiques ont une version vectorisée pour l’architecture Aarch64 ce qui peut améliorer les performances pour cette architecture.

Pour finir le débogueur améliore significativement son API Python pour faciliter sa manipulation à travers un programme ou script écrit dans ce langage. La prise en charge du protocole Debugger Adapter Protocol s’améliore encore pour faciliter sa manipulation par divers IDE qui s’en servent pour l’intégrer. Les informations de débogage du programme cible au format DWARF sont lues dans un fil d’exécution dédié pour améliorer le temps de chargement.

Mise à niveau de la suite de compilateurs LLVM vers la version 19. Les paquets versionnés des versions précédentes sont toujours disponibles pour ceux qui ont besoin de la compatibilité avec les anciennes bibliothèques. Les paquets clang, compiler-rt, lld et libomp sont maintenant générés à partir du fichier de spécification du paquet llvm ce qui n’était pas le cas avant. Cela permet entre autres de simplifier leur maintenance mais aussi d’appliquer une optimisation Profile-Guided Optimizations sur ces binaires pour améliorer les performances. Les paquets Fedora compilés avec Clang bénéficient aussi de la compilation avec l’option -ffat-lto pour avoir des bibliothèques ayant le bitcode LTO en plus du binaire au format ELF, ce qui permet de réduire le temps de l’édition de lien quand ces bibliothèques sont impliquées. Le tout sans recourir à des macros pour obtenir le résultat après la compilation des paquets et sans renoncer à la compatibilité pour les logiciels non compilés avec ce mode activé.

Retrait de Python 2.7 dans les dépôts, seule la branche 3 est maintenue dorénavant. Enfin, cela est vrai pour l’implémentation de référence, il reste possible de le faire via PyPy qui fourni toujours un support de la version 2.7 via le paquet pypy. Pour rappel, Python 2.7 n’est plus maintenu depuis début 2020, mais ce maintien était nécessaire pour certains paquets qui n’avaient toujours pas terminé leur portage, en particulier le logiciel GIMP, cas abordé plus haut. Les autres paquets concernés n’étaient plus vraiment maintenus de fait et ont été retirés. Cela devenait nécessaire car avec la fin de support de RHEL 7 prochainement, plus aucun correctif pour Python 2 ne sera développé à l’avenir rendant la situation plus critique encore.

D’ailleurs Python bénéficie de la version 3.13. Cette version fournit un nouvel interpréteur interactif avec la coloration activée par défaut pour le prompt ou les erreurs. Il donne la possibilité d’avoir de l’édition multi-lignes qui est préservée dans l’historique. Les touches F1, F2 et F3 donnent respectivement l’accès à une aide interactive, à la navigation de l’historique de l’édition et à un mode de copie plus simple pour copier-coller de gros blocs de code. Les messages d’erreur sont également plus clairs.

En dehors de cela, Python dispose du tant attendu mode sans verrou global nommé GIL ce qui permet d’améliorer les performances et de faire de réels fils d’exécution parallèle dans un programme. Mais ce mode étant expérimental, il faut installer le paquet python3.13-freethreading et exécuter Python avec la commande python3.13t pour en profiter.

Le compilateur juste à temps n’est quant à lui pas fourni d’une façon ou d’une autre, cette fonctionnalité étant aussi expérimentale.

Python est aussi compilé avec l’optimisation -O3 activée, en ligne avec la manière de faire par le projet officiel et améliorant les performances. Selon le test pyperformance le gain de performance est en moyenne 1,04 fois plus rapide rien qu’avec cette option. Auparavant Python était compilé avec l’optimisation -O2 qui est moins agressive, cependant la nouvelle option augmente la taille des binaires concernés d’environ 1.2% (soit 489 kio).

Le framework d’écriture de tests en Python, Pytest se teste avec sa version 8. Cette version n’est pas compatible avec la version précédente, de nombreux éléments obsolètes sont maintenant traités comme des erreurs, et de même la façon dont les tests sont récupérés dans l’arborescence d’un code source a été modifiée ce qui peut poser différents problèmes.

En termes d’amélioration, il propose un meilleur affichage des diff en cas d’erreur lors de l’exécution d’un test, le rendant plus lisible et plus proche du visuel d’un différentiel généré à partir de la commande diff.

Mise à jour du langage Go vers la version 1.23. Cette version apporte la télémétrie pour collecter des données sur l’usage de la chaine de compilation Go aux développeurs du projet, par défaut dans Fedora la télémétrie est activée mais reste uniquement sur votre machine, rien n’est envoyé aux serveurs du projet. Ce comportement peut être changé dans les options.

Autrement, quand le temps de compilation est amélioré lorsqu’un profil d’optimisation est utilisé, passant d’un délai supplémentaire pouvant aller jusqu’au double du temps de compilation normal à maximum 10% supplémentaire maintenant. Les applications Go ont un usage de la pile qui est légèrement réduit tandis que pour l’architecture x86_64, au détriment d’une légère augmentation de la taille du binaire, les boucles peuvent avoir une amélioration de performances d’environ 1-1,5%.

Mise à jour dans l’écosystème Haskell GHC 9.6 et Stackage LTS 22. Le compilateur en lui-même propose de compiler le code pour être exécuté en tant que programme WebAssembly ou JavaScript. Les deux sont cependant considérés comme en développement et peuvent être sujets à des bogues. L’ensemble des messages d’erreur ont maintenant un code unique, permettant de simplifier la recherche d’une explication et d’une solution concernant celui-ci.

Le langage Perl passe à la version 5.40. Un nouveau mot clé __CLASS__ donne la classe d’exécution réelle dont l’instance d’objet est membre, ce qui est utile pour les constructeurs de classes enfants, car l’accès à $self n’étant pas autorisé dans ce contexte. Un autre mot clé :reader est proposé, ajouté à un membre de classe il permet de définir automatiquement une fonction du même nom que le membre, qui renvoie cette valeur. Un nouvel opérateur ^^ est disponible, étant l’équivalent de && et || mais pour la fonction logique ou exclusif.

Node.js 22 devient la version de référence, tandis que la version 20 et 18 restent disponibles en parallèle. Cette version propose entre autres un client Websocket natif sans dépendances additionnelles, une mise à jour habituelle du moteur JavaScript V8 vers la version 12.4 qui propose notamment un ramasse-miette WebAssembly. Les flux de données passent par défaut d’un buffer de 16 kib à 64 kib ce qui augmente les performances au détriment de la consommation de mémoire vive. Enfin le compilateur JIT Maglev fourni par le moteur V8 est activé par défaut, qui améliore les performances en particulier pour les petits programmes exécutés en ligne de commande.

Pour des raisons de changement de licence, le gestionnaire de bases de données clé-valeur Redis est remplacé par Valkey. En effet Redis a adopté la licence RASLv2/SSPL en remplacement de la licence BSD qui n’est pas une licence libre ce qui est en conflit avec les règles de Fedora concernant les licences des logiciels proposés dans ses dépôts. Valkey est un fork de Redis qui réutilise la même licence originelle. À ce jour pas d’incompatibilité est à prévoir pour les utilisateurs de ce logiciel, mais un paquet valkey-compat est proposé pour migrer la configuration et les données depuis Redis. Le changement est effectué automatiquement lors de la mise à niveau de Fedora pour ces utilisateurs.

La bibliothèque Python d’apprentissage profond Pytorch est éclairée avec sa version 2.4. Le changement majeur de cette version est la prise en charge de ROCm pour tirer parti de l’accélération matérielle de l’intelligence artificielle proposée par AMD. Il y a également une amélioration de performances pour ceux utilisant GenAI sur un CPU ou encore exécutant sur des processeurs AWS Graviton3 à base d’architecture Aarch64.

L’API engine de la bibliothèque OpenSSL est dépréciée car non maintenue tout en gardant une ABI stable. En effet cette API n’est pas conforme aux standards FIPS et n’est plus maintenue depuis la version 3.0 d’OpenSSL. Aucun nouveau paquet ne peut dépendre de celui-ci jusqu’à sa suppression définitive pour simplifier la transition. Le code lié à cette API est fourni par le paquet indépendant openssl-engine-devel pour ceux qui en ont besoin. L’objectif à terme est de simplifier la maintenance tout en réduisant la surface d’attaque.

Projet Fedora

L’édition de Fedora KDE pour l’architecture AArch64 est maintenant bloquante pour les sorties d’une nouvelle version. L’édition doit être suffisamment stable pour qu’une nouvelle version de Fedora Linux voit le jour. Cela était déjà le cas pour Fedora Workstation de cette architecture et pour Fedora KDE pour l’architecture x86_64. L’objectif est de garantir une certaine fiabilité pour ses utilisateurs.

Phase 4 de l’usage généralisé des noms abrégés de licence provenant du projet SPDX pour la licence des paquets plutôt que des noms du projet Fedora. Cela devait être l’ultime phase mais quelques contretemps repoussent à nouveau l’échéance. Cette étape et la suivante sont en fait la conversion massive des paquets vers le nouveau format, comme rapporté par ce document, la progression reste rapide et près de 98,5% des licences mentionnées dans les paquets sont déjà converties.

Les bibliothèques Java n’ont plus une dépendance explicite envers le runtime de Java pour simplifier la maintenance, rien ne change concernant les applications. L’objectif est d’éviter de spécifier une version spécifique de la version de Java pour du code qui finalement n’est pas exécuté directement, la dépendance revenant plutôt aux applications à ce sujet. Cela peut faciliter les utilisateurs ou mainteneurs d’utiliser différents JDK pour ces bibliothèques. Cela simplifie considérablement aussi la maintenance des paquets Java dans Fedora, car il n’est plus nécessaire de mettre à jour la valeur de la version du JRE requis.

Le paquet systemtap-sdt-devel n’a plus l’outil dtrace qui a été mis dans le paquet systemtap-sdt-dtrace. L’objectif est de supprimer la dépendance Python dans ce paquet qui est utilisé pour l’image de compilation des paquets de Fedora. Plusieurs centaines de paquets peuvent ainsi être générés plus rapidement par cette dépendance en moins.

Ajout d’une tâche de nettoyage lors de la génération des paquets RPM pour améliorer la reproductibilité des paquets. Depuis quelques années Fedora fait un effort pour rendre la conception de ses paquets reproductibles. L’objectif est qu’un utilisateur devrait être en mesure de recompiler un paquet de son côté avec le fichier spec RPM + sources additionnelles de Fedora et obtenir exactement le même paquet, au bit près, garantissant que le paquet a été généré avec ces éléments sans altérations malveillantes. Cela peut également faciliter le développement, car il rend la comparaison entre versions d’un paquet plus facile à analyser car seuls les changements dans le code sont différents et non des éléments annexes.

Un effort a été fait récemment qui repose notamment sur l’usage du programme add-determinism pour retirer du code source des éléments non déterministes comme la date de compilation. Ce programme est appelé à la fin de la génération du paquet. Fedora n’a pas réutilisé le travail de Debian à base du script strip-nondeterminism qui est un script Perl qui ajouterait une dépendance relativement lourde pour générer tous les paquets de Fedora.

Mise à jour de createrepo_c à la version 1.0 qui gère la génération des métadonnées des dépôts de Fedora. Les versions stables et Rawhide de Fedora vont partager maintenant la même configuration des métadonnées, ce qui rendra la maintenance côté infrastructure plus simple et cohérente. Toutes les métadonnées sont compressées, avant seulement les métadonnées primaires l’étaient pour les versions stables de Fedora par exemple. Certaines données ou métadonnées étaient compressées suivant différents algorithmes :

  • gzip pour les métadonnées des dépôts ;
  • XZ pour les données XML concernant les mises à jour dans les dépôts concernés.

Maintenant tout cela utilise l’algorithme zstd ce qui devrait améliorer un peu la bande passante et la consommation d’espace de stockage. Il n’est pas exclu de basculer à l’avenir sur zlib-ng dans ce but.

Les fichiers sqlite renseignant la composition des dépôts n’étaient utiles que pour le gestionnaire de paquets YUM, avec son remplacement par DNF depuis quelques années il est inutile de les générer ce qui avait un coût en espace de stockage.

La communauté francophone

L’association

Logo de Boorsalinux-fr

Borsalinux-fr est l’association qui gère la promotion de Fedora dans l’espace francophone. Nous constatons depuis quelques années une baisse progressive des membres à jour de cotisation et de volontaires pour prendre en main les activités dévolues à l’association.

Nous lançons donc un appel à nous rejoindre afin de nous aider.

L’association est en effet propriétaire du site officiel de la communauté francophone de Fedora, organise des évènements promotionnels comme les Rencontres Fedora régulièrement et participe à l’ensemble des évènements majeurs concernant le libre à travers la France principalement.

Si vous aimez Fedora, et que vous souhaitez que notre action perdure, vous pouvez :

  • adhérer à l’association : les cotisations nous aident à produire des goodies, à nous déplacer pour les évènements, à payer le matériel ;
  • participer sur le forum, les listes de diffusion, à la réfection de la documentation, représenter l’association sur différents évènements francophones ;
  • concevoir des goodies ;
  • organiser des évènements type Rencontres Fedora dans votre ville.

Nous serions ravis de vous accueillir et de vous aider dans vos démarches. Toute contribution, même minime, est appréciée.

Si vous souhaitez avoir un aperçu de notre activité, vous pouvez participer à nos réunions mensuelles chaque premier lundi soir du mois à 20h30 (heure de Paris). Pour plus de convivialité, nous l’avons mis en place en visioconférence sur Jitsi.

La documentation

Depuis juin 2017, un grand travail de nettoyage a été entrepris sur la documentation francophone de Fedora, pour rattraper les 5 années de retard accumulées sur le sujet.

Le moins que l’on puisse dire, c’est que le travail abattu est important : près de 90 articles corrigés et remis au goût du jour.
Un grand merci à Charles-Antoine Couret, Nicolas Berrehouc, Édouard Duliège et les autres contributeurs et relecteurs pour leurs contributions.

La synchronisation du travail se passe sur le forum.

Si vous avez des idées d’articles ou de corrections à effectuer, que vous avez une compétence technique à retransmettre, n’hésitez pas à participer.

Comment se procurer Fedora Linux 41 ?

Logo de Fedora Media Writer

Si vous avez déjà Fedora Linux 40 ou 39 sur votre machine, vous pouvez faire une mise à niveau vers Fedora Linux 41. Cela consiste en une grosse mise à jour, vos applications et données sont préservées.

Autrement, pas de panique, vous pouvez télécharger Fedora Linux avant de procéder à son installation. La procédure ne prend que quelques minutes.

Nous vous recommandons dans les deux cas de procéder à une sauvegarde de vos données au préalable.

De plus, pour éviter les mauvaises surprises, nous vous recommandons aussi de lire au préalable les bogues importants connus à ce jour pour Fedora Linux 41.

Commentaires : voir le flux Atom ouvrir dans le navigateur

img, le cache d’images sur LinuxFr.org

Le site LinuxFr.org utilise divers logiciels libres pour son fonctionnement et ses services : une large majorité provient de projets tiers (Debian, MariaDB, Redis - version d’avant le changement de licence, nginx, Postfix, conteneurs LXC et Docker, Ruby On Rails, Sympa, etc.) et d’autres composants sont développés pour nos propres besoins. Cette dernière catégorie comprend le code principal du site web en Ruby On Rails, et principalement 5 services autour : le cache d’images img, la tribune board, le convertisseur EPUB 3 epub, le partageur sur les réseaux sociaux share et le convertisseur LaTeX vers SVG svg. Cette dépêche va s’intéresser à img, un code sous AGPLv3.

Elle est née d’une envie personnelle d’expliquer, documenter et montrer ce qui a été fait sur le cache d’images de LinuxFr.org, complétée d’une demande d’un « article technique sur le fonctionnement de ce cache, les choix techniques qui ont été faits, les erreurs commises donc à éviter… ».

    Sommaire

    Des images sur le site

    LinuxFr.org vous permet d’utiliser des images externes dans les contenus et commentaires du site. Ces images sont incluses en syntaxe markdown avec ![description textuelle](adresse "titre optionnel") (soit en saisissant directement du Markdown, soit en cliquant sur l’icône d’ajout d’image dans l’éditeur). Profitons-en pour rappeler que pour utiliser une image sur LinuxFr.org, vous devez vous assurer de respecter sa licence.

    Nous vous encourageons donc à utiliser des images sous licence libre et à citer les auteurs (c’est même obligatoire pour les licences CC-by et CC-by-sa). Cette citation est tirée de la dépêche d’annonce Un nouveau reverse-proxy cache pour les images externes sur LinuxFr.org de 2012.

    Il est aussi recommandé de mettre une vraie description textuelle, qui finira dans l’attribut alt de la balise img utilisée pour l’accessibilité ou si l’image ne peut être chargée. Il peut être utile de lui donner un titre qui apparaîtra l’autre du survol de l’image à la souris par exemple.

    Exemple :

    ![Logo LinuxFr.org](https://linuxfr.org/images/logos/linuxfr2_classic_back.png "L’actualité du logiciel libre et des sujets voisins (DIY, Open Hardware, Open Data, les Communs, etc.), sur un site francophone contributif géré par une équipe bénévole par et pour des libristes enthousiastes.")

    Logo LinuxFr.org

    Buts du cache d’images

    Les raisons évoquées à la mise en place de img (sans ordre particulier) :

    • la sécurité : si une image externe n’est servie qu’en HTTP (en clair donc) et est appelée au milieu d’une page LinuxFr.org elle-même servie en HTTPS, alors le navigateur va râler sur le mélange des genres. img permet de servir toutes les images identiquement (par exemple en HTTPS, et avec le certificat de LinuxFr.org, via le serveur frontal devant img). À noter que ces images ne sont pas servies directement depuis le domaine principal linuxfr.org mais depuis un sous-domaine img.linuxfr.org pour éviter que le JavaScript embarqué dans les images en SVG puisse servir de vecteur d’attaque contre le site.
    • la protection de la vie privée des personnes visitant LinuxFr.org : seul LinuxFr.org voit les informations en provenance de leur navigateur (dont l’adresse IP). Les équipes d’administration des différents sites ne les voient plus (elles voient l’adresse IP du serveur LinuxFr.org).
    • une meilleure gestion du trafic : au lieu d’envoyer tout notre public chercher individuellement chaque image, LinuxFr.org la récupère une fois et la rend disponible. Si le site externe fournissant l’image est un serveur à faibles ressources (liaison ADSL avec faible débit montant par exemple), la mise en cache permet de garantir qu’il ne recevra qu’un faible volume de requêtes (la récupération se faisant initialement toutes les 10 min tant que des demandes arrivent, le cache expirant après 10 min).
    • la conservation des images : les images incluses depuis des sites externes peuvent ne plus être disponibles (l’entité a disparu, le serveur a été arrêté, le domaine a été perdu, l’adresse a changé, etc.). Nous avons donc un mécanisme de cache pour que nous puissions continuer à servir une image même si elle devient indisponible.

    Parmi les conséquences de cette implémentation initiale, on peut citer :

    • si le fichier est changé sur le serveur distant (modifié, converti dans un autre format), l’ancien fichier est servi jusqu’à la prochaine récupération et le nouveau fichier ne sera servi qu’à la prochaine récupération ;
    • si le fichier est supprimé sur le serveur distant, l’image ne sera plus servie après la prochaine récupération (car le serveur a répondu que l’image n’existe plus) ;
    • il est possible de modifier l’image au passage : les images d’avatar sont retaillées pour une hauteur de 64 pixels par exemple ;
    • il est possible de bloquer des images : les images problématiques (pub/spam, contenus pour adultes, images injurieuses, etc.) peuvent être bloquées et ne plus être servies ;
    • par ailleurs img n’accepte de servir que les images connues de LinuxFr.org dont le poids fait moins de 5 MiB.

    À l’utilisation

    Lors de l’écriture d’un commentaire ou d’un contenu sur LinuxFr.org, une personne va ajouter une image externe via la syntaxe Markdown, par exemple ![Logo LinuxFr.org](https://linuxfr.org/images/logos/linuxfr2_classic_back.png)

    Ce qui donne à l’affichage :

    Logo LinuxFr.org

    Et côté code HTML :

    <img src="https://linuxfr.org/images/logos/linuxfr2_classic_back.png" alt="Logo LinuxFr.org">

    OK, mauvais exemple ce n’est pas une image externe, puisqu’elle est hébergée sur LinuxFr.org justement. Prenons un autre exemple ![April - Campagne d’adhésion](https://april.org/campagne-2024/relais/banniereCampagneApril.svg).

    Ce qui donne à l’affichage :

    April - Campagne d’adhésion

    Et côté code :

    <img src="//img.linuxfr.org/img/68747470733a2f2f617072696c2e6f72672f63616d7061676e652d323032342f72656c6169732f62616e6e6965726543616d7061676e65417072696c2e737667/banniereCampagneApril.svg" alt="April - Campagne d’adhésion" title="Source : https://april.org/campagne-2024/relais/banniereCampagneApril.svg">

    Donc on sert l’image via le sous-domaine img.linuxfr.org. On peut aussi noter le titre rempli automatiquement avec la source. Expliquons la nouvelle adresse :

    • // on sert en https si la page est en https et en http si la page est en http (c’est plutôt un oubli qu’autre chose, vu que le site est uniquement en https)
    • img.linuxfr.org on sert depuis un sous-domaine du site
    • 68747470733a2f2f617072696c2e6f72672f63616d7061676e652d323032342f72656c6169732f62616e6e6965726543616d7061676e65417072696c2e737667 est la version en texte-vers-hexadécimal de l’adresse d’origine (68 pour h, 74 pour t (deux fois), 70 pour p, etc.). Il existe des sites et des outils en local pour faire cette conversion, mais cela ne concerne pas la simple utilisation du site.
    • banniereCampagneApril.svg on met à la fin le nom du fichier pour être sympa si vous voulez sauver l’image en local avec un nom plus explicite

    Ceci était le cas où tout se passe bien, comme prévu, comme le voulait la personne qui voulait utiliser une image externe.

    Voyons maintenant ce qui se passe dans le cas pas si rare où la personne a donné une adresse d’image invalide, une adresse ne pointant pas vers une image vers autre chose (cas extrêmement fréquent), une image trop grosse (plus de 5 MiB), etc. Il se passe la même chose côté code, mais côté affichage, pas d’image, et on voit seulement le texte alternatif dans son navigateur. Dans les coulisses, img a répondu 404, cette adresse n’est pas disponible.

    On note donc qu’une même image servie en http:// ou en https:// aura une adresse convertie en hexadécimal différente, donc sera vue comme une autre image par img. Même chose si le serveur externe accepte des adresses sans tenir compte de la casse, ou si on rajoute des paramètres dans l’adresse comme « ?mot_magique=merci ».

    Côté code Ruby on Rails

    Un contenu ou commentaire est en cours de création et une image externe a été mentionnée. Le code de gestion des images va vérifier que l’image est déclarée dans redis (créer l’entrée img/<adresse> avec adresse l’adresse de l’image en clair, ajouter un champ created_at avec l’horodatage, ajouter l’adresse dans la liste des dernières images img/latest) et renvoyer l’adresse via img.

    Le code peut aussi modifier le champ status d’une image dans redis pour mettre ou enlever un blocage (valeur Blocked) par l’équipe du site, et l’ajouter/enlever de la liste des images bloquées img/blocked.

    Côté img

    Les schémas dans la documentation du service img explicitent les possibilités et les comportements.

    Il est possible de faire un GET /status et on obtient une réponse HTTP 200 avec un contenu OK. C’est utile pour tester que le service est lancé (depuis l’intérieur de la plateforme).

    Sinon, on peut envoyer des requêtes GET /img/<adresse_en_hexa> or GET /img/<adresse_en_hexa>/<nom_de_fichier> pour les images, et GET /avatars/<adresse_en_hexa> ou GET /avatars/<adresse_en_hexa>/<nom_de_fichier> pour les avatars.

    En se limitant aux requêtes légitimes, le comportement de img est le suivant :

    • l’adresse demandée a été précédemment déclarée (dans redis par la partie code Ruby On Rails) sinon il répond 404 ;
    • l’adresse demandée n’est pas bloquée par l’équipe du site sinon il répond 404 ;
    • l’adresse est déjà dans le cache disque, alors il renvoie l’image ;
    • l’adresse n’est pas dans le cache disque et la récupération échoue, il renvoie 404 (et va noter temporairement l’échec dans img/err/<uri>) ;
    • l’adresse n’est pas dans le cache disque et la récupération a lieu (noté temporairement dans img/update/<uri>): si le serveur répond positivement à la demande, avec une image comme attendue, pas trop volumineuse, alors on la met en cache disque. Si c’est un avatar, on peut retailler l’image. On aura des champs supplémentaires stockés type avec la nature de l’image (en-tête Content-Type), checksum avec un hachage SHA1 et etag avec la valeur ETag (entête ETag).

    Le cache est rafraîchi régulièrement.

    img est un binaire statique en Go. Il offre des options pour définir le couple adresse:port d’écoute, pour définir où envoyer les logs, pour se connecter à une base redis, pour définir le répertoire du cache disque, pour choisir le User-Agent qui sera utilisé pour les requêtes externes, pour définir l’avatar qui sera renvoyé par défaut, et la possibilité de le lancer uniquement en mode audit interne pour vérifier la cohérence et l’état des données et des fichiers.

    Dans les logs on va trouver des infos comme :

    2024/10/20 20:39:24 Status code of http://example.invalid/exemple1.png is: 404
    2024/10/20 20:39:24 Fail to fetch http://example.invalid/exemple1.png (serve from disk cache anyway)
    2024/10/20 20:44:12 Fetch http://example.invalid/exemple2.png (image/png) (ETag: "be5e-4dba836030980")
    2024/10/20 20:44:12 http://example.invalid/exemple3.png has an invalid content-type: text/html;charset=UTF-8
    2024/10/20 20:44:12 Fail to fetch http://example.invalid/exemple3.png (serve from disk cache anyway)
    

    Ici l’exemple 1 est déjà en cache et peut être servi même si on échoue à le récupérer à ce moment-là. L’exemple 2 vient d’être récupéré. L’exemple 3 a désormais une adresse invalide (qui renvoie une page HTML au lieu d’une image) mais il existe en cache une image précédemment récupérée.

    Historique

    img a été créé par Bruno Michel en 2012. Adrien Kunysz amène 5 commits en novembre 2013, mais globalement Bruno est le seul à travailler dessus (43 commits) jusqu’en 2018. img fait le job et il n’est pas besoin d’y retoucher trop souvent.

    En 2022, Bruno quitte l’équipe du site, et par ailleurs il y a des montées de versions et des migrations à faire sur les serveurs de LinuxFr.org, et img fait partie des services à reprendre en main. Ce qui veut dire le comprendre, le documenter et au besoin l’améliorer.

    Bref je décide de me plonger dans img (2022-2024), car a priori ce n’est pas le composant le plus compliqué du site (il vit dans son coin, il offre une interface, c’est du Go, donc on a un binaire seulement à gérer).

    Étape 1 : je vais commencer par ajouter un Dockerfile permettant de recompiler img dans un conteneur, en contrôlant la version de Go utilisée, en effectuant une détection d’éventuelles vulnérabilités au passage avec govulncheck. Cela me permet de valider que l’on sait produire le binaire d’une part, et que l’on offre à tout le monde la possibilité de contribuer facilement sur ce composant.

    Étape 2 : je vais tester le composant pour vérifier qu’il fonctionne comme je le pense et qu’il fait ce qu’on attend de lui. Je vais ajouter une suite des tests qui couvrent les différentes fonctionnalités et les vérifient en IPv4 et en IPv6, en HTTP 1.1 et en HTTP 2.0. Les tests utilisent Hurl et docker-compose (avec des images redis et nginx), et encore une fois l’idée de donner la possibilité de contribuer facilement. Ils comprennent des tests de types de contenus non pris en charge, le test de la limite à 5 MiB, différents types d’images, le test de vie, des appels erronés (mauvais chemin, mauvaise méthode, etc). Le choix des cas de tests est basé sur le trafic réellement constaté sur le serveur de production, sur les différents cas dans le code et un peu sur l’expérience du testeur.

    Étape 2,5 : l’avatar par défaut renvoie sur le site de production, y compris sur les tests en développement en local et sur le serveur de test du site. J’en profite pour ajouter un paramètre pour cela (et cela permettra de passer du PNG au SVG par défaut).

    Étape 3 : encore une fois essayons de simplifier la vie d’hypothétiques personnes contributrices. Une petite modification pour que hurl et redis soient fournis via docker-compose et ne soient plus nécessaires sur le poste de développement.

    Étape 4 : il est temps de documenter plus le fonctionnement. J’avais déjà décrit les infos stockées dans redis, mais pour comprendre le système de cache, autant fournir des diagrammes pour illustrer ce qui se passe lors d’une requête et comment on passe d’un état à un autre. C’est aussi l’occasion de compléter la suite de tests en ajoutant des tests avant et après expiration du cache, histoire de pouvoir documenter ces cas précis.

    Étape 5 : en cas d’échec de récupération, une image était indisponible jusqu’à la prochaine récupération (donc potentiellement pendant 10 min). Autant servir l’ancienne version en cache lorsque cela se produit : je modifie le code et les tests en conséquence.

    Étape 6 : je sais que certaines images ont été perdues, que des adresses d’images ont toujours été erronées, que des contenus et commentaires ont été supprimés et qu’il n’y a donc plus lieu de garder les images associées. Je décide d’implémenter dans img un audit interne qui indiquera si des anomalies sont présentes dans redis, si des images sont indisponibles ou si des entrées dans le cache disque ne correspondent plus à aucune image. Et j’ajoute cet audit dans la suite de tests.

    Étape 7 : j’écris une dépêche pour parler de tout cela.

    Évolutions récentes

    Dockerfile

    Le fichier Dockerfile du projet permet :

    • de partir d’une image officielle Go d’une version donnée, basée sur une distribution minimale Alpine
    • de l’utiliser pendant la construction en prenant la liste des dépendances, en les téléchargeant, en prenant l’unique fichier source img.go et en le compilant statiquement avec l’option pour retirer les chemins de compilation
    • de rechercher les éventuelles vulnérabilités avec govulncheck
    • d’ajouter le paquet tzdata pour avoir les définitions fuseaux horaires (nécessaire pour les conversions de/vers GMT pour les entêtes type Last-Modified).
    • de repartir d’une base Alpine en y mettant les définitions de fuseaux horaires et le binaire issus de la partie construction, de déclarer le port d’écoute et de lancer le binaire avec des variables disposant de valeurs par défaut.

    La suite de tests

    Pour l’utiliser, c’est assez simple, il faut aller dans le répertoire tests et lancer un docker-compose up --build, qui va produire le conteneur contenant img, et démarrer le redis et le nginx préconfigurés pour les tests. Si tout va bien, on attend, et au bout d’un moment il s’affiche :

    linuxfr.org-img-test_1  | All tests look good!
    tests_linuxfr.org-img-test_1 exited with code 0
    

    Rentrons un peu dans les détails.

    D’abord un fichier docker-compose.yaml qui décrit le réseau IPv4/IPv6 utilisé pour les tests, l’image redis qui sera utilisée (stockage géré par docker), l’image nginx qui sera utilisée avec sa configuration et ses fichiers à servir pour les tests, l’image img et son paramétrage (dont l’accès au redis et au nginx) ainsi que le répertoire du cache et enfin l’image de la suite de tests qui est construit avec son Dockerfile, prévue pour faire du Docker-in-Docker et avoir accès au cache img et aux fichiers nginx.

    Le Dockerfile de tests est basé sur une image Hurl (un outil pour faire des tests HTTP). On ajoute les fichiers de tests en .hurl, le script shell qui pilote le tout, on prévoit d’avoir les paquets dont on aura besoin : bash (pas par défaut dans les Alpine), coreutils, docker et xxd (pour les conversions texte vers hexadécimal). Et on lance les tests par défaut.

    La configuration nginx de test écoute en HTTP sur le port 80 en IPV4 et IPv6 et permet de définir des chemins avec des réponses en HTTP 301, 302, 308, 400, 401, 403, etc. jusqu’à 530 et même 666 pour les codes invalides, ainsi qu’une redirection infinie.

    Dans les données de tests servies par nginx, on trouve des contenus du mauvais type, une image destinée à être bloquée, des images dans divers formats, une image très grande en pixels mais pas trop en octets, une image trop grande en octets, et un avatar à servir par défaut.

    Sont aussi présents cinq fichiers de tests avec une extension en .hurl :

    • le test de vie et les chemins hors img/ et avatars/
    • les tests sur les avatars : adresse valide ou invalide, image inexistante, bon et mauvais types, comportements sur les différents codes HTTP et sur une boucle de redirection infinie
    • les tests sur les images (découpés en trois parties, la partie initiale, la partie entre la récupération initiale et l’expiration du cache et enfin la partie après la récupération et l’expiration du cache.

    Vient enfin le script shell qui pilote le tout :

    • on définit les variables pour les cibles IPv4/IPv6 et les binaires redis et img que l’on veut utiliser dans les autres conteneurs Docker
    • on liste les images dans différentes catégories :
      • celles qui vont échouer et ne comporteront donc qu’une entrée dans redis sans rien dans le cache disque (avec sous-catégories possibles bloquées/non-bloquées)
      • les images devant être en erreur
      • les images qui iront normalement dans le cache
    • on prépare des images qui seront altérées plus tard
    • on purge le cache sur disque, on nettoie redis et on déclare toutes nos images comme le faire le code Ruby on Rails. Certaines sont déclarées bloquées pour les tests.
    • on lance les premiers tests (en IPv4 et IPv6, en HTTP 1.1 et en HTTP 2.0)
    • on modifie certaines images pour simuler un changement sur le serveur externe, une suppression sur le serveur externe ou un blocage par l’équipe de site
    • on lance les tests post-récupération initiale mais avant l’expiration du cache (toujours avec toutes les variantes)
    • on force l’expiration du cache
    • on lance les tests post-expiration du cache (toujours avec toutes les variantes)
    • si on est arrivé jusqu’ici, c’est qu’on a passé tous les tests Hurl, alors maintenant on recompte ce que l’on a dans redis et sur disque et on vérifie si ça correspond à nos attentes
    • on nettoie les images mises volontairement en échec
    • on lance le test d’audit interne qui doit nous dire que tout va bien
    • si on est arrivé jusque-là on écrit que tout va bien et on déclenche un sourire de satisfaction.

    L’audit interne

    L’objectif est de vérifier la cohérence des données dans redis, si des images sont indisponibles ou si des entrées dans le cache disque ne correspondent plus à aucune image.

    Le binaire d’img peut donc être appelé en mode audit et lancer des contrôles internes.

    D’abord il collecte la liste des fichiers dans le cache disque.

    Ensuite il vérifie que toutes les images listées dans les dernières images (img/latest) existent comme entrées individuelles.

    Puis il vérifie s’il existe des images bloquées (il râlera s’il y en a) et si chacune existe comme entrée individuelle le cas échéant.

    Ensuite on parcourt tous les entrées individuelles d’images :

    • on râle si on tombe sur une entrée img/updated/ ou img/err/ sans date d’expiration
    • on râle si on tombe sur une entrée img/ sans champ created_at, sans type ou d’un type inconnu, sans checksum, avec un statut inconnu, une image bloquée non présente dans les images bloquées, un champ inconnu, une présence inattendue dans le cache disque, etc. Et on marque les images que l’on a vu passer comme attendu dans le cache.
    • on râle sur tous les fichiers du cache restants (ne correspondant à aucune image)
    • si on a râlé, on renvoie 1, sinon 0

    Le grand nettoyage

    img a fonctionné pendant 12 ans en production : il a rencontré des bugs, des comportements inattendus, des contenus et commentaires ont été supprimés ou réédités, etc. Il est donc probable qu’il y ait besoin d’aller dépoussiérer un peu tout cela et de retirer ce qui est inutile.

    Les traces du grand nettoyage sont d’abord visibles dans la rétrospective de la première quinzaine de septembre 2024 :

    • une « image » sur sept présente un souci (n’est pas une image, adresse invalide, trop grosse, etc.) et n’est donc pas dans le cache sur disque (ce qui a conduit à pas mal de taf sur la partie gestion des images)
    • les types de contenu (Content-Type) en provenance de sites variés et divers, c’est quelque chose… entre les « image/JPEG » ou « image/PNG » en majuscules parce que, les charset=utf-8 ou UTF-8 ou… sur du binaire, les name= qui ne sont pas dans la norme… Wikimedia renvoie aussi du profile="https://www.mediawiki.org/wiki/Specs/SVG/1.0.0" (pareil ça semble en dehors de tout standard).

    D’abord j’attaque le sujet la fleur au fusil en me disant que ça va passer crème, je fais un joli tableau qui résume l’état initial :

                                  img/<uri>   img/updated/<uri>   img/err/<uri>   blocked
    total                           25565 -21       634               160            5
    
    no created_at                      23 -23         0                 0            0
    created_at                       2857 -3          0                 5            1
    created_at+type                   222             0                 0            0
    total not in cache               3104 -26         0                 0            0
    
    created_at+type+checksum(+etag) 22463 +5        634               155            4
    
    files in cache                  22778 +5
    

    Donc on a officiellement 25 565 images, mais 23 sont mal créées (état théoriquement impossible hors race condition), 222 sont incomplètes (état théoriquement impossible race condition), 22 463 sont attendues en cache et on a 22 778 fichiers dans le cache. Ça part mal. Je nettoie en premier le plus facile (on voit le delta +/- de mes corrections). Et on arrive à une situation où une image sur sept présente alors un souci et il faut gérer un grand volume de corrections à faire.

    Parmi les soucis on trouve des types de contenus inattendus (image/PNG ou image/JPEG avec majuscules, image, des images binaires annoncées avec un charset, des types invalides comme image/jpg au lieu de image/jpeg, etc), des erreurs de notre lectorat (mauvais lien, mauvais copier-coller, lien vers une page web au lieu d’une image), mais aussi des espaces insécables et autres blancs inopportuns, des guillemets convertis, des doubles scheme (http://https:// ou http://file://).

    Après cela se cache une autre catégorie encore plus pénible : les images que l’on a en cache, mais qui ne sont plus utiles au site : par exemple celles qui étaient dans des contenus ou commentaires supprimés (notamment le spam), celles qui étaient dans des commentaires ou contenus réédités depuis, etc.

    Un problème connu est devenu vite pénible : on n’a pas d’association entre les images externes et les contenus/commentaires concernés. Donc il faut d’abord extraire la liste de toutes les déclarations d’images externes des 12 tables SQL où l’on peut trouver des images et des avatars, sous forme HTML ou Markdown.

    Ensuite il faut sortir toutes les entrées dans redis et regarder si on les retrouve en clair ou converties en hexadécimal dans l’extraction SQL.

    Et par sécurité on fera une double vérification pour celles détectées en erreur, en relançant une recherche en base (attention à la casse dans la recherche texte).

    Au final, on peut supprimer des milliers d’entrées redis et de fichiers dans le cache.

    Et un jour l’audit dit :

    Connection 127.0.0.1:6379 0
    2024/10/19 12:11:21 Sanity check mode only
    2024/10/19 12:11:37 Files in cache: 17926
    2024/10/19 12:11:39 Total img keys in redis: 18374
    OK
    

    Ça aura pris un mois et demi (l’audit a été fusionné le 8 septembre 2024), certes pas en continu, mais ça a été long et guère palpitant de faire ce grand ménage. Et j’ai refait une seconde passe du traitement complet la semaine d’après pour vérifier que tout se passait correctement et que les soucis résiduels après tout ça étaient minimes ou nuls.

    Parmi les anecdotes, Web Archive / archive.org a eu sa fuite de comptes utilisateurs et a été indisponible sur la fin (ce qui rendait compliqué la récupération d’images perdues ou leur remplacement par un lien valide par exemple). Et, mentionné dans la rétrospective de la seconde quinzaine de septembre 2024, un compte de spammeur de 2015 supprimé… mieux vaut tard que jamais : détecté parce que comme beaucoup de visiteurs, le spammeur ne fait pas la différence entre un lien vers un document et l’ajout d’une image.

    Les problématiques restantes

    Il y a la question habituelle de la montée de versions des dépendances (pour nous actuellement contraintes celles du code Ruby on Rails) et du remplacement des composants devenus non-libres (migrer vers valkey plutôt que redis ? Questions à se poser sur l’avenir de nginx ?).

    On pourrait aussi ajouter la prise en charge du TLS et d’un certificat X.509 directement dans img plutôt que dans un frontal. Mais ce n’est utile que si on les sépare sur deux serveurs distants, ce qui n’est pas le cas actuellement. Donc même si ça ne paraît pas compliqué à faire, ce n’est pas urgent.

    Ensuite une entrée de suivi existe pour séparer le cache des avatars du cache des autres images : les contraintes pour le cache des avatars étant différentes de celui des autres images, le stockage en cache devrait être différent. Cela reste un problème mineur. Le changement doit d’abord être fait côté Ruby on Rails pour définir les avatars avec des clés redis différentes (genre avatars/ au lieu de img/). Ensuite on peut modifier img pour séparer le traitement des requêtes HTTP /img/<adresse_hexa> vers les clés redis img/<adresse> et le cache disque des images par rapport aux requêtes /avatars/<adresse_hexa> vers les clés avatars/<adresse> et le cache des avatars. Il faudra aussi déplacer les avatars stockés dans l’actuel cache des images dans leur propre cache. Et là on devrait pouvoir avoir la même adresse dans les deux caches mais avec un rendu éventuellement différent.

    Un autre problème concerne la non-association des contenus ou commentaires avec les images externes qu’ils contiennent, ce qui rend l’administration des anciennes images un peu pénible. Le fait que les contenus et commentaires peuvent être réédités ou simplement prévisualisés (donc que des images peuvent être supprimées et d’autres ajoutées) vient compliquer un peu la tâche. Actuellement un ensemble de scripts permettent d’obtenir ces infos et fournissent un contournement, mais ça reste un peu laborieux.

    Un cache rafraîchi périodiquement conserve les images pour éviter de surcharger le site d’origine, pas si le site a changé, déplacé ou perdu l’image. La modification pour servir depuis le cache disque en cas d’échec de récupération couvre le cas de la disparition d’une image avec une erreur sur l’adresse, pas celui où le serveur répond une mauvaise image. Il y a donc une autre entrée de suivi images et disparition du web évoquant l’augmentation des soucis sur les images externes avec un cache rafraîchi, en raison des domaines récupérés par des spammeurs et autres pénibles, ou perdus ou utilisés pour du phishing (imageshack.us, après framapic, pix.toilelibre, etc.). Diverses problématiques sont mentionnées comme la perte d’information et donc la diminution de l’intérêt des contenus anciens, la prime aux pénibles du référencement SEO qui pourrissent le net en récupérant les vieux domaines, la modification possible des images publiées. Pour résoudre cela techniquement, ça nécessite de suivre les images et les domaines perdus, et d’intervenir de façon régulière. Ou bien de ne plus rafraîchir le cache (que cela soit jamais, après la publication ou au bout d’un certain temps après la publication). Pour juste éviter la perte d’info, il est possible de remplacer par une image locale récupérée d’une archive du net type archive.org, avec le côté « pénible à faire » et sans garantie que ça soit toujours possible (merci waybackpy).

    Enfin une troisième entrée de suivi suggère l'hébergement des images des dépêches (et éventuellement des journaux), idéalement en permettant d’avoir une version modifiée d’une image en changeant sa taille. On peut citer en vrac comme problématiques la responsabilité légale, l’éventuelle volumétrie, l’impossibilité de corriger une image publiée facilement par la personne qui l’a soumise, la centralisation et la perte de référencement pour des tiers, l’éventuelle rétroactivité et le traitement de l’historique, le fait qu’il faut traiter tous les autres contenus/commentaires pouvant accueillir des images, etc. Autre question, faut-il différencier les images passées en modération a priori de celles en modération a posteriori ?

    Conclusion ?

    Bref sans surprise, il reste des problématiques et du code à faire pour les gérer (c’est rare un composant sans demandes d’évolution ou de correction). Yapuka (mais probablement plus tard, il faut aussi partager le temps avec les autres composants, ou avoir plus de contributions).

    img apporte les fonctionnalités que l’on attendait de lui même si on pourrait faire mieux. Plonger dans ce composant s’est avéré assez intéressant et formateur (et nécessaire) : techniquement cela a été l’occasion de faire du Go, du docker et du docker-compose, du redis et du nginx, du hurl et de l’HTTP. Et de comprendre ce que faisait un code écrit par une autre personne, de se poser des questions pour choisir les tests et le contenu de la documentation, de se demander pour quelles raisons tel ou tel choix a été fait, de rendre ce composant plus « contribuable », et de compléter le tout de façon détaillée avec une dépêche. Reste à savoir si j’ai répondu à l’attente d’un article technique sur le fonctionnement de ce cache, les choix techniques qui ont été faits, les erreurs commises donc à éviter… et la réponse est à trouver dans les commentaires.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    Projets Libres! Saison 3 épisode 2 : stratégies pour startups Open Source

    Pour ce second enregistrement de la saison 3, Projets Libres! reçoit Emily Omier.

    Emily est consultante en stratégie Open Source, et podcasteuse.

    Avec elle nous abordons des thèmes intéressants, comme :

    • les raisons de monter une startup Open Source ;
    • la relation entre produit et projet ;
    • les changements de licences ;
    • le rôle de la communauté ;
    • les aspirations des fondateurs ;
    • qu'est-ce qu'on entend par avoir du succès ?

    Nous mettons aussi en lumière sa casquette de créatrice de contenu, avec le podcast The Business of Open Source , et de co-fondatrice de la conférence Open Source Founders Summit.

    Bonne écoute!

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    Vie privée sur Internet et appareils connectés - « Libre à vous ! » du 1er octobre 2024 - Podcast

    220ème «  Libre à vous !  » de l’April. Podcast et programme :

    • sujet principal : enjeux de la vie privée sur Internet et sur les appareils connectés, avec Audric Gueidan, formateur numérique et auteur de la BD Datamania et Lovis IX de l'association Exodus Privacy ;
    • la chronique Pépite libres de Jean-Christophe Becquet, sur Éducajou : des applications libres pour l'école ;
    • la chronique Les transcriptions qui redonnent le goût de la lecture de Marie-Odile Morandi sur le thème « Elles s'engagent en faveur du logiciel libre au sein de leurs communautés ».

    Rendez‑vous en direct chaque mardi de 15 h 30 à 17 h sur 93,1 FM en Île‑de‑France. L’émission est diffusée simultanément sur le site Web de la radio Cause Commune.

    Vous pouvez laisser un message sur le répondeur de la radio, pour réagir à l’un des sujets de l’émission ou poser une question. Le numéro du répondeur : +33 9 72 51 55 46.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    Le MMORPG Ryzom fête ses 20 ans !

    En 2004 naquit un jeu au potentiel extraordinaire, sous le regard enthousiaste de ses créateurs.

    Après une enfance jalonnée d'embûches qui ont forgé son caractère et uni sa communauté, ce jeu convivial, à l'esprit libre, a su évoluer et toujours aller de l'avant grâce à l'implication de ses joueurs.

    Et aujourd'hui, c'est avec émotion qu'il s'apprête à passer un nouveau cap.
    Car oui, le temps passe si vite : Ryzom va fêter ses 20 ans !

    Ryzom fête ses 20 ans en jeu, du 16 septembre au 5 octobre.

    Pour l'occasion, 20 jours de festivités sont prévues en jeu sur l'île des 20 ans, du 16 septembre au 5 octobre 2024.
    De nombreuses surprises sont au programme, ainsi que la venue d'anciens membres de Nevrax, le studio qui a développé le jeu.

    Qu'est-ce que Ryzom ?

    Ryzom est un MMORPG de science-fantasy basé sur un monde vivant unique : une planète-plante aux paysages envoûtants, sauvage, peuplée de mille dangers. Vous pouvez y incarner une des quatre races humanoïdes du jeu, contribuer à la reconquête de leur civilisation perdue et influer sur l'évolution du monde.

    Jeu sandbox au PvP consensuel, au roleplay très présent et à la communauté mature, Ryzom a la spécificité de ne pas limiter ses personnages en classes et dispose d'un système évolué de récolte et d'artisanat. L'alignement des personnages sur une des nations et factions proposées peut évoluer pour mieux suivre le roleplay de chacun.

    Timaris

    Données techniques

    Ryzom est jouable sous Windows, Linux et macOS. Son interface est disponible en allemand, anglais, espagnol, français et russe. Les chats en jeu sont traduits automatiquement dans la langue du client.

    Tarifs

    Ryzom est jouable en version gratuite jusqu'au niveau 125, sans limitation de temps.

    Plusieurs tarifs d'abonnement sont proposés pour accéder à la version complète qui offre la possibilité d'atteindre le niveau 250, davantage de moyens de stockage et double la vitesse d'acquisition des points d'expérience.

    Kami

    Particularité

    Ryzom est l'un des rares MMORPG commerciaux à être entièrement open source, sous licence AGPLv3 : client, serveur, outils et média, ce qui offre aux joueurs une opportunité unique de s'impliquer dans le développement du jeu, notamment à travers des projets libres Ryzom Core et Ryzom Forge.

    Logo de Ryzom Core

    Logo de Ryzom Forge

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    ❌
    ❌