Vue normale

Aujourd’hui — 3 janvier 2025Linux

Statistiques 2024 du site LinuxFr.org

3 janvier 2025 à 14:40

2024 était une année particulièrement longue. Cela n’a évidemment pas grande pertinence, mais bon il faut bien une introduction à cette dépêche. Quid de l’activité du site LinuxFr.org en 2024 ? Quels changements en termes de trafic Web, de contenus créés, de commentaires déposés, de navigateurs utilisés, d’utilisation des fonctionnalités du site, de contribution au code, etc. Bref, qu’est‐ce qui a changé et de quelle manière durant 2024 ?

Le site rend accessible un grand nombre de statistiques (faites‑vous plaisir si vous souhaitez vous plonger dedans, c’est fait pour) ; cette dépêche résume les variations constatées en 2024.

Sommaire

Statistiques Web

La comparaison des statistiques annuelles (voir 2023 et 2024) montre une hausse des visites, des consultations (pages, fichiers) et des hits (notamment l’effet des bots pour l’intelligence artificielle), avec un passage à ~927 000 hits par jour et ~76 170 visites par jour, le tout pour ~1,42 Tio par mois.

Statistiques Web 2024

Le nombre de contenus publiés en un an diminue de 11 %. Le nombre de commentaires publiés en un an diminue cette année de 10%.

Trafic de LinuxFr.org normalisé, entre 2002 et 2024

Contenus

Au 31 décembre 2024, le site comportait environ 120 480 contenus publiés répartis ainsi :

  • 27 799 dépêches :
    • 383 dépêches publiées en 2023 (364 en 2023),
    • la taille moyenne (en code Markdown, hors images donc) des dépêches se remet à augmenter, tout en restant inférieure à la valeur de 2019 ;
  • 40 242 journaux (409 en 2024 en baisse par rapport aux 458 en 2023),
  • 40 642 entrées de forums (458 en baisse par rapport aux 574 en 2023),
  • 9 087 liens (1711 en baisse par rapport aux 1970 en 2023),
  • 467 sondages (9 en 2023 et 2024),
  • 162 pages de wiki (3 en 2023 et 5 en 2024).

Pour la première année, le pic de publication des contenus se confirme le mercredi. Ce qui diffère désormais du pic de modération, voir la partie Modération plus bas).

Un jour de semaine compte 64 % de publications en plus qu’un jour de week-end.

La publication sous licence Creative Commons By-SA se fait par défaut depuis les dix ans de CC, fin 2012 pour les dépêches (permet explicitement une rédaction collaborative ou un renvoi en re‐rédaction) et les journaux (qui peuvent être convertis en dépêches) : tout naturellement, on retrouve 97 % de dépêches et 99 % des journaux sous cette licence au final (les autres étant notamment sous licence Art Libre ou autre, au choix de l’auteur).

Les dépêches collaboratives (et pas uniquement celles réattribuées à l’utilisateur Collectif) sur de multiples sujets sont toujours à compter parmi les vraies réussites du site ; nous sommes cependant toujours à la recherche de volontaires pour couvrir les nombreux sujets qui n’ont pu être abordés. Une liste des thèmes récurrents sur LinuxFr.org peut donner des idées de participation : si une dépêche n’a pas été créée dans les temps, tout inscrit peut la démarrer dans l’espace de rédaction.

Concernant la visibilité par contenu (analyse sur décembre 2023) : les journaux ont jusqu’à deux fois moins de visibilité que les dépêches (faites des dépêches…) et les liens ont beaucoup moins de visibilité que les journaux et les dépêches (préférez donc faire des dépêches ou des journaux, pour la visibilité).

Modération

Le temps moyen passé entre la création d’une dépêche (en rédaction ou directement envoyée en modération) et sa modération et publication est de 337 heures (contre 309 h en 2023 et 359 h en 2022) ; la mesure du temps passé uniquement en modération n’est pas actuellement disponible (et la modération retient volontairement des dépêches non urgentes pour réguler la publication) ; le temps médian est descendu à 19 heures. Il y a des demandes de statistiques dans le suivi, envoyez les demandes d’intégration Git (pull‐requests). ;-)

Le jour préféré de modération a priori des contenus est toujours le mardi pour les dépêches et le lundi pour les sondages.

Commentaires

Au 31 décembre 2024, le site comporte 1,94 million de commentaires. Le nombre de commentaires publiés en un an baisse cette année de 10 % pour arriver à 32 046.

Il y a désormais, en moyenne, 29 commentaires par journal (29 en 2023 et 33 en 2022), 9 par dépêches (9 en 2023 et 10 en 2022), 54 par sondage (36 précédemment, mais très dépendant des sondages considérés), 8 par entrée de forum (7 en 2023 et 7 en 2022), 3 par entrée de suivi, 7 par lien (contre 7 en 2023 et 7 en 2022) et une poignée par page wiki.

Le jour préféré pour commenter reste le mercredi, et un jour de semaine compte deux fois plus de commentaires qu’un jour de week-end.

Notes

Il n’y a (toujours) pas de statistiques disponibles concernant les notes. Les entrées de suivi sur les statistiques n’ont pas avancé.

Néanmoins diverses statistiques concernant la notation sur les contenus et les commentaires ont été données en juin 2021, avec des graphes.

Étiquettes (tags)

Au 31 décembre 2024, le site comporte :

  • 15 659 étiquettes, dont 12 867 étiquettes publiques (contre 12 294 fin 2023) ;
  • 180 064 saisies d’étiquettes (étiquetées en moyenne douze fois pour les étiquettes publiques et cinq fois pour les étiquettes privées) ;
  • les étiquettes sont réparties ainsi par contenu :
    • 65 96à pour les dépêches,
    • 51 763 pour les journaux,
    • 30 432 pour les forums,
    • 30 182 pour les liens,
    • 829 pour les pages wiki,
    • 380 pour les sondages,
    • 518 pour le système de suivi des défauts et évolutions.

Plus de détails dans la dépêche de février 2022 À propos des étiquettes sur le site LinuxFr.org.

Depuis le début du site, on constate en moyenne 5 étiquettes par page wiki, 3,3 par lien, 2,4 par dépêche, 1,3 par journal, 0,8 par sondage, 0,8 par entrée de forum et 0,3 par entrée du suivi.

Le jour préféré pour apposer des étiquettes est le lundi (biais de la création initiale des étiquettes), suivi du samedi.

Il y a plusieurs biais concernant les étiquettes :

  • beaucoup ont été et sont ajoutées automatiquement ;
  • le thème mobile par défaut ne montre pas les étiquettes (sauf à basculer son Firefox en « Version ordinateur » ou équivalent sur un autre navigateur).

Équipe de bénévoles

Il y a actuellement 4 personnes pour l’administration du site, 12 pour la modération, 6 pour l’animation de l’espace de rédaction et 2 pour la maintenance qui font tourner ce site. Pour mémoire, il s’agit de bénévoles plus ou moins disponibles et donc absolument pas de 24 équivalents temps plein pour jargonner comme une entreprise. Merci pour le travail accompli.

Code et développement

Au 31 décembre 2024, le système de suivi de défauts et de demandes d’évolutions contient 269 entrées ouvertes (contre 243 en 2023). On voit assez rapidement un manque de développeurs apparaître. En 2024, il y a eu 54 entrées ouvertes (contre 46 en 2023) : 36 entrées encore ouvertes venant s’ajouter à celles datant d’avant, 11 corrigées et 7 déclarées invalides. On peut noter que ceux qui ouvrent le plus d’entrées sont des membres actuels ou anciens de l’équipe du site.

C’est Bruno qui garde le record de correction d’entrées. Merci aussi à Adrien Dorsaz. Le temps moyen de résolution est de 166 jours (contre 132 précédemment). La moitié des entrées fermées ont été traitées en moins de huit jours. On ressent donc toujours un besoin de nouveaux contributeurs côté code.

La charge moyenne sur le serveur est de 1,2 sur la machine actuelle (baptisée gruik). La charge minimale a été de 0,7 et la maximale de 2,5.

La consommation mémoire est restée stable. Le trafic réseau sur la partie Web uniquement est en moyenne de 5,1 Mbit/s sortants.

Comptes utilisateur

Au 31 décembre 2024, sur les 52 332 comptes utilisateur valides existants, 2 117 ont été utilisés au cours des trois derniers mois, dont 33 % (+1) ont déjà rédigé des dépêches, 45 % (+2) des journaux, 42 % (+1) des entrées de forums, 11 % (=) des entrées dans le système de suivi, 17 % des liens (+2) et 2 % une page de wiki ; 87 % (=) ont écrit des commentaires et 52 % (+2) étiqueté des contenus ; 33 % (-1) ont contribué sur au moins une dépêche ; 27 % (+1) des comptes actifs ont indiqué un site personnel, 8 % (=) un identifiant XMPP, 5 % (+1) une adresse Mastodon, 29 % (-1) un avatar et 6 % (=) une signature.

Côté utilisation des fonctionnalités, 14 % (+1) ont demandé à ne pas afficher les contenus avec une note négative, 9 % (+1) ont demandé le tri chronologique en page d’accueil, 6 % (+1) à ne pas voir les avatars, 5 % (+1) à afficher la tribune dans une boîte latérale et 3 % (=) à ne pas voir les signatures, et à peine quelques pourcents ont changé les contenus par défaut en page d’accueil (souvent pour retirer les sondages et ajouter les journaux). Peu de feuilles de style CSS du site sont utilisées : quatre visiteurs sur cinq utilisent celle par défaut ; il est facile d’en changer avec le lien Changer de style. En janvier 2024, il n’y avait pas de rupture générationnelle marquée entre les comptes 1999 et 2024 en termes d’utilisations des fonctionnalités.

Seuls dix comptes ont un karma négatif et un a un karma nul, soit 0 % des visiteurs actifs ; 10 % des comptes actifs durant les trois derniers mois ont été créés en 2024.

30 % (-1) des visiteurs actifs ont une adresse de courriel GMail, 12 % (-1) chez Free, 4 % (=) chez LaPoste, 3 % (-1) chez Yahoo, 3 % (=) chez Hotmail ou Outlook et 2 % (=) chez Orange ou Wanadoo.

2024 correspond aussi au premier anniversaire de la mise à place des nouvelles règles de pérennité des comptes LinuxFr.org et données à caractère personnel.

Soucis divers

Le compteur d’années sans mises en demeure reçues passe à trois (après deux mises en demeure en 2019 et une en 2020, voir la dépêche sur la no 3 en attendant la publication d’informations sur les no 4 et 5).

/ Only five formal notices in the default \
\   install, in a heck of a long time!    /
 -----------------------------------------
   \
    \
        .--.            / Ouep...  \
       |o_o |           \ Euh coin /
       |:_/ |            ----------
      //   \ \              \ 
     (|     | )               \
    /'\_   _/`\                \ >()_
    \___)=(___/                   (__)__ _

Depuis la création du site, statistiques liées au légal (dans les sens liés à la force publique ou à du juridique) :

  • cinq mises en demeure reçues (pour zéro assignation) ;
  • une réquisition judiciaire reçue (qui au final ne nous concernait pas, mais a donné l’occasion de discuter avec la police nationale) ;
  • un cas d’usurpation d’identité et de harcèlement type « revenge porn » (discussion avec la gendarmerie nationale).

Commentaires : voir le flux Atom ouvrir dans le navigateur

Hier — 2 janvier 2025Linux

A l’heure des bonnes résolutions, Kaspersky partage ses bonnes pratiques pour une expérience fitness en ligne sécurisée

2 janvier 2025 à 11:05

Comme le révèle l’étude Yougov Resolutions 2024: Better physical, mental and financial health among top choices, l’amélioration de la condition physique et la santé figurent toujours en tête des résolutions des consommateurs pour l’année 2025. Dans la continuité de cette tendance, le coaching personnalisé a le vent en poupe, propulsé par l’influence des réseaux sociaux, comme […]

The post A l’heure des bonnes résolutions, Kaspersky partage ses bonnes pratiques pour une expérience fitness en ligne sécurisée first appeared on UnderNews.

Entrevue avec Herman BRULE, développeur d'Ultracopier et de CatchChallenger

Herman BRULE est l’auteur et le mainteneur de deux applications (libres sous licence GPL v3, mais aussi proposées dans des versions payantes « Ultimate ») : l’utilitaire Ultracopier et le jeu CatchChallenger.

Sommaire

Bonjour Herman, peux-tu te présenter ?

Bonjour !

Sur le plan professionnel, je suis DG de Confiared (hébergement Web et VPS) et de Confiabits (fabrication et assemblage de circuits imprimés), et directeur de la technologie chez CTO chez DanSolutions (FAI).
Par ailleurs, j’aide des associations locales (j’habite en Bolivie) dans des domaines techniques comme les télécoms ou le développement logiciel, j’interviens parfois comme conférencier sur ces sujets.
Enfin, je participe au conseil d’administration de la section bolivienne de l’Internet Society (ISOC Bolivie).

Peux-tu nous raconter ton parcours ?

J’ai étudié l’électronique (BTS STI), puis le développement web. J’étais d’ailleurs encore étudiant quand j’ai commencé à développer Ultracopier.
J’ai longtemps travaillé dans l’e-commerce, puis pour des raisons personnelles je suis allé vivre en Bolivie.
J’ai été plutôt déçu par la qualité des offres locales, ici en Bolivie, dans le secteur des technologies de l’information, c’est pourquoi j’ai décidé de proposer mes services.

Peux-tu nous parler de ces deux logiciels ?

Ultracopier

Logo de Ultracopier

Comment est né ce projet ?

J’avais besoin d’un utilitaire avancé pour la copie de fichiers, comme Supercopier, pour une utilisation sous Linux mais ce dernier n’était pas disponible sur cette plateforme.
Ultracopier est donc né non pas comme un fork de Supercopier mais comme un projet indépendant : à l’époque, Supercopier était écrit en Pascal, et je préférais écrire en C++.

Au final, quand toutes les fonctionnalités ont été implémentées et qu’Ultracopier a disposé d’un skin Supercopier, une redirection a été mise en place.

Aujourd’hui, après 20 ans, le projet est toujours actif et maintenu, malgré les problèmes de tentative de piratage, bug, DDOS, et les évolutions technologiques.

Quels sont les points marquants qui ont, selon toi, marqué son développement ?

Après la reprise de Supercopier, qui a permis de fédérer sa base d’utilisateurs autour d’Ultracopier, il y a eu de nouvelles fonctionnalités au fil du temps :

  • la prise en charge de gros volumes (>5TB >10 millions de fichiers)
  • les extensions (plugins) et thèmes graphiques (skins), dont le développement m’a poussé à standardiser l’interface pour la réutilisation par des applis tierces.

Quel est le modèle économique ?

C’est assez peu connu mais Ultracopier est proposé dans deux versions : une gratuite (installable depuis le gestionnaire de paquets d’Ubuntu notamment) et une version « Ultimate ». Cette version, payante, est enrichie de fonctionnalités comme

  • la mise en pause,
  • la limitation du taux de transfert,
  • d’autres options de performance selon le système d’exploitation utilisé et inclut un support technique.

Pour être honnête, les utilisateurs de la version payante sont très peu nombreux : une écrasante majorité utilisent la version gratuite et d’autres piratent la version payante.

Ma vie professionnelle et mon engagement à l’ISOC Bolivie sont très chronophages, je ne compte pas mes heures sur mes principales activités d’hébergeur et de FAI, et à une usine de fabrication d’équipements réseau pour ces besoins.

J’ai quand même publié de l’open source comme le firmware OpenWRT pour le routeur wifi 6 que je fabrique.

Des dons ou des achats sont bienvenus pour que je puisse me concentrer davantage à l’open source ;) Je crois que beaucoup de développeurs open source sont dans cette problématique.
Heureusement, l’hébergement ne coûte presque rien car j’utilise mon propre service, et je suis le seul contributeur.

