<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Bastien Traverse</title>
    <link>https://bastientraverse.com/fr/articles/</link>
    <description>Recent content in Posts on Bastien Traverse</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>fr</language>
    <lastBuildDate>Wed, 06 May 2026 00:00:00 +0200</lastBuildDate><atom:link href="https://bastientraverse.com/fr/articles/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Installer Docker via cloud-init</title>
      <link>https://bastientraverse.com/fr/articles/2026-05-cloud-init-docker/</link>
      <pubDate>Wed, 06 May 2026 00:00:00 +0200</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2026-05-cloud-init-docker/</guid>
      <description>&lt;p&gt;Voici les différentes manières d&amp;rsquo;installer Docker via &lt;a href=&#34;https://docs.cloud-init.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cloud-init&lt;/a&gt;. L&amp;rsquo;intérêt est de pouvoir utiliser l&amp;rsquo;image cloud officielle d&amp;rsquo;une distribution et de la rendre prête à l&amp;rsquo;emploi avec Docker dès le premier démarrage.&lt;/p&gt;
&lt;p&gt;Cela fonctionne partout où l&amp;rsquo;on peut passer des &lt;code&gt;user-data&lt;/code&gt; à cloud-init (clouds publics et privés, Proxmox, Incus, VirtualBox&amp;hellip;) ; pour ma part j&amp;rsquo;ai testé ce qui suit sur &lt;a href=&#34;https://linuxcontainers.org/incus-os/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IncusOS&lt;/a&gt; avec la variante cloud de ses &lt;a href=&#34;https://images.linuxcontainers.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;modèles de conteneur&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;admonition note&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;
  Cet article suppose des connaissances sur le fonctionnement de cloud-init ; si les termes &lt;em&gt;user-data&lt;/em&gt; et &lt;em&gt;cloud-config&lt;/em&gt; ne vous évoquent rien, lisez l&amp;rsquo;&lt;a href=&#34;https://docs.cloud-init.io/en/latest/explanation/introduction.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Introduction à cloud-init&lt;/a&gt; dans la documentation officielle.
&lt;/div&gt;
&lt;h2 id=&#34;méthode-universelle-via-le-script&#34;&gt;&lt;a href=&#34;#m%c3%a9thode-universelle-via-le-script&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Méthode universelle via le script&lt;/h2&gt;&lt;p&gt;La méthode la plus universelle pour installer Docker est d&amp;rsquo;utiliser le &lt;a href=&#34;https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;script de commodité&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cette méthode fonctionne sur toutes les distributions &lt;a href=&#34;https://docs.docker.com/engine/install/#installation-procedures-for-supported-platforms&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;officiellement supportées par Docker Inc.&lt;/a&gt; (ce qui à ce jour &lt;a href=&#34;https://github.com/docker/docker-install/commit/86f94af03c160ca4cbf402ca887582d843e9d5d1#commitcomment-183353979&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;exclut Rocky Linux et Alma Linux&lt;/a&gt;), et vient avec la mise en garde suivante de la part de Docker :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Only recommended for testing and development environments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;sans-données-cloud-config&#34;&gt;&lt;a href=&#34;#sans-donn%c3%a9es-cloud-config&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Sans données cloud-config&lt;/h3&gt;&lt;p&gt;Si l&amp;rsquo;on n&amp;rsquo;a pas besoin d&amp;rsquo;utiliser de directives spécifiques au format &lt;a href=&#34;https://docs.cloud-init.io/en/latest/explanation/format/cloud-config.html#user-data-formats-cloud-config&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cloud-config&lt;/a&gt;, alors on peut se contenter de la ligne suivante comme &lt;a href=&#34;https://cloudinit.readthedocs.io/en/latest/explanation/format.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;user-data&lt;/a&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include https://get.docker.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le format &lt;a href=&#34;https://docs.cloud-init.io/en/latest/explanation/format/include.html#user-data-formats-include&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;include&lt;/a&gt; dit à cloud-init de télécharger l&amp;rsquo;URL et de traiter son contenu comme s&amp;rsquo;il était passé directement en user-data.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://get.docker.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://get.docker.com&lt;/a&gt; retourne un script shell, cloud-init le détecte via la première ligne (&lt;code&gt;#!/bin/sh&lt;/code&gt;) et l&amp;rsquo;exécute directement, exactement comme si l&amp;rsquo;on avait passé le script lui-même en user-data.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est le user-data le plus minimal possible qui a pour avantage de laisser cloud-init gérer le téléchargement du script (pas besoin de &lt;code&gt;curl&lt;/code&gt;), mais comme inconvénient d&amp;rsquo;empêcher l&amp;rsquo;utilisation de cloud-config pour installer des packages, configurer des utilisateurs etc.&lt;/p&gt;
&lt;p&gt;Il existe des solutions plus complexes pour combiner les formats &lt;code&gt;include&lt;/code&gt; et &lt;code&gt;cloud-config&lt;/code&gt;, mais pour ma part ça m&amp;rsquo;est plus pratique d&amp;rsquo;intégrer directement le script dans cloud-config.&lt;/p&gt;
&lt;h3 id=&#34;à-lintérieur-de-cloud-config&#34;&gt;&lt;a href=&#34;#%c3%a0-lint%c3%a9rieur-de-cloud-config&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;À l&amp;rsquo;intérieur de cloud-config&lt;/h3&gt;&lt;p&gt;Pour exécuter le script d&amp;rsquo;installation automatisé de Docker dans le format cloud-config, vous pouvez utiliser l&amp;rsquo;extrait suivant :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;curl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Télécharge et exécute le script d&amp;#39;installation officiel Docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;curl -fsSL https://get.docker.com -o /tmp/get-docker.sh&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;sh /tmp/get-docker.sh&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;packages&lt;/code&gt; s&amp;rsquo;assure que &lt;code&gt;curl&lt;/code&gt; est installé (ce n&amp;rsquo;était pas le cas dans les images LXC de Debian/Ubuntu &lt;a href=&#34;https://github.com/lxc/lxc-ci/issues/977&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;jusqu&amp;rsquo;à ce que j&amp;rsquo;en fasse la requête&lt;/a&gt;), puis &lt;code&gt;runcmd&lt;/code&gt; le télécharge et l&amp;rsquo;exécute.&lt;/p&gt;
&lt;div class=&#34;admonition note&#34;&gt;
  &lt;p&gt;Pourquoi il est préférable d&amp;rsquo;éviter &lt;code&gt;curl -fsSL https://get.docker.com | sh&lt;/code&gt; et de le faire en deux étapes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;quand &lt;code&gt;curl&lt;/code&gt; est lent ou que la connexion est instable, &lt;code&gt;sh&lt;/code&gt; commence à exécuter le script &lt;em&gt;pendant&lt;/em&gt; son téléchargement : si le flux est corrompu ou tronqué, vous exécutez un script incomplet, ce qui peut laisser le système dans un état incohérent&lt;/li&gt;
