Table des matières

Sauvegardes

Mise en place

Intro

Les backups sont effectués à l'aide de [borgbackup](https://www.borgbackup.org/) et sont déployés via notre [playbook](https://git.faimaison.net/faimaison-adminsys/adminsys/-/tree/master/ansible) [Ansible](https://docs.ansible.com/)

Les secrets sont stockés dans un trousseau Keyringer. Comme le niveau des prérequis à l'exécution des rôles de sauvegarde est assez haut, on vous a préparé un petit script afin de vérifier très rapidement si votre machine est configurée correctement :

# dans le dépot adminsys:
python3 verification.py

Il est important de noter que l'ensemble des adminsys ne peuvent pas déployer les backups de toutes les machines de FAImaison. Le prérequis pour pouvoir déployer un backup c'est de pouvoir lire les secrets de la machine à sauvegarder dans Keyringer : si t'es pas admin de la machine t'es pas sensé pouvoir accéder à ces informations: simple.

### Étape 1 : configurer les sauvegardes de la machine que l'on veut sauvegarder

Editez ou créez le fichier de configuration dans le `host_vars` de votre machine (par exemple `host_vars/toto.faimaison.net/toto_backups.yml`):

</markdown>

Cet exemple sauvegarde vers UN serveur, mais on peut aussi choisir de lister plusieurs cibles dans la liste borg_client_targets.

<markdown>

```yaml borg_client_targets:

  1. # OBLIGATOIRE : serveur où on souhaite envoyer nos sauvegardes. ce serveur doit être membre du groupe ansible “borg_servers”

remote_server: “serveur-destination-sauvegardes.faimaison.net”

  
  # FACULTATIF : chemins à sauvegarder 
  # (en plus des chemins déjà listés dans le base_source_path de group_vars/borg_clients.yml)
  extra_source_paths:
    - "/srv/transparency/"
    - "~postgres/etherpad.sql"
  # FACULTATIF : liste de fichiers/dossier à exclure
  # par défaut, utilisera la valeur dans "group_vars/borg_clients.yml"
  exclude_patterns: "{{ borg_clients_common_exclude_paths }}"
  
  # FACULTATIF : ici on a une liste de commandes à exécuter avant de lancer la sauvegarde.
  # dans cet exemple, on fera les dump de base de données par exemple
  before_backup_commands:
    -  "sudo -i -u postgres pg_dump -U postgres -F p etherpad > ~postgres/etherpad.sql"
  # FACULTATIF : ici on a une liste de commande à exécuter après la sauvegarde, 
  # typiquement on fera un peu de nettoyage (supprimer les dump de base de données)
  after_backup_commands:
      - "rm -f ~postgres/backup-etherpad.sql"
  # RECOMMANDÉ : ici on définit quand le backup démarre. 
  # Il est recommandé de réfléchir à un horaire où la machine est au repos
  # syntaxe et variables cron classique https://docs.ansible.com/ansible/latest/modules/cron_module.html
  when:
      hour: "1"
      minute: "0"

```

### Étape 2 : ajouter la machine à sauvegarder au groupe borg_clients

Dans `ansible_hosts` ajouter la machine à sauvegarder au groupe `borg_clients`.

### Étape 3 : jouer le rôle sur la machine à sauvegarder

```bash ansible-playbook -K –diff -l toto.faimaison.net -t borg-client playbook-fma.yml ```

Et commiter les fichiers de cléfs:

- Keyringer: `passwords/machines/keys/noyau/<MACHINE>/borg` - SSH: `ssh/borg-keys/<MACHINE>.pub`

### Étape 4: ajouter aux serveurs de sauvegarde la nouvelle machine à sauvegarder

Mettre à jour la variable une entrée à la variable `borg_server_backup_clients` dans `group_vars/borg_servers.yml`:

```yaml borg_server_backup_clients:

  1. name: “toto” # nom de la machine à sauvegarder

ssh_pubkey: “” # clef de sauvegarde (contenue dans ssh/borg-keys/toto.faimaison.net.pub) ```

### Étape 5 : vérifier que tous les serveurs de backups sont dans le groupe backup_servers

Dans `ansible_hosts` vérifier que le groupe `backup_servers` connait bien toutes les machines de backups de faimaison.

### Étape 6 : jouer le role sur les backup_servers

</markdown>