Quelles sont les fonctionnalités les plus attendues que tu penses implémenter ?

Je souhaiterais améliorer l’intégration d’Ultracopier dans les gestionnaires de fichiers sous Linux ou MacOs, mais ce n’est pas chose facile. Pendant des années j’ai essayé de faire modifier les gestionnaires de fichiers pour avoir la possibilité de replacer le copier/coller par Ultracopier. Rien. Soit je suis ignoré, soit je suis refusé (motif de refus récurent : je devrais refaire Ultracopier en « natif » : GTK, KIO, Haiku…), je me vois mal maintenir divers UI. Les votes sur demande de fonctionnalités sont les bienvenus, par exemple ici pour KDE/Plasma.

Je veux aussi implémenter un moteur async natif sous linux (en utilisant io_uring) pour de meilleures performances.

As-tu eu des échanges/retours avec les autres logiciels ou éditeurs (communauté linux / autres éditeurs) ?

Non. J’ai essayé de faire que le protocole d’envoi de copie/déplacement à un logiciel tiers soit un standard avec un protocole commun pour motiver les gestionnaires de fichiers à l’utiliser, je n’ai reçu que des réponses négatives :/

Peux-tu partager des souvenirs marquants de cette expérience ?

Durant toutes ces années, conscient que la copie de données est un sujet qui peut être très sensible, j’ai veillé à être réactif aux retours des utilisateurs : dès que quelque chose d’anormal m’est reporté, je m’assure de vérifier/corriger et de publier très rapidement. Je pense qu’Ultracopier garantit bien l’intégrité des données lors des copies, parfois mieux que des copies par l’outil du système. Par exemple, si pendant le déplacement de fichiers vers un lecteur réseau ce lecteur réseau se déconnecte, alors Windows peut détruire la source sans avoir pu valider l’intégrité réelle du fichier cible. Il faut reproduire un contexte très particulier, mais ça c’est vu.

Malgré cette attention, il m’est arrivé de recevoir des insultes de certains utilisateurs, allant jusqu’à des menaces de mort. J’ai une bonne collection de conversations de ce genre ! Il s’agit d’une minorité d’utilisateurs, en majorité des débutants en informatique et qui n’ont pas utilisé correctement l’outil, ou plus généralement leur ordinateur.

Par ailleurs, le spam et les tentatives de piratage (dont une pour rediriger les paiements des versions "Ultimate » !) auront eu raison des pages Wiki et Maintenance du site, faute de temps pour la modération.

Il me semble tout de même que la majorité silencieuse (= celle qui dit rarement merci ;) ) est dans l’ensemble très satisfaite des services rendus par Ultracopier, et cela est motivant. Pour moi, le point le plus positif est surtout l’acquis de connaissances.

CatchChallenger

Logo de CathChallenger

Quelle est l’origine de ce jeu ?

Je cherchais à me familiariser avec la programmation autour de sujets relatifs aux clients/serveurs, comme les protocoles, la haute performance, le chiffrement, et aussi les bots… …et le développement d’un jeu est le moyen ludique par excellence !

Vu qu’il n’y a pas de temps réel, je peux jouer avec TOR/I2P (un bon moyen de tester la sécurité), pas de flottant donc cela marche sur tous les CPU, y compris ceux de plus de trente ans et les architectures exotiques comme celles que l’on trouve dans les routeurs (MIPS…).

C’est un mix de plusieurs jeux au gameplay de type crafting (à la lineage/X3/minecraft) qui m’intéressait pour les techniques ce que ce genre implique.

Quels sont les points marquants qui ont, selon toi, marqué son évolution ?

Version 1 : j’ai essayé de m’éloigner visuellement d’un jeu bien connu auquel mon jeu pouvait être associé.

Version 2 : j’ai abandonné Qt niveau serveur car trop lent niveau SLOT/SIGNAL, et revu le thème graphique avec des couleurs plus chaudes, même si ça me rapproche d’un autre jeu connu.

Version 3 : modularité/API et interface responsive, refonte du datapack.

Est-il facile de monter son propre serveur? Ou de modifier le jeu ?

Le client intègre un serveur embarqué pour jouer en solo, qui peut être ouvert sur un réseau local ou sur Internet.

Le serveur a une interface graphique et une version console (avec diverses bases de donnée supportées, y compris du noSQL)

Le datapack est facilement interchangeable et tout est fait pour qu’un enfant puisse le modifier (png, xml, tmx, opus)

Y a-t-il d’autres contributeurs ?

Non

y a-t-il des fonctionnalités importantes qui ne seront pas développées, et pourquoi ?

Il y en a beaucoup, par manque de temps. Je n’ai jamais atteint un stade de maturité sur le jeu de base qui me convient, donc je me concentre là-dessus. Par exemple, je me suis lancé sur le multithreading GPU côté serveur : j’ai pu lancer des tests sur GPU, cela fonctionne bien mais complexifie trop le développement sans apporter un réel bénéfice.

Quel est le rapport avec tes autres projets ?

Avec ce projet, j’ai vite eu besoin d’un grand nombre de VPS, cela m’a incité à m’intéresser aux datacentres et à monter modestement mon premier datacentre. De fil en aiguille, j’en ai fait mon activité :)

J’ai aussi eu besoin de connexions, de haute performance et de haute disponibilité. Curieux, je me suis lancé dans la conception de mon hardware : onduleur, alimentation solaire…

Qu’as-tu retiré de ce projet ?

J’ai été surpris par les performances, pour un code qui n’est pas en assembleur et qui pourrait encore être optimisé : des millions de joueurs sur un CPU de bureau par serveur. Vous saturez l’écran de bots bien avant de saturer le CPU, même un très vieux CPU ou un microcontrôleur de routeur, et la charge en RAM ne dépasse pas quelques Mo.

La prédiction côté client (Client-side prediction), les instructions préparées (SQL parameterized statement) sont très efficaces, je charge tout en RAM sous forme d’entier <=32Bits. Vu qu’il faut des performances bien supérieures du client pour surcharger un serveur, il y a peu de chance qu’on m’attaque via DDOS.

Quels conseils avec le recul donnerais-tu à ceux qui entreprendraient de se lancer ?

Ne faites pas de projets que vous n’allez pas maintenir, aussi bien pour vous que pour ceux qui vont les utiliser.

Aussi, ne vous lancez pas sur un projet que mille autres personnes ont déjà fait avant vous, il y a une tonne de projets de niche qui n’ont pas de solution open source !

Ton rapport au libre

Au niveau personnel, quels logiciels libres utilisez-vous, sur quel OS ?

J’utilise Gentoo Linux et presque que du libre.

Même question au niveau professionnel ?

En général j’essaie de faire le modèle pro suivant : quand un logiciel a été rentabilisé, je le libère.

Niveau data center, on fonctionne en IPv6 avec des logiciels de conversion pour, par exemple, passer de HTTP IPv4 à IPv6, si tu ajoutes tous les services internes + gestionnaires, ça fait mal pas de logiciels.

Niveau industrie, je produis des onduleurs, des serveurs, des routeurs datacentres et domestiques (wifi 6 OpenWRT), avec les difficultés ici pour importer je dois faire avec ce que je trouve sur place (et il n’y a quasiment rien pour la microélectronique).

Niveau FAI, rien à voir avec ce qu’il y a en France, entre les blocages politiques et administratifs (j’attends certaines autorisations depuis de nombreuses années), les monopoles… rien n’avance. Mais malgré ces difficultés j’ai pu innover et proposer des solutions efficaces pour des communautés locales, grâce à des logiciels libres.

Merci pour ce partage, et pour ton apport au libre ! Nous te souhaitons beaucoup de succès dans tes nombreux projets pour 2025 !

Commentaires : voir le flux Atom ouvrir dans le navigateur

À partir d’avant-hierLinux

Pourquoi Linux n'est pas prêt pour les ordinateurs de bureau, édition finale

31 décembre 2024 à 18:33
Pourquoi Linux n'est pas prêt pour les ordinateurs de bureau, édition finale

L'itération précédente de cet article était trop technique, trop longue et contenait de nombreux points controversés. J'ai donc longuement réfléchi à la possibilité de le réécrire complètement, de le rendre accessible aux non-techniciens et d'exposer les problèmes fondamentaux qui font que Linux n'est toujours pas adapté à l'ordinateur de bureau moderne. La première version, écrite il y a plus de dix ans, était assez populaire,...

Déployer un service hautement disponible grâce à Redis Replication (Publié dans Linux Pratique n°140)

31 décembre 2024 à 13:37

Redis est un système de stockage de données en mémoire de type NoSQL orienté hautes performances. Il est souvent utilisée comme base de données, système de cache ou de messages. Nous verrons dans cet article comment déployer un service hautement disponible grâce à Redis Replication.

1 Notre premier serveur Redis

Pour démarrer, commençons avec un mon serveur Redis. L’installation sera présentée pour Ubuntu 22.04 et devrait fonctionner sans trop d’adaptations pour Debian ou RHEL-like.

1.1 Installation

Redis est disponible dans les dépôts classiques de la distribution. Une configuration minimale peut être faite en installant simplement les paquets et en activant le service systemd.

sudo apt -y install redis-server
sudo systemctl enable --now redis-server

Vérifions maintenant que nous parvenons à nous connecter :

redis-cli
127.0.0.1:6379> ping
PONG

La CLI permet également de récupérer avec la commande INFO un certain nombre d’éléments sur le fonctionnement du serveur. Celle-ci s’appelle seule ou avec un argument pour obtenir les informations relatives à une catégorie particulière.

127.0.0.1:6379> INFO Server
# Server
redis_version:6.0.16
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:a3fdef44459b3ad6
redis_mode:standalone
os:Linux 5.15.0-73-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:11.2.0
process_id:596
run_id:7ea0cf9f46b211a64874d7a1c0a115be78c42e98
tcp_port:6379
uptime_in_seconds:61483
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:8771018
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf
io_threads_active:0

Redis gère plusieurs types de données. Il est possible d’utiliser des chaînes de caractères, des ensembles, des hashs, des listes ainsi que d’autres types de données. Pour procéder à une première vérification de bon fonctionnement, nous allons ainsi écrire une donnée de type string, récupérer la valeur en indiquant la clé puis effacer cette donnée.

127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379> del foo
(integer) 1
127.0.0.1:6379> get foo
(nil)

A ce stade, notre serveur est fonctionnel, toutefois sa configuration est très basique. Redis n’écoute que sur l’interface localhost ce qui est incompatible avec la notion de réplication que nous mettrons en place et il est préférable que systemd prenne en charge le service de manière explicite. Nous allons entreprendre donc nos premières modifications du fichier de configuration, /etc/redis/redis.conf et remplacer les paramètres bind et supervised par les valeurs suivantes :

bind 0.0.0.0
supervised systemd
protected-mode

Redémarrons le service redis et vérifions :

sudo systemctl restart redis-server
sudo netstat -lataupen |grep ":6379"
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      115        39165      3267/redis-server 0

En pratique, la plupart des options de Redis peuvent être définies avec la commande CONFIG SET. C’est peut-être moins classique ou confortable qu’un fichier de configuration mais c’est ce qui permet à Redis d’être entièrement reparamétré sans qu’il ne soit nécessaire de relancer le service et donc sans aucune interruption de service.

1.2 Gérer la persistance

Redis est une base de données en mémoire. Par conséquent si le service est arrêté, quelle qu’en soit la raison, les données sont perdues. Pour assurer la persistance des données, Redis permet d’utiliser deux mécanismes. Dans le premier, appelé RDB, Redis va générer des snapshots à intervalles réguliers de la base de données. Cela se configure avec save suivi de deux indicateurs, le premier consiste en une sauvegarde après n secondes si au moins un certain nombre d’écritures ont eu lieu. Ce paramètre est en outre multivalué .La politique par défaut est celle-ci :

save 900 1
save 300 10
save 60 10000

Généralement, on souhaite avoir au moins un snapshot récent même s’il y a peu d’écritures, d’où celui réalisé après 15 minutes à partir du moment où il y a eu une écriture. A l’inverse, en cas de forte charge, on souhaite également avoir des snapshots fréquents pour minimiser la perte de données, d’où le snapshot toutes les minutes dès 10000 clés modifiées. Ces seuils sont naturellement à adapter en fonction de l’activité de la base et afin de minimiser la perte de données admissible.

Dans le second mécanisme, AOF pour Append Only File, la persistance est gérée via l’utilisation d’un fichier de logs qui va historiser chaque écriture. Pour un maximum de fiabilité, les deux modes peuvent être utilisés conjointement. Naturellement, cela a un impact sur la consommation mémoire et les I/O disques car pour chaque écriture en base, une seconde est faite pour le journal AOB.

Pour utiliser l’AOF, ajoutons ces deux lignes dans le fichier redis.conf :

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

1.3 Un minimum de sécurité

Par défaut, Redis n’est pas joignable via le réseau. Pour que la mise en œuvre de la réplication à suivre soit possible, le service écoute désormais sur l’ensemble des interfaces réseau. Bien qu’il soit possible de restreindre à une ou plusieurs interfaces, l’accès au service à des fins de test s’est réalisé sans authentification. En définissant un mot de passe sur le paramètre requirepass, toute opération sur Redis nécessitera au préalable de s’authentifier avec la commande AUTH suivie du mot de passe. Dans la configuration redis.conf nous ajoutons donc :

requirepass SECRET

Et nous pouvons vérifier :

# redis-cli
127.0.0.1:6379> AUTH SECRET
OK

Pour assurer une meilleur sécurité, du TLS devrait être mis en œuvre et les ACL Redis 6 devraient être utilisées.

