Updated French README.

This commit is contained in:
Benoît S. 2015-08-28 19:01:06 +02:00
parent ecd3190fdd
commit e6bd94031e
3 changed files with 258 additions and 232 deletions

232
README
View file

@ -1,232 +0,0 @@
EvoBackup
=========
en :
EvoBackup is a bunch of shell scripts to create a backup server which will
handle the backup of many servers (clients). Licence is GPLv2.
The main principle uses SSH chroot (called "jails" in the FreeBSD
world) for each client to backup. Each client will upload his data every day
using rsync in his chroot (using root account).
Incrementals are stored outside of the chroot using hard links. (So incrementals
are not available for clients). Using this method we can keep tens of backup of
each client securely and not using too much space.
Backup server
************
Server 1 ------ SSH/rsync -------> * tcp/2222 *
* *
Server 2 ------ SSH/rsync -------> * tcp/2223 *
************
This method uses standard tools (ssh, rsync, cp -al). EvoBackup is used for
many years by Evolix for back up each day hundreds of servers which uses many
terabytes of data.
fr :
EvoBackup est un ensemble de scripts permettant de mettre en place
un service de backups gérant les sauvegardes de plusieurs machines.
Le principe est d'installer des prisons/chroot contenant un service
SSH écoutant sur un port différent dans chaque prison. Chaque serveur
peut ainsi envoyer ses données quotidiennement en "root" via rsync
dans sa propre prison. Les prisons sont ensuite copiées en dehors des
prisons (donc inacccessible par les serveurs) de façon incrémentale
grâce à des "hard links". On peut ainsi conserver des dizaines de
sauvegardes de chaque serveur de façon sécurisé et avec peu de place.
**************************
Serveur 1 ------SSH/rsync -------> * tcp/2222 Serveur *
* de *
Serveur 2 ------SSH/rsync -------> * tcp/2223 Sauvegardes *
**************************
Cette technique de sauvegarde s'appuient sur des technologies
standards. Elle est utilisée depuis plusieurs années par Evolix
pour sauvegarder chaque jour des centaines de serveurs représentant
plusieurs To de données incrémentales.
Serveur de sauvegardes
----------------------
Le serveur de sauvegardes doit être sous Debian Wheezy (voire Ubuntu 13.04)
(testé aussi sous Etch/Lenny/Squeeze, mais les instructions sont pour Wheez
y).
Avec les logiciels suivants :
- OpenSSH
- Rsync (le daemon rsync n'est pas nécessaire)
- Le paquet makedev (plus nécessaire depuis Squeeze)
- Commande "mail" (ou un équivalent) capable d'envoyer
des messages à l'extérieur.
Un volume d'une taille importante doit être monté sur /backup
Pour des raisons de sécurité on pourra chiffre ce volume.
On créera ensuite les répertoires suivants :
- /backup/jails : pour les prisons
- /backup/incs : pour les copies incrémentales des prisons
- /etc/evobackup : config des fréquences des copies incrémentales
Serveurs à sauvegarder
----------------------
On peut sauvegarder différents systèmes : Linux, BSD, Windows, MacOSX.
L'un des seuls réels prérequis est d'avoir rsync.
Installation d'une sauvegarde
-----------------------------
Côté serveur de sauvegardes
~~~~~~~~~~~~~~~~~~~~~~~~~~~
0) On récupère les sources via http://git.evolix.org/git/evolinux/evobackup.git
# umask 007 && mkdir /etc/evobackup && cp -v evobackup /etc/init.d/evobackup
# cd /etc/init.d/ && insserv evobackup
Et on mettra en place des backups incrémentaux sur le serveur :
- Mettre en place les scripts evobackup-inc.sh et evobackup-rm.sh dans /usr/share/scripts
- Mettre les droits d'exécution : chmod u+x /usr/share/scripts/evobackup-{inc,rm}.sh
- Activer le crontab suivant (ajuster éventuellement les heures) :
29 10 * * * pkill evobackup-rm.sh && echo "Kill evobackup-rm.sh done" | mail -s "[warn] EvoBackup - purge incs interrupted" root
30 10 * * * /usr/share/scripts/evobackup-inc.sh && /usr/share/scripts/evobackup-rm.sh
Note 1 : si l'on veut plusieurs backups dans la journée (1 par heure maximum),
on pourra lancer /usr/share/scripts/evobackup-inc.sh à plusieurs reprises...
ce qui fonctionnera sous réserve qu'entre temps les données ont bien changé !
Note 2 : si l'on ne veut *jamais* supprimer les backups incrémentaux, on pourra se contenter
de ne jamais lancer le script evobackup-rm.sh
Si le noyau du serveur est patché avec GRSEC, on évitera pas mal
de warnings en positionnant les paramètres Sysctl suivants :
# sysctl kernel.grsecurity.chroot_deny_chmod=0
# sysctl kernel.grsecurity.chroot_deny_mknod=0
Note : plus nécessaire avec un noyau récent a priori
1) Pour installer une "prison" :
- Exporter la variable $JAIL avec le nom d'hôte saisit dans la grille :
# export JAIL=<nom d'hote>
- Se placer dans le bon répertoire (attention, ne pas déplacer le script car
il a besoin du répertoire etc/ !) puis exécuter :
# bash chroot-ssh.sh -n /backup/jails/$JAIL -i <ip> -p <port> -k <pub-key-path>
Note 1 : Ignorer une éventuelle erreur avec ld-linux-x86-64.so.2 (32bits) ou ld-linux.so.2 (64bits)
Note 2 : -i <ip> et -p <port> sont optionnels, vous pouvez ajuster /backup/jails/$JAIL/etc/ssh/sshd_config
Note 3 : si une prison a déjà été crée, -p guess vous permettra de deviner le prochain port disponible
Note 4 : -k <pub-key-path> est optionnel, vous pouvez ajouter la clé publique du client dans le fichier
/backup/jails/$JAIL/root/.ssh/authorized_keys déjà existant
2) On lance la prison :
# mount -t proc proc-chroot /backup/jails/$JAIL/proc/
# mount -t devtmpfs udev /backup/jails/$JAIL/dev/
# mount -t devpts devpts /backup/jails/$JAIL/dev/pts
# chroot /backup/jails/$JAIL /usr/sbin/sshd > /dev/null
Pour vérifier que tout est OK :
# /etc/init.d/evobackup reload
3) Gestion des sauvegardes incrémentales
Pour activer les gestions des copies incrémentales,
créer le fichier /etc/evobackup/$JAIL contenant par
exemple :
+%Y-%m-%d.-0day
+%Y-%m-%d.-1day
+%Y-%m-%d.-2day
+%Y-%m-%d.-3day
+%Y-%m-01.-0month
+%Y-%m-01.-1month
Quelques explications sur cette syntaxe particulière.
Par exemple, la ligne ci-dessous signifie "garder la sauvegarde du
jour actuel" (à toujours mettre sur la première ligne a priori) :
+%Y-%m-%d.-0day
La ligne ci-dessous signifie "garder la sauvegarde d'hier" :
+%Y-%m-%d.-1day
La ligne ci-dessous signifie "garder la sauvegarde du 1er jour du
mois courant" :
+%Y-%m-01.-0month
Toujours le même principe, on peut garder celle du 1er jours du
mois dernier :
+%Y-%m-01.-1month
Et bien sûr, on peut garder aussi le 15e jour (pour avoir une sauvegarde
toutes les 15 jours, le 1er janvier de chaque année, etc.)
Attention, la création de ce fichier est *obligatoire* pour activer
les copies incrémentales. Si l'on veut garder des copies advitam aeternam
sans jamais les supprimer, on se contentera de ne pas lancer le script
evobackup-rm.sh.
Côté serveur à sauvegarder
~~~~~~~~~~~~~~~~~~~~~~~~~~
0) On récupère les sources via http://git.evolix.org/git/evolinux/evobackup.git
1) Générez une clé SSH pour l'utilisateur "root" :
# ssh-keygen
(Ne pas la protéger par une passphrase, sauf si un humain
va l'entrer manuellement à chaque sauvegarde effectuée)
(La clé générée doit être de type RSA et non DSA !!)
Notes pour les serveurs sous Windows :
* téléchargez et installez CygWin : http://cygwin.com/setup-x86.exe
* choisissez le mirroir http://mirrors.kernel.org
* choisissez les paquets "rsync" et "openssh" grâce à la recherche,
ils sont dans la catégorie "Net", vous devez les cocher.
* ouvrez CygWin. Dans le terminal, tapez : ssh-keygen.exe
* la clé générée se trouve dans C:\cygwin\home\USER\.ssh\
2) Envoyez le fichier "id_rsa.pub" au responsable du serveur de
sauvegarde, ainsi que l'adresse IP de la machine.
3) Ajoutez à la crontab le fichier "zzz_evobackup" pour Linux / BSD.
Pour une sauvegarde quotidienne (conseillé), utilisez le répertoire
"/etc/cron.daily/" (sous Linux) ou "/etc/periodic/daily" (sous FreeBSD).
Il faut éventuellement ajuster le script en supprimant les lignes "--exclude"
si l'on ne souhaite pas exclure les fichiers/répertoires de cette ligne et
ajouter/supprimer les lignes en dessous pour sauvegarder les bons répertoires.
($rep désigne les données systèmes). Vous pouvez donc choisir librement ce
que vous désirez sauvegarder.
Vous devez aussi décommenter les lignes spécifiques pour les services (MySQL, LDAP,
MongoDB, etc.) en les ajustant si nécessaire.
Note pour les serveurs sous Windows : vous devrez créer un tâche planifiée avec une
commande "rsync" installé via CygWin.
4) Une fois que tout en place au niveau du serveur de sauvegardes,
on doit initier la première connexion :
# ssh -p <port> <serveur de sauvegardes>
Mise-à-jour du serveur de sauvegardes
-------------------------------------
En cas d'une mise-à-jour d'un paquet lié à SSH ou rsync côté
serveur de sauvegardes, on mettra à jour ainsi :
# sh chroot-ssh.sh updateall
# /etc/init.d/evobackup restart