Il faut avoir accès au serveur de sauvegarde visé pour pouvoir effectuer cette étape… Ou bien la faire faire par quelqu'un qui y a accès.

Si avertissement car catalogue apt périmé sur le serveur de sauvegarde, sudo apt update -o Acquire::Check-Valid-Until=false sur ce dernier.

Solution long terme : mettre à niveau carlota :-p.

Jocelyn 2020/10/06 00:25

<markdown>

```bash ansible-playbook –diff -K -l borg_servers -t borg-server playbook-fma.yml ```

## Procédures manuelles

Ces procédures nécessitent que les sauvegardes aient été configurées conformément aux sections précédentes, et les infos bien commitées dans le dépôt adminsys.

### PROCÉDURE : Récupérer d'une sauvegarde plantée (lock)

</markdown>

On prend ici l'exemple de la machine bambelle.faimaison.net, qui pousserait ses sauvegardes sur la machine carlota.faimaison.net. Il faudra adapter les noms de fichiers au cas réel…

<markdown>

On peut avoir ce genre de message remonté par cron dans un mail par exemple :

Remote: borg.locking.LockTimeout: /var/borg-backups/repos/bambelle/lock

Cela veut dire qu'une sauvegarde a crashée, et par prudence un « lock » est laissé… Et empêche toute sauvegarde ultérieure. À moins qu'un processus borg soit toujours en cours d'exécution (`sudo ps aux|grep borg` pour s'en assurer). Il faut « casser » le lock pour que les sauvegardes puissent reprendre :

On commence par ouvrir un « shell borg » avec toutes les variables d'env définies1).

``` user@bambelle $ sudo /opt/borgbackup-client/carlota.faimaison.net_bambelle.sh -c [borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # ```