2 Assurer la haute disponibilité

2.1 Les mécanismes

Redis Replication est un système maître/esclave permettant de répliquer de manière asynchrone les données du master sur les slaves. En cas de perte de connectivité avec le master, les slaves vont tenter de resynchroniser l’écart de données dès que la connexion redevient disponible. Si cela n’est pas possible une resynchronisation complète est réalisée. Un slave peut servir de source de réplication à un autre slave et les répliquas peuvent servir de serveur en lecture pour répartir la charge et donc augmenter la performance.

En cas de perte du master, une procédure de failover doit être mise en œuvre pour promouvoir un slave comme master. Tant que cela n’est pas fait, le fonctionnement est en mode dégradé si ce n’est totalement interrompu. Redis Sentinel utilisé en complément permet de superviser le fonctionnement de Redis et en cas de panne du master, de promouvoir un nouveau master et de reconfigurer les repliquas pour qu’ils se répliquent depuis ce nouveau master. Dans ce type d’architecture, il est recommandé de disposer d’au moins 3 serveurs pour gérer le quorum.

Avec Redis Replication il est fortement recommandé d’activer la persistance. En effet, sans persistance et en cas de redémarrage du master, il se retrouvera vide de toute donnée. Dans un second temps, les slaves vont s’empresser de répliquer cela les vidant de leurs données.

Pour assurer la montée en charge horizontale, Redis Cluster offre des possibilités complémentaires. Dans ce mode, il s’agit toujours d’avoir une architecture master/slave mais avec gestion et failover automatique. L’espace de clés est divisé de sorte que chaque groupe de serveur ne gère qu’une partition de la base de données, cela s’appelle du sharding. La taille de la base de données peut ainsi être plus importante et la charge peut être répartie sur plus de nœuds. Un minimum de 6 nœuds est toutefois requis pour Redis Cluster ce qui prédispose ce mode à des infrastructures relativement conséquentes.
De fait dans cet article j’aborderai uniquement Redis Replication.

2.2 Configuration

La configuration mise en œuvre sur le premier serveur que nous appellerons db01 devra être reprise à l’identique sur nos deux slaves. Le serveur DB01 sera le master par défaut. Pour que la suite soit aisément compréhensible, voici les serveurs et adresses IP que je vais utiliser :

  • db01 : 192.168.69.81
  • db02 : 192.168.69.82
  • db03 : 192.168.69.83

Sur chacun de nos serveurs, nous allons définir la valeur de masterauth. En effet, nous avons exigé précédemment un mot de passe via requirepass, il faut donc s’authentifier pour avoir les droits pour répliquer :

masterauth SECRET

Et enfin, sur chaque slave, on indique depuis quel serveur notre slave doit se répliquer :

replicaof db01.morot.local 6379

Il suffit de redémarrer nos serveurs, il n’y a rien de plus à faire.

2.3 Vérification de la réplication

Dans un premier temps, envoyons la commande INFO Replication sur notre master. Si la configuration est correcte, alors on doit pouvoir avoir un rôle master, visualiser les deux slaves comme connectés ainsi que leurs adresses IP et enfin en fonctionnement nominal un statut online :

127.0.0.1:6379> AUTH SECRET
OK
127.0.0.1:6379> INFO Replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.69.83,port=6379,state=online,offset=1106,lag=0
slave1:ip=192.168.69.82,port=6379,state=online,offset=1106,lag=0
master_replid:75b55df27cafe6bfd7aec3114bfd63e77d45a8cb
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1106
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1106

A l’inverse, sur un slave, le rôle doit correspondre et le serveur doit être connecté au slave (master_link_status). Si master_sync_in_progress est à 0 alors la réplication est terminée. La section master_replid indiqué le dataset de ReplicationID qui doit être identique avec le master lorsque les masters et slaves sont synchronisés. Si une synchronisation était en cours, nous aurions des champs master_sync supplémentaires pour suivre la volumétrie à répliquer et les performances de réplication.

127.0.0.1:6379> INFO Replication
# Replication
role:slave
master_host:db01.morot.local
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1288
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:75b55df27cafe6bfd7aec3114bfd63e77d45a8cb
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1288
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1288

2.4 Failover

Voyons désormais ce qu’il se passe lors d’une panne du master. J’ai simulé un crash du master en coupant violemment la VM qui porte le service. Sur chacun de mes slaves, la réplication indique que le lien avec le master est « down » avec le délai depuis lequel le lien est rompu.

127.0.0.1:6379> INFO Replication
# Replication
role:slave
master_host:db01.morot.local
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:3472
master_link_down_since_seconds:42

S’il s’agit d’un simple redémarrage du serveur master, la réplication devrait remonter dès que le serveur sera up. En cas de panne majeure, le service rendu est interrompu. Il faut manuellement reconfigurer les slaves pour rétablir le service.

Sur db03, nous allons donc indiquer que sa source de réplication est db02 :

127.0.0.1:6379> replicaof db02.morot.local 6379
OK

Pour autant, cela ne fait pas de db02 un master par magie. D’autant que Redis supporte la réplication d’un slave depuis un autre slave. Il faut donc indiquer que db02 est un master ce qui se configure en indiquant qu’il est le répliqua d’aucun serveur :

127.0.0.1:6379> replicaof no one
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.69.83,port=6379,state=online,offset=3472,lag=0

2.5 Le retour du master

Se pose ensuite la question de la remise en service du serveur db01 lorsqu’il sera réparé. Avec le failover précédent il va se retrouver master sans slave et il sera aussi désynchronisé des autres serveurs Redis. Il est donc indispensable de le remettre en synchronisation avec le master qui a été promu. Cela se fait de la même façon que lors du failover précédent :

127.0.0.1:6379> replicaof db02.morot.local 6379
OK

Et c’est tout. Si toutefois vous tenez à remettre le serveur redis master « nominal » en tant que master, il faut alors :

  • Le resynchroniser sur le master et s’assurer que la réplication est terminée
  • Définir les slaves en état nominal (db02 et db03) comme replicaof db01
  • Indiquer que db01 n’est plus le répliqua d’aucun serveur.

Cela reste toutefois une opération à réaliser en période de maintenance car une courte rupture du service lors de la bascule est à prévoir.

3 Failover automatique avec Sentinel

3.1 Configuration

Nous venons de le voir, la réplication est simple à mettre en œuvre ou à reconfigurer. Elle a toutefois un énorme inconvénient en cas de perte du master, elle est manuelle. Nous allons donc mettre en œuvre un système complémentaire appelé Redis Sentinel qui viendra gérer automatiquement la promotion d’un nouveau master et la reconfiguration des slaves.
Commençons par installer sentinel :

sudo apt -y install redis-sentinel

Et configurer le service pour qu’il communique sur le réseau et non plus uniquement sur localhost. Au niveau firewall, le port 26379 devra autoriser les flux. Cela se fait via le fichier dédié /etc/redis/sentinel.conf :

bind 0.0.0.0
port 26379

Ajoutons un mot de passe de connexion, il s’agit du mot de passe d’authentification sur Sentinel :

requirepass SECRET

Enfin démarrons la configuration des règles de bascule. Nous monitorons l’adresse IP du master, 192.168.69. Un quorum de 2 serveurs est exigé, c’est à dire que si au moins deux slaves s’accordent sur le fait que le master est injoignable alors une bascule est enclenchée.

sentinel monitor mymaster 192.168.69.81 6379 2
sentinel auth-pass mymaster SECRET

Le master est considéré comme injoignable après une minute :

sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

Une redémarrage du service sentinel plus tard, vérifions l’état de notre service en se connectant via redis-cli sur le port de Sentinel cette fois :

redis-cli -p 26379
127.0.0.1:26379> AUTH SECRET
OK
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.69.81:6379,slaves=2,sentinels=4

Nous retrouvons bien le bon nombre de slaves. Si on souhaite des informations détaillées sur les slaves il est possible d’envoyer la commande sentinel slaves mymaster et pour les instances sentinel : sentinel sentinels mymaster. La sortie étant peu lisible, il s’agit de la configuration en mode clé valeur dans la base Redis, je ne vais pas l’inclure ici.

3.2 Test de bascule

Sur notre master, simulons une panne en arrêtant le service avec systemctl stop redis-server. En parallèle, regardons les logs de Sentinel dans /var/log/redis/redis-sentinel.log. Par lisibilité, je vais filtrer quelques peu les logs.

En premier lieu nous avons un event sdown, cela signifie que sentinel a détecté que le master n’était plus joignable :

37873:X 18 Jun 2023 21:33:04.343 # +sdown master mymaster 192.168.69.81 6379

Ensuite, nous avons un odown, c’est à dire que le serveur est vu comme injoignable par au moins le nombre de serveur du quorum, comme nous avons indiqué 2, il faut au moins les deux serveurs pour qu’une promotion d’un nouveau soit réalisée :

37873:X 18 Jun 2023 21:33:05.420 # +odown master mymaster 192.168.69.81 6379 #quorum 3/2

db03 a été élu comme nouveau master :

37873:X 18 Jun 2023 21:34:17.255 # +selected-slave slave 192.168.69.83:6379 192.168.69.83 6379 @ mymaster 192.168.69.81 6379
37873:X 18 Jun 2023 21:34:17.437 # +promoted-slave slave 192.168.69.83:6379 192.168.69.83 6379 @ mymaster 192.168.69.81 6379

db02 est reconfiguré comme slave de db03 :

37873:X 18 Jun 2023 21:34:17.453 * +slave-reconf-sent slave 192.168.69.82:6379 192.168.69.82 6379 @ mymaster 192.168.69.81 6379
37873:X 18 Jun 2023 21:34:17.510 * +slave-reconf-inprog slave 192.168.69.82:6379 192.168.69.82 6379 @ mymaster 192.168.69.81 6379
37873:X 18 Jun 2023 21:34:18.623 * +slave slave 192.168.69.82:6379 192.168.69.82 6379 @ mymaster 192.168.69.83 6379

Enfin, on peut le confirmer via la cli redis sur db03 :

127.0.0.1:6379> INFO REPLICATION
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.69.82,port=6379,state=online,offset=481996,lag=1

Félicitations, Redis s’est automatiquement reconfiguré sans intervention.
Que se passe-t-il désormais pour notre ancien master ? Au redémarrage de redis, il est devenu un slave. Cela se voit d’ailleurs dans les logs sentinel des autres serveurs. Il est possible de forcer via la cli sentinel un failover vers un autre serveur :
127.0.0.1:26379> SENTINEL failover mymaster
OK
127.0.0.1:26379> INFO sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.69.82:6379,slaves=2,sentinels=4

Il n’est toutefois pas possible d’indiquer expressément quel serveur sera promu. Une manière de le contrôler est d’utiliser la directive slave-priority pour favoriser un serveur avec une priorité plus faible.

4 HAProxy

Dans un monde idéal, votre client Redis aura un support de Sentinel. Il saura alors contacter sentinel pour connaître le master et s’y connecter. En récupérant la liste des serveurs, il sera en mesure de distribuer les requêtes en lecture sur les slaves pour répartir la charge. En cas d’anomalie du master, il saura enfin gérer le failover.

En pratique, on ne peut pas toujours connaître le niveau de support des clients notamment lorsque l’on fournit la plateforme à des développeurs tiers. Dans ce cas précis, je recommande d’utiliser le classique HAProxy qui sait tout faire en matière de répartition de charge que je vous laisse installer via les packages de la distribution.

Le cas particulier qu’il faut néanmoins gérer c’est la détection du master. De manière simple, si le port de destination répond, on considère souvent que le service est fourni par le backend. Dans notre cas, il va falloir identifier le serveur dont le rôle est le master, souvenez-vous nous avions l’information avec INFO Replication avec la CLI Redis. Il faut donc définir un TCP Check qui réalisera une authentification, enverra cette même commande est aura comme backend active celui dont le rôle est master :

frontend ft_redis
bind 0.0.0.0:6379 name redis
default_backend bk_redis

backend bk_redis
option tcp-check
tcp-check send AUTH\ SECRET\r\n
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send INFO\ Replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server r1 db01:6379 check inter 10s
server r2 db02:6379 check inter 10s
server r3 db03:6379 check inter 10s

Conclusion

C’est en terminé pour ce tour d’horizon de la haute disponibilité d’un service Redis Replication avec Sentinel. J’invite le lecteur curieux à compléter ce parcours pour utiliser les ACL et ajouter ce niveau de sécurité. J’ai volontairement écarté ce point pour légèrement simplifier la configuration et rester ciblé sur le sujet.

Galera, la solution pour des bases de données hautement disponibles (Publié dans Linux Pratique 137)

31 décembre 2024 à 11:27

Lorsqu’une application ne peut tolérer d’indisponibilités ou quand il devient nécessaire de fournir de la redondance au service de bases de données, il convient de mettre en place une architecture limitant les risques d’interruption de service. De même le besoin de performance peut se faire sentir avec la croissance du nombre d’utilisateurs. Galera est une extension pour MariaDB aidant à résoudre ces deux situations.

Galera est une extension pour Mariadb, MySQL et Percona XtraDB offrant des fonctionnalités de clustering multi-master. La réplication classique fonctionne en mode maitre-esclave, nécessitant donc en cas de panne ou de maintenance sur le master de mettre en œuvre un mécanisme de failover sur le slave pour le promouvoir. Cette opération est potentiellement complexe et manuelle.

Avec Galera il est possible de disposer de plusieurs serveurs master et donc disponibles en lecture comme en écriture. La réplication est opérée de manière synchrone et peut même être géo-répliquée.

Pour améliorer les performances, il devient possible d’augmenter le nombre de nœuds au sein du cluster, éventuellement complété d’une mise à l’échelle verticale, c’est à dire par ajout de vCPU et de RAM.

La haute disponibilité du service de bases de données devient donc native et ce, sans nécessiter de mettre en œuvre une opération de promotion du slave comme master. Le service est rendu tant qu’il y a au moins un nœud fonctionnel, toute question de capacité à tenir la charge mise à part.

Ensuite, Galera connaît très peu de limitations à la mise en cluster mais deux en particulier. La première a une portée en principe limitée, elle impose le moteur de stockage InnoDB, le moteur historique MyISAM est donc à oublier. La seconde, peut-être plus contraignante, est qu’une table doit avoir obligatoirement au moins une clé primaire. Cela peut donc demander du travail avec les développeurs qui vont coder avec cette base de données. Enfin, dernière limitation majeure mais ce n’en est pas une pour moi, Galera n’est disponible que sous Linux mais pas les autres systèmes supportés par MariaDB comme Windows.

Création du cluster