&lt;li&gt;de plus &lt;code&gt;runcmd&lt;/code&gt; ne capture pas bien les erreurs en pipe : si &lt;code&gt;curl&lt;/code&gt; échoue (réseau pas encore prêt au démarrage), le code de sortie peut être masqué par &lt;code&gt;sh&lt;/code&gt; et cloud-init ne détectera pas l&amp;rsquo;échec.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;Testé et approuvé sur Ubuntu 24.04 &amp;amp; 26.04, Debian 13 et CentOS/RHEL 9-10 (pour Rocky il faut attendre que Docker Inc. &lt;a href=&#34;https://github.com/docker/docker-install/pull/557&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;se décide à construire les paquets&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;méthode-via-le-dépôt-officiel&#34;&gt;&lt;a href=&#34;#m%c3%a9thode-via-le-d%c3%a9p%c3%b4t-officiel&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Méthode via le dépôt officiel&lt;/h2&gt;&lt;p&gt;On laisse derrière nous la méthode universelle via le script pour passer à la méthode &lt;strong&gt;recommandée pour la production&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Elle requiert une configuration manuelle du dépôt officiel : de ce fait les instructions varient entre chaque distribution.&lt;/p&gt;
&lt;h3 id=&#34;ubuntudebian&#34;&gt;&lt;a href=&#34;#ubuntudebian&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Ubuntu/Debian&lt;/h3&gt;&lt;p&gt;La manière la plus idiomatique/correcte à mon sens est d&amp;rsquo;utiliser le &lt;a href=&#34;https://docs.cloud-init.io/en/latest/reference/yaml_examples/apt.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;module APT&lt;/a&gt; de cloud-init pour ajouter le dépôt officiel Docker.&lt;/p&gt;
&lt;p&gt;Pour Ubuntu :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=$KEY_FILE] https://download.docker.com/linux/ubuntu $RELEASE stable&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;keyid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;9DC858229FC7DD38854AE2D88D81803C0EBFCD88&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce-cli&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;containerd.io&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-buildx-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-compose-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;admonition note&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Remarque&lt;/p&gt;
  &lt;p&gt;Le paquet &lt;code&gt;docker-ce&lt;/code&gt; dépend de &lt;code&gt;containerd.io&lt;/code&gt; et de &lt;code&gt;docker-ce-cli&lt;/code&gt;, qui recommandent eux-mêmes &lt;code&gt;docker-buildx-plugin&lt;/code&gt; et &lt;code&gt;docker-compose-plugin&lt;/code&gt; ; on devrait donc pouvoir s’en sortir en ne listant que &lt;code&gt;docker-ce&lt;/code&gt; dans &lt;code&gt;packages&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mais par souci de fiabilité, les &lt;a href=&#34;https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;instructions officielles&lt;/a&gt; les listent tous, j&amp;rsquo;en fais donc de même ici.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Pour Debian c&amp;rsquo;est exactement la même chose, mais en remplaçant &lt;code&gt;ubuntu&lt;/code&gt; par &lt;code&gt;debian&lt;/code&gt; dans l&amp;rsquo;URL du dépôt source (&lt;code&gt;https://download.docker.com/linux/debian&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Le module APT ne permettant pas de télécharger de clé GPG depuis une URL, cette méthode intègre directement l&amp;rsquo;empreinte de la clé du dépôt officiel Docker (&lt;code&gt;keyid: 9DC8...&lt;/code&gt;) ; le jour où la clé changera, il faudra récupérer la nouvelle empreinte avec :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -s https://download.docker.com/linux/ubuntu/gpg &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; gpg --with-colons --show-keys &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk -F: &lt;span class=&#34;s1&#34;&gt;&amp;#39;/^fpr/ { print $10; exit }&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si &lt;code&gt;curl&lt;/code&gt;/&lt;code&gt;wget&lt;/code&gt; est disponible dans l&amp;rsquo;image, on peut contourner cette contrainte en téléchargeant la clé séparément :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;bootcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;cloud-init-per once fetch_docker_gpg curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $RELEASE stable&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce-cli&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;containerd.io&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-buildx-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-compose-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;admonition tip&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Précision&lt;/p&gt;
  &lt;p&gt;L&amp;rsquo;utilisation de &lt;a href=&#34;https://docs.cloud-init.io/en/latest/reference/yaml_examples/boot_cmds.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;bootcmd&lt;/a&gt; plutôt que du plus classique &lt;code&gt;runcmd&lt;/code&gt; est nécessaire à cause de &lt;a href=&#34;https://docs.cloud-init.io/en/latest/explanation/boot.html#boot-stages&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;l&amp;rsquo;ordre d&amp;rsquo;exécution des modules&lt;/a&gt; cloud-init, qui fait que &lt;code&gt;runcmd&lt;/code&gt; s&amp;rsquo;exécute quasiment en dernier et donc après &lt;code&gt;apt&lt;/code&gt; et &lt;code&gt;packages&lt;/code&gt;. Cela conduit à une erreur du fait de l&amp;rsquo;absence de la clé lors de l&amp;rsquo;ajout du dépôt :&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[191744.376988] cloud-init[204]: Reading package lists...
