journalisation des fichiers déployés
This commit is contained in:
@@ -11,6 +11,8 @@ LOG_DIR="/var/log/monitoring"
|
||||
STATE_DIR="/var/lib/monitoring"
|
||||
LOCK_DIR="/var/lock/monitoring"
|
||||
TMP_DIR="/tmp/monitoring-install"
|
||||
# Journal des fichiers installés pour déinstallation/état des lieux
|
||||
INSTALLED_LOG="${STATE_DIR}/installed-files.log"
|
||||
|
||||
UPDATE_BASE_URL="https://git.abonnel.fr/cedricAbonnel/scripts-bash/raw/branch/main/servers/linux/monitoring"
|
||||
MANIFEST_URL="${UPDATE_BASE_URL}/manifest.txt"
|
||||
@@ -37,9 +39,7 @@ install_deps() {
|
||||
info "Vérification des dépendances système..."
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
apt-get update -qq
|
||||
apt-get install -y -qq curl coreutils findutils grep sed gawk util-linux ca-certificates php-cli > /dev/null
|
||||
apt-get install -y -qq php-cli php-curl php-common > /dev/null
|
||||
apt-get install -y -qq smartmontools > /dev/null
|
||||
apt-get install -y -qq curl coreutils findutils grep sed gawk util-linux ca-certificates php-cli php-curl php-common smartmontools > /dev/null
|
||||
ok "Dépendances installées."
|
||||
fi
|
||||
}
|
||||
@@ -47,6 +47,7 @@ install_deps() {
|
||||
prepare_dirs() {
|
||||
info "Préparation de l'arborescence dans ${BASE_DIR}..."
|
||||
mkdir -p "${BASE_DIR}/bin" "${BASE_DIR}/lib" "${CONF_DIR}" "${LOG_DIR}" "${STATE_DIR}" "${LOCK_DIR}" "${TMP_DIR}"
|
||||
touch "$INSTALLED_LOG"
|
||||
}
|
||||
|
||||
fetch_manifest() {
|
||||
@@ -65,17 +66,13 @@ validate_manifest() {
|
||||
}
|
||||
|
||||
download_and_install() {
|
||||
local expected_hash="$1"
|
||||
local mode="$2"
|
||||
local rel_path="$3"
|
||||
local expected_hash=$1 mode=$2 rel_path=$3
|
||||
local dst="${BASE_DIR}/${rel_path}"
|
||||
|
||||
if [ -f "$dst" ]; then
|
||||
local current_hash
|
||||
current_hash=$(sha256sum "$dst" | awk '{print $1}')
|
||||
if [ "$current_hash" == "$expected_hash" ]; then
|
||||
return 0 # Déjà à jour
|
||||
fi
|
||||
[ "$current_hash" == "$expected_hash" ] && return 0
|
||||
info "Mise à jour : $rel_path"
|
||||
else
|
||||
info "Installation : $rel_path"
|
||||
@@ -103,23 +100,45 @@ download_and_install() {
|
||||
chmod "$mode" "$dst"
|
||||
}
|
||||
|
||||
# --- NOUVEAUTÉ : Gestion du journal et purge propre ---
|
||||
|
||||
update_installed_log() {
|
||||
# On sauvegarde la liste des chemins relatifs du manifeste validé dans le journal permanent
|
||||
awk '{print $3}' "${TMP_DIR}/manifest-valid.txt" > "$INSTALLED_LOG"
|
||||
ok "Journal des fichiers déployés mis à jour ($INSTALLED_LOG)."
|
||||
}
|
||||
|
||||
purge_obsolete_files() {
|
||||
info "Analyse des fichiers obsolètes (Synchronisation avec Git)..."
|
||||
# On scanne bin, lib et conf
|
||||
find "${BASE_DIR}/bin" "${BASE_DIR}/lib" "${BASE_DIR}/conf" -type f 2>/dev/null | while read -r local_file; do
|
||||
|
||||
local rel_path="${local_file#$BASE_DIR/}"
|
||||
info "Analyse des fichiers obsolètes (Synchronisation avec le journal)..."
|
||||
|
||||
# On compare ce qui était installé (journal) avec ce qui est dans le nouveau manifeste
|
||||
if [ ! -s "$INSTALLED_LOG" ]; then
|
||||
warn "Journal vide, passage en mode scan classique."
|
||||
# Fallback sur le scan de dossier si le journal n'existe pas encore
|
||||
find "${BASE_DIR}/bin" "${BASE_DIR}/lib" "${BASE_DIR}/conf" -type f 2>/dev/null | while read -r local_file; do
|
||||
local rel_path="${local_file#$BASE_DIR/}"
|
||||
[[ "$rel_path" == *".local."* ]] && continue
|
||||
if ! grep -qw "$rel_path" "${TMP_DIR}/manifest-valid.txt"; then
|
||||
warn "Suppression : $rel_path"
|
||||
rm -f "$local_file"
|
||||
fi
|
||||
done
|
||||
return
|
||||
fi
|
||||
|
||||
# PROTECTION : On ne touche jamais aux fichiers locaux personnels
|
||||
if [[ "$rel_path" == *".local."* ]]; then
|
||||
continue
|
||||
# Mode Journal : On lit l'ancien journal pour voir ce qui doit disparaître
|
||||
while read -r old_file; do
|
||||
# Si le fichier du journal n'est plus dans le nouveau manifeste
|
||||
if ! grep -qw "$old_file" "${TMP_DIR}/manifest-valid.txt"; then
|
||||
if [ -f "${BASE_DIR}/$old_file" ]; then
|
||||
# Protection ultime des fichiers .local (au cas où ils auraient été loggués par erreur)
|
||||
if [[ "$old_file" != *".local."* ]]; then
|
||||
warn "Suppression du fichier obsolète : $old_file"
|
||||
rm -f "${BASE_DIR}/$old_file"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if ! grep -qw "$rel_path" "${TMP_DIR}/manifest-valid.txt"; then
|
||||
warn "Suppression : $rel_path (absent du dépôt)"
|
||||
rm -f "$local_file"
|
||||
fi
|
||||
done
|
||||
done < "$INSTALLED_LOG"
|
||||
}
|
||||
|
||||
# --- Main ---
|
||||
@@ -143,8 +162,9 @@ main() {
|
||||
done < "${TMP_DIR}/manifest-valid.txt"
|
||||
|
||||
echo "--------------------------------------------------"
|
||||
info "Phase 2 : Nettoyage"
|
||||
info "Phase 2 : Nettoyage et Journalisation"
|
||||
purge_obsolete_files
|
||||
update_installed_log
|
||||
|
||||
rm -rf "${TMP_DIR}"
|
||||
echo "--------------------------------------------------"
|
||||
@@ -155,18 +175,12 @@ main() {
|
||||
orig_conf="${CONF_DIR}/monitoring.conf.php"
|
||||
|
||||
if [ -f "$local_conf" ] && [ -f "$orig_conf" ]; then
|
||||
# On compare les hashs des deux fichiers
|
||||
hash_local=$(sha256sum "$local_conf" | awk '{print $1}')
|
||||
hash_orig=$(sha256sum "$orig_conf" | awk '{print $1}')
|
||||
|
||||
if [ "$hash_local" == "$hash_orig" ]; then
|
||||
if [ "$(sha256sum "$local_conf" | awk '{print $1}')" == "$(sha256sum "$orig_conf" | awk '{print $1}')" ]; then
|
||||
echo -e "\n\e[33m[ATTENTION]\e[0m Votre fichier de configuration est identique à l'original."
|
||||
warn "Pensez à éditer ${local_conf} pour configurer vos tokens ntfy/mail."
|
||||
warn "Pensez à éditer ${local_conf}."
|
||||
else
|
||||
ok "Configuration locale détectée et personnalisée."
|
||||
ok "Configuration locale personnalisée détectée."
|
||||
fi
|
||||
else
|
||||
warn "Fichier de configuration local absent. Relancez monitoring-update.php pour l'initialiser."
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user