Un cluster Galera doit être composé d’un nombre impair de nœuds. Il n’est techniquement pas interdit de créer un cluster à seulement deux nœuds, ce n’est toutefois pas recommandé. En effet, on risque dans ce cas une situation de split brain. Un split brain est une situation où les nœuds qui composent le cluster se retrouvent isolés, par exemple en cas de coupure du réseau. Avec seulement deux nœuds, ils ne pourraient déterminer quel nœud se retrouve isolé. Cela impose donc au minimum de disposer de trois serveurs, sachant que l’ajout de nœuds au cluster est très aisé.
Pour la suite de cet article, je disposerai de quatre serveurs sous Ubuntu 22.04, trois serveurs de bases de données et un load balancer utilisé dans la suite de cet article :

  • db01 : 192.168.69.81
  • db02 : 192.168.69.82
  • db03 : 192.168.69.83
  • lb : 192.168.69.70

Installation de Mariadb

Dans un premier temps et sur chaque serveur composant le cluster, nous allons simplement y installer le service mariadb.

root@db01:~# apt -y install mariadb-server
root@db01:~# systemctl enable mariadb

Par défaut, MariaDB sous Ubuntu Server n’écoute que sur l’interface loopback. Comme les nœuds du cluster vont être accessibles et communiquer via le réseau, il faut faire en sorte que MariaDB écoute sur une socket accessible depuis les autres nœuds, idéalement en restreignant depuis une interface. Pour faire simple, nous allons le faire écouter sur toutes les interfaces :

root@db01:~# sed -i 's/^bind-address.*/bind-address = 0.0.0.0/g' /etc/mysql/mariadb.conf.d/50-server.cnf
root@db01:~# systemctl restart mariadb

Ajout du module Galera
Toujours sur chaque nœud, nous allons ensuite installer le module galera et éteindre mariadb

root@db01:~# apt -y install galera-4
root@db01:~# systemctl stop mariadb

Il faut maintenant activer la réplication avec le provider wsrep et surtout déclarer l’ensemble des nœuds participants au cluster. La configuration se fait dans le fichier /etc/mysql/mariadb.conf.d/60-galera.cnf :
wsrep_on active tout simplement la réplication Galera. Le nom du cluster doit quant à lui être identique sur l’ensemble des nœuds. Enfin, wsrep_cluster_address doit contenir les IP de tous les membres du cluster, séparés par une virgule.

[galera]
wsrep_on                 = ON
wsrep_cluster_name       = "MariaDB Galera Cluster"
wsrep_cluster_address    = gcomm://192.168.69.81,192.168.69.82,192.168.69.83
binlog_format            = row
default_storage_engine   = InnoDB
bind-address = 0.0.0.0
wsrep_slave_threads = 4
innodb_flush_log_at_trx_commit = 1
log_error = /var/log/mysql/error-galera.log

wsrep_slave_threads (wsrep_applier_threads) dans les versions plus récentes permet de gérer le nombre de threads pour traiter les write-sets, les transactions commités lors de la réplication. Généralement on souhaite avoir deux fois le nombre de cœurs du serveur pour des performances correctes.

Démarrage du cluster

La configuration précédente terminée, il est maintenant possible de démarrer le cluster. Un nœud doit être utilisé pour bootstraper le cluster avec la commande galera_new_cluster.

root@db01:~# galera_new_cluster

Cette commande initialise le Primary component du cluster et démarre Mariadb. Le primary Component est l’ensemble des nœuds qui forment le cluster, qui peuvent communiquer ensemble et assurer le commit d’une transaction. Chacun des nœuds démarrés par la suite se connecteront à ce nœud pour démarrer la réplication. En terminologie Galera, il s’agit du State Snapshot Transfert (SST).
Le journal de log définit plus tôt doit nous confirmer à ce propos que le bootstrap est lancé et que le statut du serveur passe en Joined.

2023-03-05 22:34:39 0 [Note] WSREP: Server status change initializing -> initialized
2023-03-05 22:34:39 0 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2023-03-05 22:34:39 1 [Note] WSREP: Bootstrapping a new cluster, setting initial position to 00000000-0000-0000-0000-000000000000:-1
2023-03-05 22:34:39 4 [Note] WSREP: Cluster table is empty, not recovering transactions
2023-03-05 22:34:39 1 [Note] WSREP: Server status change initialized -> joined

Les autres nœuds du cluster peuvent ensuite être démarrés normalement. Ils vont se connecter au Primary Component, lancer un state transfert pour synchroniser la copie locale de la base de données afin d’être synchronisé au cluster.

root@db02:~# systemctl start mariadb

Contrôlons de nouveau nos logs, et l’on peut constaté que pas mal de lignes ont défilé. Ce que l’on doit retenir c’est que les nouveaux nœuds ont initialisé un state transfert depuis l’un des serveurs déjà synchronisés et que l’état doit être passé en « complete ».

2023-03-05 22:37:37 0 [Note] WSREP: Member 1.0 (db03) requested state transfer from '*any*'. Selected 0.0 (db02)(SYNCED) as donor.
2023-03-05 22:37:39 0 [Note] WSREP: (ea0f8bad-ad8c, 'tcp://0.0.0.0:4567') turning message relay requesting off
2023-03-05 22:37:39 0 [Note] WSREP: 0.0 (db02): State transfer to 1.0 (db03) complete.
2023-03-05 22:37:39 0 [Note] WSREP: Member 0.0 (db02) synced with group.
2023-03-05 22:37:42 0 [Note] WSREP: 1.0 (db03): State transfer from 0.0 (db02) complete.
2023-03-05 22:37:42 0 [Note] WSREP: Member 1.0 (db03) synced with group.

Chaque nœud peut ensuite être démarré ou redémarré indépendamment avec systemctl. Cependant, si chaque nœud a été arrêté proprement, le cluster n’est plus formé et il est nécessaire à nouveau de bootstrap le cluster avec galera_new_cluster.

Vous l’aurez deviné, en cas de maintenance, il conviendra de démarrer en premier le dernier nœud qui a été arrêté afin d’avoir des données cohérentes. Le problème va se poser si l’on ignore l’ordre d’arrêt ou que le cluster s’est mal arrêté. Il pourra dans ce cas être nécessaire d’indiquer que le nœud sur lequel on souhaite intialiser le bootstrap du cluster est en mesure de le prendre en charge, cela se fait dans le fichier /var/lib/mysql/grastate.dat avec la variable safe_to_bootstrap à forcer à 1. Cette valeur est à zéro après le bootstrap pour éviter une initialisation accidentelle d’un cluster déjà bootstrapé. De préférence, il s’agit d’une opération à utiliser en derniers recours.

root@db01:~# cat /var/lib/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid:    ea14ca85-bba5-11ed-bf58-0b029f897fa2
seqno:   -1
safe_to_bootstrap: 0

Tester la réplication

En théorie, notre cluster est en place. Pour le confirmer vérifions avec des données. Commençons par créer une base de données nommée galeratest qui ne comporte qu’une seule table :

root@db01:~# mysql -u root -e "CREATE DATABASE galeratest;"
root@db01:~# mysql -u root galeratest -e "CREATE TABLE test(ID int NOT NULL AUTO_INCREMENT, data varchar(255) NOT NULL, PRIMARY KEY (ID) );"

Peuplons maintenant cette table avec un millier d’enregistrements :

root@db01:~# for i in {1..1000}; do   mysql -u root galeratest -e "INSERT INTO test (\`data\`) VALUES ('test$i');"; done

Et enfin, vérifions sur un autre serveur que nous retrouvons bien nos enregistrements :

root@db02:~# mysql -u root galeratest -e "SELECT COUNT(ID) FROM test;"
+-----------+
| COUNT(ID) |
+-----------+
|      1000 |
+-----------+

C’est parfait, nous avons bien nos 1000 lignes dans la table, les données sont donc bien répliquées.
Superviser l’état du cluster

En environnement de production, il convient de vérifier que chaque nœud est connecté aux autres membres cluster et qu’il est bien répliqué. Ces opérations doivent être vérifiées à minima manuellement et ce régulièrement et idéalement automatiquement, que ce soit via des scripts ou une intégration de ceux-ci avec une solution de supervision type Nagios.

Galera permet de récupérer localement sur chaque nœud l’état du cluster avec un certain nombre de variables de statut. Les différentes variables wsrep du provider Galera sont accessibles au travers de SHOW STATUS, de manière similaire aux variables de statut de MariaDB.

A l’issue du déploiement précédent, wsrep_ready permet déjà de visualiser si le nœud est en mesure d’accepter les requêtes. Si la réponse est « OFF » le serveur renverra des erreurs aux clients.

MariaDB [mysql]> show status like 'wsrep_ready';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_ready   | ON    |
+---------------+-------+

Ensuite, wsrep_connected doit renvoyer ON. Si cette valeur renvoie OFF, alors le nœud n’est pas connecté au cluster. Cela peut être l’origine d’une erreur de configuration ou bien d’une anomalie réseau.

MariaDB [mysql]> show status like 'wsrep_connected';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| wsrep_connected | ON    |
+-----------------+-------+

Enfin, wsrep_cluster_size doit renvoyer le nombre de nœuds présents dans le cluster. En état nominal il s’agit logiquement du nombre de nœuds total du cluster. Toutefois cette valeur permet également de gérer les niveaux d’alertes pour lequel le nombre minimum de nœuds pour rendre le service. En théorie, un nœud suffit à rendre le service, toutes considérations de performances mises à part :

MariaDB [(none)]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

Ensuite, il faut vérifier que chaque nœud est connecté au primary component et donc qu’il est dans un état sain et dans un état où il peut recevoir des mises à jour des autres nœuds.

MariaDB [(none)]> show status like 'wsrep_cluster_status';
+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+

Pour aller plus loin dans la visualisation de l’état du nœud au sein du cluster, la variable wsrep_local_state_comment donne davantage d’indications sur l’état du nœud. Cette variable possède quatre valeurs :
• Joining : le nœud est en train de rejoindre le cluster
• Donor/Desynced : le nœud est la source de réplication d’un autre nœud en train de rejoindre le cluster
• Joined : le nœud a rejoint le cluster
• Synced : le nœud est synchronisé avec le cluster

MariaDB [(none)]> show status like 'wsrep_local_state_comment';
+---------------------------+--------+
| Variable_name             | Value  |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+

Enfin, au-delà de l’état du cluster, il convient de superviser les performances de réplication. La variable wsrep_local_recv_queue_avg donne la longueur moyenne de la file d’attente de réplication. Si elle est supérieure à 0 cela signifie que le node a un peu de latence dans l’application des write-sets. Au delà de 0,5 il faut vérifier qu’il n’y a pas de goulot d’étranglement. S’agissant d’une valeur moyenne, il convient d’observer dans ce cas là les valeurs minimales et maximales, wsrep_local_recv_queue_min et wsrep_local_recv_queue_max afin d’avoir l’amplitude réelle.

MariaDB [(none)]> show status like 'wsrep_local_recv_queue_avg';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| wsrep_local_recv_queue_avg | 0.142857 |
+----------------------------+----------+

Ces variables sont les principales à superviser. En pratique, il en existe une soixantaine visibles avec un « show status like ‘wsrep_%; ». La plupart ne seront d’aucune utilité mais celles présentées restent celles qu’il faut connaître impérativement.

Load balancing avec HAProxy

Notre cluster Galera est monté, les clients vont ensuite devoir s’y connecter. Si on configure les accès sur le nom d’hôte ou l’adresse IP d’un des nœuds, alors en cas d’indisponibilité de celui-ci les autres nœuds seront fonctionnels mais inutilisés. Une méthode consiste à utiliser du round robin DNS. C’est à dire que pour un nom d’hôte, on va déclarer trois enregistrements type A pointant vers chacuns des adresses IP des nœuds du cluster. Cependant cette solution n’est pas idéale et peut renvoyer vers un nœud non fonctionnel.

Une meilleure solution consiste à utiliser un load balancer qui va exposer le service MariaDB mais qui aura en backend les différents nœuds qui composent le cluster Galera. Le load balancer permet en outre de tester la disponibilité des backends et ne présente que les nœuds fonctionnels. HAProxy est le load balancer libre le plus populaire et le plus aboutit pour gérer ces situations. Commençons pas l’installation sur une VM dédiée.

root@lb:~# apt -y install haproxy
root@lb:~# systemctl enable haproxy

En suite, nous aurons besoin d’un utilisateur non privilégié qui permettra à HAProxy de s’authentifier pour vérifier qu’une connexion peut être établie.

MariaDB [mysql]> CREATE USER 'haproxy'@'192.168.69.70';

Enfin nous allons configurer HAProxy dans le fichier /etc/haproxy/haproxy.cfg et ajouter ces lignes à la fin du fichier.

listen galera
    bind 192.168.69.70:3306
    balance leastconn
    mode tcp
    option tcpka
    option mysql-check user haproxy
    option tcplog
    server db1 192.168.69.81:3306 check weight 1
    server db2 192.168.69.82:3306 check weight 1
    server db3 192.168.69.83:3306 check weight 1

Le service Galera est exposé sur le port MariaDB classique, 3306/TCP via l’IP du load balancer 192.168.69.70. Balance leastconn est l’algorithme de répartition de charge, dans ce cas il s’agit d’envoyer les connexions vers le serveur qui en a le moins, nous pourrions tout autant utiliser du round robin ou du source IP. Le check mysql-check est utilisé avec l’utilisateur haproxy créé précédemment. Haproxy enverra un paquet pour s’authentifier et un second pour mettre fin proprement à la connexion. Un simple check tcp engendrerait dans les logs une fin prématurée de la connexion. Enfin, on définit chaque nœud vers lequel on renvoie les connexions. Check sert à indiquer qu’on teste la disponibilité du backend et weight 1 que les connexions seront distribuées de manière équitable entre les backends.

Un redémarrage du service plus tard et on peut contrôler l’état de nos backends avec hatop. Si au moins un backend apparaît comme UP l’accès au travers de la VIP est possible.

root@lb:~# systemctl restart haproxy
root@lb:~# hatop -s /run/haproxy/admin.sock

Idéalement et dans un contexte de production, il faudrait également mettre en haute disponibilité le load balancer via une paire de load balancer HAProxy partageant une VIP en VRRP avec Keepalived par exemple. Ceci afin de ne pas créer de nouveau point unique de panne. Mais cela dépasse le cadre de cet article.

Conclusion

Galera est un moyen simple pour monter une solution de Haute Disponibilité pour vos bases de données MariaDB avec peu de contraintes d’exploitation. Il n’y a donc plus de raisons de réveiller les admins la nuit pour dépanner un serveur MariaDB en mono serveur dès lors que vous administrez des applications critiques. Pour aller plus loin, il s’agit d’un sujet qui se prête particulièrement bien à des déploiements orchestrés par Ansible ou Puppet.

