Set-OPS-Public/roles/common_packages/templates/sonde-correctifs.sh.j2
Daniel Allaire aab1bcc83a doc : rangee par lecteur, trois portes d'entree (architecture, setup, usage) et un index
README reduit au role du projet et au demarrage rapide. docs/architecture.md (schemas
Mermaid), docs/setup.md, docs/usage.md (154 cibles en 13 familles), docs/README.md (index).
Documents ranges en conception/, exploitation/, hebergement/, projet/ ; 598 chemins suivis.
QUICKSTART.md, SOLUTION.md, architecture-set-ops.md et la carte fondus puis retires.

Preuves : P48 lit l'index et conception/mecanismes.md ; les gardes parcourent docs/ sous-
dossiers compris (_documents) ; usage.md suit le Makefile dans les deux sens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:01:54 -04:00

62 lines
2.4 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/conception/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