Je réalise quotidiennement des sauvegardes depuis l'interface Home Assistant. Cependant je trouve que les options proposées de base sont assez rudimentaires. Par exemple j'ai plusieurs fois saturé mon disque dur de backups car on ne peut pas définir de politique de suppression automatique des anciennes sauvegardes. Après quelques recherches j'ai trouvé une solution qui consiste à scripter une purge des backups qu'on applique en automatisant une connexion ssh en local sur le serveur lui-même. Voici la méthode que j'ai trouvée et qui fonctionne parfaitement.
Étapes pour supprimer automatiquement les anciennes sauvegardes dans Home Assistant
- Étape 1 : Générer des clés SSH
Pour configurer l'authentification par clé SSH, il est nécessaire de générer une paire de clés (clé privée et publique). Pour cela, ouvrez le terminal sur votre home assistant et exécutez la commande suivante.
ssh-keygen `-t rsa`
Lorsque l'emplacement du fichier vous sera demandé, choisissez un répertoire où vous pouvez stocker vos clés SSH. Perso j'ai mis cela :
/config/shell_command_id_rsa
- Étape 2 : Configurer l'authentification par clé SSH
Ajoutez la clé publique aux clés autorisées à ce connecter sur la machine
cat /config/shell_command_id_rsa.pub >> /root/.ssh/authorized_keys
On teste la connexion SSH
cd /config
ssh -i shell_command_id_rsa root@localhost
Cela devrait ouvrir une nouvelle session SSH si c'est bon tapez exit
pour fermer la session.
- Étape 3 : Créer un répertoire pour les scripts Shell
Nous allons maintenant créer le répertoire qui contiendra notre script shell. Je vous recommande de choisir un emplacement logique et facile à trouver. Personnellement je l'ai mis dans le répertoire /homeassistant qui permet en plus de retrouver le script depuis l'interface Web d'Home Assistant facilement.
`mkdir homeassistant/scripts-gbd
- Étape 4 : Créer le script de suppression des sauvegardes
Créez votre script shell dans le répertoire précédemment créé avec votre editeur de texte.
nano /homeassistant/scripts-gbd/Auto-delete-backup-2Month.sh
Et ajoutez le contenu suivant au script. J'ai choisi de supprimer les fichiers ayant plus de 60 jours mais vous pouvez bien sur adapter à vos besoins en modifiant le chiffre après le +
:
!/bin/bash
# Remove old backup files
# -mtime +60 corresponds to files older than 60 days
find /backup -name '*.tar' -mtime +60 -exec rm -f {} \;
Rendez le script exécutable sinon il ne fonctionnera pas :
chmod +x /homeassistant/scripts-gbd/Auto-delete-backup-2Month.sh
- Étape 5 : Modifier la configuration de Home Assistant
Modifiez le fichier configuration.yaml
pour ajouter une commande shell qui exécute votre script via SSH. Cela permettra de le rendre disponible dans vos automatisations
#Purge de backup de plus de 60 jours
shell_command:
delete_old_backups: 'ssh -i /config/shell_command_id_rsa -o StrictHostKeyChecking=no root@localhost bash /homeassistant/scripts-gbd/Auto-delete-backup-2Month.sh'
- Étape 6 : Créer une automatisation pour exécuter le script
J'ai réalisé l'automatisation via l'interface web de home Assistant comme ceci
Ce qui donne ceci dans le fichier /homeassistant/automations.yaml
- id: '1723201364479'
alias: '[HA] Delete Old Backups'
description: 'Deletes backups older than 7 days every day at 3:30 AM'
trigger:
- platform: time
at: 03:30:00
condition: []
action:
- action: shell_command.delete_old_backups
mode: single
- Étape 7 : Redémarrer Home Assistant
Pour finir redémarrez Home Assistant pour appliquer les changements avec cette commande:
ha core restart
Résumé
Voilà, vous avez configuré un système automatisé pour supprimer les sauvegardes de plus de 60 jours en utilisant un script shell personnalisé et des automatisations dans Home Assistant.