documentation/outils/logiciels/backups/restic.md

5.9 KiB

Restic

Page officielle de restic : https://restic.net/.

Documentation de restic : https://restic.readthedocs.io/.

Dépôt officiel de restic rest-server : https://github.com/restic/rest-server.

Présentation

Restic est un logiciel client/serveur permettant d'effectuer des sauvegardes incrémentales, dédupliquées et chiffrées par le client. Différents serveurs sont utilisables par le client, nous présenterons ici le serveur REST de restic utilisant le protocole HTTP, qui est installé actuellement au Crans sur thot.

Pour la configuration d'un client, vous aurez besoin d'installer le paquet restic sur les machines sous debian, restic étant déjà packagé dans nixpkgs pour les machines sous NixOS.

Configuration du serveur

Le choix le plus simple à mettre en place pour la partie serveur de restic est restic rest-server, très simple à mettre en place. Vous pouvez trouver la configuration actuelle dans le module restic du dépôt NixOS.

Le fonctionnement de ce serveur REST est le suivant : le client compresse et chiffre ses données avec un mot de passe, vient s'authentifier en basic auth auprès du serveur, puis dépose la backup au fur et à mesure de son avancée sur le serveur. Chaque client dispose donc de deux mots de passe : une clef de chiffrement pour les données, ainsi qu'un mot de passe pour s'authentifier auprès du serveur REST.

Deux notions sont importantes à comprendre ici dans la configuration du serveur REST.

  • L'option privateRepos/--private-repos : permet de faire en sorte qu'un⋅e utilisateurice (dans notre cas une machine) ne puisse accéder qu'à ses propres backups et puisse créer tous les dépôts souhaités dans un sous dossier à son nom. Ainsi, une fois authentifiée, la VM flirt aura accès à tous dépôt de la forme restic:http://thot.adm.crans.org/flirt/<dépôt>, ce qui est particulièrement pratique pour ne pas avoir à gérer les accès à la main pour chaque machine.

  • Les clients sont authentifiées par le serveur grâce à un fichier .htpasswd situé à la racine du dossier de données. Ainsi, si le dossier de données est /backups, le fichier d'authentification sera /backups/.htpasswd. Ce fichier est un fichier d'authentification standard : vous pouvez consulter la page Wikipédia dédiée pour plus d'informations. Vous pouvez alors ajouter une machine à ce fichier avec la commande :

    sudo htpasswd -B /backups/.htpasswd <username> [<password>]
    

    Si le mot de passe n'est pas spécifié, il sera alors demandé sur l'entrée standard.

Configuration du client

Théoriquement, restic est uniquement un logiciel qui s'utilise directement. Cependant, nous souhaitons faire des sauvegardes automatiquement en utilisant des systemd timer, on va donc créer plusieurs fichiers pour ne pas à avoir tout à spécifier directement dans les lignes de commande.

Actuellement, la configuration des clients restic se situe dans le dossier /etc/restic sous debian, et dans le dépôt NixOS pour les machines sous NixOS. Dans les deux cas, on retrouve les mêmes éléments (on donne les noms pour la configuration par défault des machines sous debian) :

  • un fichier d'environnement base.env, contenant plusieurs variables d'environnement dont l'utilité précise peut être trouvée dans la documentation de restic.
  • un fichier base-repo contenant la position du dépôt (serveur REST), avec les identifiants de connexion, qui se présente sous la forme restic:http://<username>:<password>@thot.adm.crans.org/<username>/base.
  • un fichier base-password contenant le mot de passe de chiffrement des sauvegardes.
  • deux fichiers base-includes et base-excludes indiquant respectivement les dossiers inclus et exclus pour les sauvegardes.

En plus de cela, on trouve un service systemd restic-base ainsi qu'un timer associé dans le dossier /etc/systemd/system/. Ce service lancera deux commandes : une commande pour lancer une sauvegarde, et une commande pour supprimer les anciennes sauvegardes qui ne seront pas gardées en tant que sauvegarde journalière/hebdomadaire/mensuelle/annuelle (définies par la configuration).

Initialiser un dépôt

En supposant que vous avez la configuration décrite ci-dessus, vous pouvez initialiser un dépôt grâce à la commande suivante :

restic init --repository-file /etc/restic/data-repo --password-file /etc/restic/data-password

Faire une sauvegarde à la main

Pour faire une sauvegarde à la main, rien de compliqué, il suffit de lancer le service systemd normalement de la manière suivante :

sudo systemctl start restic-base.service

(Même si c'est surprenant, vous pouvez faire CTRL+C à ce moment dans votre terminal, la tâche continuera en fond.)

De plus, si la variable RESTIC_PROGRESS_FPS a été affectée à une valeur strictement positive, vous pourrez voir la progression de la sauvegarde dans le journal. Vous pouvez donc y accéder par la commande :

sudo journalctl -xefu restic-base

Consulter l'état des sauvegardes

Pour consulter la liste actuelle des sauvegardes, vous pouvez simplement utiliser la commande :

restic snapshots --repository-file /etc/restic/data-repo --password-file /etc/restic/data-password

De plus, vous pouvez facilement monter une sauvegarde sur un point de montage avec la commande suivante :

restic mount /mnt --repository-file /etc/restic/data-repo --password-file /etc/restic/data-password

Cela bloquera alors votre terminal, et la sauvegarde sera démontée dès que vous quitterez votre terminal, évitant d'avoir une sauvegarde montée et oubliée.