{"id":208,"date":"2026-05-28T20:36:44","date_gmt":"2026-05-28T18:36:44","guid":{"rendered":"https:\/\/jbsan.fr\/blog\/?p=208"},"modified":"2026-05-28T23:42:42","modified_gmt":"2026-05-28T21:42:42","slug":"unattended-upgrades-sur-debian-proxmox-vm-et-lxc-automatiser-les-mises-a-jour-sans-faire-nimporte-quoi","status":"publish","type":"post","link":"https:\/\/jbsan.fr\/blog\/unattended-upgrades-sur-debian-proxmox-vm-et-lxc-automatiser-les-mises-a-jour-sans-faire-nimporte-quoi\/","title":{"rendered":"Unattended-upgrades sur Debian, Proxmox, VM et LXC : automatiser les mises \u00e0 jour sans faire n\u2019importe quoi"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Il y a deux types d\u2019administrateurs syst\u00e8me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ceux qui lancent leurs mises \u00e0 jour \u00e0 la main, quand ils y pensent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et ceux qui savent tr\u00e8s bien qu\u2019ils ne vont pas toujours y penser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur une machine Debian, une VM de service, un petit serveur web, un conteneur LXC ou m\u00eame un h\u00f4te Proxmox de homelab, automatiser une partie des mises \u00e0 jour peut vraiment \u00e9viter de laisser tra\u00eener des correctifs importants pendant des semaines. Mais il faut \u00eatre clair d\u00e8s le d\u00e9part : automatiser les mises \u00e0 jour, ce n\u2019est pas appuyer sur un gros bouton magique marqu\u00e9 \u201cs\u00e9curit\u00e9\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est plut\u00f4t installer un gardien de nuit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il travaille pendant qu\u2019on dort, mais il faut quand m\u00eame lui dire quelles portes il a le droit d\u2019ouvrir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cet article, on va voir comment fonctionne <code>unattended-upgrades<\/code>, comment l\u2019utiliser sur Debian et syst\u00e8mes proches, comment l\u2019adapter \u00e0 Proxmox, ce qu\u2019il faut faire dans une VM ou un LXC, et surtout ce qu\u2019il vaut mieux \u00e9viter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ce que fait vraiment unattended-upgrades<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>unattended-upgrades<\/code> est un outil utilis\u00e9 sur Debian, Ubuntu et d\u2019autres syst\u00e8mes bas\u00e9s sur APT pour installer automatiquement certaines mises \u00e0 jour.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le mot important ici, c\u2019est \u201ccertaines\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par d\u00e9faut, l\u2019outil ne va pas forc\u00e9ment mettre \u00e0 jour tout ce que <code>apt full-upgrade<\/code>, <code>apt-get dist-upgrade<\/code> ou <code>apt upgrade<\/code> aurait propos\u00e9 \u00e0 la main. Il travaille selon des r\u00e8gles. Ces r\u00e8gles disent quels d\u00e9p\u00f4ts sont autoris\u00e9s, quels paquets sont exclus, s\u2019il faut envoyer un mail, s\u2019il faut red\u00e9marrer, supprimer des d\u00e9pendances inutilis\u00e9es, \u00e9crire dans syslog, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il ne choisit pas au hasard.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il regarde les m\u00e9tadonn\u00e9es APT des paquets, notamment l\u2019origine, le label, la suite, le composant et le nom de code Debian. C\u2019est pour \u00e7a que la section <code>Origins-Pattern<\/code> est si importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En gros, cette section r\u00e9pond \u00e0 la question suivante :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Depuis quels d\u00e9p\u00f4ts ai-je le droit d\u2019installer automatiquement des mises \u00e0 jour ?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Et cette question devient tr\u00e8s s\u00e9rieuse d\u00e8s qu\u2019on parle de Proxmox, de d\u00e9p\u00f4ts tiers, de Ceph, de Netdata, de Webmin, de Docker ou d\u2019autres sources externes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compatibilit\u00e9 : Debian, Ubuntu, Proxmox, mais pas tous les Unix<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il faut \u00e9viter de pr\u00e9senter <code>unattended-upgrades<\/code> comme un outil pour \u201csyst\u00e8mes Unix\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce serait trop large, et techniquement faux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>unattended-upgrades<\/code> appartient \u00e0 l\u2019\u00e9cosyst\u00e8me Debian\/APT. Il concerne donc principalement les syst\u00e8mes utilisant APT et des paquets <code>.deb<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Syst\u00e8me<\/th><th>Compatible avec unattended-upgrades ?<\/th><th>Remarque<\/th><\/tr><\/thead><tbody><tr><td>Debian<\/td><td>Oui<\/td><td>Cas principal<\/td><\/tr><tr><td>Ubuntu<\/td><td>Oui<\/td><td>Tr\u00e8s courant sur serveur<\/td><\/tr><tr><td>Proxmox VE<\/td><td>Oui<\/td><td>Proxmox repose sur Debian, mais la configuration doit \u00eatre adapt\u00e9e<\/td><\/tr><tr><td>Proxmox Backup Server<\/td><td>Oui<\/td><td>M\u00eame logique que Proxmox VE<\/td><\/tr><tr><td>LXC Debian\/Ubuntu<\/td><td>Oui<\/td><td>Met \u00e0 jour le conteneur, pas le kernel de l\u2019h\u00f4te<\/td><\/tr><tr><td>VM Debian\/Ubuntu<\/td><td>Oui<\/td><td>Comme une machine classique<\/td><\/tr><tr><td>Linux Mint<\/td><td>Oui en g\u00e9n\u00e9ral<\/td><td>Bas\u00e9 sur Ubuntu\/Debian<\/td><\/tr><tr><td>Raspberry Pi OS<\/td><td>Oui en g\u00e9n\u00e9ral<\/td><td>Bas\u00e9 sur Debian<\/td><\/tr><tr><td>Kali Linux<\/td><td>Oui en g\u00e9n\u00e9ral<\/td><td>Bas\u00e9 sur Debian, mais \u00e0 manier avec prudence<\/td><\/tr><tr><td>Fedora, Rocky Linux, AlmaLinux, RHEL<\/td><td>Non<\/td><td>Utiliser plut\u00f4t <code>dnf-automatic<\/code><\/td><\/tr><tr><td>openSUSE \/ SUSE<\/td><td>Non<\/td><td>Utiliser plut\u00f4t les outils autour de <code>zypper<\/code><\/td><\/tr><tr><td>Arch Linux<\/td><td>Non<\/td><td>Utilise <code>pacman<\/code>, autre logique<\/td><\/tr><tr><td>FreeBSD, OpenBSD, NetBSD<\/td><td>Non<\/td><td>Ce sont des BSD, pas des syst\u00e8mes APT<\/td><\/tr><tr><td>macOS<\/td><td>Non<\/td><td>Unix-like, mais aucun lien avec APT<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Donc la bonne formulation serait plut\u00f4t :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Mises \u00e0 jour automatiques pour Debian, Ubuntu, Proxmox et syst\u00e8mes bas\u00e9s sur APT.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est moins large, mais c\u2019est juste.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quand l\u2019utiliser, et quand \u00eatre prudent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur une Debian classique, une VM applicative, un serveur web, un serveur SSH, un DNS interne ou une petite machine de monitoring, <code>unattended-upgrades<\/code> est souvent une bonne id\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur un hyperviseur Proxmox, il faut \u00eatre plus mesur\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Proxmox n\u2019est pas une simple Debian avec deux paquets en plus. C\u2019est un hyperviseur complet avec du stockage, du r\u00e9seau, un noyau sp\u00e9cifique, des VM, des conteneurs, parfois du Ceph, parfois de la haute disponibilit\u00e9. Une mise \u00e0 jour automatique qui red\u00e9marre au mauvais moment peut \u00eatre g\u00eanante. Une mise \u00e0 jour de kernel qui passe sans qu\u2019on s\u2019en rende compte peut aussi laisser un red\u00e9marrage n\u00e9cessaire en attente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n\u2019est pas forc\u00e9ment dangereux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais ce n\u2019est pas anodin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je s\u00e9parerais les cas comme \u00e7a :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Type de machine<\/th><th>Automatisation conseill\u00e9e ?<\/th><th>Commentaire<\/th><\/tr><\/thead><tbody><tr><td>Debian simple<\/td><td>Oui<\/td><td>Tr\u00e8s adapt\u00e9, surtout pour les correctifs de s\u00e9curit\u00e9<\/td><\/tr><tr><td>VM Debian<\/td><td>Oui<\/td><td>Comme une machine physique, pr\u00e9voir les red\u00e9marrages<\/td><\/tr><tr><td>LXC Debian<\/td><td>Oui, avec prudence<\/td><td>Met \u00e0 jour l\u2019espace utilisateur du conteneur, pas le kernel de l\u2019h\u00f4te<\/td><\/tr><tr><td>H\u00f4te Proxmox homelab<\/td><td>Possible<\/td><td>\u00c0 tester, avec notification et sans reboot automatique au d\u00e9but<\/td><\/tr><tr><td>H\u00f4te Proxmox production<\/td><td>Tr\u00e8s prudent<\/td><td>Plut\u00f4t fen\u00eatre de maintenance, tests, supervision et mises \u00e0 jour manuelles ou orchestr\u00e9es<\/td><\/tr><tr><td>Cluster Proxmox avec Ceph ou HA<\/td><td>Prudence maximale<\/td><td>Ne jamais red\u00e9marrer tous les n\u0153uds automatiquement sans strat\u00e9gie<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le but n\u2019est pas de faire peur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le but est juste d\u2019\u00e9viter le classique : \u201cJ\u2019ai activ\u00e9 les mises \u00e0 jour automatiques partout, et maintenant je ne comprends pas pourquoi mon cluster a red\u00e9marr\u00e9 cette nuit.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installation sur Debian, Ubuntu ou une VM classique<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Debian, Ubuntu Server et la plupart des syst\u00e8mes APT, l\u2019installation est simple.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt update\napt install unattended-upgrades apt-listchanges\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Le paquet <code>apt-listchanges<\/code> est optionnel, mais utile. Il permet d\u2019\u00eatre inform\u00e9 des changements importants contenus dans certains paquets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur beaucoup d\u2019installations Debian, notamment sur des templates de VM ou de LXC, <code>unattended-upgrades<\/code> peut d\u00e9j\u00e0 \u00eatre pr\u00e9sent ou activ\u00e9. Le fichier de configuration principal existe g\u00e9n\u00e9ralement d\u00e9j\u00e0 avec une configuration par d\u00e9faut :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ce fichier contient les r\u00e8gles de base, notamment les d\u00e9p\u00f4ts Debian et Debian Security autoris\u00e9s par d\u00e9faut.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais la pr\u00e9sence de <code>50unattended-upgrades<\/code> ne suffit pas \u00e0 elle seule \u00e0 prouver que l\u2019installation automatique est active.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019activation r\u00e9elle d\u00e9pend aussi de la configuration p\u00e9riodique d\u2019APT, notamment du fichier :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/20auto-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Pour v\u00e9rifier :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncat \/etc\/apt\/apt.conf.d\/20auto-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Un fichier minimal actif ressemble souvent \u00e0 ceci :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nAPT::Periodic::Update-Package-Lists &quot;1&quot;;\nAPT::Periodic::Unattended-Upgrade &quot;1&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Dans ce cas, APT met \u00e0 jour la liste des paquets et lance <code>unattended-upgrades<\/code> automatiquement selon les timers systemd.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si le fichier n\u2019existe pas, ou si <code>Unattended-Upgrade<\/code> vaut <code>\"0\"<\/code>, l\u2019installation automatique ne se fera pas, m\u00eame si <code>50unattended-upgrades<\/code> est pr\u00e9sent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut activer ou r\u00e9activer la configuration de base avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndpkg-reconfigure -plow unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ou cr\u00e9er le fichier \u00e0 la main.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le fichier 20auto-upgrades<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>20auto-upgrades<\/code> sert \u00e0 dire \u00e0 APT ce qu\u2019il doit faire p\u00e9riodiquement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chemin :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/20auto-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Contenu minimal :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nAPT::Periodic::Update-Package-Lists &quot;1&quot;;\nAPT::Periodic::Unattended-Upgrade &quot;1&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">On peut aussi utiliser une version un peu plus compl\u00e8te :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nAPT::Periodic::Update-Package-Lists &quot;1&quot;;\nAPT::Periodic::Download-Upgradeable-Packages &quot;1&quot;;\nAPT::Periodic::AutocleanInterval &quot;7&quot;;\nAPT::Periodic::Unattended-Upgrade &quot;1&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Explication rapide :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Update-Package-Lists<\/code> met \u00e0 jour la liste des paquets disponibles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Download-Upgradeable-Packages<\/code> autorise le t\u00e9l\u00e9chargement des paquets pouvant \u00eatre mis \u00e0 jour.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>AutocleanInterval<\/code> nettoie p\u00e9riodiquement le cache APT.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Unattended-Upgrade<\/code> active r\u00e9ellement l\u2019installation automatique selon les r\u00e8gles de <code>unattended-upgrades<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le <code>\"1\"<\/code> signifie g\u00e9n\u00e9ralement \u201ctous les jours\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donc ici, on demande au syst\u00e8me de v\u00e9rifier quotidiennement les mises \u00e0 jour et d\u2019installer automatiquement ce qui est autoris\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les timers systemd utilis\u00e9s par APT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Debian moderne, les actions p\u00e9riodiques d\u2019APT sont d\u00e9clench\u00e9es par systemd avec deux timers principaux :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-daily.timer\napt-daily-upgrade.timer\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">On peut v\u00e9rifier leur \u00e9tat avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsystemctl status apt-daily.timer apt-daily-upgrade.timer\nsystemctl list-timers &#039;apt-daily*&#039;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Les fichiers unitaires par d\u00e9faut peuvent \u00eatre consult\u00e9s ici :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncat \/usr\/lib\/systemd\/system\/apt-daily.timer\ncat \/usr\/lib\/systemd\/system\/apt-daily-upgrade.timer\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Sur une Debian classique, on peut par exemple retrouver une configuration de ce type pour <code>apt-daily.timer<\/code> :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;Unit]\nDescription=Daily apt download activities\n\n&#x5B;Timer]\nOnCalendar=*-*-* 6,18:00\nRandomizedDelaySec=12h\nPersistent=true\n\n&#x5B;Install]\nWantedBy=timers.target\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Et pour <code>apt-daily-upgrade.timer<\/code> :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;Unit]\nDescription=Daily apt upgrade and clean activities\nAfter=apt-daily.timer\n\n&#x5B;Timer]\nOnCalendar=*-*-* 6:00\nRandomizedDelaySec=60m\nPersistent=true\n\n&#x5B;Install]\nWantedBy=timers.target\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il faut bien comprendre le r\u00f4le du d\u00e9lai al\u00e9atoire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00eame si <code>OnCalendar<\/code> indique <code>6:00<\/code>, l\u2019ex\u00e9cution r\u00e9elle peut \u00eatre d\u00e9cal\u00e9e. Par exemple, avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nRandomizedDelaySec=60m\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">le lancement peut se faire dans l\u2019heure qui suit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nRandomizedDelaySec=12h\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">le lancement peut \u00eatre d\u00e9cal\u00e9 jusqu\u2019\u00e0 douze heures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est normal. Ce m\u00e9canisme \u00e9vite que toutes les machines contactent les d\u00e9p\u00f4ts APT exactement au m\u00eame moment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il ne faut pas modifier directement les fichiers dans :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/usr\/lib\/systemd\/system\/\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ils appartiennent aux paquets du syst\u00e8me. Pour adapter l\u2019horaire, on utilise une surcharge systemd avec <code>systemctl edit<\/code>, on verra \u00e7a plus loin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Modifier 50unattended-upgrades : la m\u00e9thode simple<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier principal de configuration est g\u00e9n\u00e9ralement celui-ci :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il est normalement install\u00e9 avec le paquet <code>unattended-upgrades<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est le fichier que l\u2019on modifie le plus souvent au d\u00e9but, parce qu\u2019il contient d\u00e9j\u00e0 beaucoup d\u2019exemples comment\u00e9s et d\u2019explications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et pour \u00eatre clair : oui, on peut travailler directement dans ce fichier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n\u2019est pas interdit. Ce n\u2019est pas une mauvaise commande. Ce n\u2019est pas une erreur bloquante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour l\u2019ouvrir :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnano \/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Avant modification, une sauvegarde simple reste une bonne habitude :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncp -a \/etc\/apt\/apt.conf.d\/50unattended-upgrades \/etc\/apt\/apt.conf.d\/50unattended-upgrades.bak.$(date +%F-%H%M)\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">C\u2019est la m\u00e9thode la plus directe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Elle est tr\u00e8s bien pour comprendre le fonctionnement, tester sur une machine personnelle, ou configurer rapidement un serveur isol\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais sur plusieurs serveurs, ou sur une machine que l\u2019on veut maintenir proprement dans le temps, il existe une m\u00e9thode plus \u00e9l\u00e9gante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Copier 50 vers 52 : la m\u00e9thode plus propre<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">APT lit les fichiers de configuration pr\u00e9sents dans :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ces fichiers sont lus dans l\u2019ordre alphab\u00e9tique et num\u00e9rique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donc un fichier nomm\u00e9 <code>52unattended-upgrades-local<\/code> sera lu apr\u00e8s <code>50unattended-upgrades<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est justement l\u2019int\u00e9r\u00eat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut garder <code>50unattended-upgrades<\/code> comme fichier de r\u00e9f\u00e9rence fourni par le paquet, puis placer sa configuration personnalis\u00e9e dans un fichier local charg\u00e9 apr\u00e8s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La m\u00e9thode consiste \u00e0 copier le fichier de base :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncp -a \/etc\/apt\/apt.conf.d\/50unattended-upgrades \/etc\/apt\/apt.conf.d\/52unattended-upgrades-local\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puis \u00e0 modifier la copie :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnano \/etc\/apt\/apt.conf.d\/52unattended-upgrades-local\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">APT utilisera automatiquement ce nouveau fichier parce qu\u2019il se trouve dans <code>\/etc\/apt\/apt.conf.d\/<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il n\u2019y a pas besoin de d\u00e9clarer ce fichier ailleurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il n\u2019y a pas besoin de l\u2019inclure manuellement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il n\u2019y a pas besoin de red\u00e9marrer APT.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le point \u00e0 bien comprendre, c\u2019est que les deux fichiers seront lus :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n50unattended-upgrades\n52unattended-upgrades-local\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Comme <code>52unattended-upgrades-local<\/code> est lu apr\u00e8s, il peut compl\u00e9ter ou surcharger certains param\u00e8tres.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour v\u00e9rifier ce qu\u2019APT voit r\u00e9ellement, on peut utiliser :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-config dump | grep -i unattended\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Et surtout tester l\u2019ex\u00e9cution avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nunattended-upgrade --dry-run --debug\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Faut-il supprimer ou vider 50 apr\u00e8s copie ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Non.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En g\u00e9n\u00e9ral, on ne supprime pas <code>50unattended-upgrades<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce fichier appartient au paquet <code>unattended-upgrades<\/code>, il sert de base et de documentation. Le garder permet aussi de retrouver facilement les options disponibles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La m\u00e9thode propre consiste plut\u00f4t \u00e0 :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>garder <code>50unattended-upgrades<\/code> comme r\u00e9f\u00e9rence ;<\/li>\n\n\n\n<li>mettre les choix personnalis\u00e9s dans <code>52unattended-upgrades-local<\/code> ;<\/li>\n\n\n\n<li>v\u00e9rifier le r\u00e9sultat avec <code>apt-config dump<\/code> et <code>unattended-upgrade --dry-run --debug<\/code>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a cependant un d\u00e9tail important.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si on copie tout le fichier <code>50<\/code> vers <code>52<\/code>, certaines sections comme <code>Origins-Pattern<\/code> peuvent se retrouver d\u00e9finies deux fois ou \u00eatre difficiles \u00e0 lire. Pour \u00e9viter les doublons ou un comportement ambigu, on peut nettoyer explicitement la liste avant de la red\u00e9finir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans les fichiers de configuration APT, la directive \u00e0 utiliser est :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n#clear Unattended-Upgrade::Origins-Pattern;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Le <code>#clear<\/code> peut surprendre, parce qu\u2019il ressemble \u00e0 un commentaire. Dans la syntaxe APT, c\u2019est bien une directive sp\u00e9ciale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple dans <code>52unattended-upgrades-local<\/code> :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n#clear Unattended-Upgrade::Origins-Pattern;\nUnattended-Upgrade::Origins-Pattern {\n        &quot;origin=Debian,codename=${distro_codename},label=Debian&quot;;\n        &quot;origin=Debian,codename=${distro_codename},label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-security,label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-updates,label=Debian&quot;;\n};\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Cette directive permet de repartir d\u2019une liste propre avant de d\u00e9finir vos propres d\u00e9p\u00f4ts autoris\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est particuli\u00e8rement utile si vous gardez <code>50unattended-upgrades<\/code> intact et que vous voulez que <code>52unattended-upgrades-local<\/code> devienne votre vraie configuration active.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00e9thode simple ou m\u00e9thode propre ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les deux sont valables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un tutoriel, on peut pr\u00e9senter les choses comme \u00e7a :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>M\u00e9thode<\/th><th>Fichier utilis\u00e9<\/th><th>Avantage<\/th><th>Limite<\/th><\/tr><\/thead><tbody><tr><td>Simple<\/td><td><code>\/etc\/apt\/apt.conf.d\/50unattended-upgrades<\/code><\/td><td>Direct, facile \u00e0 comprendre<\/td><td>Moins propre lors des futures mises \u00e0 jour du paquet<\/td><\/tr><tr><td>Propre<\/td><td><code>\/etc\/apt\/apt.conf.d\/52unattended-upgrades-local<\/code><\/td><td>Plus maintenable<\/td><td>Demande de comprendre l\u2019ordre de lecture des fichiers APT<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sur une machine personnelle, modifier <code>50unattended-upgrades<\/code> directement peut suffire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur un serveur, un h\u00f4te Proxmox, ou plusieurs machines \u00e0 maintenir, je pr\u00e9f\u00e8re utiliser un fichier local comme <code>52unattended-upgrades-local<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n\u2019est pas une question de \u201c\u00e7a marche ou \u00e7a ne marche pas\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est une question de maintenance propre.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comprendre Origins-Pattern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La section <code>Origins-Pattern<\/code> est le c\u0153ur du sujet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Elle ressemble souvent \u00e0 \u00e7a dans la configuration Debian par d\u00e9faut :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nUnattended-Upgrade::Origins-Pattern {\n        &quot;origin=Debian,codename=${distro_codename},label=Debian&quot;;\n        &quot;origin=Debian,codename=${distro_codename},label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-security,label=Debian-Security&quot;;\n};\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Chaque ligne est un filtre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un paquet sera mis \u00e0 jour automatiquement seulement si ses m\u00e9tadonn\u00e9es correspondent \u00e0 une des lignes autoris\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les champs les plus courants sont :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Champ<\/th><th>Alias<\/th><th>Exemple<\/th><\/tr><\/thead><tbody><tr><td><code>origin<\/code><\/td><td><code>o<\/code><\/td><td><code>Debian<\/code>, <code>Proxmox<\/code><\/td><\/tr><tr><td><code>label<\/code><\/td><td><code>l<\/code><\/td><td><code>Debian-Security<\/code>, <code>Proxmox Debian Repository<\/code><\/td><\/tr><tr><td><code>codename<\/code><\/td><td><code>n<\/code><\/td><td><code>bookworm<\/code>, <code>trixie<\/code><\/td><\/tr><tr><td><code>archive<\/code> ou <code>suite<\/code><\/td><td><code>a<\/code><\/td><td><code>stable<\/code>, <code>oldstable<\/code><\/td><\/tr><tr><td><code>component<\/code><\/td><td><code>c<\/code><\/td><td><code>main<\/code>, <code>contrib<\/code>, <code>pve-no-subscription<\/code><\/td><\/tr><tr><td><code>site<\/code><\/td><td><\/td><td><code>deb.debian.org<\/code>, <code>download.proxmox.com<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La macro suivante est tr\u00e8s pratique :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n${distro_codename}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Elle reprend le nom de code de la distribution install\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Debian 12 : <code>bookworm<\/code><\/li>\n\n\n\n<li>Debian 13 : <code>trixie<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Donc une m\u00eame configuration peut \u00eatre plus facilement r\u00e9utilis\u00e9e entre plusieurs machines.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Voir les bonnes valeurs avec apt-cache policy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant d\u2019ajouter une ligne dans <code>Origins-Pattern<\/code>, il faut savoir ce que le syst\u00e8me voit r\u00e9ellement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La commande \u00e0 utiliser :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">On peut aussi regarder un paquet pr\u00e9cis :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy proxmox-ve\napt-cache policy pve-manager\napt-cache policy ceph\napt-cache policy nginx\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">C\u2019est dans cette sortie qu\u2019on retrouve les valeurs comme :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nrelease o=Debian,a=stable,n=bookworm,l=Debian,c=main,b=amd64\nrelease o=Proxmox,n=bookworm,l=Proxmox Debian Repository,c=pve-no-subscription,b=amd64\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">C\u2019est \u00e0 partir de ces valeurs qu\u2019on \u00e9crit une r\u00e8gle fiable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pas \u00e0 partir d\u2019une intuition.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et encore moins \u00e0 partir d\u2019un copier-coller trouv\u00e9 sur un forum sans v\u00e9rifier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple de configuration Debian raisonnable<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une VM Debian, un conteneur LXC Debian ou un serveur Debian classique, la configuration par d\u00e9faut peut d\u00e9j\u00e0 suffire pour les d\u00e9p\u00f4ts Debian principaux et Debian Security.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut le v\u00e9rifier avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncat \/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si la section contient d\u00e9j\u00e0 les lignes Debian et Debian Security, c\u2019est une bonne base.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple de configuration personnalis\u00e9e possible, \u00e0 placer soit directement dans :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">soit, plus proprement, dans :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/52unattended-upgrades-local\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Contenu conseill\u00e9 pour la partie personnalis\u00e9e :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n#clear Unattended-Upgrade::Origins-Pattern;\nUnattended-Upgrade::Origins-Pattern {\n        &quot;origin=Debian,codename=${distro_codename},label=Debian&quot;;\n        &quot;origin=Debian,codename=${distro_codename},label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-security,label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-updates,label=Debian&quot;;\n};\n\nUnattended-Upgrade::Package-Blacklist {\n};\n\nUnattended-Upgrade::AutoFixInterruptedDpkg &quot;true&quot;;\nUnattended-Upgrade::MinimalSteps &quot;true&quot;;\n\nUnattended-Upgrade::Mail &quot;&quot;;\nUnattended-Upgrade::MailReport &quot;only-on-error&quot;;\n\nUnattended-Upgrade::Remove-Unused-Kernel-Packages &quot;true&quot;;\nUnattended-Upgrade::Remove-New-Unused-Dependencies &quot;true&quot;;\nUnattended-Upgrade::Remove-Unused-Dependencies &quot;true&quot;;\n\nUnattended-Upgrade::Automatic-Reboot &quot;false&quot;;\nUnattended-Upgrade::Automatic-Reboot-WithUsers &quot;false&quot;;\n\nUnattended-Upgrade::SyslogEnable &quot;true&quot;;\nUnattended-Upgrade::SyslogFacility &quot;daemon&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Quelques remarques.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>#clear Unattended-Upgrade::Origins-Pattern;<\/code> vide la liste pr\u00e9c\u00e9dente avant de red\u00e9finir la v\u00f4tre. C\u2019est utile si vous utilisez un fichier local charg\u00e9 apr\u00e8s <code>50unattended-upgrades<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Automatic-Reboot \"false\"<\/code> est volontaire. Il vaut mieux commencer sans red\u00e9marrage automatique, observer pendant quelques jours, puis d\u00e9cider.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Mail \"\"<\/code> d\u00e9sactive l\u2019envoi mail. Si vous avez un vrai relais mail configur\u00e9, vous pouvez remplacer par votre adresse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nUnattended-Upgrade::Mail &quot;admin@example.com&quot;;\nUnattended-Upgrade::MailReport &quot;on-change&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Pour recevoir des mails, il faut que la machine sache envoyer du mail. Selon votre infrastructure, \u00e7a peut passer par <code>postfix<\/code>, <code>msmtp<\/code>, <code>nullmailer<\/code>, ou un relais SMTP interne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Adapter \u00e0 Proxmox : l\u00e0, on ralentit un peu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Proxmox, le pi\u00e8ge classique est simple : configurer <code>unattended-upgrades<\/code> comme sur Debian, et croire que Proxmox sera enti\u00e8rement maintenu automatiquement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n\u2019est pas forc\u00e9ment vrai.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous n\u2019autorisez que les d\u00e9p\u00f4ts Debian et Debian Security, les paquets Proxmox ne seront pas inclus. Or un correctif de s\u00e9curit\u00e9 ou de stabilit\u00e9 c\u00f4t\u00e9 PVE ne vient pas forc\u00e9ment de <code>Debian-Security<\/code>. Il peut venir du d\u00e9p\u00f4t Proxmox.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donc si vous voulez que les paquets Proxmox soient inclus, il faut ajouter explicitement les d\u00e9p\u00f4ts Proxmox dans <code>Origins-Pattern<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais avant \u00e7a, v\u00e9rifiez vos d\u00e9p\u00f4ts.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt update\napt-cache policy\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Et v\u00e9rifiez aussi la version :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npveversion\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Sur Proxmox VE 8, on est g\u00e9n\u00e9ralement sur Debian 12 <code>bookworm<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Proxmox VE 9, on est sur Debian 13 <code>trixie<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ne m\u00e9langez pas les deux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un m\u00e9lange <code>bookworm<\/code> et <code>trixie<\/code> dans les sources APT, c\u2019est le genre de d\u00e9tail qui transforme une maintenance tranquille en soir\u00e9e d\u00e9sagr\u00e9able.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple Proxmox avec d\u00e9p\u00f4t no-subscription<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voici un exemple pour un h\u00f4te Proxmox utilisant le d\u00e9p\u00f4t <code>pve-no-subscription<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le d\u00e9p\u00f4t <code>pve-no-subscription<\/code> est pratique en homelab ou en environnement de test. En production, il faut savoir qu\u2019il n\u2019offre pas le m\u00eame niveau de validation que le d\u00e9p\u00f4t Enterprise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fichier de base possible :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Fichier local conseill\u00e9 :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/52unattended-upgrades-local\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Contenu possible :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n#clear Unattended-Upgrade::Origins-Pattern;\nUnattended-Upgrade::Origins-Pattern {\n        &quot;origin=Debian,codename=${distro_codename},label=Debian&quot;;\n        &quot;origin=Debian,codename=${distro_codename},label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-security,label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-updates,label=Debian&quot;;\n\n        &quot;o=Proxmox,n=${distro_codename},l=Proxmox Debian Repository,c=pve-no-subscription&quot;;\n};\n\nUnattended-Upgrade::Package-Blacklist {\n};\n\nUnattended-Upgrade::AutoFixInterruptedDpkg &quot;true&quot;;\nUnattended-Upgrade::MinimalSteps &quot;true&quot;;\n\nUnattended-Upgrade::Mail &quot;admin@example.com&quot;;\nUnattended-Upgrade::MailReport &quot;on-change&quot;;\n\nUnattended-Upgrade::Remove-Unused-Kernel-Packages &quot;false&quot;;\nUnattended-Upgrade::Remove-New-Unused-Dependencies &quot;false&quot;;\nUnattended-Upgrade::Remove-Unused-Dependencies &quot;false&quot;;\n\nUnattended-Upgrade::Automatic-Reboot &quot;false&quot;;\nUnattended-Upgrade::Automatic-Reboot-WithUsers &quot;false&quot;;\n\nUnattended-Upgrade::SyslogEnable &quot;true&quot;;\nUnattended-Upgrade::SyslogFacility &quot;daemon&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La ligne importante pour Proxmox est :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&quot;o=Proxmox,n=${distro_codename},l=Proxmox Debian Repository,c=pve-no-subscription&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Mais elle doit \u00eatre v\u00e9rifi\u00e9e sur votre machine avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Selon la version de Proxmox, le d\u00e9p\u00f4t utilis\u00e9, le format des sources APT ou la configuration locale, les valeurs peuvent diff\u00e9rer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et si Proxmox utilise Ceph ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si Proxmox utilise Ceph, il peut aussi y avoir un d\u00e9p\u00f4t Proxmox d\u00e9di\u00e9 \u00e0 Ceph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple, pour Ceph Squid, on peut rencontrer une ligne du genre :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&quot;o=Proxmox,n=${distro_codename},l=Proxmox Ceph 19 Squid Debian Repository,c=no-subscription&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Mais il ne faut pas ajouter cette ligne juste \u201cau cas o\u00f9\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Elle doit correspondre \u00e0 un d\u00e9p\u00f4t r\u00e9ellement pr\u00e9sent sur la machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 v\u00e9rifier avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ou avec un paquet Ceph pr\u00e9cis :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy ceph\napt-cache policy ceph-common\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si vous n\u2019utilisez pas Ceph, ne mettez pas de r\u00e8gle Ceph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est plus propre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et \u00e7a \u00e9vite d\u2019autoriser des d\u00e9p\u00f4ts qui ne concernent pas le serveur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi d\u00e9sactiver l\u2019autoremove global sur Proxmox ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans une configuration Debian classique, on peut avoir :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nUnattended-Upgrade::Remove-Unused-Dependencies &quot;true&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Sur Proxmox, je pr\u00e9f\u00e8re commencer avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nUnattended-Upgrade::Remove-Unused-Dependencies &quot;false&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Pourquoi ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Parce qu\u2019un hyperviseur a souvent des d\u00e9pendances plus sensibles : m\u00e9tapaquets, paquets de stockage, kernel, composants PVE, Ceph, ZFS, outils r\u00e9seau.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un <code>autoremove<\/code> automatique n\u2019est pas forc\u00e9ment mauvais, mais je pr\u00e9f\u00e8re le faire manuellement sur un h\u00f4te Proxmox, apr\u00e8s v\u00e9rification.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par exemple :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt autoremove --dry-run\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puis seulement si la sortie est propre :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt autoremove\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Oui, c\u2019est un peu plus manuel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais sur l\u2019hyperviseur qui porte toutes les VM, ce n\u2019est pas forc\u00e9ment une mauvaise chose.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et les d\u00e9p\u00f4ts tiers comme Netdata, Webmin, Docker ou autres ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur un serveur r\u00e9el, il est assez courant de ne pas avoir uniquement les d\u00e9p\u00f4ts Debian ou Proxmox.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut avoir un agent de supervision, une interface d\u2019administration, un d\u00e9p\u00f4t applicatif, un outil de sauvegarde, un d\u00e9p\u00f4t Docker, Netdata, Webmin, ou d\u2019autres solutions install\u00e9es au fil du temps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et c\u2019est justement l\u00e0 qu\u2019il faut faire attention.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>unattended-upgrades<\/code> ne met pas automatiquement tout \u00e0 jour sans distinction. Il applique les r\u00e8gles d\u00e9finies dans <code>Origins-Pattern<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si un d\u00e9p\u00f4t tiers n\u2019est pas autoris\u00e9 dans cette section, ses paquets ne seront normalement pas install\u00e9s automatiquement par <code>unattended-upgrades<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut ajouter un d\u00e9p\u00f4t tiers, mais il faut le faire volontairement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La bonne m\u00e9thode consiste d\u2019abord \u00e0 regarder comment APT identifie ce d\u00e9p\u00f4t :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ou, pour un paquet pr\u00e9cis :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy netdata\napt-cache policy webmin\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La sortie permet de rep\u00e9rer les champs utiles comme :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\no=Netdata\nl=Netdata\nsite=repository.netdata.cloud\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">ou encore :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\no=Jamie Cameron\nl=Webmin\na=stable\nc=contrib\nsite=download.webmin.com\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u00c0 partir de l\u00e0, on peut \u00e9crire une r\u00e8gle adapt\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n#clear Unattended-Upgrade::Origins-Pattern;\nUnattended-Upgrade::Origins-Pattern {\n        &quot;origin=Debian,codename=${distro_codename},label=Debian&quot;;\n        &quot;origin=Debian,codename=${distro_codename},label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-security,label=Debian-Security&quot;;\n        &quot;origin=Debian,codename=${distro_codename}-updates,label=Debian&quot;;\n\n        &quot;o=Netdata,l=Netdata,site=repository.netdata.cloud&quot;;\n        &quot;o=Jamie Cameron,l=Webmin,a=stable,c=contrib,site=download.webmin.com&quot;;\n};\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Mais ce n\u2019est pas parce que c\u2019est possible qu\u2019il faut tout autoriser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un d\u00e9p\u00f4t tiers peut mettre \u00e0 jour un service important, changer un comportement, red\u00e9marrer un daemon, ou introduire une d\u00e9pendance qu\u2019on n\u2019avait pas pr\u00e9vue. Pour un agent de monitoring, c\u2019est souvent acceptable. Pour une interface d\u2019administration ou un composant sensible, il vaut mieux r\u00e9fl\u00e9chir un peu plus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le plus raisonnable est d\u2019ajouter les d\u00e9p\u00f4ts progressivement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On commence avec Debian et Debian Security.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puis on teste :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nunattended-upgrade --dry-run --debug\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">On lit les logs :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntail -n 200 \/var\/log\/unattended-upgrades\/unattended-upgrades.log\ntail -n 200 \/var\/log\/unattended-upgrades\/unattended-upgrades-dpkg.log\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Et seulement ensuite, on d\u00e9cide si certains d\u00e9p\u00f4ts tiers doivent aussi \u00eatre inclus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019id\u00e9e n\u2019est pas de bloquer toutes les mises \u00e0 jour externes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019id\u00e9e est de ne pas donner les cl\u00e9s de la maintenance automatique \u00e0 n\u2019importe quel d\u00e9p\u00f4t sans l\u2019avoir v\u00e9rifi\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tester avant de laisser tourner tranquillement<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le test le plus important :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nunattended-upgrade --dry-run --debug\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Cette commande simule l\u2019ex\u00e9cution sans appliquer les mises \u00e0 jour.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Elle permet de voir quels paquets seraient pris en compte, quels d\u00e9p\u00f4ts correspondent, et quels paquets seraient ignor\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, v\u00e9rifiez les logs :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntail -n 200 \/var\/log\/unattended-upgrades\/unattended-upgrades.log\ntail -n 200 \/var\/log\/unattended-upgrades\/unattended-upgrades-dpkg.log\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">On peut aussi regarder l\u2019historique APT :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ngrep -R &quot;Start-Date&quot; \/var\/log\/apt\/history.log*\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Et les timers systemd :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsystemctl status apt-daily.timer apt-daily-upgrade.timer\nsystemctl list-timers &#039;apt-daily*&#039;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si rien ne se lance jamais, commencez par v\u00e9rifier :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncat \/etc\/apt\/apt.conf.d\/20auto-upgrades\nsystemctl is-enabled apt-daily.timer\nsystemctl is-enabled apt-daily-upgrade.timer\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Pour v\u00e9rifier la configuration fusionn\u00e9e par APT :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-config dump | grep -i unattended\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">C\u2019est particuli\u00e8rement utile si vous avez \u00e0 la fois <code>50unattended-upgrades<\/code> et <code>52unattended-upgrades-local<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Changer l\u2019heure d\u2019ex\u00e9cution<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les mises \u00e0 jour automatiques sont d\u00e9clench\u00e9es par des timers systemd.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur un serveur, on peut vouloir \u00e9viter les heures de production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il ne faut pas modifier directement :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/usr\/lib\/systemd\/system\/apt-daily.timer\n\/usr\/lib\/systemd\/system\/apt-daily-upgrade.timer\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ces fichiers appartiennent aux paquets du syst\u00e8me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour modifier proprement l\u2019horaire du timer d\u2019installation :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsystemctl edit apt-daily-upgrade.timer\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Mettre :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;Timer]\nOnCalendar=\nOnCalendar=*-*-* 03:30\nRandomizedDelaySec=30m\nPersistent=true\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puis recharger systemd :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsystemctl daemon-reload\nsystemctl restart apt-daily-upgrade.timer\nsystemctl list-timers &#039;apt-daily*&#039;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Le <code>OnCalendar=<\/code> vide l\u2019ancienne valeur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, <code>OnCalendar=*-*-* 03:30<\/code> d\u00e9finit la nouvelle heure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>RandomizedDelaySec=30m<\/code> ajoute une petite marge al\u00e9atoire. C\u2019est utile si vous avez beaucoup de serveurs, pour \u00e9viter qu\u2019ils tapent tous les d\u00e9p\u00f4ts exactement \u00e0 la m\u00eame minute.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Faut-il activer le reboot automatique ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur une VM Debian simple, \u00e7a peut se d\u00e9fendre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur un h\u00f4te Proxmox, je d\u00e9conseille au d\u00e9but.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un red\u00e9marrage automatique peut \u00eatre pratique, mais il faut une fen\u00eatre de maintenance, une supervision, et surtout savoir ce qui tourne sur la machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour activer le reboot automatique \u00e0 4h du matin :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nUnattended-Upgrade::Automatic-Reboot &quot;true&quot;;\nUnattended-Upgrade::Automatic-Reboot-WithUsers &quot;false&quot;;\nUnattended-Upgrade::Automatic-Reboot-Time &quot;04:00&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Sur Proxmox, je pr\u00e9f\u00e8re cette approche :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nUnattended-Upgrade::Automatic-Reboot &quot;false&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puis surveiller la pr\u00e9sence de ce fichier :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntest -f \/var\/run\/reboot-required &amp;&amp; cat \/var\/run\/reboot-required\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Et \u00e9ventuellement :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncat \/var\/run\/reboot-required.pkgs\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Comme \u00e7a, on sait qu\u2019un red\u00e9marrage est n\u00e9cessaire, mais on garde la main sur le moment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est moins automatique, oui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais c\u2019est aussi moins brutal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cas particulier des conteneurs LXC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans un conteneur LXC Debian, <code>unattended-upgrades<\/code> peut fonctionner si le conteneur utilise systemd et APT normalement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u2019ailleurs, sur certains templates Debian LXC, le paquet et les fichiers suivants peuvent d\u00e9j\u00e0 \u00eatre pr\u00e9sents :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/20auto-upgrades\n\/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">C\u2019est donc \u00e0 v\u00e9rifier avant d\u2019installer ou de reconfigurer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais il faut garder en t\u00eate une chose : un conteneur ne g\u00e8re pas son propre kernel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le kernel appartient \u00e0 l\u2019h\u00f4te Proxmox.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donc mettre \u00e0 jour un LXC Debian mettra \u00e0 jour ses paquets internes, ses biblioth\u00e8ques, ses services, son nginx, son openssh-server, son PHP, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais \u00e7a ne mettra pas \u00e0 jour le kernel r\u00e9ellement ex\u00e9cut\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour \u00e7a, il faut mettre \u00e0 jour l\u2019h\u00f4te Proxmox.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans un LXC, je conseille :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nUnattended-Upgrade::Automatic-Reboot &quot;false&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puis, si certains services doivent \u00eatre red\u00e9marr\u00e9s apr\u00e8s mise \u00e0 jour, les g\u00e9rer proprement avec supervision ou maintenance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un conteneur qui red\u00e9marre tout seul \u00e0 3h du matin, ce n\u2019est pas dramatique dans tous les cas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais quand c\u2019est le conteneur DNS, reverse proxy ou base de donn\u00e9es, on pr\u00e9f\u00e8re le savoir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cas particulier des VM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Une VM, c\u2019est plus simple.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Elle se comporte comme une machine classique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si elle a son propre kernel, ses propres services et son propre init system, <code>unattended-upgrades<\/code> peut \u00eatre utilis\u00e9 normalement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La vraie question devient alors :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>est-ce que la VM peut red\u00e9marrer automatiquement ?<\/li>\n\n\n\n<li>est-ce qu\u2019elle h\u00e9berge un service critique ?<\/li>\n\n\n\n<li>est-ce qu\u2019elle est sauvegard\u00e9e ?<\/li>\n\n\n\n<li>est-ce qu\u2019on re\u00e7oit une alerte si quelque chose \u00e9choue ?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une petite VM applicative, j\u2019activerais facilement les mises \u00e0 jour automatiques avec notification.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une VM base de donn\u00e9es, je serais plus prudent sur le red\u00e9marrage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et sur les autres syst\u00e8mes ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Ubuntu, le principe est tr\u00e8s proche de Debian. On retrouve aussi <code>unattended-upgrades<\/code>, les fichiers dans <code>\/etc\/apt\/apt.conf.d\/<\/code>, les logs dans <code>\/var\/log\/unattended-upgrades\/<\/code>, et les timers systemd.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur les distributions de la famille Red Hat, Fedora, Rocky Linux, AlmaLinux ou RHEL, l\u2019\u00e9quivalent courant est plut\u00f4t <code>dnf-automatic<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple rapide :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndnf install dnf-automatic\nsystemctl enable --now dnf-automatic.timer\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La configuration se fait g\u00e9n\u00e9ralement ici :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/dnf\/automatic.conf\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Sur openSUSE et SUSE, on trouve plut\u00f4t des m\u00e9canismes autour de <code>zypper<\/code>, et sur certains syst\u00e8mes, <code>transactional-update<\/code>, notamment quand les mises \u00e0 jour sont appliqu\u00e9es via snapshots et activ\u00e9es apr\u00e8s reboot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le concept reste le m\u00eame.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Automatiser, oui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais avec des r\u00e8gles, des logs, des notifications et une strat\u00e9gie de retour arri\u00e8re.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Questions fr\u00e9quentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Est-ce que unattended-upgrades s\u2019active automatiquement apr\u00e8s installation ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c7a d\u00e9pend de l\u2019image syst\u00e8me et de la configuration APT d\u00e9j\u00e0 pr\u00e9sente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur certaines Debian, VM ou templates LXC, <code>unattended-upgrades<\/code> est d\u00e9j\u00e0 install\u00e9 ou d\u00e9j\u00e0 activ\u00e9. On peut alors trouver directement :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/20auto-upgrades\n\/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si <code>20auto-upgrades<\/code> contient :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nAPT::Periodic::Update-Package-Lists &quot;1&quot;;\nAPT::Periodic::Unattended-Upgrade &quot;1&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">alors les mises \u00e0 jour automatiques sont activ\u00e9es c\u00f4t\u00e9 APT.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si ce fichier n\u2019existe pas, ou si la valeur est <code>\"0\"<\/code>, il faut l\u2019activer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Est-ce que 50unattended-upgrades est d\u00e9j\u00e0 configur\u00e9 par d\u00e9faut ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Oui, le fichier <code>50unattended-upgrades<\/code> est g\u00e9n\u00e9ralement install\u00e9 avec une configuration par d\u00e9faut.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Debian, il autorise souvent les d\u00e9p\u00f4ts Debian et Debian Security, avec beaucoup d\u2019options suppl\u00e9mentaires comment\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais attention : ce fichier d\u00e9finit ce qui peut \u00eatre mis \u00e0 jour automatiquement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>20auto-upgrades<\/code>, lui, d\u00e9finit si APT lance vraiment cette automatisation p\u00e9riodiquement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les deux sont donc compl\u00e9mentaires.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Est-ce que unattended-upgrades remplace apt dist-upgrade sur Proxmox ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Non, je ne le pr\u00e9senterais pas comme \u00e7a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Proxmox, la m\u00e9thode habituelle en CLI reste de passer par une mise \u00e0 jour compl\u00e8te avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-get update\napt-get dist-upgrade\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">ou via l\u2019interface web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>unattended-upgrades<\/code> peut automatiser une partie des mises \u00e0 jour, y compris Proxmox si les d\u00e9p\u00f4ts sont bien autoris\u00e9s, mais il ne remplace pas une vraie maintenance planifi\u00e9e, surtout pour les changements importants.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Est-ce que \u00e7a met \u00e0 jour Debian 12 vers Debian 13 automatiquement ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Non, pas tout seul.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vos d\u00e9p\u00f4ts restent en <code>bookworm<\/code>, vous restez sur <code>bookworm<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous changez manuellement vos d\u00e9p\u00f4ts vers <code>trixie<\/code>, l\u00e0 c\u2019est une autre histoire. Mais une mont\u00e9e majeure Debian ou Proxmox doit \u00eatre faite volontairement, en suivant une proc\u00e9dure d\u00e9di\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n\u2019est pas le r\u00f4le d\u2019unattended-upgrades de d\u00e9cider \u00e7a pour vous.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et heureusement.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Puis-je mettre origin=* pour tout mettre \u00e0 jour ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Techniquement, oui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pratiquement, je ne le conseille pas sur un serveur s\u00e9rieux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une r\u00e8gle comme celle-ci :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n#clear Unattended-Upgrade::Origins-Pattern;\nUnattended-Upgrade::Origins-Pattern {\n        &quot;origin=*&quot;;\n};\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">autorise beaucoup trop largement les d\u00e9p\u00f4ts configur\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous avez uniquement des d\u00e9p\u00f4ts officiels, bien ma\u00eetris\u00e9s, avec du pinning APT propre, \u00e7a peut se d\u00e9fendre dans certains environnements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais sur une machine avec Proxmox, Netdata, Webmin, Docker, un d\u00e9p\u00f4t applicatif ou autre, c\u2019est risqu\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mieux vaut d\u00e9clarer pr\u00e9cis\u00e9ment les sources accept\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pourquoi mes paquets Proxmox ne se mettent pas \u00e0 jour ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Probablement parce que vous n\u2019avez autoris\u00e9 que Debian dans <code>Origins-Pattern<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il faut v\u00e9rifier avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-cache policy\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puis ajouter une ligne correspondant au d\u00e9p\u00f4t Proxmox.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple pour <code>pve-no-subscription<\/code> :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&quot;o=Proxmox,n=${distro_codename},l=Proxmox Debian Repository,c=pve-no-subscription&quot;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u00c0 adapter selon votre d\u00e9p\u00f4t r\u00e9el.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comment savoir si un red\u00e9marrage est n\u00e9cessaire ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sur Debian et syst\u00e8mes proches :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntest -f \/var\/run\/reboot-required &amp;&amp; echo &quot;Red\u00e9marrage n\u00e9cessaire&quot;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Pour voir quels paquets le demandent :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncat \/var\/run\/reboot-required.pkgs\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Sur Proxmox, apr\u00e8s mise \u00e0 jour du kernel ou de composants importants, un red\u00e9marrage est souvent n\u00e9cessaire pour r\u00e9ellement utiliser la nouvelle version.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comment savoir si mon fichier 52 est bien pris en compte ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">APT lit automatiquement les fichiers pr\u00e9sents dans :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Donc si votre fichier s\u2019appelle :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/52unattended-upgrades-local\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">il sera lu apr\u00e8s :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/etc\/apt\/apt.conf.d\/50unattended-upgrades\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Pour v\u00e9rifier ce que la configuration donne r\u00e9ellement :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napt-config dump | grep -i unattended\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Puis testez avec :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nunattended-upgrade --dry-run --debug\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">C\u2019est ce test qui fait foi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Est-ce obligatoire de copier 50 vers 52 ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Non.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n\u2019est pas obligatoire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Modifier directement <code>50unattended-upgrades<\/code> fonctionne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La copie vers <code>52unattended-upgrades-local<\/code> est surtout une m\u00e9thode plus propre pour s\u00e9parer le fichier fourni par le paquet et votre configuration locale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En pratique :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pour comprendre rapidement : modifier <code>50<\/code> ;<\/li>\n\n\n\n<li>pour une configuration durable : utiliser <code>52<\/code> ;<\/li>\n\n\n\n<li>pour un serveur critique : tester avec <code>--dry-run --debug<\/code> et surveiller les logs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Est-ce que je dois modifier les timers dans \/usr\/lib\/systemd\/system ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Non.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut les lire pour comprendre le comportement par d\u00e9faut, mais il ne faut pas les modifier directement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour changer l\u2019horaire, il faut utiliser :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsystemctl edit apt-daily-upgrade.timer\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">puis recharger systemd :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsystemctl daemon-reload\nsystemctl restart apt-daily-upgrade.timer\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Ma recommandation finale<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une Debian classique, j\u2019activerais <code>unattended-upgrades<\/code> assez volontiers, au moins pour les d\u00e9p\u00f4ts Debian et Debian Security.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une VM, pareil, avec une r\u00e9flexion sur le reboot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un LXC, oui, mais sans oublier que le kernel d\u00e9pend de l\u2019h\u00f4te.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour Proxmox, je ferais plus progressif :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>v\u00e9rifier si <code>20auto-upgrades<\/code> et <code>50unattended-upgrades<\/code> sont d\u00e9j\u00e0 pr\u00e9sents ;<\/li>\n\n\n\n<li>v\u00e9rifier que les mises \u00e0 jour automatiques sont bien activ\u00e9es dans <code>20auto-upgrades<\/code> ;<\/li>\n\n\n\n<li>garder la base Debian et Debian Security ;<\/li>\n\n\n\n<li>tester les lignes Proxmox avec <code>unattended-upgrade --dry-run --debug<\/code> ;<\/li>\n\n\n\n<li>activer les notifications mail ou syslog ;<\/li>\n\n\n\n<li>ne pas activer le reboot automatique au d\u00e9part ;<\/li>\n\n\n\n<li>faire les mises \u00e0 jour lourdes et les red\u00e9marrages pendant une fen\u00eatre pr\u00e9vue ;<\/li>\n\n\n\n<li>garder les mont\u00e9es majeures Proxmox enti\u00e8rement manuelles.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Pour le fichier de configuration, je vois les choses comme \u00e7a :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>50unattended-upgrades<\/code> pour la m\u00e9thode simple et directe ;<\/li>\n\n\n\n<li><code>52unattended-upgrades-local<\/code> pour une configuration plus propre et maintenable.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Automatiser les mises \u00e0 jour, c\u2019est tr\u00e8s bien.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais sur une infrastructure, surtout quand elle porte d\u2019autres machines, il faut automatiser avec une laisse courte au d\u00e9but.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On observe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On ajuste.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puis seulement apr\u00e8s, on donne un peu plus d\u2019autonomie au syst\u00e8me.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00e9ta-description SEO naturelle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Guide pratique pour configurer unattended-upgrades sur Debian, Ubuntu, Proxmox, VM et conteneurs LXC, avec exemples de fichiers, d\u00e9p\u00f4ts APT, timers systemd, tests, logs et pr\u00e9cautions avant automatisation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n","protected":false},"excerpt":{"rendered":"<p>Il y a deux types d\u2019administrateurs syst\u00e8me. Ceux qui lancent leurs mises \u00e0 jour \u00e0 la main, quand ils y pensent. Et ceux qui savent tr\u00e8s bien qu\u2019ils ne vont pas toujours y penser. Sur une machine Debian, une VM de service, un petit serveur web, un conteneur LXC ou m\u00eame un h\u00f4te Proxmox de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":211,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[87,48,88],"tags":[],"class_list":["post-208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides-et-tutoriels","category-linux-ubuntu-debian-centos-arch-etc","category-pas-a-pas-pour-les-debutants"],"_links":{"self":[{"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/comments?post=208"}],"version-history":[{"count":5,"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":215,"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/posts\/208\/revisions\/215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/media\/211"}],"wp:attachment":[{"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jbsan.fr\/blog\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}