[191744.386138] cloud-init[204]: W: OpenPGP signature verification failed: https://download.docker.com/linux/ubuntu resolute InRelease: The following signatures couldn&amp;#39;t be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
[191744.386184] cloud-init[204]: E: The repository &amp;#39;https://download.docker.com/linux/ubuntu resolute InRelease&amp;#39; is not signed.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;bootcmd&lt;/code&gt; s&amp;rsquo;exécute très tôt durant le lancement d&amp;rsquo;une instance, et permet ainsi de récupérer la clé &lt;em&gt;avant&lt;/em&gt; la configuration du dépôt et le téléchargement des paquets.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.cloud-init.io/en/latest/reference/cli.html#cloud-init-per&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;cloud-init-per once&lt;/code&gt;&lt;/a&gt; s&amp;rsquo;assure que la commande soit exécutée uniquement une fois, autrement les &lt;code&gt;bootcmsd&lt;/code&gt; sont exécutées à chaque démarrage.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Si &lt;code&gt;curl&lt;/code&gt; n&amp;rsquo;est pas disponible dans l&amp;rsquo;image, on peut l&amp;rsquo;installer avant la récupération de la clé :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;bootcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;cloud-init-per once install_curl apt-get -yq install curl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;cloud-init-per once fetch_docker_gpg curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $RELEASE stable&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce-cli&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;containerd.io&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-buildx-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-compose-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;rockyalma&#34;&gt;&lt;a href=&#34;#rockyalma&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Rocky/Alma&lt;/h3&gt;&lt;p&gt;En attendant que le dépôt officiel Docker &lt;a href=&#34;https://github.com/docker/docker-install/pull/557&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;devienne fonctionnel pour ces distributions&lt;/a&gt; (ne retenez pas votre souffle, cela fait des années que c&amp;rsquo;est &amp;ldquo;en cours&amp;rdquo;&amp;hellip;), pour Rocky c&amp;rsquo;est celui de RHEL qu&amp;rsquo;il faut ajouter selon &lt;a href=&#34;https://docs.rockylinux.org/10/gemstones/containers/docker/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cette doc&lt;/a&gt; (ce qui fait sens puisque Rocky est un rebuild de RHEL) et pour Alma celui de CentOS (Alma étant basée sur CentOS Stream).&lt;/p&gt;
&lt;h4 id=&#34;exemple-pour-rocky&#34;&gt;&lt;a href=&#34;#exemple-pour-rocky&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Exemple pour Rocky&lt;/h4&gt;&lt;p&gt;Docker fournit le fichier &lt;a href=&#34;https://download.docker.com/linux/rhel/docker-ce.repo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;docker-ce.repo&lt;/a&gt; qui définit 4 dépôts dans le format compris par yum/dnf :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[docker-ce-stable]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Docker CE Stable - $basearch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;baseurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/$releasever/$basearch/stable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgcheck&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgkey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/gpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[docker-ce-stable-source]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Docker CE Stable - Sources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;baseurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/$releasever/source/stable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgcheck&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgkey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/gpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[docker-ce-test]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Docker CE Test - $basearch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;baseurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/$releasever/$basearch/test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgcheck&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgkey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/gpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[docker-ce-test-source]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Docker CE Test - Sources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;baseurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/$releasever/source/test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgcheck&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;gpgkey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://download.docker.com/linux/rhel/gpg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;équivalent de la directive &lt;code&gt;apt.sources&lt;/code&gt; pour les distributions de la famille de Red Hat est &lt;a href=&#34;https://docs.cloud-init.io/en/latest/reference/modules.html#mod-cc-yum-add-repo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;yum_repos&lt;/code&gt;&lt;/a&gt;, mais je n&amp;rsquo;ai pas trouvé comment la pointer directement vers ce fichier pour qu&amp;rsquo;elle en utilise le contenu.&lt;/p&gt;
&lt;p&gt;Si le dépôt Stable vous suffit (et de toute façon, les trois autres dépôts sont désactivés via &lt;code&gt;enabled=0&lt;/code&gt;  et les deux dépôts Sources pointent vers des &lt;a href=&#34;https://download.docker.com/linux/rhel/10/source/stable&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;URL&lt;/a&gt; &lt;a href=&#34;https://download.docker.com/linux/rhel/10/source/test&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;inexistantes&lt;/a&gt;), voici comment implémenter sa configuration avec &lt;code&gt;yum_repos&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;yum_repos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docker-ce&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Docker CE Stable - $basearch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;baseurl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://download.docker.com/linux/rhel/$releasever/$basearch/stable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gpgcheck&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gpgkey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://download.docker.com/linux/rhel/gpg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce-cli&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;containerd.io&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-buildx-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-compose-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# RHEL et clones ne démarrent pas automatiquement les services&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;systemctl enable --now docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Personnellement cette approche me convient bien, mais il est aussi possible de transcrire les &lt;a href=&#34;https://docs.docker.com/engine/install/rhel/#install-using-the-repository&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;instructions officielles&lt;/a&gt; en &lt;code&gt;runcmd&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;dnf install -y dnf-plugins-core&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;systemctl enable --now docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Je suis moins amateur, mais il faut reconnaître que ça fonctionne tout aussi bien. Comme souvent il n&amp;rsquo;y a pas qu&amp;rsquo;une seule bonne manière de faire les choses en informatique.&lt;/p&gt;
&lt;p&gt;Pour Alma Linux, remplacez &lt;code&gt;rhel&lt;/code&gt; dans l&amp;rsquo;URL avec &lt;code&gt;centos&lt;/code&gt; : &lt;code&gt;https://download.docker.com/linux/rhel/docker-ce.repo&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;arch&#34;&gt;&lt;a href=&#34;#arch&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Arch&lt;/h3&gt;&lt;p&gt;En bonus et parce que ça me tient à cœur, voici comment procéder sur Arch Linux.&lt;/p&gt;
&lt;p&gt;Il n&amp;rsquo;y a pas de dépôt officiel Docker pour Arch, et c&amp;rsquo;est bien normal puisque l&amp;rsquo;une des raisons d&amp;rsquo;être de ces dépôts est de fournir la version la plus à jour des paquets possible, ce qui est déjà le cas sur Arch.&lt;/p&gt;
&lt;p&gt;De ce fait on peut simplement faire :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-buildx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-compose&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;systemctl --now enable docker.socket&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oui c&amp;rsquo;est vraiment simple : ce n&amp;rsquo;est pas surprenant puisque Arch le principe &lt;a href=&#34;https://wiki.archlinux.org/title/Arch_terminology#KISS&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;KISS&lt;/a&gt; (Keeps It Simple, Stupid) est au cœur de ses &lt;a href=&#34;https://wiki.archlinux.org/title/Arch_Linux#Simplicity&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;principes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;bonus--ajouter-lutilisateur-au-groupe-docker&#34;&gt;&lt;a href=&#34;#bonus--ajouter-lutilisateur-au-groupe-docker&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Bonus : ajouter l&amp;rsquo;utilisateur au groupe docker&lt;/h2&gt;&lt;p&gt;&amp;hellip; N&amp;rsquo;est pas recommandé &lt;a href=&#34;https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pour des questions de sécurité&lt;/a&gt;, mais si jamais vous en avez besoin voici l&amp;rsquo;astuce que j&amp;rsquo;utilise pour ça fonctionne entre différentes distributions :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Ajoute l&amp;#39;utilisateur avec UID 1000 au groupe docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;sh, -c, &amp;#34;usermod -aG docker $(awk -F: &amp;#39;$3==1000{print $1}&amp;#39; /etc/passwd)&amp;#34; ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cela suppose que le premier utilisateur non-privilégié ait l&amp;rsquo;UID 1000 (et que ce soit celui que l&amp;rsquo;on veut ajouter au groupe &lt;code&gt;docker&lt;/code&gt;), ce qui est commun mais pas garanti.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est nécessaire car chaque image cloud utilise un nom d&amp;rsquo;utilisateur par défaut différent (en général le nom de la distribution), et que l&amp;rsquo;on ne puisse pas utiliser la clé &lt;code&gt;default&lt;/code&gt; ou &lt;code&gt;default_user&lt;/code&gt; pour s&amp;rsquo;y substituer :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;groups&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;conduit à l&amp;rsquo;erreur :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[24784.216271] cloud-init[201]: 2026-04-30 16:59:27,202 - distros[WARNING]: Unable to add group member &#39;default&#39; to group &#39;docker&#39;; user does not exist.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;De plus, créer un groupe ainsi au lieu de laisser le paquet &lt;code&gt;docker&lt;/code&gt; le créer lors de son installation est à éviter, notamment parce qu&amp;rsquo;il aura alors un GID ≥ 1000 alors que normalement les comptes système sont ≤ 999.&lt;/p&gt;
&lt;p&gt;Je n&amp;rsquo;ai pas non plus connaissance d&amp;rsquo;une manière simple de dire &amp;ldquo;ajoute l&amp;rsquo;utilisateur par défaut au groupe &lt;code&gt;docker&lt;/code&gt;&amp;rdquo; &lt;em&gt;sans remplacer tous les autres groupes supplémentaires&lt;/em&gt; de l&amp;rsquo;utilisateur par défaut, donc ce que l&amp;rsquo;on voit parfois :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;users&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;groups&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Résulte en l&amp;rsquo;écrasement des groupes secondaires par défaut :&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ id
uid=1000(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu),1000(docker)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alors que normalement on a :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uid=1000(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),1000(lxd)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Au final, la méthode la plus &lt;strong&gt;simple&lt;/strong&gt; et &lt;strong&gt;portable&lt;/strong&gt; est de remplacer le nom de l&amp;rsquo;utilisateur par défaut et ensuite d&amp;rsquo;ajouter cet utilisateur au groupe via un &lt;code&gt;runcmd&lt;/code&gt; tardif :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cloud&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;usermod -aG docker cloud&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Exemple complet pour Ubuntu :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=$KEY_FILE] https://download.docker.com/linux/ubuntu $RELEASE stable&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;keyid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;9DC858229FC7DD38854AE2D88D81803C0EBFCD88&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cloud&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;usermod -aG docker cloud&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bien sûr si vous n&amp;rsquo;utilisez qu&amp;rsquo;une ou deux distributions, vous pouvez alors intégrer le nom de l&amp;rsquo;utilisateur par défaut de cette distribution dans la config :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#cloud-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=$KEY_FILE] https://download.docker.com/linux/ubuntu $RELEASE stable&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;keyid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;9DC858229FC7DD38854AE2D88D81803C0EBFCD88&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-ce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runcmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;usermod -aG docker ubuntu&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Avec tout ceci j&amp;rsquo;espère que vous ne rencontrerez aucun souci pour lancer des instances avec le moteur Docker prêt à l&amp;rsquo;emploi !&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://stallman.org/articles/happy-hacking.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Happy hacking&lt;/a&gt; 💻&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Exécuter la même tâche sur plusieurs machines avec Bash et sshpass</title>
      <link>https://bastientraverse.com/fr/articles/2026-03-automatisation/</link>
      <pubDate>Sat, 14 Mar 2026 00:00:00 +0100</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2026-03-automatisation/</guid>
      <description>&lt;p&gt;Dans le cadre du défi &amp;ldquo;&lt;a href=&#34;https://kodekloud.com/100-days-of-devops&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;100 jours de DevOps&lt;/a&gt;&amp;rdquo; de la plateforme KodeKloud, une des tâches fournies consistait à installer &lt;em&gt;cronie&lt;/em&gt; sur trois serveurs et à créer la même tâche cron pour l&amp;rsquo;utilisateur root :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Nautilus system admins team has prepared scripts to automate several day-to-day tasks. They want them to be deployed on all app servers in Stratos DC on a set schedule. Before that they need to test similar functionality with a sample cron job. Therefore, perform the steps below:&lt;br&gt;