25
README_EN.md Normal file
View file

@ -0,0 +1,25 @@
EvoBackup
=========
EvoBackup is a bunch of shell scripts to create a backup server which will
handle the backup of many servers (clients). Licence is GPLv2.
The main principle uses SSH chroot (called "jails" in the FreeBSD
world) for each client to backup. Each client will upload his data every day
using rsync in his chroot (using root account).
Incrementals are stored outside of the chroot using hard links. (So incrementals
are not available for clients). Using this method we can keep tens of backup of
each client securely and not using too much space.
Backup server
************
Server 1 ------ SSH/rsync -------> * tcp/2222 *
* *
Server 2 ------ SSH/rsync -------> * tcp/2223 *
************
This method uses standard tools (ssh, rsync, cp -al). EvoBackup is used for
many years by Evolix for back up each day hundreds of servers which uses many
terabytes of data.
More documentation TODO…

233
README_FR.md Normal file
View file

@ -0,0 +1,233 @@
[TOC]
Présentation d'EvoBackup
===
**EvoBackup** est un ensemble de scripts permettant de mettre en place
un service de backups gérant les sauvegardes de plusieurs machines.
Le principe est d'installer des prisons/chroot contenant un service
SSH écoutant sur un port différent dans chaque prison. Chaque serveur
peut ainsi envoyer ses données quotidiennement en "root" via rsync
dans sa propre prison. Les prisons sont ensuite copiées en dehors des
prisons (donc inaccessible par les serveurs) de façon incrémentale
grâce à des "hard links". On peut ainsi conserver des dizaines de
sauvegardes de chaque serveur de façon sécurisé et avec peu de place.
**************************
Serveur 1 ------SSH/rsync -------> * tcp/2222 Serveur *
* de *
Serveur 2 ------SSH/rsync -------> * tcp/2223 Sauvegardes *
**************************
Cette technique de sauvegarde s'appuient sur des technologies
standards. Elle est utilisée depuis plusieurs années par Evolix
pour sauvegarder chaque jour des centaines de serveurs représentant
plusieurs To de données incrémentales.
Evobackup a été testé pour les serveurs sous Debian (Wheezy/Jessie).
Cela peut fonctionner pour d'autres distributions tel Ubuntu.
La documentation se concentre sur une mise en place pour Debian Jessie.
Logiciels nécessaires :
- OpenSSH
- Rsync (le daemon rsync n'est pas nécessaire)
- Le paquet makedev (plus nécessaire depuis Squeeze)
- Commande "mail" (ou un équivalent) capable d'envoyer
des messages à l'extérieur.
Un volume d'une taille importante doit être monté sur /backup
Pour des raisons de sécurité on pourra chiffrer ce volume.
On créera ensuite les répertoires suivants :
- /backup/jails : pour les prisons
- /backup/incs : pour les copies incrémentales des prisons
- /etc/evobackup : config des fréquences des copies incrémentales
On peut sauvegarder différents systèmes : Linux, BSD, Windows, MacOSX.
L'un des seuls réels prérequis est d'avoir rsync.
Installation EvoBackup côté serveur
===
On récupère les sources via https://forge.evolix.org/projects/evobackup/repository et on mets en place les scripts nécessaires.
```
# git clone https://forge.evolix.org/evobackup.git
# cd evobackup
# mkdir -m750 /etc/evobackup
# install -v -m700 evobackup /etc/init.d/
# cd /etc/init.d/ && insserv evobackup
```
Mettre en place les scripts evobackup-inc.sh et evobackup-rm.sh dans /usr/share/scripts
```
# install -v -m 700 evobackup-{rm,inc}.sh /usr/share/scripts/
```
Activer la crontab suivante (ajuster éventuellement les heures) :
```
29 10 * * * pkill evobackup-rm.sh && echo "Kill evobackup-rm.sh done" | mail -s "[warn] EvoBackup - purge incs interrupted" root
30 10 * * * /usr/share/scripts/evobackup-inc.sh && /usr/share/scripts/evobackup-rm.sh
```
> **Notes :**
> - Si l'on veut plusieurs backups dans la journée (1 par heure maximum),
on pourra lancer `/usr/share/scripts/evobackup-inc.sh` à plusieurs reprises…
Ce qui fonctionnera sous réserve qu'entre temps les données ont bien changés !
> - Si l'on ne veut **jamais** supprimer les backups incrémentaux, on pourra se contenter
de ne jamais lancer le script `evobackup-rm.sh`.
Si le noyau du serveur est patché avec *GRSEC*, on évitera pas mal
de warnings en positionnant les paramètres Sysctl suivants :
```
# sysctl kernel.grsecurity.chroot_deny_chmod=0
# sysctl kernel.grsecurity.chroot_deny_mknod=0
```
--- **À vérifier** --- Plus nécessaire avec un noyau récent a priori.
Créer une prison
---
Exporter la variable `$JAIL` avec le nom d'hôte de la machine a sauvegarder :
# export JAIL=<nom d'hote>
Se placer dans le répertoire racine de EvoBackup (attention, ne pas déplacer le script `chroot-ssh` car
il a besoin du répertoire etc/ !) puis exécuter :
# bash chroot-ssh.sh -n /backup/jails/$JAIL -i <ip> -p <port> -k <pub-key-path>
> **Notes :**
> - Ignorer une éventuelle erreur avec `ld-linux-x86-64.so.2` (32bits) ou `ld-linux.so.2` (64bits).
> - `-i <ip>` et `-p <port>` sont optionnels, vous pouvez ajuster `/backup/jails/$JAIL/etc/ssh/sshd_config`.
> - Si une prison a déjà été crée, `-p guess` vous permettra de deviner le prochain port disponible.
> - `-k <pub-key-path>` est optionnel, vous pouvez ajouter la clé publique du client dans le fichier
`/backup/jails/$JAIL/root/.ssh/authorized_keys` déjà existant.
Lancer la prison :
```
# mount -t proc proc-chroot /backup/jails/$JAIL/proc/
# mount -t devtmpfs udev /backup/jails/$JAIL/dev/
# mount -t devpts devpts /backup/jails/$JAIL/dev/pts
# chroot /backup/jails/$JAIL /usr/sbin/sshd > /dev/null
```
Vérifier que tout est OK :
# /etc/init.d/evobackup reload
Gestion des sauvegardes incrémentales :
Pour activer les gestions des copies incrémentales,
créer le fichier `/etc/evobackup/$JAIL` contenant par
exemple :
+%Y-%m-%d.-0day
+%Y-%m-%d.-1day
+%Y-%m-%d.-2day
+%Y-%m-%d.-3day
+%Y-%m-01.-0month
+%Y-%m-01.-1month
> **Quelques explications sur cette syntaxe particulière.**
> - Par exemple, la ligne ci-dessous signifie "garder la sauvegarde du
jour actuel" (à toujours mettre sur la première ligne a priori) :
`+%Y-%m-%d.-0day`
> - La ligne ci-dessous signifie "garder la sauvegarde d'hier" :
`+%Y-%m-%d.-1day`
> - La ligne ci-dessous signifie "garder la sauvegarde du 1er jour du
mois courant" :
`+%Y-%m-01.-0month`
>- Toujours le même principe, on peut garder celle du 1er jours du
mois dernier :
`+%Y-%m-01.-1month`
Et bien sûr, on peut garder aussi le 15e jour (pour avoir une sauvegarde
toutes les 15 jours, le 1er janvier de chaque année, etc.)
Attention, la création de ce fichier est **obligatoire** pour activer
les copies incrémentales. Si l'on veut garder des copies *advitam aeternam*
sans jamais les supprimer, on se contentera de ne pas lancer le script
`evobackup-rm.sh`.
Copier une prison sur un second serveur :
Dans le cas où l'on dispose de plusieurs serveurs de sauvegarde configurés en
mode nœuds, il est recommandé de créer la prison sur un nœud puis la copier sur l'autre nœud.
On utilisera rsync pour faire ceci.
```
# rsync -av --exclude='var/backup/**' --exclude='proc/**' --exclude='dev/**' \
/backup/jails/$JAIL/ ${AutreNœud}:/backups/jails/$JAIL/
```
Ainsi le second nœud aura exactement la même prison (et même empreinte SSH).
Mise-à-jour du serveur de sauvegardes
---
En cas d'une mise-à-jour d'un paquet lié à SSH ou rsync côté
serveur de sauvegardes, on mettra à jour les prisons ainsi :
```
# ./chroot-ssh.sh -n updateall
# /etc/init.d/evobackup restart
```
Installation EvoBackup côté client
===
On récupère les sources via https://forge.evolix.org/projects/evobackup/repository
```
# git clone https://forge.evolix.org/evobackup.git
# cd evobackup
```
Générer une clé SSH pour l'utilisateur "root" :
# ssh-keygen
> **Notes : **
> - Ne pas la protéger par une passphrase, sauf si un humain
va l'entrer manuellement à chaque sauvegarde effectuée.
> - La clé générée doit être de type RSA et non DSA !!
> **Notes pour les machines sous Windows : **
> - Téléchargez et installer CygWin : http://cygwin.com/setup-x86.exe
> - Choisissez le mirroir http://mirrors.kernel.org
choisissez les paquets "rsync" et "openssh" grâce à la recherche,
ils sont dans la catégorie "Net", vous devez les cocher.
> - Ouvrez CygWin. Dans le terminal, tapez : `ssh-keygen.exe`.
> - La clé générée se trouve dans `C:\cygwin\home\USER\.ssh\`.
Envoyer le fichier `id_rsa.pub` au responsable du serveur de
sauvegarde, ainsi que l'adresse IP de la machine.
Ou bien reportez-vous à la création d'une prison sur le serveur de sauvegarde.
Ajouter à la crontab le fichier `zzz_evobackup` pour Linux / BSD :
Pour une sauvegarde quotidienne (conseillé), utilisez le répertoire
`/etc/cron.daily/` (sous Linux) ou `/etc/periodic/daily` (sous FreeBSD).
# install -v -m700 zzz_evobackup /etc/cron.daily/
Il faut éventuellement ajuster le script en supprimant les lignes `--exclude`
si l'on ne souhaite pas exclure les fichiers/répertoires de cette ligne et
ajouter/supprimer les lignes en dessous pour sauvegarder les bons répertoires.
(`$rep` désigne les données systèmes). Vous pouvez donc choisir librement ce
que vous désirez sauvegarder.
Vous devez aussi dé-commenter les lignes spécifiques pour les services (MySQL, LDAP,
MongoDB, etc.) en les ajustant si nécessaire.
Note pour les serveurs sous Windows : vous devrez créer un tâche planifiée avec une
commande "rsync" installé via CygWin.
Une fois que tout en place au niveau du serveur de sauvegardes,
on doit initier la première connexion et valider l'empreinte SSH du serveur :
# ssh -p <port> <serveur de sauvegardes>