common_packages : apt-get attend le verrou dpkg lui aussi

lock_timeout ne protege que la verification du module ; apt-get n'attend
pas (APT 3.0 ne l'accorde qu'a la commande apt). Verrou repris par
unattended-upgrades sur mon-01 de Technolibre, ne une minute plus tot.
DPkg::Lock::Timeout pour tout appel d'APT, en premiere tache.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-09-30 18:18:13 -04:00
parent 2bf94acb96
commit b5fa0e8d23
2 changed files with 40 additions and 0 deletions

View file

@ -1,5 +1,22 @@
# CHANGELOG — Set-OPS
## 2026-09-30 (54) — Chezlepro au bout ; Technolibre arrêtée par un verrou dpkg
**Chezlepro** (lancée par l'exploitant, reprise `DEPUIS=parefeu` après (53)) : pare-feu 13/13
sans flux perdu, les 7 jeux d'état **restaurés** depuis les instantanés de 15:59. Silence de
douze minutes pendant `parefeu` : la sortie du Python enfant restait dans son tampon (tuyau) —
les sous-commandes écrivent désormais sans tampon.
**Technolibre** (lancée par l'exploitant) : arrêt à `monter`, `mon-01` en échec dans
`common_packages` — `apt-get dist-upgrade` refusé, verrou dpkg tenu par
`unattended-upgrades`, né avec la VM. La tâche portait pourtant `lock_timeout: 300` : il ne
protège que la vérification du MODULE ; `apt-get`, appelé ensuite, n'attend pas — APT 3.0
ne donne d'attente qu'à la commande `apt` (`Binary::apt::DPkg::Lock::Timeout "120"`). Le
verrou a été repris entre les deux. **Correction** : `DPkg::Lock::Timeout` posé pour tout
appel d'APT (`/etc/apt/apt.conf.d/10setops-verrou`), en toute première tâche du rôle.
Rien à voir avec la restauration : un tirage au sort du premier démarrage, que la troisième
reconstruction de Chezlepro n'avait pas tiré.
## 2026-09-30 (53) — Troisième reconstruction (Chezlepro, lancée par l'exploitant) : arrêtée au pare-feu
L'exploitant a lancé lui-même `make reconstruire-locataire TENANT=OPS-Chezlepro

View file

@ -6,6 +6,29 @@
#
# Attendre ici plutot que seulement avant le playbook : le verrou peut etre repris
# ENTRE deux taches, ce qu'une verification ponctuelle en amont ne peut pas empecher.
# APT-GET ATTEND LE VERROU, LUI AUSSI (2026-09-30).
#
# `lock_timeout` ne protege que la verification faite par le MODULE apt. Pour une mise a
# niveau, le module lance ensuite `apt-get dist-upgrade` — qui, lui, n'attend pas : APT 3.0
# ne donne d'attente (120 s) qu'a la commande `apt` (`Binary::apt::DPkg::Lock::Timeout`),
# pas a `apt-get`. Entre la verification et l'appel, `unattended-upgrades` a repris le
# verrou sur `mon-01`, ne une minute plus tot, et la reconstruction de Technolibre s'est
# arretee :
#
# E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1198 (unattended-upgr)
#
# On le dit donc a APT LUI-MEME, pour tout appel : c'est un fichier, pas une operation apt,
# il peut passer en tout premier.
- name: Faire attendre le verrou dpkg a tout appel d'APT (apt-get compris)
ansible.builtin.copy:
dest: /etc/apt/apt.conf.d/10setops-verrou
content: |
// Gere par Set-OPS (role common_packages). Voir tasks/main.yml.
DPkg::Lock::Timeout "{{ common_packages_lock_timeout }}";
owner: root
group: root
mode: "0644"
# DÉSARMER AVANT TOUTE OPÉRATION APT, ET NON APRÈS.
#
# Une tâche apt placée avant celle-ci attendrait le verrou que celle-ci doit justement