a. Install &lt;code&gt;cronie&lt;/code&gt; package on all Nautilus app servers and start &lt;code&gt;crond&lt;/code&gt; service.&lt;br&gt;
b. Add a cron &lt;code&gt;*/5 * * * * echo hello &amp;gt; /tmp/cron_text&lt;/code&gt; for root user.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;À la lecture de l&amp;rsquo;énoncé j&amp;rsquo;entrevoyais déjà la procédure attendue, manuelle et répétitive :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;récupérer les identifiants du premier serveur et s&amp;rsquo;y connecter en SSH&lt;/li&gt;
&lt;li&gt;installer le paquet &lt;em&gt;cronie&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;vérifier l&amp;rsquo;état du service&lt;/li&gt;
&lt;li&gt;éditer le crontab root&lt;/li&gt;
&lt;li&gt;déconnexion et répétition avec les deux serveurs suivants.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&amp;rsquo;ai une horreur viscérale de ce genre de répétitions robotiques sans intérêt ; ça fait crier quelque chose au fond de moi : &amp;ldquo;Je ne suis pas une machine !&amp;rdquo; Car c&amp;rsquo;est à la machine que revient d&amp;rsquo;effectuer ce genre de tâches : le mot informatique n&amp;rsquo;est-il pas la contraction de &lt;em&gt;information automatique&lt;/em&gt; après tout ?&lt;/p&gt;
&lt;p&gt;Ce qui m&amp;rsquo;intéresse dans l&amp;rsquo;approche DevOps c&amp;rsquo;est exactement ça : mettre un terme à cette manière manuelle et fastidieuse de procéder, et parachever enfin la raison d&amp;rsquo;être de l&amp;rsquo;informatique. On veut de l&amp;rsquo;industrialisation, de l&amp;rsquo;automatisation, de l&amp;rsquo;&lt;em&gt;Infra-as-Code&lt;/em&gt; enfin !&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;J&amp;rsquo;ai donc commencé par envisager mes alternatives :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;installer Ansible et créer un playbook : overkill pour un lab unique, entre l&amp;rsquo;installation et l&amp;rsquo;écriture ça aurait introduit une complexité inutile à ce stade ; je suis sûr que je dois pouvoir faire cela avec les outils à ma disposition.&lt;/li&gt;
&lt;li&gt;mon petit chouchou, &lt;a href=&#34;https://www.gnu.org/software/parallel/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNU parallel&lt;/a&gt; : pas installé dans l&amp;rsquo;environnement du lab, suppose une connexion par clé SSH pour se passer de mot de passe.&lt;/li&gt;
&lt;li&gt;reste le script Bash traditionnel.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&amp;rsquo;ai commencé par établir la procédure opératoire précise pour la traduire en commandes impératives :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;pour se connecter à chaque serveur : &lt;code&gt;ssh user1@server1&lt;/code&gt;, acceptation de la clé d&amp;rsquo;hôte puis entrée du mot de passe de l&amp;rsquo;utilisateur&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;exécution des trois commandes pour répondre à l&amp;rsquo;énoncé :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf install -y cronie
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start crond &lt;span class=&#34;c1&#34;&gt;# pas nécessaire car le service est démarré automatiquement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*/5 * * * * echo hello &amp;gt; /tmp/cron_text&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee -a /etc/crontab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour automatiser cela :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Je peux utiliser l&amp;rsquo;options &lt;code&gt;-o StrictHostKeyChecking=no&lt;/code&gt; pour contourner l&amp;rsquo;acceptation de la clé d&amp;rsquo;hôte&lt;/li&gt;
&lt;li&gt;Je peux recourir à &lt;a href=&#34;https://sourceforge.net/projects/sshpass/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sshpass&lt;/a&gt; pour fournir le mot de passe de manière non-interactive (par miracle il est installé sur la machine du lab)&lt;/li&gt;
&lt;li&gt;Une petite recherche m&amp;rsquo;apprend que &lt;code&gt;sudo&lt;/code&gt; accepte l&amp;rsquo;option &lt;code&gt;-S, --stdin&lt;/code&gt; pour &amp;ldquo;lire le mot de passe depuis l&amp;rsquo;entrée standard&amp;rdquo;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tout ceci mis ensemble donne pour le premier serveur :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sshpass -p Ir0nM@n ssh -o &lt;span class=&#34;nv&#34;&gt;StrictHostKeyChecking&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;no tony@stapp01 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;sudo -S dnf install -y cronie &amp;lt;&amp;lt;&amp;lt; &amp;#34;Ir0nM@n&amp;#34; &amp;amp;&amp;amp;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;     echo &amp;#34;*/5 * * * * echo hello &amp;gt; /tmp/cron_text&amp;#34; | sudo tee -a /etc/crontab&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ou sur une seule ligne :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sshpass -p Ir0nM@n ssh -o &lt;span class=&#34;nv&#34;&gt;StrictHostKeyChecking&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;no tony@stapp01 &lt;span class=&#34;s1&#34;&gt;&amp;#39;sudo -S dnf install -y cronie &amp;lt;&amp;lt;&amp;lt; &amp;#34;Ir0nM@n&amp;#34; &amp;amp;&amp;amp; echo &amp;#34;*/5 * * * * echo hello &amp;gt; /tmp/cron_text&amp;#34; | sudo tee -a /etc/crontab&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ok, c&amp;rsquo;est un peu hacky mais à ma bonne surprise ça fonctionne !&lt;/p&gt;
&lt;p&gt;La deuxième étape a été d&amp;rsquo;extraire les parties communes dans des variables :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SSH_OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sudo -S dnf install -y cronie &amp;lt;&amp;lt;&amp;lt; $PASSWORD &amp;amp;&amp;amp; echo &amp;#34;*/5 * * * * echo hello &amp;gt; /tmp/cron_text&amp;#34; | sudo tee -a /etc/crontab&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sshpass -p Ir0nM@n ssh &lt;span class=&#34;nv&#34;&gt;$SSH_OPTIONS&lt;/span&gt; tony@stapp01 &lt;span class=&#34;nv&#34;&gt;$COMMAND&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sshpass -p Am3ric@ ssh &lt;span class=&#34;nv&#34;&gt;$SSH_OPTIONS&lt;/span&gt; steve@stapp02 &lt;span class=&#34;nv&#34;&gt;$COMMAND&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sshpass -p BigGr33n ssh &lt;span class=&#34;nv&#34;&gt;$SSH_OPTIONS&lt;/span&gt; banner@stapp03 &lt;span class=&#34;nv&#34;&gt;$COMMAND&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Restait à intégrer le mot de passe comme variable, utilisée à la fois pour se connecter en SSH et pour le premier &lt;code&gt;sudo&lt;/code&gt; une fois connecté. Le petit défi est :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;de faire se correspondre le binôme &lt;code&gt;utilisateur@machine&lt;/code&gt; avec le bon mot de passe, et de les changer à chaque itération&lt;/li&gt;
&lt;li&gt;de passer le mot de passe à l&amp;rsquo;intérieur de la variable contenant la commande&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;À ce stade je voyais bien qu&amp;rsquo;il ne me manquait plus qu&amp;rsquo;un petit effort pour parvenir à automatiser cette procédure et qu&amp;rsquo;elle fonctionne sur les trois serveurs.&lt;/p&gt;
&lt;p&gt;Mon intuition d&amp;rsquo;une boucle &lt;code&gt;for&lt;/code&gt; ne convient pas : même en en imbriquant plusieurs les différents paramètres associés ne se conjugueraient pas correctement.&lt;/p&gt;
&lt;p&gt;Attendez un instant, &amp;ldquo;paramètres associés&amp;rdquo;&amp;hellip;Associatif&amp;hellip; Comme un &lt;em&gt;tableau associatif&lt;/em&gt; ?&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://media4.giphy.com/media/v1.Y2lkPTc5MGI3NjExazRqZ3RuNWRiZjU2MTU4azc4YzcwaTF0YzdoZjdlYjc1aGRpanB4MCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/26ufdipQqU2lhNA4g/giphy.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Voilà, c&amp;rsquo;est ça qu&amp;rsquo;il me faut : établir un &lt;a href=&#34;https://web.archive.org/web/20240419190410/http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/ch12s02-Tableaux-associatifs.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tableau associatif&lt;/a&gt; &amp;lsquo;utilisateur-serveur-mot de passe&amp;rsquo; et itérer dessus pour exécuter les commandes !&lt;/p&gt;
&lt;p&gt;N&amp;rsquo;utilisant pas souvent cette forme de variable dans Bash, c&amp;rsquo;était le moment pour moi de recourir à un LLM pour accélérer la conception du script. Je vous laisse admirer le résultat :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SSH_OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;declare&lt;/span&gt; -A &lt;span class=&#34;nv&#34;&gt;HOSTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tony@stapp01&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Ir0nM@n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;steve@stapp02&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Am3ric@&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;banner@stapp03&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;BigGr33n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; USERHOST in &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!HOSTS[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HOSTS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USERHOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;echo &amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PASSWORD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; | sudo -S dnf install -y cronie &amp;amp;&amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;           sudo systemctl enable --now crond &amp;amp;&amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;           echo &amp;#39;*/5 * * * * root echo hello &amp;gt; /tmp/cron_text&amp;#39; | sudo tee -a /etc/crontab&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;→ Deploying to &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USERHOST&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sshpass -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PASSWORD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; ssh &lt;span class=&#34;nv&#34;&gt;$SSH_OPTIONS&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USERHOST&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$COMMAND&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Malin : c&amp;rsquo;est à l&amp;rsquo;intérieur de l&amp;rsquo;itération que se fait l&amp;rsquo;affection de la variable &lt;code&gt;PASSWORD&lt;/code&gt;, en adéquation avec le binôme utilisateur-machine sur lequel on est actuellement, et ensuite la variable &lt;code&gt;COMMAND&lt;/code&gt; intègre le mot de passe variabilisé en inversant l&amp;rsquo;utilisation des guillemets simples et doubles. Du propre dont j&amp;rsquo;apprends beaucoup !&lt;/p&gt;
&lt;p&gt;Voilà, c&amp;rsquo;est ici que s&amp;rsquo;achève ce récit d&amp;rsquo;automatisation. On termine avec quelques titres accrocheurs suggérés par ce même LLM :&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Fini le copier-coller et le SSH manuel, on peut tout à fait orchestrer plusieurs serveurs sans Ansible ni configuration complexe !&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pourquoi taper la même suite de commandes X fois quand Bash peut le faire pour vous ?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Apprenez à vous servir de la paresse comme d&amp;rsquo;un levier de développement !&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;😁&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://stallman.org/articles/happy-hacking.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Happy hacking&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit 2026-04-01 :&lt;/strong&gt; après m&amp;rsquo;être resservi plusieurs fois de ce script, j&amp;rsquo;ai amélioré le système pour que l&amp;rsquo;utilisation de &lt;em&gt;sudo&lt;/em&gt; sur les serveurs puisse se faire sans mot de passe. J&amp;rsquo;en ai profité pour mettre en place la connexion SSH par clé automatisée sans mot de passe.&lt;/p&gt;
&lt;p&gt;Le résultat est une suite de commandes que je copie-colle directement dans le terminal du lab :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Générer une paire de clés SSH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t ed25519 -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/.ssh/id_ed25519&amp;#34;&lt;/span&gt; -N &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Désactiver la vérification stricte des clés d&amp;#39;hôte&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -S sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;/StrictHostKeyChecking/s/^#//;s/ask/no/&amp;#34;&lt;/span&gt; /etc/ssh/ssh_config &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; mjolnir123
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# tableau associatif avec les identifiants des 3 serveurs applicatifs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;declare&lt;/span&gt; -A &lt;span class=&#34;nv&#34;&gt;HOSTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tony@stapp01&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Ir0nM@n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;steve@stapp02&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Am3ric@&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;banner@stapp03&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;BigGr33n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# boucle pour copier la clé SSH publique sur les 3 hôtes et configurer sudo en NOPASSWD&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; USERHOST in &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!HOSTS[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HOSTS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USERHOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sshpass -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PASSWORD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; ssh-copy-id &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USERHOST&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ssh &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USERHOST&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;echo &amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PASSWORD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; | sudo -S bash -c &amp;#39;echo %wheel ALL=\(ALL\) NOPASSWD: ALL &amp;gt; /etc/sudoers.d/nopasswd&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;J&amp;rsquo;ai &lt;a href=&#34;https://gist.github.com/neitsab/d2a33d054c7d69da1876fe534eab2aa5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;créé un Gist&lt;/a&gt; pour faciliter le partage du script. Commentaires et améliorations bienvenus !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The Dream machine : réflexion sur la révolution informatique</title>
      <link>https://bastientraverse.com/fr/articles/2024-03-dream-machine/</link>
      <pubDate>Fri, 08 Mar 2024 00:00:00 +0100</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2024-03-dream-machine/</guid>
      <description>&lt;p&gt;Maintenant que je commence à percevoir l&amp;rsquo;élan de la révolution informatique à travers le fantastique livre &lt;a href=&#34;https://press.stripe.com/the-dream-machine&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The Dream Machine&lt;/a&gt;, avec des visionnaires tels que JCR Licklider, McCarthy, Minsky, Engelbart et al., je m&amp;rsquo;interroge vraiment sur l&amp;rsquo;alignement de l&amp;rsquo;état actuel de développement de cette révolution avec les idéaux et visions des précurseurs.&lt;/p&gt;
