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>
62 lines
2.4 KiB
Django/Jinja
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
|