Comment orchestrer des sauvegardes restic avec autorestic sous Linux
Restic est un programme de sauvegarde moderne avec prise en charge du cryptage et de la déduplication. Comme nous l’avons vu dans ce tutoriel, Restic est facile à utiliser, mais il n’utilise pas de fichier de configuration, et n’inclut pas nativement une méthode pour orchestrer et organiser plusieurs sauvegardes. C’est là qu’autorestic s’avère utile : il s’agit d’un wrapper autour de Restic qui nous permet de configurer et d’orchestrer les sauvegardes dans un seul fichier de configuration yaml, en spécifiant plusieurs sources (emplacements) et destinations (backends).
Dans ce tutoriel, nous apprenons comment installer autorestic sur Linux, comment son fichier de configuration est structuré et comment créer une configuration de base.
Dans ce tutoriel, vous allez apprendre :
- Comment installer autorestic sur Linux
- Structure du fichier de configuration autorestic
- Comment configurer les sauvegardes Restic avec autorestic
- Comment exécuter des commandes personnalisées sur des hooks autorestic
Installation d’autorestic
Dans cet article, je supposerai que vous avez déjà installé Restic ; Si vous ne le connaissez pas, vous voudrez peut-être d’abord jeter un coup d’œil à notre tutoriel d’introduction.
Au moment de la rédaction de cet article, de toutes les principales distributions Linux, seule Fedora inclut autorestic dans ses dépôts. Pour installer le logiciel, nous pouvons soit télécharger un binaire précompilé à partir du dépôt GitHub du projet, soit utiliser l’image Docker dédiée. Explorons ces options.
Installation manuelle
La façon la plus simple d’installer autorestic est de télécharger la version appropriée du binaire pour notre système d’exploitation, et de la placer dans un répertoire de notre PATH. Dans l’exemple ci-dessous, nous téléchargeons la dernière version disponible x86_64 Linux (1.8.2 au moment de la rédaction), et l’installons dans le répertoire /usr/local/bin
. Tout d’abord, nous téléchargeons l’archive « .bz2 » :
curl -LO https://github.com/cupcakearmy/autorestic/releases/download/v1.8.2/autorestic_1.8.2_linux_amd64.bz2
Une fois le téléchargement terminé, nous extrayons le fichier :
bzip2 -d autorestic_1.8.2_linux_amd64.bz2
Enfin, on déplace le fichier dans le répertoire cible, et on le rend exécutable :
sudo mv autorestic_1.8.2_linux_amd64 /usr/local/bin/autorestic && sudo chmod +x /usr/local/bin/autorestic
Installation via le gestionnaire de paquets (Fedora uniquement)
Si nous utilisons Fedora, la manière la plus simple et la plus pratique d’installer autorestic est d’utiliser le gestionnaire de paquets dnf, car l’outil est inclus dans les dépôts officiels de la distribution :
sudo dnf install autorestic
Utilisation de l’image Docker autorestic
Une image officielle de Docker autorestic est disponible ; Lors de l’exécution d’un conteneur basé sur celui-ci, nous devons lier les répertoires que nous voulons sauvegarder, le fichier de configuration autorestic et le dépôt cible (si vous effectuez une sauvegarde locale), quelque part à l’intérieur du conteneur, et pointer autorestic vers le chemin du fichier de configuration avec l’option -c
. Voici un exemple dans lequel nous sauvegardons le contenu du répertoire host, /data
:
sudo docker run --rm -v /data:/data:Z -v /etc/autorestic.yml:/etc/autorestic.yml:Z -v /mnt/restic_repo:/mnt/restic_repo:Z cupcakearmy/autorestic autorestic backup -va -c /etc/autorestic.yml
Nous lions le fichier de configuration /etc/autorestic.yaml
, les répertoires /data
et /mnt/restic_repo
(qui sont respectivement la source et la destination de notre sauvegarde) dans leurs positions respectives à l’intérieur du conteneur. Pour chaque montage de liaison, nous avons utilisé l’option Z
: celle-ci n’est nécessaire que lorsque SELinux est actif, car il change l’étiquette des fichiers référencés en object_r :container_file_t
, afin qu’ils soient accessibles à l’intérieur du conteneur.
Le fichier de configuration autorestic
Le cœur d’autorestic est son fichier de configuration yaml. Dans ce fichier, nous définissons les sources et les destinations de nos sauvegardes, les options restantes que nous voulons utiliser, et bien d’autres choses. Pour des raisons évidentes, nous ne pouvons pas couvrir toutes les options possibles ici, nous ne verrons donc que l’essentiel.
Autorestic recherche le fichier de configuration aux positions suivantes, par ordre de priorité :
- .autorestic.yml
- ~/.autorestic.yml
- ~/.config/autorestic/.autorestic.yml
À l’intérieur du fichier de configuration, nous définissons les sources de nos sauvegardes dans la section « emplacement », et leurs destinations dans la section « backends ». Commençons par un exemple de base. Supposons que nous souhaitions sauvegarder le contenu du répertoire /data
dans le référentiel local /mnt/restic_repo
. Voici comment nous remplirions le fichier de configuration autorestic, que nous enregistrerons sous .autorestic.yml
dans notre répertoire de travail actuel :
version: 2
locations:
data:
from:
- /data
to:
- localrepo
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Chaque emplacement est identifié par un nom en minuscules ; Dans ce cas, nous avons utilisé « data » pour celui que nous avons créé. Avec la clé from
, nous définissons un ou plusieurs répertoires que nous voulons sauvegarder : les chemins peuvent être spécifiés comme absolus ou relatifs au chemin du fichier de configuration. Avec la touche to
, en revanche, nous fournissons une ou plusieurs cibles ou backends pour l’emplacement, encore une fois, en les référençant par leur nom. Nous définissons chaque destination, ou « backend », dans la section « backends ».
Dans cet exemple, nous avons défini un seul backend, que nous avons appelé « localrepo » (tout comme les emplacements, les noms des backends doivent être définis en minuscules). En fixant la valeur de la clé de type
à « local « , nous avons spécifié que le backend est un dépôt restic qui existe sur le système de fichiers local (comme nous le savons, restic supporte beaucoup de plates-formes de stockage ; parmi les autres : Backblaze, S3 et SFTP). Avec la clé de chemin
, nous avons spécifié le chemin du dépôt restic, et, enfin, avec la clé
, nous avons signalé le mot de passe du dépôt (mettre un mot de passe en clair dans un fichier de configuration peut être dangereux, nous verrons quelques alternatives à ce comportement plus tard).
Lancement d’une sauvegarde
Maintenant, si c’est la première fois que nous exécutons la sauvegarde, nous pouvons utiliser la commande autorestic check
, pour être sûr que tout le monde est prêt. La commande initialisera automatiquement les backends définis pour nous, il n’est donc pas nécessaire de créer les dépôts restic au préalable :
sudo autorestic check
Pour démarrer la sauvegarde, nous pouvons maintenant utiliser la commande backup
:
sudo autorestic backup -va
Ci-dessus, nous avons appelé autorestic avec l’option -v
, pour le faire fonctionner en mode détaillé, et avec -a
pour lui indiquer d’effectuer la sauvegarde de tous les emplacements existants. Dans le cas où nous avons défini plusieurs emplacements, et que nous voulons sauvegarder seulement un sous-ensemble d’entre eux, nous pouvons passer la liste de leurs noms séparés par des virgules en argument à l’option -l
à la place, par exemple :
autorestic backup -v -l data
Spécification des options restic
Dans le fichier de configuration autorestic, nous pouvons spécifier les options que nous voulons passer à restic, pour chaque emplacement, ou globalement. Les options restic doivent être invoquées avec, sont fournies en tant que valeur de la clé d’options
. Nous pouvons spécifier les options que nous voulons passer pour les commandes backup et forget, ou pour les deux, en utilisant respectivement les touches backup
, forget
et all
. En voici un exemple. Supposons que nous voulions exclure tous les fichiers avec l’extension « .txt " lors de l’exécution d’une sauvegarde de l’emplacement « data ». Nous écririons :
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
backup:
exclude:
- '*.txt'
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
La commande restic « forget », est utilisée pour supprimer les anciens instantanés d’un dépôt, selon la politique que nous spécifions avec les options --keep
. Pour fournir ces options, nous les spécifions sous la touche oublier
. Pour toujours conserver tous les 10 instantanés les plus récents et supprimer les plus anciens, par exemple, nous utiliserions --keep-last=10
:
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Les options « forget » sont appliquées lorsque nous invoquons autorestic avec la commande forget
:
autorestic forget -va
On peut configurer autorestic pour que la commande « forget » soit exécutée automatiquement après chaque sauvegarde, en utilisant la touche forget
directement dans la définition de l’emplacement. La valeur de cette clé peut être définie à true
si nous voulons simplement que les instantanés soient oubliés, ou à élaguer
si nous voulons également supprimer du dépôt les données liées aux instantanés oubliés. En voici un exemple :
version: 2
locations:
data:
from:
- /data
to:
- localrepo
forget: prune
options:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Les options que nous avons définies dans le fichier de configuration jusqu’à présent ne sont valables que pour l’emplacement « data ». Si nous avons plusieurs emplacements, et que nous voulons appliquer certaines options à chacun d’entre eux, nous pouvons remplir la section globale, par exemple :
version: 2
global:
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
locations:
data:
from:
- /data
to:
- localrepo
backends:
localrepo:
type: local
path: /mnt/restic_repo
key: repositorypassword
Les options spécifiques à l’emplacement remplacent celles définies dans la section globale. Cette stratégie est utile si nous voulons simplement spécifier des exceptions.
Autres méthodes pour fournir un mot de passe backend
Dans les exemples précédents, nous avons directement spécifié le mot de passe du backend « localrepo » dans le fichier de configuration. Comme alternative, nous pouvons définir le mot de passe comme la valeur d’une variable d’environnement que nous pouvons définir lors du lancement d’autorestic, ou dans un fichier dédié appelé .autorestic.env
, qui doit se trouver dans le même répertoire que le fichier de configuration. Pour que la variable soit automatiquement associée à un backend spécifique, nous la définissons à l’aide de la syntaxe suivante :
AUTORESTIC_<BACKEND-NAME>_<VARIABLE_NAME>
Ainsi, pour attribuer le mot de passe pour le backend « localrepo », nous écririons :
AUTORESTIC_LOCALREPO_RESTIC_PASSWORD="repositorypassword"
Nous pouvons également utiliser cette stratégie pour fournir des informations supplémentaires. Lorsque vous utilisez un backend Backblaze distant, par exemple, nous pouvons fournir à la fois l’identifiant de compte et la clé de compte. Supposons que nous définissions une sauvegarde appelée « backblaze », nous écririons :
AUTORESTIC_BACKBLAZE_B2_ACCOUNT_ID="123"
AUTORESTIC_BACKBLAZE_B2_ACCOUNT_KEY="456"
Une autre alternative consiste à utiliser l’option native restic --password-command
. Avec cette option, nous pouvons fournir une commande qui doit renvoyer le mot de passe à stdout. Avec cette stratégie, par exemple, nous pouvons lire le mot de passe à partir d’un fichier externe, comme nous l’avons fait ci-dessous :
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
all:
password-command: cat /root/.password
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
backends:
localrepo:
type: local
path: /mnt/restic_repo
Nous avons utilisé l’option dans la section « tous », afin qu’elle soit toujours passée, que nous exécutions la sauvegarde ou la commande oublier.
Crochets Autorestic
Autorestic nous permet d’exécuter des commandes personnalisées à des moments spécifiques, en utilisant les crochets suivants :
- Prévalider
- avant
- après
- échec
- succès
Le hook de prévalidation
est exécuté avant tout le reste, avant même que les différentes vérifications ne soient exécutées (vérifications autorestiques si des répertoires sources associés à un emplacement existent, par exemple) ; le hook before
, en revanche, est exécuté après les vérifications, mais avant le lancement de la sauvegarde. Le hook after
est toujours exécuté une fois la sauvegarde terminée, indépendamment de l’état de sortie (il est plutôt ignoré si la sauvegarde ne peut pas être démarrée du tout, en raison d’erreurs dans les hooks « prevalid » ou « before »). Enfin, les commandes associées aux hooks d’échec
et de succès
sont appelées après l’exécution réussie de la sauvegarde ou après son échec, respectivement.
Dans l’exemple ci-dessous, nous envoyons une notification push à l’aide du service ntfy.sh si la sauvegarde est réussie :
version: 2
locations:
data:
from:
- /data
to:
- localrepo
options:
all:
password-command: cat /root/.password
backup:
exclude:
- '*.txt'
forget:
keep-last: 10
hooks:
success:
- curl -d "backup executed succesfully!" ntfy.sh/lxcfg
backends:
localrepo:
type: local
path: /mnt/restic_repo
Lors d’un hook, nous pouvons accéder à des informations supplémentaires stockées dans certaines variables prédéfinies. En voici quelques exemples :
- IDENTIFIANT_SNAPSHOT_AUTORESTIQUE
- ID_DE_SNAPSHOT_PARENT_AUTORESTIQUE
- FICHIERS_AUTORESTIQUES_AJOUTÉS
- FICHIERS_AUTORESTIQUES_MODIFIÉS
- FICHIERS_AUTORESTIQUES_NON_MODIFIÉS
- EMPLACEMENT_AUTORESTIQUE
Conclusions
Dans ce tutoriel, nous avons vu comment orchestrer et organiser les sauvegardes Restic avec le wrapper autoresti. Autorestic nous a permis de sauvegarder plusieurs emplacements sur plusieurs backends en créant et en remplissant un fichier de configuration yaml. Nous avons vu comment installer autorestic sur les distributions Linux les plus utilisées, et comment configurer les emplacements et les backends. Nous avons également appris à lancer une sauvegarde et à attacher des commandes personnalisées aux hooks fournis par autorestic. Pour en savoir plus sur autorestic, vous pouvez consulter la documentation officielle.