diff --git a/README.md b/README.md index 8bf3687..71c1958 100644 --- a/README.md +++ b/README.md @@ -1 +1,194 @@ -# pve-scripts-local \ No newline at end of file +# README – Supervision du conteneur `pve-scripts-local` + +## 1. Objectif + +Ce conteneur LXC `pve-scripts-local` héberge l’application **PVE Scripts Local** (ProxmoxVE-Local), qui permet de gérer les scripts d’aide Proxmox en local, sans dépendre directement du site web. + +Ce README décrit un script Bash qui : + +- Vérifie l’état général du conteneur (OS, uptime, charge, mémoire, disques). +- Vérifie l’état de l’application **PVE Scripts Local** : + - service systemd (`pvescriptslocal`) ; + - accessibilité HTTP sur `http://127.0.0.1:3000`. +- Inventorie tous les scripts locaux sous ` /opt/ProxmoxVE-Local/scripts`. +- Détecte les **changements** dans ces scripts : + - fichiers **nouveaux** (téléchargés) ; + - fichiers **supprimés** ; + - fichiers **modifiés** (taille ou date de modification). +- Envoie un **résumé** dans un canal **Discord** + un **log détaillé en pièce jointe**, en respectant : + - la limite stricte de **2000 caractères** ; + - un JSON propre via `jq -Rs` ; + - l’envoi de fichier via `curl -F`. + +Le script est prévu pour tourner **tous les jours à 06h00** via `cron`. + +--- + +## 2. Principe de fonctionnement + +1. **Collecte d’informations système** + - OS, hostname, IP, uptime humain + date de démarrage, charge moyenne, mémoire utilisée. + - Espace disque sur `/` et sur le répertoire applicatif `/opt/ProxmoxVE-Local`. + +2. **Vérification de PVE Scripts Local** + - Lecture de la version de l’application (fichier `VERSION` si présent). + - Version de Node.js (`node -v`). + - Statut du service `pvescriptslocal` via `systemctl`. + - Test HTTP sur `http://127.0.0.1:3000` via `curl` (code HTTP ou absence de réponse). + +3. **Inventaire des scripts locaux** + - Répertoire principal : `LOCAL_SCRIPTS_DIR=/opt/ProxmoxVE-Local/scripts`. + - Comptage du nombre de fichiers scripts. + - Calcul de la taille totale. + +4. **Baseline et détection de changements** + - Le script maintient un fichier de référence : + - `BASELINE=/var/lib/pve-scripts-local/scripts_baseline.txt` + - Format : `chemin_relatif|taille|mtime_epoch`, trié. + - Première exécution : + - Tous les fichiers sont considérés comme l’état initial. + - Exécutions suivantes : + - Détection : + - des **nouveaux fichiers** (présents maintenant, absents avant) ; + - des **fichiers supprimés** (présents avant, absents maintenant) ; + - des **fichiers modifiés** (taille ou date modifiée). + - Résumé des changements sous forme : + - `X nouveau(x), Y supprimé(s), Z modifié(s).` + +5. **Log détaillé et envoi vers Discord** + - Un log complet est généré à chaque exécution dans : + - `/var/log/pve-scripts-local/pve-scripts-local_status_YYYY-MM-DDTHH-MM-SS+ZZZZ.log` + - Le message Discord contient un **résumé synthétique** : + - état du conteneur ; + - état de l’application PVE Scripts Local ; + - stats sur les scripts ; + - résumé des changements. + - Le message respecte la limite de **2000 caractères** (tronquage propre si nécessaire). + - Le log complet est envoyé comme **pièce jointe** avec `curl -F`. + +--- + +## 3. Prérequis + +- Conteneur LXC `pve-scripts-local` sous **Debian 13**. +- Application **PVE Scripts Local** installée dans : + - `/opt/ProxmoxVE-Local` +- Accès root (ou équivalent) dans le conteneur. +- Outils nécessaires : + - `curl` + - `jq` (installé automatiquement si absent). +- Un **webhook Discord** valide (URL à renseigner dans le script). + +--- + +## 4. Installation du script + +### 4.1. Création du répertoire des scripts + +Dans le conteneur `pve-scripts-local` : + +```bash +mkdir -p /home/scripts +``` + +### 4.2. Création du script + +Créer le fichier : + +```bash +nano /home/scripts/pve-scripts-local-status.sh +``` + +Coller le **script nettoyé** (voir annexe à la fin de ce README), puis sauvegarder. + +Rendre le script exécutable : + +```bash +chmod +x /home/scripts/pve-scripts-local-status.sh +``` + +### 4.3. Répertoires de travail + +Le script utilise automatiquement : + +- Pour l’état / baseline : + - `/var/lib/pve-scripts-local/` +- Pour les logs : + - `/var/log/pve-scripts-local/` + +Ils sont créés si nécessaire. + +--- + +## 5. Test manuel + +Lancer un test : + +```bash +/home/scripts/pve-scripts-local-status.sh +``` + +À la fin : + +- Un fichier log doit apparaître dans : + - `/var/log/pve-scripts-local/` +- Un message doit être visible dans le canal Discord : + - avec un **résumé** dans le texte ; + - et le **log complet** en pièce jointe. + +--- + +## 6. Planification quotidienne à 06h00 + +Pour lancer ce check **tous les jours à 06h00**, ajouter une entrée `cron` : + +```bash +crontab -e +``` + +Ajouter la ligne suivante : + +```cron +0 6 * * * /home/scripts/pve-scripts-local-status.sh >/dev/null 2>&1 +``` + +Explication : +- `0 6 * * *` → tous les jours à **06h00**. +- La sortie standard et les erreurs sont ignorées (`>/dev/null 2>&1`), le détail étant dans le log et dans Discord. + +--- + +## 7. Emplacement des fichiers générés + +- **Baseline des scripts** : + - `/var/lib/pve-scripts-local/scripts_baseline.txt` + +- **Logs** : + - `/var/log/pve-scripts-local/pve-scripts-local_status_YYYY-MM-DDTHH-MM-SS+ZZZZ.log` + +Ces fichiers peuvent être sauvegardés ou copiés dans une procédure de backup si nécessaire. + +--- + +## 8. Réinitialiser la baseline + +Si tu veux repartir d’un état “propre” (par exemple après un gros changement de scripts), tu peux supprimer la baseline : + +```bash +rm -f /var/lib/pve-scripts-local/scripts_baseline.txt +``` + +Lors de la prochaine exécution du script : + +- Tous les scripts actuels seront considérés comme **nouvelle baseline**. +- Le résumé Discord indiquera une **initialisation**. + +--- + +## 9. Annexe : Script complet (nettoyé) + +> ⚠️ **Important :** ce script est **nettoyé** : +> - L’URL du webhook Discord est mise sous forme de **placeholder**. +> - Aucun code sensible, aucun e-mail réel, aucune donnée privée. + +Pense à remplacer `""` par ton URL réelle.