Références
[BASEDOC] Base documentaire des Éditions Diamond : https://connect.ed-diamond.com/
[1] Documentation officielle de Galera : https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/
[2] Aller plus loin avec MariaDB, LP 130 par Masquelin Mickaël
[3] À la découverte d’HAProxy, LP HS 55 par Assmann Baptiste (bedis)

Déployer des environnements de développement avec Vagrant (Publié dans Linux Pratique n°127)

31 décembre 2024 à 10:48

Vagrant est un logiciel libre permettant de déployer rapidement des machines virtuelles. C’est un logiciel développé par la société Hashicorp, déjà connue pour d’autres logiciels comme Terraform, Packer ou Vault. Historiquement lié à VirtualBox, Vagrant s’est désormais largement ouvert à d’autres solutions de virtualisation comme Libvirt ou de conteneurisation comme Docker.

1 Bien démarrer

1.1 Pourquoi encore un autre outil ?

Vagrant permet de déployer rapidement des environnements à partir de fichiers de description, les Vagrantfile. S’agissant de fichiers textes, ils s’intègrent de fait à toute la chaine GIT ou CI/CD et donc aux bonnes pratiques de développement. L’utilisation d’un outil automatisé permet ainsi de gagner un temps précieux et sans valeur ajoutée sur l’instanciation de machines virtuelles.

L’automatisation du procédé permet également de produire des environnements similaires au sein d’une équipe et à chaque lancement de Vagrant. Les environnements de test sont donc reproductibles, gommant les différences qu’il peut y avoir selon les habitudes de travail et la dérive qui peut se créer sur un environnement au fil du temps.

A titre individuel c’est aussi un moyen de maquetter rapidement un projet ou un outil avant de se pencher sur une infrastructure de production et d’outil type Terraform, plus appropriés.

Vagrant offre une compatibilité avec plusieurs hyperviseurs : vmware, hyper-v mais sait également déployer des ressources localement via VirtualBox ou libvirt. C’est aussi un bon moyen de fournir des environnements de tests qui ne monopolisent pas les précieuses ressources des serveurs ou sans avoir à disposition d’infrastructure dédiée, qui plus est disponibles sans connexion réseau.

1.2 Installation

Sous ma Debian testing, vagrant est packagé par défaut donc un simple apt-get install suffit. Pour Ubuntu, Centos, Fedora, Hashicorp met à disposition des paquets adaptés à la distribution.
Pour les autres, un zip contient un binaire à pousser dans un répertoire appelé dans votre PATH. Vagrant, c’est tout simplement ça, tout un workflow unifié autour d’une même CLI.
Un Virtualbox fonctionnel sera nécessaire pour la suite, avec votre utilisateur dans le bon groupe pour éviter de devoir jouer du sudo.

1.3 Les boxes

Les boxes Vagrant sont des images de systèmes déployables au sein de tout environnement Vagrant. Il s’agit en pratique d’une façon de packager une distribution afin de permettre un déploiement uniforme quel que soit le système d’exploitation ou l’hyperviseur utilisé. En pratique, toutes les box ne sont pas compatibles avec tous les hyperviseurs, à plus forte raison lorsqu’il s’agit d’une image docker.

De nombreuses boxes sont disponibles sur le site https://app.vagrantup.com et certaines sont officiellement développées par les distributions majeures ou certains éditeurs. Les seules boxes officielles sont toutefois limitées aux boxes Hashicorp en Bento. Un système de versionning permet également de s’assurer de déployer sur une version connue et validée.

Pour télécharger une box, il suffit d’un vagrant box add suivi du nom de la box :

vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.
 
1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop
 
Enter your choice: 3
==> box: Adding box 'centos/7' (v2004.01) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box
Download redirected to host: cloud.centos.org
    box: Calculating and comparing box checksum...
==> box: Successfully added box 'centos/7' (v2004.01) for 'virtualbox'!

Et pour lister les boxes installées :

vagrant box list
centos/7 (virtualbox, 2004.01)
ubuntu/focal64 (virtualbox, 20210513.0.0)

Vous l’aurez compris donc pour la logique sous jacente, il y a donc notamment les commandes update, remove (et d’autres) pour suivre le cycle de vie des boxes locales.

1.4 Le workflow avec Vagrant

Vagrant va chercher à provisionner le type de machine en fonction de ce qui est décrit dans le fichier Vagrantfile du répertoire du projet. Un fichier Vagrantfile est un fichier Ruby mais qui ne nécessite aucune connaissance de ce langage.
Le fichier Vagrantfile sert à décrire tout ce qui constitue le déploiement : le provider, le dimensionnement de la VM et éventuellement la post-installation. S’agissant d’un fichier texte, il a toute sa place sur un dépôt Git.
Voyons un premier exemple de Vagrantfile. A minima, Vagrant a besoin du nom du déploiement et du type d’image source. Le « 2 » est simplement la version du fichier de configuration.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.hostname = "vagrantbox"
end

Vérifions ensuite que notre syntaxe est sans erreur :

vagrant validate
Vagrantfile validated successfully.

S’il n’y a pas d’erreur, on peut lancer l’instanciation de notre projet :

vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/focal64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/focal64' version '20210513.0.0' is up to date...
==> default: Setting the name of the VM: 1simple_default_1621158383628_85938
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Mounting shared folders...
    default: /vagrant => /home/julien/vagrant/1simple

L’état du déploiement peut être visualisé avec vagrant status :

vagrant status
Current machine states:
default running (virtualbox)
[…]

A l’instanciation du projet, une paire de clé SSH est créée. Elle est stockée dans l’arborescence du projet vagrant dans .vagrant/machines/NOM_BOX/virtualbox/private_key permettant de se connecter à l’instance sans mot de passe.

vagrant ssh default
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-73-generic x86_64)
[...]
Last login: Sun May 16 09:54:12 2021 from 10.0.2.2
vagrant@vagrantbox:~$ logout

En fin de cycle, les VM sont ensuite arrêtées et le projet détruit. Lorsque le déploiement n’implique qu’une seule instance, il n’est pas nécessaire de préciser le nom de la VM.

vagrant halt default
==> default: Attempting graceful shutdown of VM...
vagrant destroy
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...

Ainsi, le fait de relancer la commande vagrant up va permettre de provisionner un environnement neuf et propre à chaque cycle.
Pour ne pas partir de zéro et avoir un modèle de fichier Vagrant à personnaliser, nous aurions pu partir de la commande vagrant init. En effet, celle-ci créé un fichier Vagrantfile dans le dossier courant qui peut être ensuite personnalisé selon ses souhaits.

1.5 Personnalisation

Notre premier exemple servait à mettre le pied à l’étrier sur le cycle de vie d’un environnement Vagrant. Cependant, il sera systématiquement ou presque nécessaire de configurer l’environnement à déployer en fonction des ressources disponibles sur la machine qui héberge les machines virtuelles ou encore en fonction des besoins réels des applicatifs.

Pour cela, Vagrant expose certaines fonctionnalités du provider ou un jeu de fonctionnalités communes. Par exemple, je vais avoir besoin d’accéder à mon serveur Web de développement donc je redirige le port local non privilégié 8080 afin de pouvoir accéder à ma VM via http://localhost:8080.

Plus spécifiquement pour Virtualbox, via l’attribut customize il est possible d’exposer n’importe quel paramètre de la commande VboxManage. D’un côté cela limite la qualité de la couche d’abstraction fournie par le provider Virtualbox pour Vagrant mais de l’autre celui-ci n’en limite pas les possibilités.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.hostname = "vagrantbox"
  config.vm.network "private_network", ip: "192.168.56.10", virtualbox__intnet: "nat"

  config.vm.provider :virtualbox do |vbox|
    vbox.gui = false
    vbox.linked_clone = false
    vbox.memory = 2048
    vbox.cpus = 2
    vbox.customize ["modifyvm", :id, "--uart1", "0x3F8", 4]
  end
end

J’ai également tendance à utiliser les clones liés afin de limiter l’impact sur la consommation des disques mais ce point est loin d’être obligatoire.

1.6 Multi machines

Les quelques déploiements précédents étaient tous tournés autour d’une unique VM. Cependant, les infrastructures de production vont plutôt être déployées sur plusieurs serveurs pour :
– Répondre à des schémas d’architecture multi-tiers
– Combiner plusieurs systèmes d’exploitation
– Distribuer la charge ou la disponibilité du service sur plusieurs machines

Reproduire ce type d’infrastructure sur une seule machine reviendrait à construire un environnement dev/test différent de la production et donc ne pas couvrir les cas listés ci-dessus. Vagrant est capable de déployer plusieurs VM au sein d’un même projet avec le même workflow. Il suffit pour cela de lister successivement les VM à déployer :

Vagrant.configure("2") do |config|
  config.vm.define "revproxy" do |host|
    host.vm.box = "revproxy"
    host.vm.box = "ubuntu/focal64"
  end
  config.vm.define "www", primary: true do |host|
    host.vm.box = "www"
    host.vm.box = "ubuntu/focal64"
  end
  config.vm.define "db" do |host|
    host.vm.box = "db"
    host.vm.box = "ubuntu/focal64"
  end
end

Pour provisionner l’infrastructure, les mêmes commandes s’appliquent. Cependant, si l’on souhaite simplement instancier l’un des serveurs de l’infrastructure, par exemple le serveur de base de données, il est possible de préciser celui-ci via vagrant up db puis vagrant ssh db pour s’y connecter.

Ce listing de VM est un peu ennuyeux cependant, voyons comment factoriser cela en utilisant une variable Ruby de type Symbol :

hosts = [
  { :hostname => 'revproxy', :ip => '192.168.56.10', :mem => 1024, :cpu => 1 },
  { :hostname => 'www',   :ip => '192.168.56.11', :mem => 2048, :cpu => 2 },
  { :hostname => 'db',   :ip => '192.168.56.12', :mem => 2048, :cpu => 2 },
]
 
 
Vagrant.configure("2") do |config|
  hosts.each do |host|
    config.vm.define host[:hostname] do |hostconfig|
      hostconfig.vm.box = "ubuntu/focal64"
      hostconfig.vm.hostname = host[:hostname]
      hostconfig.vm.network :private_network, ip: host[:ip]
      hostconfig.vm.provider :virtualbox do |vbox|
        vbox.gui = false
        vbox.linked_clone = true
        vbox.memory = host[:mem]
        vbox.cpus = host[:cpu]
      end
    end
  end
end

Lorsque plusieurs projets comme ces deux versions du multi-instances sont démarrés, il est possible de les visualiser via la commande vagrant global-status. Cela donne également le chemin racine du projet Vagrant sur le système de fichiers.

vagrant global-status
id name provider state directory
-------------------------------------------------------------------------
36e198a revproxy virtualbox running /home/julien/vagrant/6multi
971634f www virtualbox running /home/julien/vagrant/6multi
5f4e571 db virtualbox running /home/julien/vagrant/6multi
9008b27 revproxy virtualbox running /home/julien/vagrant/7multi
88fcf71 www virtualbox running /home/julien/vagrant/7multi
177b8c7 db virtualbox running /home/julien/vagrant/7multi

1.7 Les triggers

Lorsque l’on provisionne un environnement, il peut être nécessaire de déclencher des actions avant ou après le provisionnement d’une VM. Vagrant permet d’utiliser des triggers avant ou après certains états : up, destroy, reload, all, etc.
Les commandes peuvent être lancées aussi bien sur l’hôte que sur l’invité. Dans l’exemple ci-dessous à chaque fois que je provisionne ma VM, je récupère le code à jour depuis le dépôt GIT et lorsque je supprime celle-ci, je réalise une sauvegarde de la base de données.

Bon à savoir, par défaut l’exécution de Vagrant échoue si un trigger échoue mais ce comportement peut être modifié.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.hostname = "vagrantbox"
  
  config.trigger.after :up do |trigger|
    trigger.run = {inline: "git clone https://github.com/WordPress/WordPress.git"}
    trigger.on_error = :continue
  end
  config.trigger.before :destroy do |trigger|
    trigger.run_remote = {inline: "mysqldump -u root wordpress > /vagrant/backup.sql"}
  end
end

1.8 Volumes synchronisés

Pour permettre l’échange de données entre l’hôte et les VM invitées, Vagrant permet de monter un volume sur la VM. Le volume peut être aussi bien un dossier local qu’un montage d’un système de fichiers réseau comme du NFS ou du CIFS.
Vagrant supporte également les options de montage que l’on peut passer à la commande mount. Dans l’exemple ci-dessous, je monte le répertoire html de mon home dans le répertoire par défaut d’Apache en remappant les droits. Si le dossier /home/julien/html n’existe pas, il est créé.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.hostname = "vagrantbox"
  config.vm.synced_folder "/home/julien/html/", "/var/www/html", owner: "apache", group: "apache"
  create: true
end

2 Les Provisionners

2.1 Provisionner Shell

Provisionner des VM, c’est sympa me direz-vous mais s’il reste tout le travail de personnalisation des systèmes, nous n’avons guère fait plus que cloner une VM. Une fois que les VM sont provisionnées depuis un modèle de box, c’est un OS vierge qui est fourni quand on arrive au vagrant SSH. Bien entendu rien n’exclue de faire l’installation à suivre à la main mais ce serait dommage.
Les provisionners sont appelés à deux moments par Vagrant, à l’instanciation avec un vagrant up ou bien avec un vagrant provision pour une instance déjà lancée. Dans l’exemple-ci dessous, vagrant déploie les mises à jour via le shell ainsi que le minimum de packages que j’attends sur mes instances.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.hostname = "vagrantbox"
  config.vm.network "private_network", ip: "192.168.56.10", virtualbox__intnet: "nat"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  
  config.vm.provider :virtualbox do |vbox|
    vbox.gui = false
    vbox.memory = 2048
    vbox.cpus = 2
  end
  
  config.vm.provision "shell", inline: <<-SHELL
    apt update
    apt -y dist-upgrade
    apt -y install screen htop nmap
  SHELL
  
end

2.2 Provisionner Ansible

Bash n’est pas le seul provisionner supporté par Vagrant. En pratique, le support est même très complet car Vagrant permet d’utiliser la plupart des outils de gestion de configuration qui existent sous Linux : Chef, Puppet, Salt, CFEngine et Ansible ou même cloud-init.

A titre personnel, je n’ai d’expérience qu’avec Puppet et Ansible, je vous propose de partir sur Ansible celui-ci étant désormais largement plus répandu. Pour ansible, partons du petit playbook ci-dessous. Celui-ci déploie les mises à jour et installe un serveur web apache, tout ce qu’il y a de plus classique.