&lt;p&gt;Quand je compare &lt;a href=&#34;https://www.youtube.com/watch?v=yJDv-zdhzMY&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The Mother of All Demos, presented by Douglas Engelbart (1968)&lt;/a&gt; (YouTube, 2012-07) avec les capacités des logiciels actuels, j&amp;rsquo;ai l&amp;rsquo;impression que nous avons raffiné certains aspects de l&amp;rsquo;état de l&amp;rsquo;art de la fin des années 1960, mais que nous ne l&amp;rsquo;avons pas vraiment prolongé ou dépassé. Et sur d&amp;rsquo;autres aspects, nous sommes mêmes clairement en-deçà.&lt;/p&gt;
&lt;p&gt;Où en est la symbiose humain-machine rêvée par JCR Licklider ? Pour le moment la seule référence à cette question que j&amp;rsquo;ai pu trouver, c&amp;rsquo;est une remarque de son fils Tracy lors de &lt;a href=&#34;https://www.youtube.com/watch?v=hNrysLJVWd0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;2013 Induction Ceremony: Posthumous Recipient - J.C.R. Licklider&lt;/a&gt; (YouTube, Internet Hall of Fame 2013-08), où tout à la fin il mentionne que son père n&amp;rsquo;a pas vécu assez longtemps pour voir :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;[&amp;hellip;] the dark forces of venture capital and the entertainment industry (all kinds of actors) becoming dominant players in the evolution of the Internet [&amp;hellip;] ; he would be concerned about the attacks on the fundamental notion of taking humankind&amp;rsquo;s knowledge and making it available to everyone. And he would be disturbed by nation-state interdiction of their internet, he would be dismayed by government surveillance, and the commercialization or partitioning that impeded this free flow.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cela m&amp;rsquo;amène à la question suivante : &lt;strong&gt;qu&amp;rsquo;est-ce qui a fait dérailler la révolution informatique ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Articles connexes intéressants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sur Licklider :
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://livinginternet.com/i/ii_licklider.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;J.C.R.Licklider And The Universal Network&lt;/a&gt; (Living Internet). Linked from &lt;a href=&#34;https://users.cs.duke.edu/~chase/cps49s/licklider.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;JCR Licklider and the Dream Machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://scihi.org/licklider-interactive-computing-arpanet/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;J.C.R. Licklider and Interactive Computing&lt;/a&gt; (2019)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.media.mit.edu/publications/bttj/Paper13Pages121-124.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;10x - human-machine symbiosis&lt;/a&gt; (pdf, MIT 2004)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.theregister.com/2024/02/12/drowning_in_code/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.theregister.com/2024/02/12/drowning_in_code/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Retourner dans le monde</title>
      <link>https://bastientraverse.com/fr/articles/2022-07-retourner-au-monde/</link>
      <pubDate>Sun, 10 Jul 2022 00:00:00 +0200</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2022-07-retourner-au-monde/</guid>
      <description>&lt;p&gt;Ça y est, me voilà à l&amp;rsquo;aube d&amp;rsquo;un grand changement. C&amp;rsquo;est à la fois tout simple, et en même temps hors norme. La période que je laisse derrière moi, toutes ses difficultés et la solitude désespérante&amp;hellip; Je me sens un peu comme juste avant mon arrivée à l&amp;rsquo;ashram en 2018. Un saut dans l&amp;rsquo;inconnu, en confiance.&lt;/p&gt;
