Aujourd’hui, suite à la coupure de courant dans mon immeuble, je me suis dit que j’allais m’occuper de remettre en marche les sauvegardes de mon ordinateur, qui étaient arrêtées depuis que j’en avais changé (d’ordinateur). Jusqu’à présent, j’utilisais deja-dup, un outil très sympa qui m’avait convaincu par sa facilité d’usage et son intégration dans Gnome, et qui utilise duplicity. Seulement, il y avait plusieurs limitations, par exemple deja-dup ne gère qu’un seul lieu / une seule sauvegarde à la fois. Et notamment, je voulais un système qui me permette de monter un disque pour la sauvegarde, réaliser cette dernière, et démonter le disque, pour limiter les risques.
J’ai eu envie de me tourner vers Borg, solution réputée pour son efficacité et ses fonctionnalités. En cherchant dans les paquets de Archlinux, je suis tombé sur borgmatic, qui m’a rapidement convaincu. Plutôt que de passer sur les lignes de commande de Borg, borgmatic permet de gérer la configuration de manière centralisée dans un fichier yaml. Il y a également quelques fonctionnalités supplémentaires très utiles.
Lire le guide de base suffit largement à comprendre le fonctionnement de borgmatic, je vais juste mettre les étapes de base qui m’ont séduit par leur simplicité.
Pour commencer, on génère le fichier de configuration d’exemple :
sudo generate-borgmatic-config
Ensuite, on l’édite (il est dans /etc/borgmatic
normalement). Les lignes à changer obligatoirement pour avoir quelque chose qui fonctionne :
location:
# List of source directories to backup.
source_directories:
- /home/mote
repositories:
- /home/sauvegardes/local.borg
On peut vérifier le fichier de configuration, et changer ça suffit à avoir quelque chose qui fonctionne :
sudo validate-borgmatic-config
Ensuite, on initialise le dépôt de borg. On choisit le mode d’encryption selon la doc de Borg, et on inscrit la phrase de passe dans le fichier yaml.
sudo borgmatic init --encryption repokey / authenticated
Et on lance la première sauvegarde…
sudo borgmatic --verbosity 1 --files
Et voilà ! Concrètement, cela évite d’avoir besoin d’écrire des scripts Borg. Surtout parce qu’il y a quelques fonctionnalités supplémentaires, juste à activer dans le yaml. Par exemple celles que j’utilise :
# Permet de ne pas sauvegarder un dossier qui contient un fichier appelé ".nobackup"
exclude_if_present:
- .nobackup
# Les hooks permettent de lancer des commandes ou des scripts. Il y a même des variables de contexte !
# Me permet de monter le disque avant les actions dessus
before_everything:
- mount /dev/sda1 /home/sauvegardes
# Et là pour le démonter après
after_everything:
- umount /dev/sda1
# Me permet d’avoir un suivi et une remontée en cas d’erreur. Supporte nativement cronitor, pagerduty, cronhub ! Et ce qu’on veut avec les hooks
healthchecks: https://hc-ping.com/your-project-uuid
Et tout ça se configure juste en yaml ! Ensuite, ne reste plus qu’un cronjob ou un timer systemd (ce dernier est fourni par défaut dans les paquets archlinux).
C’était juste un petit aperçu pour vous présenter le logiciel. C’est évidemment pas aussi facile d’accès que deja-dup, mais pour un petit peu de configuration, on a quelque chose de beaucoup plus puissant. Et probablement beaucoup plus sûr, ne serait-ce que parce qu’on peut gérer des sauvegardes en plusieurs endroits.
Ah et pour info, le logiciel est disponible sur Linux et MacOS
Correction
En fait ça ne fonctionnait pas vraiment (pour le montage du disque) ! Les paramètres de sécurité du service systemd bloquait le montage du disque. Après avoir investigué, voilà la solution.
Il va falloir surcharger la configuration du service systemd. Il y a une commande pour ça :
sudo systemctl edit borgmatic
Cela ouvre dans votre éditeur par défaut un fichier de configuration qui permet à systemd de lire les paramètres à surcharger. Vous pouvez écrire vos nouveaux paramètres entre les deux lignes, en en-dessous vous retrouvez le contenu initial du service systemd. Il faut écrire ceci :
[Service]
PrivateDevices=no
ProtectClock=no
SystemCallFilter=@mount
CapabilityBoundingSet=CAP_SYS_ADMIN
Vous pouvez vous renseigner sur chacun de ces paramètres sur la doc de systemd. Le premier restreint l’accès de borgmatic au système de fichiers. Le deuxième empêche de toucher à l’horloge système, et je n’ai aucune idée de pourquoi cela bloquait. Les deux derniers permettent de restreindre l’accès du service à certaines fonctionnalités uniquement, de manière différente. Avec ces deux paramètres, on ajoute certains droits au service lui permettant de monter un nouveau disque.
Bon, finalement, pas si simple que ça ! Une autre solution plus rapide aurait été de complètement surcharger le service systemd (ce que j’ai fait pour investiguer), mais ça implique de perdre un certains nombre de sécurités. Je vais voir pour ajouter ce point à la documentation.