---
- hosts: all
  become: true
  gather_facts: true
  tasks:
    - name: apt upgrade
      apt:
        upgrade: dist
        update_cache: yes
        autoclean: yes
        autoremove: yes
    - name: install apache
      apt:
        name=apache2
        state=present
    - name: Enable service Apache2
      service:
        name: apache2
        state: started
        enabled: yes

Le provisionner ansible nécessite l’installation d’ansible sur la machine qui lance Vagrant. De la manière la plus simple, il suffit d’indiquer le nom du playbook à lancer. Mon playbook est volontairement succinct car ce n’est pas ici le propos mais rien n’interdit des déploiements plus complexes avec des rôles ou l’utilisation d’un vault par exemple qui sont aussi plus représentatifs des usages réels d’ansible.

Pour ceux qui ont l’habitude d’ansible, vous aurez remarqué l’absence notable de l’utilisation d’un inventaire. En pratique, il est possible d’en spécifier un dans la configuration mais Vagrant a l’intelligence lorsqu’aucun inventaire n’est spécifié d’en auto-générer un pour nous.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"
  config.vm.hostname = "vagrantbox"
  config.vm.network "private_network", ip: "192.168.56.10", virtualbox__intnet: "nat"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  
  config.vm.provider :virtualbox do |vbox|
    vbox.gui = false
    vbox.linked_clone = true
    vbox.memory = 1024
    vbox.cpus = 1
  end
  
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
    ansible.compatibility_mode = "2.0"
  end
 
end

3 Et pour d’autres providers ?

3.1 Quel intérêt ?

Utiliser Vagrant avec un autre provider a un premier intérêt certain c’est que le même outil sera utilisé quel que soit l’environnement mis à disposition ou le projet sous-jacent.
Ainsi en terme de formation ou de prise en main, la courbe d’apprentissage est plus faible que d’apprendre un autre outil.

3.2 Docker

Comme je disais au départ, Vagrant a pour objectif d’être relativement agnostic vis à vis de la solution de virtualisation. Il existe par exemple un provider docker officiel. Dans le code ci-après, je suis parti de l’exemple du Dockerhub pour instancier un cluster WordPress avec Docker compose mais remis à la sauce Vagrant.

L’image est ici automatiquement téléchargée depuis la registry. Dans le cadre d’une utilisation en mode développement, Vagrant est également capable d’aller construire l’image si on lui spécifie à la plage de l’image le chemin vers le Dockerfile, avec l’attribut build_dir, voire même depuis un dépôt git en utilisant l’attribut git_repo. Naturellement ces trois choix sont exclusifs.

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
Vagrant.configure("2") do |config|
 
  config.vm.define "db" do |db|
    db.vm.synced_folder ".", "/vagrant", disabled: true
    db.vm.provider "docker" do |d|
      d.image = "mysql:5.7"
      d.name = "wordpressdb"
      d.remains_running = true
      d.volumes = ["/home/julien/mysql:/var/lib/mysql"]
      d.env = {"MYSQL_DATABASE" => "exampledb", "MYSQL_USER" => "exampleuser", "MYSQL_PASSWORD" => "examplepass", "MYSQL_RANDOM_ROOT_PASSWORD" => "'1'"}
    end
  end
  
  config.vm.define "app" do |app|
    app.vm.synced_folder ".", "/vagrant", disabled: true
    app.vm.provider "docker" do |d|
      d.image = "wordpress"
      d.ports = ["8080:80"]
      d.name = "wordpressapp"
      d.remains_running = true
      d.volumes = ["/home/julien/html:/var/www/html"]
      d.env = {"WORDPRESS_DB_HOST" => "db", "WORDPRESS_DB_USER" => "exampleuser", "WORDPRESS_DB_PASSWORD" => "examplepass", "WORDPRESS_DB_NAME" => "exampledb"}
      d.link("wordpressdb:mysql")
    end
  end
end

Dans ce cas présent, mon conteneur web est lié au conteneur de base de données, il faut donc que vagrant ne lance pas l’instanciation en parallèle des conteneurs, on y ajoute donc le paramètre –no-parallel.

vagrant up --no-parallel
Bringing machine 'db' up with 'docker' provider...
Bringing machine 'app' up with 'docker' provider...
==> db: Creating and configuring docker networks...
==> db: Creating the container...
    db:   Name: wordpressdb
    db: Image: mysql:5.7
    db: Volume: /home/julien/mysql:/var/lib/mysql
    db:
    db: Container created: 30dba7edabca0db7
==> db: Enabling network interfaces...
==> db: Starting container...
==> app: Creating and configuring docker networks...
==> app: Creating the container...
    app:   Name: wordpressapp
    app: Image: wordpress
    app: Volume: /home/julien/html:/var/www/html
    app:   Port: 8080:80
    app:   Link: wordpressdb:mysql
    app:
    app: Container created: 19838387018b928d
==> app: Enabling network interfaces...
==> app: Starting container...

Vérifions du côté de la CLI Docker qu’il n’y ait pas d’erreur. Parfait, nos conteneurs sont correctement instanciés.

docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                  NAMES
19838387018b   wordpress   "docker-entrypoint.s…"   10 seconds ago   Up 9 seconds    0.0.0.0:8080->80/tcp   wordpressapp
30dba7edabca   mysql:5.7   "docker-entrypoint.s…"   11 seconds ago   Up 10 seconds   3306/tcp, 33060/tcp    wordpressdb

Conclusion

Si vous utilisiez un hyperviseur comme virtualbox ou libvirt pour déployer des VM à la main et si vous avez besoin de régulièrement recréer vos environnements de développement, Vagrant devrait beaucoup apporter à votre trousse à outils. Et pour la production, Terraform est l’étape suivante si vous ne l’utilisez pas encore.
Références

[1] https://www.vagrantup.com/downloads
[2] https://app.vagrantup.com/boxes/search
[3] https://www.vagrantup.com/docs

L’exploration et le calcul de l’espace : l’horlogère, l’astronome et l’astrophysicienne

En octobre 2024, on était allé à la conquête de l’espace, cette fois-ci, on va se concentrer sur l’exploration de l’espace vu de la Terre. Pour cela, on se penchera sur la vie et les travaux de trois femmes : Nicole-Reine Lepaute qui, au siècle des Lumières, a calculé la date du retour de la comète de Halley, Janine Connes qui prendra la direction du premier centre de calcul en France et Françoise Combes qui vient d’être élue présidente de l’Académie des sciences. C’est aussi l’occasion de voir l’évolution des outils utilisés en astronomie.

Phases de l’éclipse du soleil du 1er avril 1764
Illustration des douze phases principales selon les calculs de Nicole-Reine Lepaute

Sommaire

Préambule

Les deux dépêches consacrées à la conquête de l’espace dans le cadre de la journée Ada Lovelace étaient très américano-centrées, et il manquait l’aspect étude et découverte de l’espace qui en précède la conquête. Sans cette connaissance, il n’aurait pas été possible d’envoyer des satellites artificiels, d’aller sur la Lune, sur Mars ou encore de créer des stations spatiales, voire, de concevoir les télescopes Hubble et James Webb. D’où cette dépêche, et le choix de ces trois femmes pour contrebalancer un peu leur américano-centrisme.

Le choix a été guidé d’une part en tenant compte des informations dont je pouvais disposer, d’autre part de l’actualité : Janine Connes vient de mourir à l’âge de 98 ans et c’est une façon de lui rendre hommage, Françoise Combes vient d’être élue par ses pairs à la présidence de l’Académie des sciences.

Nicole-Reine Lepaute, l’horlogère

La vie de Nicole-Reine Lepaute nous est essentiellement connue grâce à l’Encyclopédie des dames de Jérôme Lalande. De fait les biographies que l’on peut trouver sur elle citent les mêmes passages en élucubrant souvent sur les relations qu’elle aurait pu avoir avec l’astronome. Mais comme LinuxFr.org n’est ni un site « people » ni un site de rencontre et que l’autrice de l’article n’aime généralement pas faire comme tout le monde, on vous renverra en fin de dépêche sur ces biographies.

Nicole-Reine Lepaute en quelques dates (et hauts faits)

Nicole-Reine Étable naît le 5 janvier 1723 à Paris. Elle n’est pas elle-même horlogère, mais elle épouse l’horloger Jean André Lepaute en 1749. Il deviendra le fournisseur officiel de la cour de Louis XV en 1750. Jean André Lepaute était réputé comme l’un des meilleurs horlogers de son temps. Quand il écrira son Traité d'horlogerie, contenant tout ce qui est nécessaire pour bien connoître et pour régler les pendules et les montres, c’est Nicole-Reine qui calculera la « longueur que doit avoir un Pendule simple pour faire en une heure un nombre de vibrations quelconque, depuis 1 jusqu’à 18000 » (table VI, pages 365 et suivantes du traité). Et on le sait parce qu’elle en est créditée.

Le couple fait la connaissance de l’astronome Jérôme Lalande en 1754. Elle commencera peu après à travailler avec lui. En 1757, elle calculera les dates du retour de la comète de Halley avec Lalande et Clairaut. Quand, en 1759, Lalande est chargé des éphémérides annuelles de l’Académie royale des sciences : La Connaissance des temps1, elle fera partie de l’équipe qui travaille sur les tables et éphémérides astronomiques.

En 1761, elle entre à l’Académie royale des sciences et belles lettres de Béziers. C’est, probablement, la première fois qu’une femme entre dans une académie pour ses travaux scientifiques. Elle offre aux académiciens les tables astronomiques pour Béziers qu’elle avait compilées à leur intention. Malheureusement ses travaux sont perdus.

En 1764, une éclipse est prévue, pour éviter une éventuelle panique, le clergé est invité à informer le peuple du caractère inoffensif de ce phénomène céleste. Nicole-Reine Lepaute calculera les phases de l’éclipse et en dressera une carte. Elle fera publier deux documents :

Elle meurt, aveugle, le 6 décembre 1783, elle aura passé les trois dernières années de sa vie à s’occuper de son mari loin des mathématiques. Son acte de décès figure sur le site archive.org.

Elle ne reste pas complètement oubliée. Ainsi, quand une nouvelle édition de la Bibliographie ancienne et moderne ou (en nettement plus long) Histoire, par ordre alphabétique, de la vie publique et privée de tous les hommes qui se sont distingués, par leurs écrits, leurs actions, leurs talens, leurs vertus ou leurs crimes paraît en 1820, elle a sa notice relevée ici par le Journal des dames et de la mode. Signée d’un certain M. Weiss, elle porte cette mention :

Mme Lepaute, douée de tous les avantages extérieurs, portoit dans la société cette politesse et cette fleur d’esprit, que semblent exclure les études profondes…

Le numéro du 15 février 1898 du bi-mensuel La Femme (page 28) dresse un portrait de Nicole-Reine Lepaute en ajoutant :

Telle fut la vie pure et simple de celle que Clairaut appelait « la savante calculatrice ». Plus grande lorsqu’elle partageait l’internement de son mari dans une maison de santé que lorsqu’elle compulsait les tables astronomiques.

Et en concluant plus généralement :

« L’examen attentif des faits, des biographies. l’étude de la vérité historique devraient rassurer les esprits chagrins. La famille n’est pas en péril parce que les filles s’adonnent aux mêmes études que les garçons et osent aspirer à des carrières libérales et scientifiques. » Le revenu qu’une jeune fille peut se procurer courageusement, dignement par son travail, à l’aide des diplômes qu’elle a remportés dans les concours par son énergie, sont un appoint pour couvrir les dépenses d’un ménage futur et assurer l’éducation libérale des enfants à venir, qui facilite l’établissement des jeunes époux. Un diplôme, c’est une dot dont la fiancée qui l’apporte dans une corbeille de mariage peut être justement fière, et, loin d’être un obstacle à fonder une famille, c’est une valeur qui favorise le mariage.

Les outils des astronomes au XVIIIe siècle

Il n’est pas possible de savoir ce que Nicole-Reine Lepaute utilisait pour ses calculs. Il est en revanche envisageable de dresser une liste des outils dont les astronomes disposaient pour explorer l’espace et calculer les mouvements des astres.

Pour observer et cataloguer les astres, les astronomes du 18e siècle disposaient des lunettes d’astronomie. La paternité de leur invention est souvent attribuée à Galilée qui a construit sa première lunette en 1609. On trouve une première description de ce type d’instrument déjà en 1538 dans l’Homocentrica (texte-image en latin) de Jérôme Fracastor2. En 1608, l’opticien hollandais Hans Lippershey dépose un brevet pour des lunettes astronomiques qui lui sera refusé, car :

il était notoire que déjà différentes personnes avaient eu connaissance de l’invention. L’optique par Fulgence Marion (texte-image) (source Gallica BnF).

On doit l’invention du télescope à Isaac Newton en 1668. Son idée était d’ajouter un miroir : il fallait pour augmenter la puissance des lunettes astronomiques (et autres longues-vues et jumelles d’ailleurs) augmenter l’épaisseur de la lentille en perdant en précision. L’ajout d’un miroir concave donne une meilleure qualité d’image et permet d’augmenter la taille des télescopes. Est-ce que Lalande ou Nicole-Reine Lepaute pouvaient disposer d’un télescope ? Dans l’Encyclopédie des dames, Lalande mentionne un « un télescope de trente deux pouces qui coûte environ dix Louis » qui suffit pour « voir ce qu’il y a de plus singulier dans le ciel ».

Concernant les outils de calcul : il ne fait aucun doute qu’elle a pu et dû utiliser les différentes tables existantes. À son époque, on utilisait divers abaques pour compter, par exemple un système de jetons, utilisé notamment dans le commerce. Il est possible qu’elle ait eu connaissance, en femme cultivée, de la Pascaline, voire, de la machine à calculer de Leibniz. Mais il est peu probable qu’elle les ait utilisées, notamment parce que ces machines ont été peu diffusées. Elle a pu, en revanche, utiliser les bâtons de Napier (francisé en Neper). Et elle utilisait certainement la bonne vieille méthode du papier et du crayon ou plutôt de la plume, ou « calcul indien » qui est celle que l’on apprend à l’école actuellement. Cette méthode est arrivée en Europe au XIIe siècle et a été adoptée par le monde scientifique assez rapidement mais pas dans les classes les moins instruites de la population.

Nicole-Reine Lepaute aurait pu aussi utiliser une règle à calcul, les premières ont été inventées au XVIIe siècle, mais elles n’ont vraiment commencé à s’implanter en France qu’au XIXe siècle.

Janine Connes, l’astronome

Aussi paradoxal que cela puisse être, il y a encore moins d’éléments biographiques concernant Janine Connes que pour Nicole-Reine Lepaute. Son obituaire ne comporte aucun élément informatif autre que le strict minimum (nom et date). En revanche, on a la liste de ses publications et on peut même accéder à certaines.

De la spectroscopie infrarouge à transformée de Fourier au centre de calcul d’Orsay

