<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Debian on slash-root.fr</title><link>https://beta.slash-root.fr/categories/debian/</link><description>Recent content in Debian on slash-root.fr</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Sun, 15 Mar 2026 22:13:13 +0100</lastBuildDate><atom:link href="https://beta.slash-root.fr/categories/debian/index.xml" rel="self" type="application/rss+xml"/><item><title>Aptly : mirroiter Debian proprement</title><link>https://beta.slash-root.fr/aptly-mirroiter-debian-proprement/</link><pubDate>Fri, 13 Mar 2026 19:05:06 +0100</pubDate><guid>https://beta.slash-root.fr/aptly-mirroiter-debian-proprement/</guid><description>&lt;img src="https://beta.slash-root.fr/aptly-mirroiter-debian-proprement/cover.jpg" alt="Featured image of post Aptly : mirroiter Debian proprement" /&gt;&lt;p&gt;Quand on gère une flotte de serveurs Debian, on finit toujours par se poser la même question : comment maîtriser ce que mes machines vont installer ? Comment être sûr qu'un &lt;code&gt;apt update&lt;/code&gt; ne va pas me ramener une version de paquet qui casse tout ? Et surtout, comment faire pour que mes serveurs de prod ne dépendent pas d'un miroir externe qui peut tomber au pire moment ?&lt;/p&gt;
&lt;p&gt;La réponse classique, c'est de monter un miroir local. Sauf que mirrorer Debian avec les outils standards (&lt;code&gt;debmirror&lt;/code&gt;, &lt;code&gt;apt-mirror&lt;/code&gt;...), c'est lourd, c'est rigide, et ça ne répond qu'à la moitié du problème. On a une copie locale, d'accord, mais on n'a toujours aucun contrôle sur ce qui change d'un jour à l'autre.&lt;/p&gt;
&lt;p&gt;C'est là qu'aptly entre en jeu.&lt;/p&gt;
&lt;h2 id="ce-quaptly-fait-vraiment"&gt;&lt;a href="#ce-quaptly-fait-vraiment" class="header-anchor"&gt;&lt;/a&gt;Ce qu&amp;rsquo;aptly fait vraiment
&lt;/h2&gt;&lt;p&gt;aptly, c'est un gestionnaire de dépôts Debian écrit en Go. Il sait faire trois choses fondamentales :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;mirrorer un dépôt distant&lt;/strong&gt; -- comme &lt;code&gt;apt-mirror&lt;/code&gt;, mais en mieux&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Figer l'état d'un miroir dans un snapshot immuable&lt;/strong&gt; -- ça, c'est la vraie valeur ajoutée&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publier ce snapshot&lt;/strong&gt; pour que vos machines puissent l'utiliser&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le workflow de base, c'est ça :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mirror create → mirror update → snapshot create → publish snapshot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et quand il faut mettre à jour :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mirror update → snapshot create → publish switch
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le &lt;code&gt;publish switch&lt;/code&gt; bascule la publication d'un snapshot à un autre. Vos machines continuent de pointer sur la même URL, mais le contenu change de manière contrôlée. Si ça foire, vous rebasculez sur l'ancien snapshot. Pas de panique, pas de retélécharger quoi que ce soit.&lt;/p&gt;
&lt;h2 id="installation"&gt;&lt;a href="#installation" class="header-anchor"&gt;&lt;/a&gt;Installation
&lt;/h2&gt;&lt;h3 id="via-les-paquets-debian"&gt;&lt;a href="#via-les-paquets-debian" class="header-anchor"&gt;&lt;/a&gt;Via les paquets Debian
&lt;/h3&gt;&lt;p&gt;C'est la méthode standard, celle qu'on va utiliser ici :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install aptly
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sur Debian Trixie, ça installe la version 1.5.0. C'est pas la toute dernière (la 1.6.2 existe), mais c'est largement suffisant pour ce qu'on va faire.&lt;/p&gt;
&lt;p&gt;Vérification :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ aptly version
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly version: 1.5.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="lupstream-optionnel"&gt;&lt;a href="#lupstream-optionnel" class="header-anchor"&gt;&lt;/a&gt;L&amp;rsquo;upstream (optionnel)
&lt;/h3&gt;&lt;p&gt;Si vous voulez absolument la dernière version upstream, vous pouvez ajouter le dépôt officiel d'aptly. Mais franchement, pour un usage classique, la version Debian fait le job. Je mentionne juste l'option pour ceux qui en ont besoin :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /etc/apt/keyrings
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget -O /etc/apt/keyrings/aptly.asc https://www.aptly.info/pubkey.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deb [signed-by=/etc/apt/keyrings/aptly.asc] http://repo.aptly.info/release trixie main&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | sudo tee /etc/apt/sources.list.d/aptly.list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install aptly
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais encore une fois, c'est optionnel. On va continuer avec la version des dépôts Debian.&lt;/p&gt;
&lt;h2 id="configuration-de-base"&gt;&lt;a href="#configuration-de-base" class="header-anchor"&gt;&lt;/a&gt;Configuration de base
&lt;/h2&gt;&lt;p&gt;aptly stocke tout dans &lt;code&gt;~/.aptly&lt;/code&gt; par défaut. En prod, on va plutôt utiliser &lt;code&gt;/var/aptly&lt;/code&gt;. On crée le répertoire et on configure aptly pour l'utiliser :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /var/aptly
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chown $USER:$USER /var/aptly
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le fichier de config, c'est &lt;code&gt;~/.aptly.conf&lt;/code&gt; (ou &lt;code&gt;/etc/aptly.conf&lt;/code&gt; pour une config globale). On va en créer un minimal :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &amp;gt; ~/.aptly.conf &lt;span style="color:#e6db74"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;rootDir&amp;#34;: &amp;#34;/var/aptly&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#34;architectures&amp;#34;: [&amp;#34;amd64&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On restreint à &lt;code&gt;amd64&lt;/code&gt; parce que c'est ce qu'on utilise. Pas la peine de télécharger du &lt;code&gt;i386&lt;/code&gt;, du &lt;code&gt;arm64&lt;/code&gt; ou du &lt;code&gt;armhf&lt;/code&gt; si on n'en a pas besoin.&lt;/p&gt;
&lt;p&gt;Le &lt;code&gt;rootDir&lt;/code&gt;, c'est la racine de tout. Dedans, aptly va créer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;db/&lt;/code&gt; -- sa base de données interne&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pool/&lt;/code&gt; -- les fichiers &lt;code&gt;.deb&lt;/code&gt; téléchargés&lt;/li&gt;
&lt;li&gt;&lt;code&gt;public/&lt;/code&gt; -- les dépôts publiés, ceux qu'on va exposer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="importer-les-clés-gpg"&gt;&lt;a href="#importer-les-cl%c3%a9s-gpg" class="header-anchor"&gt;&lt;/a&gt;Importer les clés GPG
&lt;/h2&gt;&lt;p&gt;Avant de créer un miroir, aptly a besoin des clés GPG pour vérifier les signatures des dépôts distants. Sur Debian, les clés d'archive sont déjà présentes dans &lt;code&gt;/usr/share/keyrings/&lt;/code&gt;. Il suffit de les importer dans le trousseau d'aptly :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gpg --no-default-keyring &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --keyring /usr/share/keyrings/debian-archive-keyring.gpg &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --export | &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gpg --no-default-keyring &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --keyring trustedkeys.gpg &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --import
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ça importe les clés dans &lt;code&gt;~/.gnupg/trustedkeys.gpg&lt;/code&gt;, le trousseau qu'aptly utilise par défaut.&lt;/p&gt;
&lt;h2 id="créer-un-miroir-de-debian-trixie"&gt;&lt;a href="#cr%c3%a9er-un-miroir-de-debian-trixie" class="header-anchor"&gt;&lt;/a&gt;Créer un miroir de Debian Trixie
&lt;/h2&gt;&lt;p&gt;On va mirrorer le dépôt officiel français (&lt;code&gt;ftp.fr.debian.org&lt;/code&gt;), avec les sections &lt;code&gt;main&lt;/code&gt; et &lt;code&gt;non-free-firmware&lt;/code&gt;. Pourquoi &lt;code&gt;non-free-firmware&lt;/code&gt; ? Parce que depuis Debian 12, les firmwares non-libres (wifi, GPU...) sont dans cette section, et on en a souvent besoin.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly mirror create &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -architectures&lt;span style="color:#f92672"&gt;=&lt;/span&gt;amd64 &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; debian-trixie &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; http://ftp.fr.debian.org/debian/ &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; trixie main non-free-firmware
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quelques remarques :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le flag &lt;code&gt;-architectures=amd64&lt;/code&gt; se place &lt;strong&gt;avant&lt;/strong&gt; la sous-commande &lt;code&gt;mirror&lt;/code&gt;. C'est un flag global. Si vous le mettez après, aptly va râler.&lt;/li&gt;
&lt;li&gt;Le nom du miroir (&lt;code&gt;debian-trixie&lt;/code&gt;), c'est vous qui le choisissez. Prenez un nom explicite.&lt;/li&gt;
&lt;li&gt;L'URL doit finir par un &lt;code&gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On spécifie la distribution (&lt;code&gt;trixie&lt;/code&gt;) et les composants (&lt;code&gt;main non-free-firmware&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La commande crée la définition du miroir, mais ne télécharge rien encore. Pour ça, il faut lancer un &lt;code&gt;mirror update&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="remplir-le-miroir"&gt;&lt;a href="#remplir-le-miroir" class="header-anchor"&gt;&lt;/a&gt;Remplir le miroir
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly mirror update debian-trixie
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Là, ça télécharge. Et ça prend du temps. Un miroir complet de Debian main + non-free-firmware en amd64, c'est plusieurs dizaines de Go. Prévoyez du café.&lt;/p&gt;
&lt;p&gt;Vous pouvez suivre la progression dans le terminal. aptly affiche les paquets au fur et à mesure qu'il les télécharge.&lt;/p&gt;
&lt;p&gt;Une fois terminé, vous pouvez voir ce que contient le miroir :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly mirror show debian-trixie
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ça vous donne le nombre de paquets, la taille totale, la date de dernière mise à jour, etc.&lt;/p&gt;
&lt;h2 id="créer-un-snapshot"&gt;&lt;a href="#cr%c3%a9er-un-snapshot" class="header-anchor"&gt;&lt;/a&gt;Créer un snapshot
&lt;/h2&gt;&lt;p&gt;Le miroir est à jour. Maintenant, on va en faire un snapshot. Un snapshot, c'est une copie figée et immuable de l'état du miroir à un instant T. Une fois créé, il ne bouge plus, quoi qu'il arrive au miroir source.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot create trixie-&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;date +%Y%m%d&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt; from mirror debian-trixie
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;J'utilise la date dans le nom du snapshot. C'est une bonne pratique : ça permet de savoir immédiatement à quoi correspond chaque snapshot.&lt;/p&gt;
&lt;p&gt;Vous pouvez lister vos snapshots :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et voir le détail d'un snapshot :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot show trixie-20260313
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="publier-le-snapshot"&gt;&lt;a href="#publier-le-snapshot" class="header-anchor"&gt;&lt;/a&gt;Publier le snapshot
&lt;/h2&gt;&lt;p&gt;Un snapshot qui n'est pas publié, ça ne sert à rien. La publication génère l'arborescence standard Debian (&lt;code&gt;dists/&lt;/code&gt;, &lt;code&gt;pool/&lt;/code&gt;, fichiers &lt;code&gt;Release&lt;/code&gt; signés...) dans &lt;code&gt;/var/aptly/public/&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly publish snapshot -distribution&lt;span style="color:#f92672"&gt;=&lt;/span&gt;trixie trixie-20260313
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le flag &lt;code&gt;-distribution=trixie&lt;/code&gt; indique quelle distribution utiliser dans les métadonnées du dépôt publié. C'est ce que vos machines verront dans leur &lt;code&gt;sources.list&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;aptly va vous demander la passphrase de votre clé GPG pour signer le fichier &lt;code&gt;Release&lt;/code&gt;. Si vous n'avez pas encore de clé GPG, créez-en une :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gpg --full-generate-key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Choisissez RSA 4096 bits, et renseignez un nom et un email.&lt;/p&gt;
&lt;p&gt;Une fois la publication terminée, vous avez un dépôt Debian complet dans &lt;code&gt;/var/aptly/public/&lt;/code&gt;. Il ne reste plus qu'à l'exposer via un serveur web.&lt;/p&gt;
&lt;h2 id="limpact-des-hard-links"&gt;&lt;a href="#limpact-des-hard-links" class="header-anchor"&gt;&lt;/a&gt;L&amp;rsquo;impact des hard links
&lt;/h2&gt;&lt;p&gt;Un détail important : quand aptly publie un snapshot, il ne copie pas les fichiers &lt;code&gt;.deb&lt;/code&gt;. Il crée des &lt;strong&gt;hard links&lt;/strong&gt; depuis le pool vers le répertoire &lt;code&gt;public/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ça veut dire quoi concrètement ?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pas de duplication&lt;/strong&gt; -- un paquet présent dans plusieurs snapshots n'occupe qu'une seule fois la place sur le disque&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publication instantanée&lt;/strong&gt; -- créer un hard link, c'est quasi gratuit en temps et en espace&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plusieurs snapshots publiés en même temps&lt;/strong&gt; -- vous pouvez avoir &lt;code&gt;trixie-20260313&lt;/code&gt; et &lt;code&gt;trixie-20260310&lt;/code&gt; publiés simultanément, ils partagent les fichiers communs&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;C'est pour ça que le &lt;code&gt;publish switch&lt;/code&gt; est si rapide. aptly ne déplace rien, il change juste les liens.&lt;/p&gt;
&lt;p&gt;Par contre, attention : si vous supprimez un snapshot publié avec &lt;code&gt;snapshot drop&lt;/code&gt;, aptly refuse tant que la publication existe. Il faut d'abord dépublier (&lt;code&gt;publish drop&lt;/code&gt;) ou basculer vers un autre snapshot (&lt;code&gt;publish switch&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="mettre-à-jour-le-miroir-et-basculer"&gt;&lt;a href="#mettre-%c3%a0-jour-le-miroir-et-basculer" class="header-anchor"&gt;&lt;/a&gt;Mettre à jour le miroir et basculer
&lt;/h2&gt;&lt;p&gt;Quelques jours passent. Le miroir Debian a évolué. Vous voulez mettre à jour votre dépôt local. Voilà le workflow complet :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1. Mettre à jour le miroir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly mirror update debian-trixie
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2. Créer un nouveau snapshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot create trixie-&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;date +%Y%m%d&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt; from mirror debian-trixie
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 3. Basculer la publication vers le nouveau snapshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly publish switch trixie trixie-20260315
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le &lt;code&gt;publish switch&lt;/code&gt; fait tout le boulot :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il met à jour les métadonnées (&lt;code&gt;Release&lt;/code&gt;, &lt;code&gt;Packages&lt;/code&gt;, &lt;code&gt;Contents&lt;/code&gt;...)&lt;/li&gt;
&lt;li&gt;Il ajuste les hard links dans &lt;code&gt;public/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Il signe le nouveau &lt;code&gt;Release&lt;/code&gt; avec GPG&lt;/li&gt;
&lt;li&gt;Il nettoie les anciens liens qui ne servent plus&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vos machines qui pointent sur ce dépôt voient le changement au prochain &lt;code&gt;apt update&lt;/code&gt;. Pas de coupure, pas de temps d'arrêt.&lt;/p&gt;
&lt;p&gt;Si le nouveau snapshot pose problème, vous rebasculez sur l'ancien :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly publish switch trixie trixie-20260313
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C'est aussi rapide dans un sens que dans l'autre.&lt;/p&gt;
&lt;h2 id="les-dépôts-locaux-mention-rapide"&gt;&lt;a href="#les-d%c3%a9p%c3%b4ts-locaux-mention-rapide" class="header-anchor"&gt;&lt;/a&gt;Les dépôts locaux (mention rapide)
&lt;/h2&gt;&lt;p&gt;aptly sait aussi gérer des dépôts locaux, où vous poussez vos propres paquets &lt;code&gt;.deb&lt;/code&gt;. Le workflow est similaire :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Créer un dépôt local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly repo create mon-depot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Ajouter des paquets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly repo add mon-depot /chemin/vers/*.deb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Snapshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot create mon-depot-v1 from repo mon-depot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Publier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly publish snapshot mon-depot-v1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Je ne développe pas plus ici, parce que le cas d'usage principal d'aptly, c'est quand même le mirroring. Mais sachez que c'est possible.&lt;/p&gt;
&lt;h2 id="exposer-le-dépôt"&gt;&lt;a href="#exposer-le-d%c3%a9p%c3%b4t" class="header-anchor"&gt;&lt;/a&gt;Exposer le dépôt
&lt;/h2&gt;&lt;h3 id="le-serveur-embarqué-test-uniquement"&gt;&lt;a href="#le-serveur-embarqu%c3%a9-test-uniquement" class="header-anchor"&gt;&lt;/a&gt;Le serveur embarqué (test uniquement)
&lt;/h3&gt;&lt;p&gt;aptly a un petit serveur HTTP intégré. C'est pratique pour tester, mais la doc officielle est claire : &lt;strong&gt;not suitable for real production usage&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly serve -listen&lt;span style="color:#f92672"&gt;=&lt;/span&gt;:8080
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez alors ajouter le dépôt sur une machine de test :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deb http://votre-serveur:8080/ trixie main non-free-firmware&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | sudo tee /etc/apt/sources.list.d/aptly-test.list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="nginx-production"&gt;&lt;a href="#nginx-production" class="header-anchor"&gt;&lt;/a&gt;nginx (production)
&lt;/h3&gt;&lt;p&gt;En prod, on utilise nginx. Je ne vais pas détailler ici parce que ça fera l'objet d'un second article si besoin, mais l'idée générale :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;server&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;listen&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;80&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;server_name&lt;/span&gt; &lt;span style="color:#e6db74"&gt;repo.example.com&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;root&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/var/aptly/public&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;location&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;autoindex&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;on&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous activez le vhost, vous rechargez nginx, et c'est bon. Pour HTTPS, ajoutez Let's Encrypt avec &lt;code&gt;certbot&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Côté client, vous ajoutez le dépôt :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deb http://repo.example.com/ trixie main non-free-firmware&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | sudo tee /etc/apt/sources.list.d/mon-miroir.list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si le dépôt est signé (et il devrait l'être), distribuez votre clé GPG publique aux clients :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gpg --armor --export VOTRE_KEY_ID &amp;gt; /var/aptly/public/repo-key.asc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sur les clients :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget -O /etc/apt/keyrings/mon-repo.asc http://repo.example.com/repo-key.asc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deb [signed-by=/etc/apt/keyrings/mon-repo.asc] http://repo.example.com/ trixie main non-free-firmware&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | sudo tee /etc/apt/sources.list.d/mon-miroir.list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="automatiser-avec-cron"&gt;&lt;a href="#automatiser-avec-cron" class="header-anchor"&gt;&lt;/a&gt;Automatiser avec cron
&lt;/h2&gt;&lt;p&gt;Un miroir, ça se met à jour régulièrement. Voici un script cron qui fait le job :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# /etc/cron.daily/aptly-update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set -euo pipefail
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MIRROR&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;debian-trixie&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DATE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;date +%Y%m%d&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Mise à jour du miroir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly mirror update &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$MIRROR&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Nouveau snapshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot create &lt;span style="color:#e6db74"&gt;&amp;#34;trixie-&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;DATE&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; from mirror &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$MIRROR&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Basculer la publication&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly publish switch -batch -gpg-key&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;VOTRE_KEY_ID&amp;#34;&lt;/span&gt; trixie &lt;span style="color:#e6db74"&gt;&amp;#34;trixie-&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;DATE&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Nettoyer les vieux snapshots (garder les 7 derniers)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot list -raw | grep &lt;span style="color:#e6db74"&gt;&amp;#34;^trixie-&amp;#34;&lt;/span&gt; | sort | head -n -7 | &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; read snap; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; aptly snapshot drop &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$snap&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null &lt;span style="color:#f92672"&gt;||&lt;/span&gt; true
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Nettoyer la base&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly db cleanup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le flag &lt;code&gt;-batch&lt;/code&gt; est crucial : il permet à GPG de fonctionner sans terminal interactif. Sans ça, le script va bloquer en attendant que vous tapiez la passphrase.&lt;/p&gt;
&lt;p&gt;Pour éviter ça, vous pouvez aussi utiliser &lt;code&gt;gpg-agent&lt;/code&gt; avec un cache de passphrase, ou stocker la passphrase dans un fichier sécurisé et utiliser &lt;code&gt;-passphrase-file&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="nettoyage-et-maintenance"&gt;&lt;a href="#nettoyage-et-maintenance" class="header-anchor"&gt;&lt;/a&gt;Nettoyage et maintenance
&lt;/h2&gt;&lt;p&gt;aptly conserve tous les paquets téléchargés dans son pool, même ceux qui ne sont plus référencés par aucun snapshot. Pour faire le ménage :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly db cleanup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ça supprime les paquets orphelins. Si vous voulez voir ce qui va être supprimé avant de le faire :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly db cleanup -verbose -dry-run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour sauvegarder votre installation aptly, c'est simple : sauvegardez &lt;code&gt;/var/aptly&lt;/code&gt; en entier. Tout est dedans.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -czf aptly-backup-&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;date +%Y%m%d&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;.tar.gz /var/aptly
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="quelques-astuces"&gt;&lt;a href="#quelques-astuces" class="header-anchor"&gt;&lt;/a&gt;Quelques astuces
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Filtrer les paquets lors du mirroring.&lt;/strong&gt; Si vous ne voulez mirrorer que certains paquets (par exemple, uniquement nginx et ses dépendances), vous pouvez utiliser des filtres :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly mirror create -filter&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;nginx&amp;#39;&lt;/span&gt; -filter-with-deps &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nginx-only &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; http://ftp.fr.debian.org/debian/ &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; trixie main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le flag &lt;code&gt;-filter-with-deps&lt;/code&gt; est important : sans lui, vous récupérez nginx mais pas ses dépendances, et ça ne servira à rien.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comparer deux snapshots.&lt;/strong&gt; Pour voir ce qui a changé entre deux snapshots :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot diff trixie-20260313 trixie-20260315
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Fusionner des snapshots.&lt;/strong&gt; Vous pouvez combiner plusieurs snapshots en un seul. Utile si vous avez un miroir Debian et un dépôt local, et que vous voulez les publier ensemble :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aptly snapshot merge trixie-complet trixie-20260315 mon-depot-v1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;aptly résout un vrai problème : comment garder le contrôle sur ce que vos machines Debian vont installer. Les miroirs classiques vous donnent une copie locale, d'accord, mais ils ne vous donnent pas la maîtrise des changements. Avec aptly et ses snapshots, vous décidez quand et comment vos serveurs voient les mises à jour.&lt;/p&gt;
&lt;p&gt;Le workflow &lt;code&gt;mirror create&lt;/code&gt; → &lt;code&gt;mirror update&lt;/code&gt; → &lt;code&gt;snapshot create&lt;/code&gt; → &lt;code&gt;publish snapshot&lt;/code&gt; → &lt;code&gt;publish switch&lt;/code&gt; devient vite un réflexe. Et le jour où une mise à jour casse quelque chose, vous serez bien content de pouvoir rebascule sur le snapshot d'hier en une commande.&lt;/p&gt;
&lt;p&gt;Les hard links font que tout ça reste léger en espace disque et rapide en exécution. Vous pouvez avoir plusieurs snapshots publiés en parallèle, pour des environnements de test et de prod différents, sans exploser votre stockage.&lt;/p&gt;
&lt;p&gt;Bref, si vous gérez des serveurs Debian sérieusement, aptly mérite sa place dans votre boîte à outils.&lt;/p&gt;</description></item><item><title>Debian : Configuration complète d’unattended-upgrades pour une sécurité sans effort</title><link>https://beta.slash-root.fr/debian-configuration-complete-dunattended-upgrades-pour-une-securite-sans-effort/</link><pubDate>Thu, 08 May 2025 14:03:19 +0200</pubDate><guid>https://beta.slash-root.fr/debian-configuration-complete-dunattended-upgrades-pour-une-securite-sans-effort/</guid><description>&lt;img src="https://beta.slash-root.fr/debian-configuration-complete-dunattended-upgrades-pour-une-securite-sans-effort/cover.jpg" alt="Featured image of post Debian : Configuration complète d’unattended-upgrades pour une sécurité sans effort" /&gt;&lt;h2 id="1-introduction-ou-pourquoi-il-est-temps-darrêter-de-faire-semblant"&gt;&lt;a href="#1-introduction-ou-pourquoi-il-est-temps-darr%c3%aater-de-faire-semblant" class="header-anchor"&gt;&lt;/a&gt;1. Introduction, ou pourquoi il est temps d&amp;rsquo;arrêter de faire semblant
&lt;/h2&gt;&lt;p&gt;Laissez-moi deviner : vous êtes du genre à vous vanter d'être un administrateur système compétent, mais vous ne vous souvenez pas de la dernière fois que vous avez tapé &lt;code&gt;apt update &amp;amp;&amp;amp; apt upgrade&lt;/code&gt; sur vos serveurs en production ? Pas étonnant que vos systèmes ressemblent à un gruyère numérique avec plus de trous que de fromage. Un bon sysadmin met à jour ses systèmes - un &lt;em&gt;vrai&lt;/em&gt; sysadmin automatise ça et passe à autre chose.&lt;/p&gt;
&lt;p&gt;Heureusement, les créateurs de Debian n'ont pas supposé que vous étiez tous des héros de la ligne de commande avec une mémoire infaillible et un agenda aussi vide que &lt;code&gt;/dev/null&lt;/code&gt;. Ils nous ont gratifiés d'&lt;strong&gt;unattended-upgrades&lt;/strong&gt;, ce petit bijou d'automatisation que seuls les vrais barbus savent configurer correctement. Bien sûr, vous pourriez continuer à mettre à jour manuellement, de la même manière que vous pourriez continuer à croire que vi est plus difficile qu'Emacs.&lt;/p&gt;
&lt;h2 id="2-unattended-upgrades--le-sysadmin-silencieux-qui-ne-prend-jamais-de-pause-café"&gt;&lt;a href="#2-unattended-upgrades--le-sysadmin-silencieux-qui-ne-prend-jamais-de-pause-caf%c3%a9" class="header-anchor"&gt;&lt;/a&gt;2. Unattended-upgrades : le sysadmin silencieux qui ne prend jamais de pause café
&lt;/h2&gt;&lt;p&gt;Contrairement à votre stagiaire qui croit que &amp;quot;mise à jour de sécurité&amp;quot; signifie &amp;quot;changer son mot de passe de 'password123' à 'password1234'&amp;quot;, unattended-upgrades est un service qui prend son travail au sérieux. Cette petite merveille d'ingénierie fonctionne pendant que vous dormez profondément, rêvant probablement de clusters Kubernetes parfaitement orchestrés (on sait tous que ça n'arrive que dans les rêves).&lt;/p&gt;
&lt;p&gt;Techniquement parlant (et les vrais barbus aiment parler techniquement), c'est un démon qui s'exécute via systemd timers pour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chercher les mises à jour que vous auriez dû installer il y a des semaines&lt;/li&gt;
&lt;li&gt;Filtrer celles qui empêcheront votre système de se faire pwner par un script kiddie&lt;/li&gt;
&lt;li&gt;Les installer sans vous demander votre avis (parce qu'on sait tous que vous diriez &amp;quot;plus tard&amp;quot;)&lt;/li&gt;
&lt;li&gt;Redémarrer votre serveur au milieu de la nuit quand personne ne regardera vos graphs de monitoring chuter momentanément&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce paquet fonctionne sur n'importe quelle version de Debian (de l'antique Buster à la fraichement sortie Bookworm) et même sur ces ersatz de Debian comme Ubuntu, si vous vous abaissez à utiliser de telles distributions.&lt;/p&gt;
&lt;h2 id="3-installation-pour-ceux-qui-savent-encore-taper-sur-un-clavier"&gt;&lt;a href="#3-installation-pour-ceux-qui-savent-encore-taper-sur-un-clavier" class="header-anchor"&gt;&lt;/a&gt;3. Installation pour ceux qui savent encore taper sur un clavier
&lt;/h2&gt;&lt;h3 id="31-les-bases-même-votre-stagiaire-pourrait-le-faire"&gt;&lt;a href="#31-les-bases-m%c3%aame-votre-stagiaire-pourrait-le-faire" class="header-anchor"&gt;&lt;/a&gt;3.1 Les bases (même votre stagiaire pourrait le faire)
&lt;/h3&gt;&lt;p&gt;Ouvrez votre terminal noir (parce que bien sûr, vous utilisez un fond noir avec des polices vertes, comme tout vrai barbu qui se respecte) et tapez ces incantations magiques :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install unattended-upgrades apt-listchanges
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Ce que vous venez de conjurer :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;unattended-upgrades&lt;/code&gt; : le véritable héros silencieux qui fera le travail que vous procrastinez habituellement&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apt-listchanges&lt;/code&gt; : pour recevoir des emails détaillés que vous prétendrez lire avant de les archiver automatiquement&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-activation-pour-les-admins-qui-ont-peur-de-modifier-les-fichiers-de-configuration-à-la-main"&gt;&lt;a href="#32-activation-pour-les-admins-qui-ont-peur-de-modifier-les-fichiers-de-configuration-%c3%a0-la-main" class="header-anchor"&gt;&lt;/a&gt;3.2 Activation pour les admins qui ont peur de modifier les fichiers de configuration à la main
&lt;/h3&gt;&lt;p&gt;Si vous préférez l'approche &amp;quot;clique-bouton&amp;quot; (aucun jugement, enfin peut-être un peu), Debian vous offre un assistant :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg-reconfigure --priority&lt;span style="color:#f92672"&gt;=&lt;/span&gt;low unattended-upgrades
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Astuce de vrai barbu :&lt;/strong&gt; L'argument &lt;code&gt;--priority=low&lt;/code&gt; force l'affichage de &lt;strong&gt;toutes&lt;/strong&gt; les options possibles, parce que les vrais barbus veulent tout contrôler. Les autres priorités sont pour ceux qui pensent qu'utiliser une souris sous Linux est une bonne idée.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un menu pseudo-graphique va apparaître dans votre terminal. Sélectionnez &amp;quot;Oui&amp;quot; (comme si vous aviez réellement le choix). Cette étape crée le fichier &lt;code&gt;/etc/apt/apt.conf.d/20auto-upgrades&lt;/code&gt; avec une configuration basique pour les âmes simples.&lt;/p&gt;
&lt;h2 id="4-configuration-pour-les-vrais-barbus-ceux-qui-nutilisent-pas-de-gui"&gt;&lt;a href="#4-configuration-pour-les-vrais-barbus-ceux-qui-nutilisent-pas-de-gui" class="header-anchor"&gt;&lt;/a&gt;4. Configuration pour les vrais barbus (ceux qui n&amp;rsquo;utilisent pas de GUI)
&lt;/h2&gt;&lt;p&gt;La configuration d'unattended-upgrades se fait dans deux fichiers de configuration. Si vous ne savez pas ce qu'est un fichier de configuration, fermez cet article et retournez installer Windows :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt; - Où la vraie magie se passe&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/apt/apt.conf.d/20auto-upgrades&lt;/code&gt; - Pour dire à votre système à quelle fréquence il doit se sauver lui-même&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="41-sélection-des-dépôts-ou-comment-distinguer-les-mises-à-jour-importantes-des-futilités"&gt;&lt;a href="#41-s%c3%a9lection-des-d%c3%a9p%c3%b4ts-ou-comment-distinguer-les-mises-%c3%a0-jour-importantes-des-futilit%c3%a9s" class="header-anchor"&gt;&lt;/a&gt;4.1 Sélection des dépôts (ou comment distinguer les mises à jour importantes des futilités)
&lt;/h3&gt;&lt;p&gt;Éditez &lt;code&gt;/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt; (avec vi, bien sûr, pas avec cette abomination qu'est nano). La section &lt;code&gt;Origins-Pattern&lt;/code&gt; est comme le filtre de Tinder de votre système - elle décide quelles mises à jour méritent son attention :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-aptconf" data-lang="aptconf"&gt;Unattended-Upgrade::Origins-Pattern {
 &amp;#34;origin=Debian,codename=${distro_codename}-security&amp;#34;;

 // &amp;#34;origin=Debian,codename=${distro_codename}-updates&amp;#34;;

 // &amp;#34;origin=Debian,codename=${distro_codename}-proposed-updates&amp;#34;;

 // &amp;#34;origin=Debian,codename=${distro_codename}-backports&amp;#34;;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Guide de traduction du jargon Debian pour mortels :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type de dépôt&lt;/th&gt;
&lt;th&gt;Ce que Debian dit&lt;/th&gt;
&lt;th&gt;Ce que ça signifie vraiment&lt;/th&gt;
&lt;th&gt;À activer si...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;quot;Correctifs de sécurité critiques&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Colmate les trous que les script kiddies utilisent déjà&amp;quot;&lt;/td&gt;
&lt;td&gt;Vous avez un minimum d'instinct de survie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-updates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;quot;Corrections importantes non sécuritaires&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Bugs suffisamment gênants pour qu'on daigne les corriger&amp;quot;&lt;/td&gt;
&lt;td&gt;Vous en avez assez que vos services plantent mystérieusement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-proposed-updates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;quot;Candidats en attente de validation&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Quelqu'un a bricolé ça, ça semble marcher, mais on n'est pas sûr&amp;quot;&lt;/td&gt;
&lt;td&gt;Vous aimez vivre dangereusement (ou avez un environnement de test)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-backports&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;quot;Nouvelles versions portées vers stable&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Du code récent greffé sur un OS dinosaure&amp;quot;&lt;/td&gt;
&lt;td&gt;Un fonctionnalité VRAIMENT nécessaire vous manque&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🐑 Conseil de troupeau :&lt;/strong&gt; La plupart des moutons n'activent que &lt;code&gt;-security&lt;/code&gt;. Les vrais barbus activent tout puis blâment systemd quand ça casse.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="42-planification-des-mises-à-jour-ou-quand-laisser-votre-système-jouer-au-docteur"&gt;&lt;a href="#42-planification-des-mises-%c3%a0-jour-ou-quand-laisser-votre-syst%c3%a8me-jouer-au-docteur" class="header-anchor"&gt;&lt;/a&gt;4.2 Planification des mises à jour (ou quand laisser votre système jouer au docteur)
&lt;/h3&gt;&lt;p&gt;Modifiez &lt;code&gt;/etc/apt/apt.conf.d/20auto-upgrades&lt;/code&gt; pour définir quand votre système se soignera tout seul :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-aptconf" data-lang="aptconf"&gt;APT::Periodic::Update-Package-Lists &amp;#34;1&amp;#34;;
APT::Periodic::Unattended-Upgrade &amp;#34;1&amp;#34;;
APT::Periodic::Unattended-Upgrade-Time &amp;#34;3&amp;#34;;
APT::Periodic::RandomSleep &amp;#34;60&amp;#34;;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Explication pour ceux qui n'ont jamais lu le man :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Update-Package-Lists&lt;/strong&gt; : À quelle fréquence votre système recherche de nouvelles mises à jour.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;1&amp;quot;&lt;/code&gt; = tous les jours (pour les paranoïaques)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;7&amp;quot;&lt;/code&gt; = une fois par semaine (pour les décontractés)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;0&amp;quot;&lt;/code&gt; = jamais (pour ceux qui aiment jouer à la roulette russe avec les exploits)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unattended-Upgrade&lt;/strong&gt; : Quand appliquer réellement ces mises à jour.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;1&amp;quot;&lt;/code&gt; = quotidiennement (recommandé par tous ceux qui ont déjà dû nettoyer un serveur compromis)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;7&amp;quot;&lt;/code&gt; = hebdomadaire (un compromis pour les téméraires)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;0&amp;quot;&lt;/code&gt; = jamais (alors pourquoi lire cet article ?)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unattended-Upgrade-Time&lt;/strong&gt; : L'heure à laquelle lancer le processus.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;3&amp;quot;&lt;/code&gt; = 3h du matin, quand même les administrateurs système devraient dormir&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RandomSleep&lt;/strong&gt; : Le délai aléatoire pour éviter d'être comme tout le monde.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;60&amp;quot;&lt;/code&gt; = entre 0 et 60 minutes de décalage (pour ne pas faire tomber les miroirs Debian quand tout le monde se rue dessus à 3h00 pile)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🐔 Pour les insomniaques :&lt;/strong&gt; Sur Debian 11+, &lt;code&gt;RandomSleep&lt;/code&gt; est en minutes. Sur Debian 10 et avant, c'est en secondes. Pourquoi ? Parce que la cohérence, c'est surfait quand on peut introduire des bugs subtils dans votre configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="43-gestion-du-reboot-automatique-ou-comment-faire-pleurer-vos-utilisateurs"&gt;&lt;a href="#43-gestion-du-reboot-automatique-ou-comment-faire-pleurer-vos-utilisateurs" class="header-anchor"&gt;&lt;/a&gt;4.3 Gestion du reboot automatique (ou comment faire pleurer vos utilisateurs)
&lt;/h3&gt;&lt;p&gt;Les mises à jour du noyau sont comme les légumes - elles ne font effet que si vous redémarrez. Configurez le comportement dans &lt;code&gt;/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-aptconf" data-lang="aptconf"&gt;Unattended-Upgrade::Automatic-Reboot &amp;#34;true&amp;#34;;
Unattended-Upgrade::Automatic-Reboot-Time &amp;#34;04:30&amp;#34;;
Unattended-Upgrade::Automatic-Reboot-WithUsers &amp;#34;false&amp;#34;;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Ce que ces options signifient vraiment :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic-Reboot&lt;/strong&gt; : Le grand interrupteur de la terreur nocturne.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;true&amp;quot;&lt;/code&gt; = &amp;quot;J'aime vivre dangereusement et mes backups sont à jour&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;false&amp;quot;&lt;/code&gt; = &amp;quot;Je préfère avoir un noyau vulnérable mais au moins je sais quand mon serveur redémarre&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic-Reboot-Time&lt;/strong&gt; : L'heure du crime parfait.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Format : &lt;code&gt;&amp;quot;HH:MM&amp;quot;&lt;/code&gt; (choisir une heure où personne ne remarquera que tout est tombé)&lt;/li&gt;
&lt;li&gt;Conseil de barbu : planifiez-le toujours APRÈS les mises à jour, pas pendant&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic-Reboot-WithUsers&lt;/strong&gt; : Le dilemme éthique.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;true&amp;quot;&lt;/code&gt; = &amp;quot;Les sessions des utilisateurs importent moins que la sécurité&amp;quot; (approche soviétique)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;false&amp;quot;&lt;/code&gt; = &amp;quot;Les humains d'abord&amp;quot; (approche diplomatique)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🔥 Histoire vraie :&lt;/strong&gt; J'ai vu un administrateur configurer un redémarrage automatique à 14h sur un serveur de production. Il a ensuite passé trois semaines à se demander pourquoi les utilisateurs lui envoyaient des messages haineux tous les jours.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="44-notifications-pour-prétendre-que-vous-surveillez-vos-serveurs"&gt;&lt;a href="#44-notifications-pour-pr%c3%a9tendre-que-vous-surveillez-vos-serveurs" class="header-anchor"&gt;&lt;/a&gt;4.4 Notifications pour prétendre que vous surveillez vos serveurs
&lt;/h3&gt;&lt;p&gt;Les emails de notification sont là pour vous donner l'illusion que vous savez ce qui se passe sur vos serveurs. Configurez-les dans &lt;code&gt;/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-aptconf" data-lang="aptconf"&gt;Unattended-Upgrade::Mail &amp;#34;admin@domaine.fr&amp;#34;;
Unattended-Upgrade::MailReport &amp;#34;on-change&amp;#34;;

//Unattended-Upgrade::Mail-Server &amp;#34;smtp.example.com&amp;#34;;
//Unattended-Upgrade::Mail-Server-Port &amp;#34;587&amp;#34;;
//Unattended-Upgrade::Mail-Server-Login &amp;#34;votre_login&amp;#34;;
//Unattended-Upgrade::Mail-Server-Password &amp;#34;votre_motdepasse&amp;#34;;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Options pour votre spam personnel :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mail&lt;/strong&gt; : Qui recevra les rapports que personne ne lit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mettez votre email perso si vous aimez être réveillé à 3h du matin par des notifications&lt;/li&gt;
&lt;li&gt;Ou créez un filtre qui les envoie directement dans un dossier que vous n'ouvrirez jamais&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MailReport&lt;/strong&gt; : La fréquence de spam.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;always&amp;quot;&lt;/code&gt; = pour ceux qui aiment leur boîte mail bien remplie&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;on-change&amp;quot;&lt;/code&gt; = le choix des gens raisonnables&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;only-on-error&amp;quot;&lt;/code&gt; = pour ceux qui adhèrent à la philosophie &amp;quot;pas de nouvelles, bonnes nouvelles&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📣 Rappel essentiel :&lt;/strong&gt; Ces mails ne serviront à rien si vous n'avez pas un MTA fonctionnel. Installez-en un ou tous ces paramètres ne seront que des vœux pieux :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install postfix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# OU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install msmtp msmtp-mta
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;h2 id="5-dompter-les-mises-à-jour-majeures-ou-lart-déviter-la-crise-cardiaque-à-3h-du-matin"&gt;&lt;a href="#5-dompter-les-mises-%c3%a0-jour-majeures-ou-lart-d%c3%a9viter-la-crise-cardiaque-%c3%a0-3h-du-matin" class="header-anchor"&gt;&lt;/a&gt;5. Dompter les mises à jour majeures (ou l&amp;rsquo;art d&amp;rsquo;éviter la crise cardiaque à 3h du matin)
&lt;/h2&gt;&lt;p&gt;Les mises à jour de sécurité, c'est bien, mais les mises à jour majeures, c'est comme laisser un enfant de 5 ans conduire votre voiture - ça peut aller très mal, très vite. Particulièrement avec ces paquets qui utilisent le système d'alternatives de Debian, cette brillante invention qui garantit votre future migraine.&lt;/p&gt;
&lt;h3 id="51-le-piège-des-alternatives-ou-comment-se-tirer-une-balle-dans-le-pied-automatiquement"&gt;&lt;a href="#51-le-pi%c3%a8ge-des-alternatives-ou-comment-se-tirer-une-balle-dans-le-pied-automatiquement" class="header-anchor"&gt;&lt;/a&gt;5.1 Le piège des alternatives (ou comment se tirer une balle dans le pied automatiquement)
&lt;/h3&gt;&lt;p&gt;Les langages comme PHP, Python ou Java utilisent ce merveilleux système d'alternatives, qui permet à plusieurs versions de coexister (comme vos ex, mais en plus utile). Malheureusement, ce système a été conçu par quelqu'un qui n'a manifestement jamais entendu parler de l'automatisation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le drame en 4 actes :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Acte&lt;/th&gt;
&lt;th&gt;Tragédie&lt;/th&gt;
&lt;th&gt;Résultat&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Votre système découvre PHP 8.3 et pense &amp;quot;oh, quelle belle mise à jour !&amp;quot;&lt;/td&gt;
&lt;td&gt;Installation lancée à 3h17 du matin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Le script demande poliment : &amp;quot;Voulez-vous faire de cette nouvelle version la version par défaut ?&amp;quot;&lt;/td&gt;
&lt;td&gt;Votre serveur fige, attendant une réponse qui ne viendra jamais&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Vous dormez paisiblement pendant que votre installation reste suspendue&lt;/td&gt;
&lt;td&gt;Configuration en état zombie (&lt;code&gt;sudo dpkg --configure -a&lt;/code&gt; sera votre mantra du matin)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Votre système de mise à jour automatique est lui-même bloqué&lt;/td&gt;
&lt;td&gt;Félicitations, vous venez de désactiver votre sécurité automatique&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-solutions-pour-barbus-confirmés-et-amateurs-de-nuits-tranquilles"&gt;&lt;a href="#52-solutions-pour-barbus-confirm%c3%a9s-et-amateurs-de-nuits-tranquilles" class="header-anchor"&gt;&lt;/a&gt;5.2 Solutions pour barbus confirmés (et amateurs de nuits tranquilles)
&lt;/h3&gt;&lt;h4 id="521-entraîner-debconf-à-ne-pas-vous-demander-votre-avis"&gt;&lt;a href="#521-entra%c3%aener-debconf-%c3%a0-ne-pas-vous-demander-votre-avis" class="header-anchor"&gt;&lt;/a&gt;5.2.1 Entraîner debconf à ne pas vous demander votre avis
&lt;/h4&gt;&lt;p&gt;Ce code est l'équivalent de mettre un bâillon sur debconf pour qu'il arrête de poser des questions stupides :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo echo &lt;span style="color:#e6db74"&gt;&amp;#34;php8.3 php8.3/common/default_for_install boolean false&amp;#34;&lt;/span&gt; | sudo debconf-set-selections
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo echo &lt;span style="color:#e6db74"&gt;&amp;#34;php8.2 php8.2/common/default_for_install boolean true&amp;#34;&lt;/span&gt; | sudo debconf-set-selections
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Quand l'utiliser&lt;/strong&gt; : Lorsque vous êtes un admin responsable qui teste d'abord les nouvelles versions avant de les infliger à votre production. Concept alien pour certains, je sais.&lt;/p&gt;
&lt;h4 id="522-expliquer-à-debian-ce-quest-une-priorité-comme-à-votre-chef-de-projet"&gt;&lt;a href="#522-expliquer-%c3%a0-debian-ce-quest-une-priorit%c3%a9-comme-%c3%a0-votre-chef-de-projet" class="header-anchor"&gt;&lt;/a&gt;5.2.2 Expliquer à Debian ce qu&amp;rsquo;est une priorité (comme à votre chef de projet)
&lt;/h4&gt;&lt;p&gt;Le système de priorité d'alternatives est l'équivalent technique d'une hiérarchie féodale - celui avec le plus grand nombre gagne :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.2 &lt;span style="color:#ae81ff"&gt;82&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --slave /usr/bin/phar phar /usr/bin/phar8.2 &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --slave /usr/bin/phpdbg phpdbg /usr/bin/phpdbg8.2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.3 &lt;span style="color:#ae81ff"&gt;80&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --slave /usr/bin/phar phar /usr/bin/phar8.3 &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --slave /usr/bin/phpdbg phpdbg /usr/bin/phpdbg8.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Astuce de vrai barbu :&lt;/strong&gt; La valeur numérique est juste une préférence, pas une garantie. Utilisez des nombres significativement différents si vous ne voulez pas être surpris. J'ai déjà vu des administrateurs utiliser 10 et 11, puis se plaindre que leur choix n'était pas respecté - niveau amateur.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id="523-le-coup-du-hook-post-installation-ou-comment-avoir-le-dernier-mot"&gt;&lt;a href="#523-le-coup-du-hook-post-installation-ou-comment-avoir-le-dernier-mot" class="header-anchor"&gt;&lt;/a&gt;5.2.3 Le coup du hook post-installation (ou comment avoir le dernier mot)
&lt;/h4&gt;&lt;p&gt;Quand vous en avez assez que Debian ignore vos préférences, créez un hook qui aura le dernier mot après chaque mise à jour :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo vi /etc/apt/apt.conf.d/99post-upgrade-hook
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ajoutez ce code vindicatif dans le fichier :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-aptconf" data-lang="aptconf"&gt;DPkg::Post-Invoke {
 &amp;#34;if [ -f /usr/bin/php8.2 ] &amp;amp;&amp;amp; [ -f /usr/bin/php8.3 ]; then update-alternatives --set php /usr/bin/php8.2; fi&amp;#34;;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Pourquoi c'est brillant&lt;/strong&gt; : Cette approche passive-agressive rétablit votre version préférée après CHAQUE opération APT, même si un paquet tente sournoisement de changer la version par défaut. C'est l'équivalent de dire &amp;quot;Merci pour ton opinion, maintenant on va faire à ma façon quand même&amp;quot;.&lt;/p&gt;
&lt;h4 id="524-mettre-un-gilet-pare-balles-contre-les-versions-majeures"&gt;&lt;a href="#524-mettre-un-gilet-pare-balles-contre-les-versions-majeures" class="header-anchor"&gt;&lt;/a&gt;5.2.4 Mettre un gilet pare-balles contre les versions majeures
&lt;/h4&gt;&lt;p&gt;Ajoutez à &lt;code&gt;/etc/apt/apt.conf.d/50unattended-upgrades&lt;/code&gt; ce code défensif :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-aptconf" data-lang="aptconf"&gt;Unattended-Upgrade::MinimalSteps &amp;#34;true&amp;#34;;
Unattended-Upgrade::Allow-downgrade &amp;#34;false&amp;#34;;
Unattended-Upgrade::Allow-APT-Mark-Fallback &amp;#34;false&amp;#34;;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Décryptage des incantations de protection :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Ce qu'elle fait vraiment&lt;/th&gt;
&lt;th&gt;Traduction en langage barbu&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MinimalSteps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Change en mode &amp;quot;un paquet à la fois&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Je préfère que mon système plante sur UN paquet plutôt que sur TOUS&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Allow-downgrade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Empêche les retours en arrière&lt;/td&gt;
&lt;td&gt;&amp;quot;Non, on ne revient pas à PHP 5 juste parce que tu as peur du changement&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Allow-APT-Mark-Fallback&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Désactive l'auto-sélection de nouvelles versions&lt;/td&gt;
&lt;td&gt;&amp;quot;Touche pas à mes versions majeures, animal ! &amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="525-la-liste-noire-de-la-honte-ou-comment-bannir-les-paquets-problématiques"&gt;&lt;a href="#525-la-liste-noire-de-la-honte-ou-comment-bannir-les-paquets-probl%c3%a9matiques" class="header-anchor"&gt;&lt;/a&gt;5.2.5 La liste noire de la honte (ou comment bannir les paquets problématiques)
&lt;/h4&gt;&lt;p&gt;Placez vos paquets critiques sur la liste des indésirables avec cette configuration :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-aptconf" data-lang="aptconf"&gt;Unattended-Upgrade::Blacklist {
 &amp;#34;php*&amp;#34;;
 &amp;#34;mariadb-server&amp;#34;;
 &amp;#34;postgresql*&amp;#34;;
 &amp;#34;nginx&amp;#34;;
 &amp;#34;apache2&amp;#34;;
};
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="53-le-plan-de-bataille-pour-les-vrais-professionnels"&gt;&lt;a href="#53-le-plan-de-bataille-pour-les-vrais-professionnels" class="header-anchor"&gt;&lt;/a&gt;5.3 Le plan de bataille pour les vrais professionnels
&lt;/h3&gt;&lt;p&gt;📌 &lt;strong&gt;Stratégie de survie en environnement de production&lt;/strong&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Bloquez les versions majeures&lt;/strong&gt; avec la configuration 5.2.4, à moins que vous n'aimiez les appels nocturnes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blacklistez impitoyablement&lt;/strong&gt; tout ce qui fait tourner votre business avec l'option 5.2.5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Construisez un environnement de test&lt;/strong&gt; identique - les vrais barbus testent AVANT, pas en production&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planifiez vos mises à jour majeures&lt;/strong&gt; comme des opérations militaires, avec des plans de repli&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faites des backups complets&lt;/strong&gt; avant toute mise à jour majeure, ou préparez votre CV&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Alerte rouge&lt;/strong&gt; : Les mises à jour majeures automatiques sur des composants critiques, c'est comme jouer à la roulette russe avec le serveur de production - vous pourriez vous en sortir, mais est-ce vraiment un risque que vous voulez prendre ? Pour tout ce qui fait tourner votre business (PHP, bases de données, serveurs web), planifiez, testez, puis priez avant de mettre à jour.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="6-entrer-dans-la-matrice--surveillance-et-déblocage-des-catastrophes-nocturnes"&gt;&lt;a href="#6-entrer-dans-la-matrice--surveillance-et-d%c3%a9blocage-des-catastrophes-nocturnes" class="header-anchor"&gt;&lt;/a&gt;6. Entrer dans la matrice : surveillance et déblocage des catastrophes nocturnes
&lt;/h2&gt;&lt;h3 id="61-les-logs-que-personne-ne-lit-jamais-jusquà-ce-que-tout-explose"&gt;&lt;a href="#61-les-logs-que-personne-ne-lit-jamais-jusqu%c3%a0-ce-que-tout-explose" class="header-anchor"&gt;&lt;/a&gt;6.1 Les logs que personne ne lit jamais (jusqu&amp;rsquo;à ce que tout explose)
&lt;/h3&gt;&lt;p&gt;Même avec l'automatisation, il faut surveiller ce que fait cette bête sauvage qu'est unattended-upgrades. Sinon, c'est comme laisser votre adolescent seul à la maison pendant le week-end - tôt ou tard, vous le regretterez. Voici les fichiers que vous prétendrez consulter régulièrement :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fichier log&lt;/th&gt;
&lt;th&gt;Ce qu'il contient réellement&lt;/th&gt;
&lt;th&gt;Quand le lire (soyons honnêtes)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/var/log/unattended-upgrades/unattended-upgrades.log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Le journal de bord du capitaine automatique&lt;/td&gt;
&lt;td&gt;Quand votre patron demande &amp;quot;que s'est-il passé ?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/var/log/unattended-upgrades/unattended-upgrades-dpkg.log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ce que dpkg marmonne dans sa barbe&lt;/td&gt;
&lt;td&gt;Quand le premier log ne vous dit pas pourquoi tout a explosé&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/var/log/apt/history.log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;La preuve que quelqu'un a fait quelque chose&lt;/td&gt;
&lt;td&gt;Pour savoir QUI blâmer (spoiler : c'est toujours systemd)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/var/log/apt/term.log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Les mêmes informations qu'avant, mais en plus verbeux&lt;/td&gt;
&lt;td&gt;Pour les masochistes qui aiment lire 5000 lignes de texte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/var/log/dpkg.log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chaque respiration de dpkg&lt;/td&gt;
&lt;td&gt;Pour les vrais barbus qui lisent les logs comme d'autres lisent Game of Thrones&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Les logs sont automagiquement comprimés et rotatés (&lt;code&gt;.1&lt;/code&gt;, &lt;code&gt;.2.gz&lt;/code&gt;, etc.). Voici comment faire semblant de les surveiller régulièrement :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tail -n &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt; /var/log/unattended-upgrades/unattended-upgrades.log
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo grep -i &lt;span style="color:#e6db74"&gt;&amp;#34;error\|fail\|warning&amp;#34;&lt;/span&gt; /var/log/unattended-upgrades/unattended-upgrades.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="62-déclencher-manuellement-les-mises-à-jour-pour-le-plaisir-de-voir-quelque-chose-se-casser-en-temps-réel"&gt;&lt;a href="#62-d%c3%a9clencher-manuellement-les-mises-%c3%a0-jour-pour-le-plaisir-de-voir-quelque-chose-se-casser-en-temps-r%c3%a9el" class="header-anchor"&gt;&lt;/a&gt;6.2 Déclencher manuellement les mises à jour (pour le plaisir de voir quelque chose se casser en temps réel)
&lt;/h3&gt;&lt;p&gt;Pour voir unattended-upgrades en action, comme si vous regardiez un documentaire animalier sur un prédateur dans son habitat naturel :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo unattended-upgrade --dry-run --debug
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo unattended-upgrade --debug
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo unattended-upgrade -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🧪 Preuve d'expertise technique&lt;/strong&gt; : Utilisez &lt;code&gt;--dry-run&lt;/code&gt; lors des démos pour vos collègues. Si ça fonctionne, prenez un air suffisant. Si ça plante, dites nonchalamment : &amp;quot;C'est exactement pourquoi j'utilise dry-run, voyez-vous&amp;quot;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="63-techniques-de-réanimation-pour-système-bloqué-ou-comment-sauver-votre-journée"&gt;&lt;a href="#63-techniques-de-r%c3%a9animation-pour-syst%c3%a8me-bloqu%c3%a9-ou-comment-sauver-votre-journ%c3%a9e" class="header-anchor"&gt;&lt;/a&gt;6.3 Techniques de réanimation pour système bloqué (ou comment sauver votre journée)
&lt;/h3&gt;&lt;p&gt;Quand votre système de mise à jour automatique s'arrête en position fœtale, voici la trousse d'urgence du barbu :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg --audit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg --configure --pending
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get -f install
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-mark showhold
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si votre système est bloqué par une question existentielle comme &amp;quot;Voulez-vous que PHP 8.3 devienne le nouveau PHP par défaut ?&amp;quot;, il est temps d'intervenir manuellement (comme arracher la manette des mains d'un enfant) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg --configure -a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dpkg-reconfigure php8.3-common
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>