Aller au contenu

Monter Debian de version

Méthode utilisée pour passer toutes les CT de Debian 11 à Debian 13 (en passant par 12). Une version à la fois : bullseye (11) → bookworm (12) → trixie (13).

Avant de commencer

1. Prévoir un retour arrière

pct snapshot <CTID> avant_<version>      # depuis l'hôte

Une CT avec un point de montage de type bind mount (dossier de l'hôte monté dans la CT) ne peut pas être snapshotée : faire une sauvegarde complète à la place (vzdump <CTID> --storage <stockage> --mode stop).

2. Protéger les paquets serveur

Le piège qui supprime une base de données

Un paquet serveur installé comme dépendance (par exemple postgresql-15 tiré par postgresql, ou docker.io tiré par docker-compose) peut être considéré comme inutile après la montée de version. apt autoremove --purge le supprime alors avec ses données. C'est arrivé à Docker sur une de nos CT (restauré depuis le snapshot).

apt-mark manual postgresql-<NN> docker.io   # adapter aux paquets présents
apt-mark showauto | grep -E 'postgres|docker|mariadb|mysql|redis'

3. Sauvegarder les bases à part (en plus du snapshot) :

su - postgres -c 'pg_dumpall' > /root/pg-dumpall-avant.sql

4. Lancer les commandes longues avec nohup

Si la connexion SSH coupe en plein apt, la mise à jour s'arrête au milieu. Écrire les étapes dans un script et le lancer avec nohup ./script.sh > maj.log 2>&1 &, puis suivre tail -f maj.log.

La montée de version

apt update && apt -y full-upgrade                 # être à jour dans la version actuelle
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list /etc/apt/sources.list.d/*   # adapter les noms
apt update
apt -y upgrade --without-new-pkgs
apt -y full-upgrade
apt -y autoremove --purge                          # seulement après l'étape « protéger les paquets »

Vérifier aussi les dépôts tiers dans /etc/apt/sources.list.d/ (Node, Adoptium, Docker…) : ils ont souvent une ligne par version de Debian.

PostgreSQL

La nouvelle version de Debian installe une nouvelle version de PostgreSQL, mais l'ancien « cluster » reste sur l'ancienne. Pour migrer les données :

pg_lsclusters                                  # ancien et nouveau cluster
pg_dropcluster <nouvelle_version> main --stop  # le cluster vide créé à l'installation
pg_upgradecluster <ancienne_version> main
# vérifier les données, puis :
pg_dropcluster <ancienne_version> main

Après

pct reboot <CTID>
systemctl is-system-running     # doit répondre « running »
systemctl --failed
dpkg --audit                    # ne doit rien afficher
getent hosts deb.debian.org     # réseau et DNS

Puis tester l'appli elle-même (page web, API, connexion à la base, serveur de jeu…).

Particularités de Debian 13 en CT :

  • systemd-networkd-wait-online.service échoue (le réseau est géré par ifupdown) et retarde de 2 minutes les services qui attendent le réseau : systemctl mask systemd-networkd-wait-online.service.
  • sys-kernel-config.mount échoue toujours en CT : systemctl mask sys-kernel-config.mount.
  • Proxmox avertit si une CT privilégiée n'a pas nesting=1 : l'activer.

Une fois validé

Supprimer le snapshot : sur le stockage des CT, il grossit au fil des écritures et occupe de la place pour rien.

pct delsnapshot <CTID> avant_<version>

En cas de problème : pct rollback <CTID> avant_<version>.