Janine Connes naît en 1926. Elle épouse l’astronome Pierre Connes avec qui elle mènera diverses recherches. Elle meurt le 28 novembre 2024 à Orsay, presque centenaire (98 ans).

En 1954, son professeur, le physicien Pierre Jacquinot lui suggère un sujet de thèse :

Il s’agissait de faire des Transformées de Fourier (TF) de 1 million de points.
Pierre Jacquinot faisait partie de mon jury cette année-là, et à l’issue du concours il m’avait proposé de faire une thèse dans son Laboratoire Aimé Cotton (LAC) alors spécialisé en spectroscopie atomique et développements instrumentaux. Le sujet proposé était la spectroscopie par transformation de Fourier qui théoriquement devait battre en résolution et en étendue spectrale tous les records des réseaux et des interféromètres de Fabry-Perot. (Janine Connes, in De l’IBM 360/75 au superordinateur Jean Zay, chapitre 1).

La spectroscopie infrarouge à transformée de Fourier (IRTF ou FTIR en anglais) sur laquelle Janine Connes a basé sa thèse est une méthode d’analyse basée sur les ondes infrarouges :

Ces ondes vont de 12 800 cm-1 à 10 cm-1 et sont divisées en trois groupes: le proche infrarouge, le moyen infrarouge et l’infrarouge lointain. La FTIR utilise quant à elle le moyen infrarouge qui s’étend de 4 000 cm-1 à 400 cm-1 (2,5 µm à 25 µm).
Quand une onde infrarouge est envoyée sur une molécule, cette dernière absorbe une partie de l’onde qui correspond aux liaisons présentes dans la molécule. L’absorption du rayonnement infrarouge ne peut avoir lieu que si la longueur d’onde correspond à l’énergie associée à un mode particulier de vibrations de la molécule. (Spectroscopie infrarouge à transformée de Fourier (FTIR), A. Bonneau, Association des Archéologues du Québec).

Comme on peut le voir, c’est une technique utilisée dans des domaines très différents, incluant donc l’astronomie. Sa thèse en établira les principes en astronomie. Actuellement la :

méthode de Fourier conserve toutefois quelques niches spécifiques, comme dans le domaine de l’infrarouge lointain spatial ou pour la spectroscopie intégrale de grands champs. La spectroscopie de Fourier en astronomie : de ses origines à nos jours, Jean-Pierre Maillard, 21 décembre 2017 (Observatoire de Paris).

La page qui lui est consacrée (en) sur le site CWP (Century Women to Physics) de l’UCLA (Université de Californie à Los Angeles) indique que sa thèse, ainsi que ses publications suivantes, ont été d’une importance majeure et a posé les bases de ce qui allait devenir un nouveau et important domaine de recherche qui rend les transformées de Fourier rapides et relativement courantes :

Janine Connes's analysis of the technique of Fourier Transform Infrared Spectroscopy was of major significance and laid the foundations of what was to grow into a significant new field. Her thesis work and subsequent publications gave in-depth theoretical analysis of numerous practical details necessary for this experimental technique to work. All the more remarkable is that her work predates the age of digital computers, which now make fast Fourier Transforms relatively routine. Mary R. Masson

En 1960, elle écrit avec le physicien H. P. Gush une Étude du ciel nocturne dans le proche infra-rouge dans lequel les deux auteurs remercient notamment le Comité Européen de Calcul Scientifique pour ses attributions d’heures de calcul à l’ordinateur 704 I.B.M.

En 1961, elle publie une série de quatre articles, seule ou avec d’autres chercheurs : Études spectroscopiques utilisant les transformations de Fourier. Pour le professeur Ian McLean, fondateur du laboratoire infrarouge de l’UCLA, ce sont des « travaux fondamentaux d’une importance extrême pour le domaine ». Le travail de Janine et de Pierre Conne sur les transformations de Fourier aura notamment permis à Lewis Kaplan de déterminer, en 1966, la composition de l’atmosphère de Mars (en).

Parallèlement à cela, elle enseigne à la faculté de Sciences de Caen. En 1963, elle sera invitée avec Pierre Connes à rejoindre le Jet Propulsion Laboratory de la NASA à Pasadena. De retour en France, elle commencera par intégrer le laboratoire de Meudon au poste de directrice adjointe avant de se voir confier en 1969 la création et la direction du Centre Inter-Régional de Calcul Électronique (CIRCÉ) à Orsay.

En 1970, l’astronome Ruper Wildt la propose, avec son mari, Pierre Connes, et le physicien Robert Benjamin Leighton pour le prix Nobel de physique pour « leur développement de la méthode de spectroscopie infrarouge à transformée de Fourier ». Le prix sera attribué, finalement, à Louis Néel.

En 2022, elle écrit avec la participation de Françoise Perriquet : De l’IBM 360/75 au superordinateur Jean Zay 50 ans d’informatique au centre de calcul du CNRS d’Orsay.

Les ordinateurs de ses débuts et le centre Jean Zay

Ce sont l’IBM 704 et l’IBM 360/75 dont on va voir quelques caractéristiques techniques.

L’IBM 704 était la plus grande machine du monde. Il avait fallu deux avions pour la transporter des États-Unis à Orly. Son arrivée en France avait fait l’objet d’une émission de la Radio Télévision française (RTF). Le présentateur interrogeait la personne chargée de réceptionner l’ordinateur au titre de l’Institut européen de calculs scientifiques, une fondation IBM, destinée à offrir aux scientifiques européens (pas seulement français) la possibilité de procéder à des calculs, jusque-là peu envisageables.

Les mentions en italiques sont des citations tirées de l’émission.

L’IBM 704 pesait 21 tonnes. Celui reçu à Orly était composé de « 25 unités différentes constituants chacun autant de petits meubles de dimension normale ». Ne sachant pas ce qu’est un meuble aux « dimensions normales », on peut se donner une idée de la taille des éléments en se référant aux photos : environ la profondeur et la largeur de, disons, une armoire normande, mais en moins haut, quelque chose entre 1,10 m et 1,60 m selon les éléments.

Il fonctionnait avec des bandes magnétiques et pouvait :

  • en physique, s’occuper du dépouillement de données de mesure,
  • faciliter l’exploitation de l’énergie atomique à des fins pacifiques,
  • faire des calculs en chimie,
  • faire des calculs dans tous les domaines de l’industrie et de la science.

Dans l’émission de radio, le présentateur demandait à la fin un exemple de traitement que pouvait faire l’IBM :

Neper a passé plus de trente ans de sa vie à établir les tables de logarithmes et l’ordinateur 704 pourrait exécuter le même travail en le transcrivant sur des bandes magnétiques en dix-sept secondes à peu près.

Sorti en 1954, c’est le premier ordinateur commercialisé à utiliser des commandes arithmétiques en virgule flottante entièrement automatiques et ce grâce à John Backus qui avait insisté pour que ce soit configuré au niveau du matériel.

L’IBM 360/75 qui équipait CIRCÉ faisait partie d’une gamme d’ordinateurs interopérables et polyvalents IBM 360 dont le premier est sorti en 1966 (la numérotation des séries d’ordinateurs chez IBM est étonnante). Les IBM 360 seront commercialisés jusqu’en 1978. Ce sont les premiers à avoir utilisé le système Solid Logic Technology (SLT). L’IBM 360/30 était le plus lent de la série ; il pouvait exécuter jusqu’à 34 500 instructions par seconde avec une mémoire allant de 8 à 64 ko. Le 360/75 est l’un des derniers de la série.

Ces ordinateurs étaient évidemment programmés en FORTRAN. D’ailleurs, le premier compilateur FORTRAN a été écrit pour l’IBM 704.

Le centre Jean Zay, que l’on peut considérer comme l’un des successeurs de CIRCÉ a été inauguré en janvier 2020. C’est l’un des plus puissants centres de calcul d’Europe. Sa puissance est de 125,9 Pétaflop/s. Il a coûté 40 M€, coûte en électricité 3 à 4 M€ par an et il requiert 93 tonnes d’équipement réparti sur 320 m2 (source Ministère de l’enseignement et de la recherche). Il tourne sous Linux évidemment, comme tous les supers calculateurs de sa génération.

Françoise Combes, l’astrophysicienne

Quelle différence y a-t-il entre les métiers d’astronome et d’astrophysicien ? À cette question, wikidifference propose :

La différence entre astronome et astrophysicien est que « astronome » est celui ou celle qui s’occupe d’astronomie tandis que « astrophysicien » est [un ou une] scientifique qui étudie l’astrophysique, l’étude de l’espace et des propriétés des objets de l’univers.

Pas très convaincant, ni explicite. Les astronomes observent et cataloguent l’espace sur la base d’observations quand, en astrophysique, on se base sur les lois de la physique pour observer l’univers. En fait, à l’heure actuelle, les personnes qui, au départ, étaient astronomes sont maintenant des astrophysiciennes : la connaissance a évolué, les méthodes de recherche aussi ainsi que les outils. Mais, évidemment, les astronomes sont, ont été des scientifiques, souvent diplômés en physique.

De la physique galactique à l’Académie des sciences

Françoise Combes naît le 12 août 1952. En 1975, elle réussit l’agrégation de physique ce qui l’amènera à enseigner à l’École normale supérieure (ENS) dont elle est issue. Elle soutient sa thèse d’État à Paris VII en 1980, sujet de la thèse : les dynamiques et les structures des galaxies. En 1985, elle devient sous-directrice du laboratoire de physique à l’ENS (Ulm). Et c’est en 1989 qu’elle devient astronome à l’Observatoire de Paris. Elle est, depuis 2014, titulaire de la chaire Galaxies et cosmologie au Collège de France.

Pendant cette période, 1970 -1980, qui voit la naissance des premières simulations numériques des galaxies, elle a l’idée de les faire en trois dimensions au lieu des deux dimensions habituelles. Elle ainsi pu résoudre :

un mystère jusqu’alors inexpliqué : la formation d’un bulbe (sorte de renflement) dans les galaxies spirales. La clé de l’énigme est la barre centrale, sorte de forme allongée centrale où toutes les étoiles se rassemblent. « Cette barre soulève les étoiles dans la direction perpendiculaire au plan, explique-t-elle. De ce fait, les étoiles ne restent pas confinées dans un disque très mince mais prennent de l’altitude, ce qui forme un bulbe. » Ses simulations ont aussi montré comment la même barre précipite le gaz vers le centre, ce qui a pour effet d’alimenter le trou noir central. Médaille d’or, site CNRS.

Elle a été admise à l’Académie des sciences3 en 2004, une académie dont elle assure la vice-présidence pour le mandat 2023-2024 et qui l’élit à la présidence pour le mandat 2025-2026. Une élection qui devrait normalement être ratifiée par décret par le président de la République. Ce sera la deuxième femme à la tête de cette vénérable institution (elle a été créée en 1666) où elle succède à Alain Fischer et trente ans après la biochimiste Marianne Grunberg-Manago

Des prix prestigieux et des publications

Françoise Combes a engrangé les prix et les distinctions au cours de sa carrière à commencer par le prix de Physique IBM qu’elle obtient en 1986 et le prix Petit d'Ormoy de l’Académie des Sciences en 1993. En 2001, le CNRS lui décerne une médaille d’argent.

En 2009, elle obtient le prix Tycho Brahe de la Société européenne d’astronomie (EAS) dont c’est la deuxième édition pour ses

travaux fondamentaux dans le domaine de la dynamique des galaxies, sur le milieu interstellaire dans les systèmes extragalactiques, sur les lignes d’absorption moléculaire dans le milieu intergalactique et sur la matière noire dans l’Univers. » Communiqué de presse (en anglais) de l’EAS (pdf).

En 2017 la Société Astronomique de France (SAF) lui décerne son prix Jules-Janssen. En 2020, le CNRS lui décerne une médaille d’or. L’année suivante, elle obtient le prix international pour les femmes de sciences L’Oréal-Unesco (en).

Elle est autrice ou co-autrice de plusieurs livres dont les plus récents :

  • Le Big bang, PUF 2024, collection Que sais-je ?, en version papier (10 €) et numérique (PDF et EPUB)
  • Trous noirs et quasars, CNRS éditions 2021, collection Les grandes voix de la recherche, en papier (8 €), numérique PDF et EPUB sans DRM (5,99 €) et audio (9,99 €).

Par ailleurs, l’entretien qu’elle a donné au Collège de France en février 2024 est aussi téléchargeable en PDF.

Sources, références et remerciements

L’illustration de tête est la reproduction de la gravure originale des phases de l’éclipse (je l’ai redessinée avec Inkscape) et on peut la télécharger sur mon site de modèles ainsi d’ailleurs que le CV de Nicole-Reine Lepaute ou sur OpenClipart.

LinuxFr.org ne rend peut-être pas plus intelligent, mais la rédaction de dépêches pour le site rend indéniablement plus savant. Pour cette dépêche et compenser une grande ignorance du sujet, j’ai été amenée à lire, consulter, parcourir ou écouter un certain nombre de documents en plus de ce qui est cité dans le corps de la dépêche. À vous de voir si vous avez envie de poursuivre l’exploration.

Nicole-Reine Lepaute

Janine Connes

  • Spectroscopie du ciel nocturne dans l’infrarouge par transformation de Fourier. J. Connes, H.P. Gush, Journal de Physique et le Radium, 1959, 20 (11), pp.915-917. 10.1051/jphysrad:019590020011091500, jpa-00236163
  • Tous les articles de J. Connes sur HAL Science ouverte, à savoir : il y a un site academia.eu, mieux référencé, qui les propose moyennant une inscription au site, mais cela vient de HAL qui ne demande pas d’inscription (donc pas de courriel) pour le téléchargement des fichiers.
  • Principes & applications de la spectro. de Fourier en astronomie : de ses origines à nos jours, Jean Pierre Maillard, 8 février 2019, conférence mensuelle de la Société astronomique de France (SAF)
  • De l’IBM 360/75 au superordinateur Jean Zay 50 ans d’informatique au centre de calcul du CNRS d’Orsay, EDP Sciences, il existe en version papier (39 €), PDF et EPUB avec DRM LCP (26,99 €), on peut le feuilleter aussi sur le site Cairn Info.
  • Réception à l’aéroport d’Orly de l’IBM 704 qui avait servi à Janine Connes pour ses calculs, podcast France Culture, rediffusion d’une émission de 1957.
  • L’IBM 704
  • l’IBM 360 (es), Academia Lab (2024). Système IBM/360. Encyclopédie. Révisé le 29 décembre 2024.

Françoise Combes

