[global]
engine=GitRepository
local_path=/tmp/local
frequency=daily
[source_1]
engine=PostgresSQL
host=localhost
user=test
password=testtest
database=testdb
destination_path=./postgres.sql
[source_2]
engine=MySQL
user=test
password=testtest
database=testdb
destination_path=./mysql.sql
[source_3]
engine=RSync
source_path=/tmp/source/files
destination_path=./files
Et en distant :[global]
engine=TarArchive
remote_url=file:///tmp/remote/archives/
on peut avoirpython run.py backup --show-commands --force --dry
PGPASSWORD=testtest
pg_dump --username=test --host=localhost --port=5432 testdb > /tmp/local/./postgres.sql
mysqldump --user=test --password=testtest --host=localhost --port=3306 testdb > /tmp/local/./mysql.sql
rsync -a --delete -S /tmp/source/files/ /tmp/local/./files/
echo '2016-05-05T13:56:32' > /tmp/local/.last-backup
cd /tmp/local
git init
git add .
git commit -am 'Backup 2016/05/05 13:56'
# register this backup state
cd /tmp/local
tar -cjf /tmp/local/archive-2016-05-05_13-56.tar.bz2 .last-backup files mysql.sql postgres.sql
cp /tmp/local/archive-2016-05-05_13-56.tar.bz2 /tmp/remote/archives/
flanker (./2) :"Flanker Backup" -> Flankup
Mais gros problème : va falloir que je trouve un nom sympa![]()
Zeph (./6) :En pratique, c'est exactement ça : si tu reprends l'exemple du premier post, le dépôt local correspond à /tmp/local/, dans lequel on va faire les dumps MySQL et PostgreSQL et copier les fichiers à sauvegarder depuis /tmp/source/files/.
1) repository ? je trouve ça encore moins explicite, mais OK je vois l'idée ^^ (un repository pour moi c'est un conteneur dans lequel on met des fichiers, du coup c'est curieux comme nom pour la section qui contient les paramètres par défaut, non ?)
2) OK mais comment trouve-t-il les fichiers ? Il faut qu'ils soient tous dans un dossier particulier (genre /etc/tonsoft), ou bien les spécifier en ligne de commande, ou encore il y a un index qui les référence tous ?Il prend tous les fichiers dans le dossier /etc/polyarch (ou l'équivalent dans un virtualenv s'il n'est pas installé globalement), mais tu peux spécifier bien sûr un autre dossier.
3) OKL'autre option serait d'utiliser les « entry_points » de Python. Ça pourrait permettre de déclarer n'importe quel alias pour les classes Python (et faire quelque chose d'insensible à la casse)
4) je me doutais que c'était quelque chose dans le genre, mais ça reste vraiment atroce(blague à part, c'est assez contre-intuitif, je ne connais pas un seul soft qui demande à mettre des options en PascalCase pour que ça fonctionne, surtout quand les options disponibles ressemblent à des commandes unix qui s'écrivent toujours en minuscule)
5) hmm oui c'est super mal formulé désolé, et entre temps je pense avoir compris : j'avais regardé le dernier exemple où on voit une option "engine" (tiens, encore un nom que je trouve peu explicite) et une autre "remote_url", or les deux me semblaient potentiellement incompatibles (par exemple "engine=git" avec "remote_url=webdav://machin" ça n'aurait pas beaucoup de sens). Mais en fait j'imagine que "remote_url" n'est valable que pour certaines valeurs de "engine" ; j'ai encore été trompé par le fait qu'on a deux paramètres au même niveau mais que l'un dépend de l'autre.Oui, en effet ; heureusement qu'il y a une commande qui affiche toutes les options pour chaque "engine".
PpHd (./14) :Si tu utilises duplicity comme type de dépôt distant, c'est automatiquement chiffré.
Tu as prévu de crypter le stockage sur le dépôts distants ?
$ python run.py
Traceback (most recent call last):
File "run.py", line 5, in <module>
from polyarchiv.cli import main
File "/home/vagrant/document/work/repository/PolyArchiv/polyarchiv/cli.py", line 16, in <module>
from pkg_resources import iter_entry_points
ImportError: No module named pkg_resources
Note que je ne suis pas sûr d'avoir lancé le bon fichier : je n'ai pas utilisé pip pour l'installation (je n'ai pas pip et je préfère éviter de l'installer juste pour un projet), donc j'ai simplement cloné le repo et tenté d'exécuter run.py. Petite correction au passage : les fichiers .py et .sh n'ont ni shebang ni permission en exécution par défaut $ polyarchiv plugins -v
configuration directory: /etc
available local repository engines:
* engine=files
Traceback (most recent call last):
File "/usr/local/bin/polyarchiv", line 9, in <module>
load_entry_point('polyarchiv==0.7.1', 'console_scripts', 'polyarchiv')()
File "/usr/local/lib/python2.7/dist-packages/polyarchiv/cli.py", line 107, in main
display_classes('polyarchiv.locals', verbose=verbose, width=width)
File "/usr/local/lib/python2.7/dist-packages/polyarchiv/cli.py", line 123, in display_classes
cprint(' ' + engine_cls.__doc__.strip(), GREY, BOLD)
File "/usr/local/lib/python2.7/dist-packages/polyarchiv/termcolor.py", line 108, in cprint
print((colored(text, color, on_color, attrs)), **kwargs)
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2018' in position 58: ordinal not in range(256)
[edit 2] De même, il a tendance à crasher dès qu'on utilise une commande qu'il ne connait pas. Par exemple polyarchiv backup (avec un "s" manquant) sort du programme avec une stack trace au lieu d'afficher un message d'erreur.[test]
engine=files
local_path=/tmp
Mais il me dit qu'il faut une section globale avec au moins un paramètre "engine". Je peux le faire, mais du coup j'ai l'impression de ne toujours pas avoir compris la signification de cette section particulière : je pensais qu'il s'agissait uniquement de paramètres globaux éventuellement écrasés par les sections déclarées ensuite, mais si elle est obligatoire ça doit vouloir dire que j'ai faux ?[global]
engine=tar
frequency=1
remote_url=file:///user/vagrant/backups/
En exécutant je m'attendais à ce que je ça me fasse un backup au format tar de /tmp dans /user/vagrant/backups/. La sortie standard termine par "[OK] remote repository my-remote on local repository my-local" ce qui a l'air d'être bon signe, mais mon dossier /user/vagrant/backups/ reste vide. Comment est-ce que je peux savoir si ça a marché, et où mes fichiers ont été copiés ?