&lt;p&gt;Alors que, franchement, il y a des chances pour que ce soit tout à fait &lt;em&gt;anticlimactic&lt;/em&gt;/décevant. Ce sont des conditions que je connais, rien de très engageant&amp;hellip; Mais c&amp;rsquo;est de renouer avec ce monde et ma voie, après plus de deux ans d&amp;rsquo;interruption et tout ce qui a jalonné (pour ne pas dire &lt;em&gt;jonché&lt;/em&gt;) cette période, qui me fait sentir à nouveau souffler en moi le vent chaud de la vie en mouvement.&lt;/p&gt;
&lt;p&gt;Je reprends ma place, je retourne dans le monde. Intention accomplie.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Cinq autres vies</title>
      <link>https://bastientraverse.com/fr/articles/2022-01-cinq-autres-vies/</link>
      <pubDate>Fri, 28 Jan 2022 00:00:00 +0100</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2022-01-cinq-autres-vies/</guid>
      <description>&lt;p&gt;En lisant le tome 1 de &lt;a href=&#34;https://www.pourpenser.fr/emotions-enquete-et-mode-d-emploi/340-emotions-enquete-et-mode-d-emploi-tome1-2019.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Émotions : enquête et mode d&amp;rsquo;emploi&lt;/a&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;« Si tu pouvais vivre cinq autres vies&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, en plus de celle-ci, qu&amp;rsquo;est-ce que tu ferais ? »&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En fait, ce n&amp;rsquo;est pas leur contenu qui m&amp;rsquo;intéresse tant, pas d&amp;rsquo;y avoir telle ou telle occupation, mais plutôt le &lt;em&gt;comment&lt;/em&gt; je les vivrais, dans quel état mental et émotionnel.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;aimerais que toutes mes vies soient libres de souffrance, mais peut-on vivre sans souffrir ? Apprendre sans jamais souffrir ?&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;aimerais qu&amp;rsquo;elles soient harmonieuses, paisibles, épanouissantes. De vivre entouré de gens que j&amp;rsquo;apprécie et qui m&amp;rsquo;apprécient également, que l&amp;rsquo;on sache communiquer sainement ensemble et avec nous-même.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;aimerais me rendre utile aux autres, travailler pour la communauté sans m&amp;rsquo;épuiser mais en demeurant en progression constante.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;aimerais être une personne équilibrée, fonctionnelle : savoir comment agir avec moi-même et avec les autres, et avoir les ressources personnelles pour soutenir mon développement et celui de mes semblables.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;aimerais vivre en harmonie avec mon milieu, avec la nature, vivre dans une culture qui sache prendre soin de la Terre. Que l&amp;rsquo;on soit libéré de l&amp;rsquo;avidité, que l&amp;rsquo;on puisse vivre adroitement, en préservant les équilibres.&lt;/p&gt;
