[gull] Mise à jour Debian par étapes
Marc SCHAEFER
schaefer at alphanet.ch
Mon Dec 22 20:21:53 CET 2025
Bonsoir,
J'ajoute mon petit (?) grain de sel sur un seul point:
On Mon, Dec 22, 2025 at 05:07:28PM +0100, Claude Paroz via gull wrote:
> Pour le cas de figure que j'ai présenté, l'objectif est toujours de finir
> sur une LTS complète, c'est juste une manière plus progressive d'y arriver.
> Et pour le cas plus général du testing dans une stable, il peut arriver des
> situations où on n'a pas le choix. Mais on est d'accord, ça doit rester
> exceptionnel.
Je dirais que pour des services "complexes", j'ai tendance aujourd'hui
(depuis environ 4-5 ans systématiquement, depuis une vingtaine d'années
dans certains cas) à mettre chaque service complexe dans sa propre
machine virtuelle (plutôt du lxc à l'origine, aujourd'hui aussi
du Docker).
Je sais que tu as explicitement exclu ces solutions: toutefois, je
trouve que lxc est super-simple à mettre en place et ne crée pas
énormément de dépendances à des façons de faire trop complexes. Docker
également, on peut en faire quelque chose d'assez simple aussi.
En résumé, pour certains services complexes, j'ai tendance à les isoler,
et à les mettre à jour de manière étalée. Evidemment cela signifie
maintenant que tu as plusieurs "systèmes Debian" à gérer, mais
cela contrebalance la complexité d'une mise à jour de tout. Ca prend
toutefois du temps d'isoler (mais la plupart du temps j'y ai pensé
au début: et quand ce n'est pas le cas, je profite du prochain
cycle LTS Debian de 5 ans pour le faire en planifiant).
Exemples tirés de mon expérience:
- en général les hosts sont super-simplifiés ce qui veut dire
que leur mise à jour est sans problèmes particuliers
et très rapide, ils ne sont pas directement accessibles
d'Internet (uniquement via un jump host), de même d'ailleurs
pour la plupart des services SSH des conteneurs
- j'ai un serveur web centralisé en conteneur qui termine le HTTPS
et gère des certificats usuels et du Let's Encrypt,
mais après il proxifie à certains services
le réseau interne inter-conteneurs et inter-hosts est
firewallé de manière adéquate, limitant l'impact
du piratage d'un seul conteneur, mais évidemment pas
celui d'un host: tout mettre en HTTPS serait possible
mais jusqu'ici j'ai considéré que cela ne valait pas
la peine
- les services complexes chez moi sont, chacun dans leur
conteneur (lxc ou Docker, c'est égal, je gère cela assez
similairement sans dépendances trop fortes à Docker),
notamment:
- serveur mail, anti-spam
- serveur de mailing-list Mailman
- serveur de base de données PostgreSQL
- serveur de téléphonie Asterisk
- serveur d'applications Mojolicious
- serveur de ticket RT
- serveur de statistiques (munin principalement)
- serveur Home Assistant
- serveur Foswiki
- SSH jump host
- serveur fail2ban
- serveur IDS
(et 2-3 autres trucs)
- tous ces conteneurs écrivent leur logs dans un endroit
centralisé (voir fichiers à partager ci-après), donc un seul
fail2ban, une seule communication à abuseipdb.com, etc
- la localisation exacte des conteneurs (sur quel host)
est arbitraire (utilisation d'un DNS interne pour
remapper)
- les fichiers à partager sont partagés en quelque chose
qui ressemble à NFS (glusterfs pour les intimes), et
donc chaque serveur peut être sur une machine matérielle
différente (et peut être migré)
- il y a deux firewalls: un extérieur, et un pour mon mini-cloud,
qui sont gérés au sein d'un outil centralisé avec le reste
du firewalling inter-host et inter-conteneur, y compris un
système de détection d'intrusion centralisé
Typiquement il y a 2 ans j'ai profité d'une mise à jour de bullseye à
bookworm pour sortir RT, PostgreSQL, Asterisk et fail2ban d'un gros
conteneur fourre-tout LTS datant d'environ *20 ans*!!!: désormais j'ai
des scripts d'auto-déploiement et je peux les mettre à jour
individuellement. Ce boulot relativement important me permet
d'envisager, d'ici 2028, un passage à trixie progressif sans souci, même
s'il y a quand même pas mal de choses qui changent. Les scripts de
déploiement sont complètement agnostiques de lxc/Docker/whatever et
pourraient même marcher en machine réelle à quelques détails près
(environnement spécifique).
Il y a d'ailleurs un cas particulier: Asterisk n'étant plus vraiment
dans Debian récente, j'ai un script de déploiement automatique de la
dernière version stable que je tourne de temps en temps (*). De même
pour Home Assistant. Il faut accepter que certains logiciels très
spécifiques ne puissent pas raisonnablement être packagés par Debian.
J'ai hésité pour Mailman par exemple, mais finalement la version de
Debian me suffit (après 2 ans de recul).
Pour le reste, l'ensemble des conteneurs sont surveillés automatiquement
en sécurité et je peux choisir quelles mises à jour de packages Debian
appliquer en tout temps.
D'un autre côté, il me reste des machines Debian complexes (p.ex.
mon laptop personnel et quelques systèmes pas encore migrés), et
j'apprécie effectivement la qualité de la gestion de packages Debian,
ainsi que la possibilité de garder "un certain temps" des packages
de compatibilité avec certaines versions (en particulier pour
PostgreSQL ça marche dans mon expérience très facilement, en plus
de la possibilité d'installer avec support officiel souvent au
moins deux versions majeures).
En ce qui concerne la prochaine échéance LTS (été 2026, fin de
bullseye), il me reste actuellement 4 conteneurs à migrer, dont un que
je souhaite "découper", et un qui va mourir lorsque toutes ses
applications Mojolicious seront migrées au conteneur applicatif dédié.
Sinon, je prévoir de faire la migration à trixie ou son successeur,
d'une partie des conteneurs dès 2026 ou 2027, et finir en 2028.
Tout ce travail depuis 2020 m'a aussi permis de passer d'environ 300 W
de consommation électrique à moins de 120W, à la fois en utilisant des
systèmes embarqués recyclés (apu2) et des ordinateurs recyclés à basse
consommation, tout cela y compris deux routeurs pour deux liaisons
Internet, 3 switches, et 4 hosts. Normalement d'ici cet été, je devrais
pouvoir passer à 2 hosts et 2 switches, et donc probablement autour de
60-80W (le routeur UPC consomme 14 W, il va devenir un élément
significatif de la consommation).
PS: ce qui est aussi chouette c'est la possibilité de mettre à jour
un host en ayant migré tous ses conteneurs ailleurs avant,
puis remigrer ensuite, ou de tester rapidement des mises à jour
sur un conteneur construit à partir d'un snapshot LVM ou
Docker d'un autre! Ou d'activer la nouvelle version déployée
d'une application en 1 seconde en changeant les règles de
firewall et/ou le DNS.
(*) non, je ne ferai pas confiance aux images Docker, et j'ai des
patches source locaux qui ne me permettent de toute façon
pas de les utiliser, et je ne souhaite pas injecter de
dépendances à Docker de toute façon! je génére sur la même
base des images de base Debian pour lxc ou Docker.
More information about the gull
mailing list