LA GARDE FICHIER ENTIER, en deux corrections. Un telechargement interrompu laisse un fichier de zero octet QUI EXISTE, et toutes les gardes demandaient seulement s il etait la. infra-mail-01 a garde une cle smallstep de 0 octet apres l epreuve hors ligne. La premiere correction n a pas suffi. Ajouter le controle de taille faisait bien s executer la tache - et le fichier faisait toujours 0 octet au passage suivant. get_url sur une destination existante emet une requete CONDITIONNELLE : l amont repond non modifie, le module rend ok, la ruine reste. Le play etait vert et ne reparait rien. Il faut effacer avant de redemander. Controle negatif : 0 -> 1022 octets, 0 erreur apt. Cinq roles. LA SONDE CORRECTIFS, 23e. Set-OPS desarme unattended-upgrades et applique les correctifs au deploiement - choix defendable, le verrou dpkg a fait decrocher une machine d une reconstruction entiere le matin meme. Mais rien ne disait QUAND le geste etait du : une flotte pouvait deriver des mois en restant verte. Elle mesure les paquets de securite en attente ET depuis quand. Elle ne lance pas apt-get update - une sonde qui rafraichit l index toutes les quinze minutes deviendrait la cause de la panne qu elle surveille. Et le seuil de 72 h est un choix d exploitation, pas une derivation : le mecanisme qui applique les correctifs est un geste humain. P64 REFUSAIT UNE DECLARATION CORRECTE. serveur_debian et serveur_durci sont des roles de declaration pure, sans une tache ; le travail est fait par les roles que leur playbook applique. La preuve exigeait declaration et depot dans le meme role - vrai des vingt-deux premieres sondes, faux des qu une sonde appartient au socle. Une garde qui force a contourner ce qu elle protege est un defaut. Elle suit desormais le playbook du groupe. Mesure : 21/21 machines vertes, 65 preuves, 23 sondes, 0 echec. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
62 lines
2.3 KiB
Django/Jinja
62 lines
2.3 KiB
Django/Jinja
#!/bin/bash
|
|
# GENERE par Set-OPS (role common_packages). Ne pas editer a la main.
|
|
#
|
|
# SONDE « correctifs » — des correctifs de securite attendent-ils, et depuis quand ?
|
|
#
|
|
# Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2.
|
|
# Mise en defaut PAR PARAMETRE : `common_packages_sonde_seuil_heures` (mettre 0).
|
|
set -uo pipefail
|
|
|
|
ETAT={{ common_packages_sonde_correctifs_etat }}
|
|
SEUIL_H={{ common_packages_sonde_seuil_heures }}
|
|
|
|
# ON NE MET PAS A JOUR L'INDEX ICI, ET C'EST VOULU. Une sonde qui declenche un
|
|
# `apt-get update` a chaque passage ferait tourner le reseau et le verrou dpkg toutes les
|
|
# quinze minutes — elle deviendrait la cause de la panne qu'elle surveille. L'index est
|
|
# rafraichi par le deploiement ; la sonde lit ce que la machine SAIT.
|
|
simule=$(LC_ALL=C apt-get -s dist-upgrade 2>/dev/null | grep '^Inst') || true
|
|
total=$(printf '%s\n' "${simule}" | grep -c . )
|
|
[[ -n "${simule}" ]] || total=0
|
|
|
|
# UN CORRECTIF DE SECURITE SE RECONNAIT A SON DEPOT D'ORIGINE, pas a son nom. `apt-get -s`
|
|
# rend l'origine entre parentheses ; on y cherche le mot que Debian y met.
|
|
secu=$(printf '%s\n' "${simule}" | grep -ci 'security' || true)
|
|
: "${secu:=0}"
|
|
|
|
maintenant=$(date +%s)
|
|
depuis=0
|
|
if [[ -r "${ETAT}" ]]; then
|
|
depuis=$(tr -cd '0-9' < "${ETAT}" 2>/dev/null)
|
|
fi
|
|
: "${depuis:=0}"
|
|
|
|
perf="en_attente=${total} securite=${secu}"
|
|
|
|
if (( secu == 0 )); then
|
|
# PLUS RIEN EN ATTENTE : on oublie la date, sinon le prochain correctif heriterait de
|
|
# l'anciennete du precedent et naitrait deja en retard.
|
|
rm -f "${ETAT}" 2>/dev/null || true
|
|
if (( total > 0 )); then
|
|
echo "Aucun correctif de securite en attente (${total} mise(s) a jour ordinaire(s)). | ${perf}"
|
|
exit 0
|
|
fi
|
|
echo "A jour : aucune mise a jour en attente. | ${perf}"
|
|
exit 0
|
|
fi
|
|
|
|
# PREMIERE FOIS QU'ON LES VOIT : on note la date, on ne crie pas encore. Un correctif
|
|
# publie il y a trois minutes n'est pas une negligence.
|
|
if (( depuis == 0 )); then
|
|
printf '%s' "${maintenant}" > "${ETAT}" 2>/dev/null || true
|
|
depuis=${maintenant}
|
|
fi
|
|
|
|
age_h=$(( (maintenant - depuis) / 3600 ))
|
|
perf="${perf} age_heures=${age_h}"
|
|
|
|
if (( age_h >= SEUIL_H )); then
|
|
echo "CORRECTIFS DE SECURITE EN ATTENTE depuis ${age_h} h : ${secu} paquet(s). Deployer le socle. | ${perf}"
|
|
exit 2
|
|
fi
|
|
echo "${secu} correctif(s) de securite en attente depuis ${age_h} h (seuil ${SEUIL_H} h). | ${perf}"
|
|
exit 1
|