On vérifie ensuite qu'on est bien bloqué par le lock ``` [borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # borg list $REPOSITORY [… snip : l'erreur est très longue] Remote: borg.locking.LockTimeout: /var/borg-backups/repos/bambelle/lock.exclusive […] ```

Il a pas l'air content ! À condition qu'aucun autre process borg ne tourne, on “casse” le lock ``` [borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # borg break-lock $REPOSITORY ```

Puis on vérifie que ça va mieux :

``` [borg@carlota.faimaison.net:repos/bambelle /home/jocelynd]$ # borg list $REPOSITORY bambelle-2020-05-17-02-00 Sun, 2020-05-17 02:00:11 bambelle-2020-05-24-02-00 Sun, 2020-05-24 02:00:10 bambelle-2020-05-31-02-00 Sun, 2020-05-31 02:00:11 bambelle-2020-06-07-02-00 Sun, 2020-06-07 02:00:10 bambelle-2020-06-08-02-00 Mon, 2020-06-08 02:00:10 bambelle-2020-06-09-02-00 Tue, 2020-06-09 02:00:11 bambelle-2020-06-10-02-00 Wed, 2020-06-10 02:00:10 bambelle-2020-06-11-02-00 Thu, 2020-06-11 02:00:10 bambelle-2020-06-12-02-00 Fri, 2020-06-12 02:00:10 bambelle-2020-06-13-02-00 Sat, 2020-06-13 02:00:11 bambelle-2020-06-14-02-00 Sun, 2020-06-14 02:00:10 ```

La prochaine sauvegarde devrait pouvoir s'effectuer comme il faut. Si on ne veut pas attendre, on peut aussi créer une sauvegarde manuelle (cf ci-après).

### PROCÉDURE : Créer une sauvegarde manuellement

Avant certaines opérations délicates, on peut souhaiter réaliser une sauvegarde manuelle.

1. se connecter sur la machine à sauvegarder 2. passer root `sudo su` 3. Exécuter le script de sauvegarde `/opt/borgbackup-client/<machine_source>_<machine_cible>.sh`

### PROCÉDURE : Récupérer totalement une sauvegarde depuis la machine concernée

</markdown>

Cette procédure restaure l'intégralité d'une sauvegarde, en écrasant éventuellement des fichiers en place sur la machine. Pour faire plus fin, regarder la doc de borg extract ou utiliser borg mount qui permet de monter une sauvegarde distante pour l'examiner ou y piocher quelques fichiers.

<markdown>

1. se connecter sur la machine à sauvegarder 2. passer root `sudo su` 3. Ouvrir un « shell borg » avec toutes les variables d'env définies2): `/opt/borgbackup-client/<machine_source>_<machine_cible>.sh -c` 4. lister les sauvegardes disponibles : ``` [borg@carlota.faimaison.net:repos/bambelle ]$ # borg list $REPOSITORY bambelle-2020-05-17-02-00 Sun, 2020-05-17 02:00:11 bambelle-2020-05-24-02-00 Sun, 2020-05-24 02:00:10 bambelle-2020-05-31-02-00 Sun, 2020-05-31 02:00:11 bambelle-2020-06-07-02-00 Sun, 2020-06-07 02:00:10 bambelle-2020-06-10-02-00 Wed, 2020-06-10 02:00:10 bambelle-2020-06-11-02-00 Thu, 2020-06-11 02:00:10 bambelle-2020-06-12-02-00 Fri, 2020-06-12 02:00:10 bambelle-2020-06-13-02-00 Sat, 2020-06-13 02:00:11 bambelle-2020-06-14-02-00 Sun, 2020-06-14 02:00:10 bambelle-2020-10-04-02-00 Sun, 2020-10-04 02:00:09 bambelle-2020-10-05-02-00 Mon, 2020-10-05 02:00:11 ``` Repérer le nom de l'archive qui nous intéresse, par exemple `bambelle-2020-10-05-02-00`. 5. Repasser root (en conservant les variables d'environnement), pour avoir le droit de restaurer la sauvegarde dans le système de fichiers. ``` [borg@carlota.faimaison.net:repos/bambelle ]$ # su ``` 6. Se rendre à la racine (sinon on va restaurer notre sauvegarde dans un sous-dossier) ``` root@bambelle # cd / ``` 7. Lancer la restauration de l'archive choisie.

``` root@bambelle # borg extract $REPOSITORY::bambelle-2020-10-05-02-00 ```

Des opérations supplémentaires peuvent ensuite être nécessaire selon le type de fichiers restaurés (ex: restaurer un fichier .sql dans une base).

### PROCÉDURE : Récupérer une sauvegarde depuis une autre machine

On doit récupérer :

  1. le dépôt borg qui contient les sauvegardes de la machine
  2. la passphrase du dépôt

Le dépôt (repository) est contenu sur le serveur de sauvegarde 3) dans le répertoire /var/borg-backups/repos/.

On va imaginer qu'on veut récupérer les sauvegardes de la machine bambelle.faimaison.net dans le cas ou celle-ci aurait-été détruite.

1. Récupérer le dossier */var/borg-backups/repos/bambelle* depuis le serveur de sauvegarde (par ex en demandant gentiment à un·e admin du serveur de sauvegarde). Ici on va considérer qu'on le stocke en local dans *~/repo_bambelle* 2. Récupérer la passphrase du dépôt et la stocker dans la variable qui va bien : ``` BORG_PASSPHRASE=$(keyringer fma-machines decrypt noyau/bambelle.faimaison.net/borg/repository_passphrase.asc) ``` 3. Lister les archives contenues dans le dépôt : ``` $ borg list ~/repo_bambelle bambelle-2020-05-17-02-00 Sun, 2020-05-17 02:00:11 bambelle-2020-05-24-02-00 Sun, 2020-05-24 02:00:10 bambelle-2020-05-31-02-00 Sun, 2020-05-31 02:00:11 bambelle-2020-06-07-02-00 Sun, 2020-06-07 02:00:10 bambelle-2020-06-10-02-00 Wed, 2020-06-10 02:00:10 bambelle-2020-06-11-02-00 Thu, 2020-06-11 02:00:10 bambelle-2020-06-12-02-00 Fri, 2020-06-12 02:00:10 bambelle-2020-06-13-02-00 Sat, 2020-06-13 02:00:11 bambelle-2020-06-14-02-00 Sun, 2020-06-14 02:00:10 bambelle-2020-10-04-02-00 Sun, 2020-10-04 02:00:09 bambelle-2020-10-05-02-00 Mon, 2020-10-05 02:00:11 ```

4. Créer un dossier pour extraire l'archive de ton choix et l'extraire ``` $ mkdir ~/restauration $ cd ~/restauration $ borg extract ~/repo_bambelle ```

</markdown>

Il est aussi possible d'utiliser borg mount au lieu de borg extract pour examiner/picorer l'archive plutôt que de l'extraire d'un bloc.

1) , 2)
plus d'infos avec `–help`
3)
actuellement, carlota – Jocelyn 2020/10/05 23:53