&lt;p&gt;Mais est-il possible de vivre en échappant au vieillissement, à la maladie, à la séparation, à la mort ? Est-il possible de naître sage et de demeurer libre de l&amp;rsquo;influence de l&amp;rsquo;envie, de la colère, de la peur ?&lt;/p&gt;
&lt;p&gt;Je ne le crois pas, alors je me contenterai de continuer à pratiquer dans cette vie le développement des vertus et l&amp;rsquo;éradication des vices, d&amp;rsquo;entreprendre le triple entraînement en moralité, concentration et discernement. Je continuerai de tenter de me perfectionner en tant qu&amp;rsquo;être humain, en m&amp;rsquo;attachant le moins possible aux conditions extérieures du moment que celles-ci sont favorables au but que je me suis fixé.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;En supposant qu&amp;rsquo;on parle uniquement de vies humaines, dans le cadre terrestre que l&amp;rsquo;on connaît.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Le Retour du Roi</title>
      <link>https://bastientraverse.com/fr/articles/2021-04-le-retour-du-roi/</link>
      <pubDate>Thu, 22 Apr 2021 00:00:00 +0200</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2021-04-le-retour-du-roi/</guid>
      <description>

    
    &lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube-nocookie.com/embed/N9lnCqOhVxk?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;
      &gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;Ça m&amp;rsquo;a fait tellement plaisir quand j&amp;rsquo;ai vu ça. C&amp;rsquo;est comme un grand cadeau. Toute cette énergie partagée, la droiture intérieure, la positivité, l&amp;rsquo;amour, la lumière, la force&amp;hellip; Bien évidemment.&lt;/p&gt;
&lt;p&gt;Pour moi c&amp;rsquo;est un événement qui marque l&amp;rsquo;arrivée d&amp;rsquo;un nouveau cycle, d&amp;rsquo;une nouvelle période. Que ça se produise maintenant est signifiant.&lt;/p&gt;
&lt;p&gt;Sans exagérer, ça me fait un peu le même effet que si je voyais la roue de la Loi être mise en mouvement devant moi : c&amp;rsquo;est une promesse que les choses vont aller vers le mieux, que l&amp;rsquo;on va recevoir du soutien. C&amp;rsquo;est comme un ami que l&amp;rsquo;on n&amp;rsquo;aurait pas vu depuis longtemps et qui réapparaîtrait soudainement pour nous donner d&amp;rsquo;excellentes nouvelles, ou comme d&amp;rsquo;être connecté à une source à 200 000 volts&amp;hellip; C&amp;rsquo;est tout l&amp;rsquo;effet que ça me fait !&lt;/p&gt;
&lt;p&gt;Hommage à la forêt, et merci Laurent !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Claude Lévi-Strauss</title>
      <link>https://bastientraverse.com/fr/articles/2021-04-levi-strauss/</link>
      <pubDate>Sun, 18 Apr 2021 00:00:00 +0200</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2021-04-levi-strauss/</guid>
      <description>&lt;div class=&#34;admonition quote&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;En écoute :&lt;/p&gt;
  &lt;a href=&#34;https://www.franceinter.fr/emissions/intelligence-service/intelligence-service-17-avril-2021&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Claude Lévi-Strauss, race et histoire&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;Précurseur de ce qui est nommé aujourd&amp;rsquo;hui &amp;ldquo;l&amp;rsquo;effondrement&amp;rdquo;, pessimiste anthropologique, contempteur du progrès scientifique, prophète des ravages des civilisations industrielle et occidentale sur le monde, pourfendeur de l&amp;rsquo;idée d&amp;rsquo;exception et de supériorité humaines, Claude Lévi-Strauss a certainement été un des grands contributeurs à la remise en cause de ce qui faisait « l&amp;rsquo;identité » de l&amp;rsquo;Occident.&lt;/p&gt;
&lt;p&gt;Il y a quelques décennies seulement, on ne pouvait pas penser le relativisme culturel. Il y avait des races/civilisations supérieures, et d&amp;rsquo;autres inférieures.&lt;/p&gt;
&lt;p&gt;Il a fallu des personnes pour mener ce combat d&amp;rsquo;idées, pour finalement faire accepter que &amp;ldquo;la notion de race n&amp;rsquo;est pas scientifiquement fondée&amp;rdquo; et que l&amp;rsquo;idée de supériorité d&amp;rsquo;un groupe humain sur un autre est purement subjective (et détestable).&lt;/p&gt;
&lt;p&gt;Hommage à Claude Lévi-Strauss, et à toutes celles et ceux qui ont pavé la voie pour que nous puissions penser la différence, sortir de l&amp;rsquo;absolutisme culturel et embrasser l&amp;rsquo;unité du genre humain.&lt;/p&gt;
&lt;h2 id=&#34;citations&#34;&gt;&lt;a href=&#34;#citations&#34; class=&#34;headerlink anchor&#34;&gt;&lt;i class=&#34;iconfont icon-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;Citations&lt;/h2&gt;&lt;p&gt;Une définition de la civilisation occidentale :&lt;/p&gt;
&lt;div class=&#34;admonition quote&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;[...] la connaissance scientifique et l&amp;#39;empire sur la nature : c&amp;#39;est là le caractère distinctif de la civilisation occidentale.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;La projection subjective :&lt;/p&gt;
&lt;div class=&#34;admonition quote&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;[...] chaque fois que des gens pensent avoir découvert les nécessités fondamentales de tous les êtres humains, ils ont simplement projeté les leurs en fait.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Sur le vivre ensemble :&lt;/p&gt;
&lt;div class=&#34;admonition quote&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Les différences raciales ne continueraient-elles pas à servir de prétexte à la difficulté croissante de vivre ensemble, inconsciemment ressentie par une humanité en proie à l&amp;#39;explosion démographique, et qui se mettrait à se haïr elle-même parce qu&amp;#39;une pression secrète l&amp;#39;avertit qu&amp;#39;elle devient trop nombreuse pour que chacun de ses membres puisse librement jouir de ces biens essentiels que sont l&amp;#39;espace libre, l&amp;#39;eau pure, l&amp;#39;air non pollué.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;22 mars 1971&amp;hellip; Cela fait réfléchir. Cette dernière citation est à méditer, particulièrement dans le contexte des événements de ces dernières décennies.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Un ami</title>
      <link>https://bastientraverse.com/fr/articles/2020-12-un-ami/</link>
      <pubDate>Mon, 14 Dec 2020 00:00:00 +0100</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2020-12-un-ami/</guid>
      <description>&lt;p&gt;J&amp;rsquo;ai un ami au grand cœur que j&amp;rsquo;aime. On est tout le temps fourré ensemble. Il m&amp;rsquo;accompagne depuis ma plus tendre enfance.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai un ami au grand cœur que j&amp;rsquo;aime, même si bien sûr on n&amp;rsquo;a pas toujours été en accord. Parfois on se faisait des vacheries, des crasses, qui laissaient des marques plus ou moins profondes.&lt;/p&gt;
