# Restic
Page officielle de restic : .
Documentation de restic : .
Dépôt officiel de 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](../../../infrastructure/machines/physiques/thot.md).
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](https://gitlab.crans.org/nounous/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](https://en.wikipedia.org/wiki/Basic_access_authentication) 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/`, 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](https://en.wikipedia.org/wiki/.htpasswd) dédiée pour plus
d'informations. Vous pouvez alors ajouter une machine à ce fichier avec la
commande :
```bash
sudo htpasswd -B /backups/.htpasswd []
```
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](https://gitlab.crans.org/nounous/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](https://restic.readthedocs.io/en/stable/040_backup.html#environment-variables).
- 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://:@thot.adm.crans.org//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 :
```bash
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 :
```bash
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 :
```bash
sudo journalctl -xefu restic-base
```
## Consulter l'état des sauvegardes
Pour consulter la liste actuelle des sauvegardes, vous pouvez simplement
utiliser la commande :
```bash
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 :
```bash
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.