`make prouver` disait 15/15 a failed=0. Les machines, elles, portaient chacune trois
unites systemd en echec. Le rapport d Ansible n est pas l etat d une machine.
AUDITD : ONZE REGLES ARMEES, PERSONNE POUR COLLECTER.
Deux fichiers de regles identiques cohabitaient — 99-chezlepro.rules et
99-setops.rules, vestige du renommage du role. augenrules CONCATENE rules.d/ :
Error sending add rule data request (Rule exists)
There was an error in line 16 of /etc/audit/audit.rules
audit-rules echoue, et auditd ne demarre pas — c est sa dependance. Resultat :
auditctl -l affiche onze regles, ce qui donne toutes les apparences d un audit qui
fonctionne, et rien ne les enregistre.
Meme mue que ssh_baseline, meme registre : auditd_fichiers_perimes. On n y ajoute
que des noms qu on a REELLEMENT deposes un jour.
Et `failed_when: false` cachait la panne : quinze machines a failed=0 avec auditd
mort sur les quinze. Un service de securite qui ne demarre pas doit se VOIR.
TIMERS APT-DAILY : UN ETAT D ECHEC RESIDUEL.
Masquer le service pendant que son timer tourne lui fait perdre sa cible ; systemd
le note et le GARDE (Unit to trigger vanished). `state: stopped` n efface pas un
etat failed — seul reset-failed le fait.
Ce n est pas cosmetique : une supervision qui compte les unites en echec compte ces
deux-la pour toujours, et la vraie panne s y noiera. Meme defaut que le journal de
la frontiere noye sous 982 000 entrees.
DIAGNOSTIC FAUX, CORRIGE : j avais lu « masked enabled » dans list-unit-files comme
un etat contradictoire, et construit une reparation pour le defaire. Ces colonnes
sont ETAT puis PRESET — masque avec un prereglage constructeur active est normal.
La reparation a ete annulee avant d etre livree.
make verifier : vert. make prouver : CONFORME, 55 OK, 0 echec, 0 saute.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
70 lines
3 KiB
YAML
70 lines
3 KiB
YAML
---
|
|
# `lock_timeout` sur CHAQUE tache apt : au premier demarrage, l'image Debian lance ses
|
|
# propres mises a jour (apt-daily, unattended-upgrades) et tient le verrou dpkg par
|
|
# vagues. Sans attente, la premiere tache echoue sur un verrou — pas sur une vraie
|
|
# erreur — et le deploiement d'une VM neuve devient un tirage au sort.
|
|
#
|
|
# 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.
|
|
# 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
|
|
# libérer — l'ordre n'est pas cosmétique. `state: stopped` en plus de `masked` : masquer
|
|
# empêche un démarrage futur, pas celui qui est déjà en cours.
|
|
- name: Désarmer les mises à jour automatiques de Debian (Set-OPS les applique lui-même)
|
|
ansible.builtin.systemd_service:
|
|
name: "{{ item }}"
|
|
state: stopped
|
|
enabled: false
|
|
masked: true
|
|
loop: "{{ common_packages_unites_maj_auto }}"
|
|
when: common_packages_desarmer_maj_auto | bool
|
|
failed_when: false # une unite absente n'est pas une faute : elle est desarmee
|
|
|
|
# EFFACER LA TRACE QUE LE DESARMEMENT LAISSE (mesure du 2026-08-30).
|
|
#
|
|
# Masquer le service pendant que son timer TOURNE lui fait perdre sa cible. systemd le
|
|
# note, et le garde :
|
|
#
|
|
# apt-daily.timer: Unit to trigger vanished.
|
|
# apt-daily.timer: Failed with result 'resources'.
|
|
#
|
|
# `state: stopped` n'efface pas un etat `failed` — seul `reset-failed` le fait. Sans lui,
|
|
# CHAQUE machine porte deux unites en echec permanent. Constate sur les quinze de
|
|
# Chezlepro : `systemctl list-units --state=failed` en rend deux partout.
|
|
#
|
|
# CE N'EST PAS COSMETIQUE. Une supervision qui compte les unites en echec compte ces
|
|
# deux-la pour toujours — et le jour ou une VRAIE panne s'ajoute, elle se noie dans un
|
|
# bruit qu'on a appris a ignorer. C'est le meme defaut que le journal de la frontiere
|
|
# noye sous 982 000 entrees : ce qui ment le plus n'est pas ce qui se tait, c'est ce qui
|
|
# crie sans raison.
|
|
- name: Effacer l'etat d'echec laisse par le desarmement
|
|
ansible.builtin.command:
|
|
argv: ["systemctl", "reset-failed", "{{ item }}"]
|
|
loop: "{{ common_packages_unites_maj_auto }}"
|
|
register: common_packages_reset
|
|
changed_when: false
|
|
failed_when: false # rien a effacer n'est pas une faute
|
|
when: common_packages_desarmer_maj_auto | bool
|
|
|
|
- name: Mettre à jour le cache APT
|
|
ansible.builtin.apt:
|
|
update_cache: true
|
|
cache_valid_time: 3600
|
|
lock_timeout: "{{ common_packages_lock_timeout }}"
|
|
|
|
- name: Appliquer les mises à jour disponibles
|
|
ansible.builtin.apt:
|
|
upgrade: full
|
|
lock_timeout: "{{ common_packages_lock_timeout }}"
|
|
|
|
- name: Installer les paquets communs
|
|
ansible.builtin.apt:
|
|
name: "{{ common_packages_list }}"
|
|
state: present
|
|
lock_timeout: "{{ common_packages_lock_timeout }}"
|
|
|
|
- name: Supprimer les dépendances devenues inutiles
|
|
ansible.builtin.apt:
|
|
autoremove: true
|
|
lock_timeout: "{{ common_packages_lock_timeout }}"
|