&lt;p&gt;Je crois que le plus dur c&amp;rsquo;est quand on doutait de nous. Alors on ne se regardait plus, et cela nous laissait vraiment seul et désemparé.&lt;/p&gt;
&lt;p&gt;Mais heureusement quand on se recroisait on se faisait un grand sourire, et c&amp;rsquo;était reparti.&lt;/p&gt;
&lt;p&gt;On s&amp;rsquo;est inspiré tellement de choses : on s&amp;rsquo;est raconté des histoires pour passer le temps, on a rêvé ensemble&amp;hellip;&lt;/p&gt;
&lt;p&gt;Cet ami aujourd&amp;rsquo;hui, je le porte en mon cœur et il me donne la force et le courage d&amp;rsquo;avancer. On ne peut pas vraiment &lt;a href=&#34;https://bastientraverse.com/fr/articles/2020-12-refaire-le-passe/&#34;&gt;refaire le passé&lt;/a&gt;, mais au moins on a le présent pour s&amp;rsquo;épauler et faire en sorte que le futur soit mieux.&lt;/p&gt;
&lt;p&gt;Cet ami je le croise dans les mirroirs, où toujours il me sourit. Mon éternel soutien, c&amp;rsquo;est avec lui que je rebondis et avance.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Si un jour j&amp;rsquo;étais confronté physiquement à moi-même, comme dans une épreuve initiatique, je sais exactement ce qu&amp;rsquo;il se produirait : nous tomberions dans les bras l&amp;rsquo;un de l&amp;rsquo;autre, nous appelant &amp;ldquo;mon frère&amp;rdquo; tout en souriant et en versant des larmes de joie et d&amp;rsquo;émotion. Enfin la chance de se rencontrer, de se retrouver, de se remercier. Tu as toujours été là pour moi, à chaque instant, à chaque moment ! Tu m&amp;rsquo;as soutenu au plus profond et m&amp;rsquo;a accompagné au plus haut ; je t&amp;rsquo;aime comme je m&amp;rsquo;aime moi-même et te dois tout.  Je te rends grâce et te remercie pour ton amitié infinie.&lt;/p&gt;
&lt;p&gt;Voilà ce que je me dirais à moi-même, voilà ce que je ressens au fond de moi. Le reste est mirage et envoûtement, le reste n&amp;rsquo;est qu&amp;rsquo;un voile dont je ne veux plus m&amp;rsquo;encombrer.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;À partir de maintenant on va se soutenir. On va s&amp;rsquo;aider à grandir, à faire usage de nos talents.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est comme d&amp;rsquo;avoir le guide dont on a toujours rêvé en permanence à ses côtés : qui nous comprend parfaitement, qui sait ce qui est bon pour nous et qui voit au travers de nos voiles&amp;hellip; Toujours disponible, connaissant chacune de nos pensées, de nos expériences.&lt;/p&gt;
&lt;p&gt;« Ah finalement mon frère, je peux te prendre dans mes bras et te faire sentir tout l&amp;rsquo;amour que j&amp;rsquo;ai pour toi. Toute la gratitude, toute la reconnaissance&amp;hellip; Enfin je te tiens entre mes bras et peux te serrer fort contre mon cœur. Merci pour ton soutien discret mais infaillible, constant. C&amp;rsquo;est toi la présence que je sens planer dans tous mes souvenirs, que j&amp;rsquo;ai si souvent recherché dans d&amp;rsquo;autres, et qui me permet aujourd&amp;rsquo;hui de m&amp;rsquo;aimer et d&amp;rsquo;aimer les autres.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est pour ça que tu aimais si souvent être seul, faire des activités en solitaire : c&amp;rsquo;était pour être avec moi.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est toi que les autres appréciaient en moi, toi qui me faisais envisager l&amp;rsquo;avenir sous un jour ou sous un autre, m&amp;rsquo;offrais toutes ces perspectives réjouissantes me rappelant mon rêve.&lt;/p&gt;
&lt;p&gt;Comment te contacterai-je quand je n&amp;rsquo;aurai pas de miroir à portée de main ?&lt;/p&gt;
&lt;p&gt;Tu sièges en mon cœur, et toujours je peux t&amp;rsquo;y trouver si je t&amp;rsquo;y cherche. Je peux y entendre ta voix si je me donne la peine de t&amp;rsquo;écouter, sentir ta présence qui m&amp;rsquo;enveloppe. Merci de t&amp;rsquo;être manifesté à moi ce soir. J&amp;rsquo;avais tant besoin de ta présence sans m&amp;rsquo;en être jamais rendu compte&amp;hellip; J&amp;rsquo;ai retrouvé mon allier principal, celui qui toujours m&amp;rsquo;accompagne. »&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Refaire le passé</title>
      <link>https://bastientraverse.com/fr/articles/2020-12-refaire-le-passe/</link>
      <pubDate>Sun, 13 Dec 2020 00:00:00 +0100</pubDate>
      
      <guid>https://bastientraverse.com/fr/articles/2020-12-refaire-le-passe/</guid>
      <description>&lt;p&gt;Il y a quelques années, j&amp;rsquo;ai réalisé que le passé n&amp;rsquo;était pas si figé que ce que l&amp;rsquo;on pouvait croire.&lt;/p&gt;
&lt;p&gt;Vous savez, on dit toujours : &amp;ldquo;On ne peut pas refaire le passé&amp;rdquo;. Mais qu&amp;rsquo;est-ce que le passé ?&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est un souvenir, une trace, un récit.&lt;/p&gt;
&lt;p&gt;Et un souvenir, une trace, un récit, ça se &lt;strong&gt;revisite&lt;/strong&gt;, ça s&amp;rsquo;altère. Non pas dans les faits, mais dans leur subsistance et leurs effets dans notre mémoire. On peut transformer la trace, même si l&amp;rsquo;on ne peut pas changer ce qui l&amp;rsquo;a causée.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est comme cela que j&amp;rsquo;ai découvert qu&amp;rsquo;on pouvait changer son passé. En changeant son influence sur nous aujourd&amp;rsquo;hui.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