L’histoire de l’astronomie

  • Les télescopes, Gilles Kremer, Sylvie Voisin, 30 mars 2018
  • Histoire et patrimoine de l’Observatoire de Paris
  • Une histoire de l’astronomie, Jean-Pierre Verdet, Seuil 1990, il a fait l’objet d’une publication au format EPUB avec DRM LCP (9,99 €) EAN : 9782021287929, mais on peut le trouver d’occasion assez facilement. Il est doté d’une bonne bibliographie et est plutôt passionnant.

Remerciements

Un très grand merci à vmagnin pour ses informations et ses précisions, même si je n’ai pas tout utilisé. Mais ce n’est pas perdu, un prochain portrait probablement (voire, sûrement).

Merci aussi à Enzo Bricolo pour m’avoir signalé l’élection de Françoise Combes à la présidence de l’Académie des sciences, sans ça je l’aurais ratée et ce serait dommage.

Ainsi se clôt cette série sur les femmes et la conquête de l’espace ainsi que l’année 2024. Et c’est mon cadeau de nouvelle année.


  1. La Connaissance du temps, qui se targue d’être la plus ancienne publication d’éphémérides toujours publiée est actuellement gérée et publiée par l’IMCCE - Observatoire de Paris, la version 2025 vient de paraître et est téléchargeable en PDF. Elle est accompagnée d’un logiciel de calcul d’éphémérides développé pour Windows, Mac et Linux. 

  2. Source : Les lunettes astronomiques, 29 mars 2018, Sylvie Voisin et Gilles Kremer, Le Blog Gallica. 

  3. Une académie qui s’engage en faveur de libre accès et dont les comptes rendus sont publiés depuis 2020 sous licence Creative commons CC BY – SA. 

Commentaires : voir le flux Atom ouvrir dans le navigateur

Agenda du Libre pour la semaine 1 de l'année 2025

29 décembre 2024 à 09:37

Calendrier Web, regroupant des événements liés au Libre (logiciel, salon, atelier, install party, conférence), annoncés par leurs organisateurs. Voici un récapitulatif de la semaine à venir. Le détail de chacun de ces 16 événements (France: 15, internet: 1) est en seconde partie de dépêche.

Sommaire

[FR Montpellier] Émission | Radio FM-Plus | Temps Libre | Diffusion - Le lundi 30 décembre 2024 de 09h00 à 10h00.

Montpel'libre réalise une série d’émissions régulières à la Radio FM-Plus intitulées « Temps Libre ». Ces émissions sont la présentation hebdomadaire des activités de Montpel’libre.

Après le jingle où l’on présente brièvement Montpel'libre, nous donnerons un coup de projecteur sur les activités qui seront proposées prochainement.

Ces émissions seront l'occasion pour les auditeurs de découvrir plus en détails les logiciels libres et de se tenir informés des dernières actualités sur le sujet.

Alors, que vous soyez débutant ou expert en informatique, que vous ayez des connaissances avancées du logiciel libre ou que vous souhaitiez simplement en savoir plus, Montpel'libre, au travers de cette émission, se fera un plaisir pour répondre à vos attentes et vous accompagner dans votre découverte des logiciels libres, de la culture libre et des communs numériques.

Vous vous demandez peut-être ce qu'est un logiciel libre. Il s'agit simplement d'un logiciel dont l'utilisation, la modification et la diffusion sont autorisées par une licence qui garantit les libertés fondamentales des utilisateurs. Ces libertés incluent la possibilité d'exécuter, d'étudier, de copier, d'améliorer et de redistribuer le logiciel selon vos besoins.

Inscription | GPS 43.60524/3.87336

Fiche activité:
https://montpellibre.fr/fiches_activites/Fiche_A5_017_Emission_Radio_Montpellibre_2024.pdf

[FR Beauvais] Sensibilisation et partage autour du Libre - Le mercredi 1 janvier 2025 de 18h00 à 20h00.

Chaque mercredi soir, l'association propose une rencontre pour partager des connaissances, des savoir-faire, des questions autour de l'utilisation des logiciels libres, que ce soit à propos du système d'exploitation Linux, des applications libres ou des services en ligne libres.

C'est l'occasion aussi de mettre en avant l'action des associations fédératrices telles que l'April ou Framasoft, dont nous sommes adhérents et dont nous soutenons les initiatives avec grande reconnaissance.

[FR Chambéry] Repair du libre - Le jeudi 2 janvier 2025 de 18h00 à 20h00.

Repair du Libre (FabLab / Aquarium) - Cet atelier est consacré à la réparation d'ordinateurs et à l'installation rapide de systèmes d'exploitation Linux. Les participants peuvent venir avec leurs ordinateurs pour recevoir de l'aide technique. En partenariat avec le FabLab.

[FR Angers] Rencontre mensuelle OpenStreetMap - Le jeudi 2 janvier 2025 de 18h15 à 19h15.

Déjà fan d’OpenStreetMap ou envie de découvrir cette cartographie libre, de contribuer à l’enrichissement de la cartographie locale angevine, de mettre à jour des données qui vous tiennent à cœur (pistes cyclables, environnement, facilitation des parcours PMR, bâti, etc.) ?

Les cartographes bénévoles angevins se rencontrent les premiers jeudis de chaque mois pour échanger des astuces, faire découvrir les outils disponibles (sur ordiphone ou PC) et organiser des actions collectives.

Vous n’y connaissez rien ? Pas grave, on vous apprendra autour d’une pression, d’un thé ou d’un jus de fruit !

[FR Montrouge] Rencontre contributeurs OpenStreetMap Sud de Paris - Le jeudi 2 janvier 2025 de 19h00 à 22h00.

La rencontre mensuelle des contributeurs habitants Montrouge et alentours aura lieu le jeudi 2 janvier 2025 au  Schmilblick à partir de 19h.

Ce bar solidaire est situé au 94 avenue Henri Ginoux (station Vélib juste en face, bus 68 et 128, métro 4 station « Mairie de Montrouge »).

Cette rencontre mensuelle nous permettra de discuter de nos projets de cartographie dans OpenStreetMap à Montrouge, au Sud de Paris et au-delà. Comme d’habitude, nous prenons un pot et dînons sur place pour ceux qui le souhaitent.

Comme toujours, les débutants et simples curieux sont les bienvenus.

[internet] Permanence numérique en visio - Le jeudi 2 janvier 2025 de 20h00 à 21h30.

L'association Libretic tient sa permanence numérique tous les 1ers jeudi du mois à 20h:

Que vous soyez adhérents ou non, si vous souhaitez:

  • utiliser des logiciels libres et respectueux de la vie privée ?
  • découvrir les services internet mis à disposition par l’association Libretic ?
  • gagner en autonomie numérique, à votre rythme avec des outils libres ?

alors venez discuter avec nous lors de cette permanence.

  • rendez-vous est donné aux participants à 20h à l'adresse https://jitsi.libretic.fr/libretic-permanence-virtuelle
  • 20 minutes sont consacrées à l'accueil des participants, à l'identification des thématiques que chacun  souhaite aborder, au temps à y consacrer et aux éventuels groupes qu'il serait nécessaire de constituer pour cela
  • de 20h20 à 21h30: si nécessaire les groupes se séparent puis vient un échange sur les thématiques identifiées

La séance de travail se terminera au maximum à 21h30, le salon restera disponible pour des échanges éventuels entre les participants sans les animateurs.

Libretic est une association loi 1901 reconnue d'intérêt général.

L’atelier est animé par des bénévoles de l’association.

[FR Chambery] Forum Alpinux - Le jeudi 2 janvier 2025 de 20h00 à 22h00.

Forum du Libre (TeenLab) - Ce créneau est dédié aux présentations, au dépannage, à l'assistance et aux échanges autour des logiciels libres.

C'est un moment pour partager des connaissances et obtenir des conseils.

Le calendrier des présentations est sur le site https://alpinux.org

[FR Milly-sur-Thérain] Sensibilisation et partage autour du Libre - Le vendredi 3 janvier 2025 de 17h00 à 19h00.

Le premier vendredi de chaque mois, l'association OISUX propose une rencontre pour partager des connaissances, des savoir-faire, des questions autour de l'utilisation des logiciels libres, que ce soit à propos du système d'exploitation Linux, des applications libres ou des services en ligne libres

C'est l'occasion aussi de mettre en avant l'action des associations fédératrices telles que l'April ou Framasoft, dont nous sommes adhérents et dont nous soutenons les initiatives avec grande reconnaissance.

L'atelier aura lieu dans les locaux de la mairie.

[FR Annecy] Réunion hebdomadaire AGU3L Logiciels Libres - Le vendredi 3 janvier 2025 de 20h00 à 23h59.

L'AGU3L, Logiciels Libres à Annecy, votre association se réunit tous les vendredis à partir de 20h00 et jusque vers 1h00 du matin. Passez quand vous voulez.

Entrée par le côté, entre les 2 bâtiments. Au fond du couloir à droite, là où il y a de la lumière.

⚠️ Vérifiez sur le site avant de vous déplacer, y a un bandeau en haut qui confirme la tenue de la réunion.

Le programme de la réunion, s'il y en a un, est sur notre site. 😉 ⬇️

Digression possible, voire probable.

Vous pouvez aussi nous soumettre un programme sur un thème particulier.

Exemples:

  • Libre Office les listes à puces, j'aimerais en savoir plus
  • Pouvez vous nous présenter le système Linux pour les débutants ?
  • plus technique: recompiler un noyau Linux avec les options spécifiques
  • Kubernetes est-ce pour moi ?
  • Démo sur un logiciel libre en particulier, ex: Gimp
  • Ou votre logiciel que vous souhaitez partager
  • À l'aide ! 😱 pas de panique, on a probablement une solution pour vous.
  • Vous développez du code libre ? oui
  • etc, etc.

Apportez à boire, à manger. Un ordi ça peut aider.
De la bonne humeur et un brin de Liberté.
Et tout ce que vous trouvez sympa: des amis, des projets, des trouvailles, etc.

Besoin d'une installation Linux?

Pas de problème! Laissez nous un petit message avant au cas où l'on soit pas dispo ce soir là.

C'est install party à la demande!

[FR Jarville-la-Malgrange] Expérimentation module Tableaux sur Nextcloud - Le vendredi 3 janvier 2025 de 20h30 à 23h30.

Depuis plus d’un an, le Mirabellug utilise l’outil Framaspace mis à disposition des associations, proposé par Framasoft. Il s’agit d’un outil en ligne très puissant (basé sur Nextcloud) permettant via divers modules de faciliter la collaboration dans notre fonctionnement.

Il y a quelques mois a été intégré le module Tableaux sur Framaspace. Un outil permettant de créer des minis applications sur Nextcloud, avec l’approche No-code. On ignore de quoi il s’agit précisément, c’est pourquoi cette réunion consistera principalement à expérimenter l’outil pour comprendre plus concrètement de quoi il s’agit et mesurer son utilité.

Rendez-vous le vendredi 3 janvier à partir de 20h30, au Plan B de Jarville-la-Malgrange.

[FR Lannion] Formation au logiciel Paheko de gestion associative - Le samedi 4 janvier 2025 de 09h00 à 17h00.

Paheko est un logiciel libre en ligne de gestion associative.

Il vous permettra de gérer facilement et partager aisément au sein de votre Conseil d’administration:

  • votre comptabilité, selon plan comptable associatif et production facile d’un compte de résultats et bilan annuels ;
  • vos adhésions et activités ;
  • vos membres ;
  • et plus encore…

Il s’agit d’une journée de formation introductive à ses fonctionnalités essentielles, avec atelier de mise en pratique, par une association trégorroise qui l’utilise depuis trois ans. Vous travaillerez en binôme. Nous suggérons éventuellement de vous inscrire à deux d’une même association.

Vous pouvez télécharger le flyer joint et le diffuser largement aux personnes ou lieux potentiellement intéressés.

Pour en savoir + sur Paheko: https://paheko.cloud

[FR Vanves] Portes ouvertes - Installations - Dépannages - Le samedi 4 janvier 2025 de 09h30 à 18h00.

Le premier samedi de chaque mois (sauf août et septembre), de 9h30 à 18h, nous organisons une journée porte ouverte pour présenter notre association et son but.

Lors de cette journée vous êtes invités à venir nous rencontrer pour découvrir les possibilités des logiciels libres.

Venez avec vos questions, vos souhaits, vos matériels, nous verrons ensemble comment y répondre.

Nous acceptons le don de Matériels informatique (surtout portables), Tablette et Smartphone, de préférence avec leur alimentation / chargeur.

Le Wiki pour vous aider à passer au Libre: https://wiki.llv.asso.fr/doku.php

Pour le déjeuner, une participation vous sera demandé.

IMPORTANT: Lisez la "Préparation pour l'installation": https://wiki.llv.asso.fr/doku.php?id=wiki:installer:preparation_installation

Localisation précise: https://www.openstreetmap.org/note/4365747

Proche du Métro (13) Malakoff Plateau de Vanves (à 5 minutes)

[FR Le Mans] Permanence mensuelle du samedi - Le samedi 4 janvier 2025 de 14h00 à 18h00.

Assistance technique et démonstration concernant les logiciels libres.

Attention, réservez votre place par contact (at) linuxmaine.org 

Planning des réservations consultable ici.

[FR Nantes] Permanence Linux-Nantes - Le samedi 4 janvier 2025 de 15h00 à 18h00.

Linux Nantes tient à vous informer de sa prochaine permanence. Nous vous proposons:

     de vous faire découvrir linux et les logiciels libres

     de vous aider à installer Linux sur votre ordinateur ou votre portable,

     de vous informer sur l'utilisation de votre version de Linux

     de voir avec vous les problèmes rencontrés

Pour plus d’informations sur l’association voir notre site

[FR Quimper] Permanence Linux Quimper - Le samedi 4 janvier 2025 de 16h00 à 18h00.

Tous les samedis de 16h à 18h, Linux Quimper vous donne rendez-vous au centre social des Abeilles, 4 rue Sergent Le Flao (quartier de la Terre Noire) Quimper.

Nous vous proposons lors de ces rencontres d’échanger autour du Libre et de Linux en particulier

Vous pouvez venir pour vous faire aider, ou aider, à installer et paramétrer une distribution GNU/Linux de votre choix ou des logiciels libres sur votre ordinateur.

Recommandations:

  • Sauvegardez vos données avant de venir.
  • Pour une installation de Linux si vous voulez conserver Windows, libérez de la place sur le disque dur (20 Go minimum) et défragmentez Windows.
  • Nous prévenir, éventuellement, de votre passage via le forum.

Vous pouvez aussi venir pour une première prise d’informations et de contacts.

[FR Gaillac] Repair café - Le dimanche 5 janvier 2025 de 10h00 à 13h00.

Repair café, atelier informatique, etc.

Tout les premiers dimanches du mois à "Mosaïque".

Commentaires : voir le flux Atom ouvrir dans le navigateur

❌
❌