photo of devloop

devloop :: blog

sécurité informatique, programmation, Linux et plus encore

dvbackup : Archivez vos données en ligne de commande sous Linux

, , , , ,

J'ai fait le tour des logiciels de sauvegarde sous Linux, j'ai croisé quelques solutions intéressantes comme Areca Backup ou Back In Time mais j'ai surtout découvert qu'aucun logiciel existant ne correspondait à mes besoins en terme de système de sauvegarde.

J'avais besoin d'un logiciel très simple, léger, permettant de créer des backups quand je le souhaite, loin des grosses solutions de sauvegarde incrémentale ou différentielle.

Je voulais donc un simple logiciel d'archivage mais je ne voulais pas avoir à aller rechercher les fichiers à archiver à chaque création de sauvegarde, surtout si c'est les même fichiers : Je voulais piocher au fur et à mesure les fichiers qui m'intéressent quand je le souhaite et qu'ils soient mémorisés pour la prochaine sauvegarde idea

Je voulais un système fonctionnant en ligne de commande pour ne pas avoir à cliquer dans une GUI et naviguer dans l'arborescence pour ajouter et retirer des fichiers zzz

Je voulais un système de gestion des fichiers proche de la ligne de commande de svn (commandes add, rm etc) mais avec une base de données centralisée (pas de fichiers cachés style .svn).

C'est comme ça que je me suis lancé dans la création du script Python dvbackup.py.

Le logiciel fonctionne grace à une base de données au format SQLite3 qui est placée dans ~/.config/dvbackup.rc sous Linux et Application Data\dvbackup.rc sous Windows.
Cette base de données est générée dès le premier lancement du programme et y conservera les fichiers que vous souhaitez sauvegarder avec leurs caractéristiques : date de dernière modification, taille du fichier et somme de contrôle md5 (cette dernière caractéristique n'est pas exploitée pour le moment mais tout de même stockée).

Pour indiquer que l'on souhaite sauvegarder un fichier, c'est très simple avec la commande add :
dvbackup.py add ~/.vimrc

Si on souhaite ajouter le contenu d'un répertoire de manière récursive, on fait de la même façon :
dvbackup.py add .gnupg/


On obtient la liste des fichiers à sauvegarder avec la commande list :
dvbackup.py list

/home/devloop/.vimrc
/home/devloop/.gnupg/pubring.gpg~
/home/devloop/.gnupg/secring.gpg
/home/devloop/.gnupg/gpg-agent.conf
/home/devloop/.gnupg/pubring.gpg
/home/devloop/.gnupg/gpgsm.conf
/home/devloop/.gnupg/agent.pid
/home/devloop/.gnupg/scdaemon.conf
/home/devloop/.gnupg/dirmngr.conf
/home/devloop/.gnupg/gpg.conf
/home/devloop/.gnupg/random_seed
/home/devloop/.gnupg/trustdb.gpg
/home/devloop/.gnupg/pubring.kbx
/home/devloop/.gnupg/agent.info


Pour retirer un fichier de la liste on utilise la commande del. Le chemin des fichiers pour chaque commande peut être aussi bien relatif que absolu. Ainsi si on est dans le dossier personnel il suffira de taper
dvbackup.py del .gnupg/agent.info


La commande check permet de lister les fichiers qui ont été modifiés depuis la dernière fois qu'ils ont été ajoutés à la base de données. dvbackup peut donc aussi être utilisé comme un logiciel de vérification d'intégrité ninja
Il faut toutefois tenir compte du fait que dvbackup ne gère que les fichiers et pas les répertoires. Il ne sera pas en mesure de voir si un fichier a été rajouté dans un répertoire. En revanche il signalera si un fichier a été supprimé.

La commande update met à jour les caractéristiques des fichiers (date, taille, hash md5). Là encore si un fichier est manquant un message est retourné.

Une fois que l'on est satisfait de sa base des fichiers à sauvegarder, on peut lancer l'archivage. Plusieurs commandes existent : tar, tarbz, targz et zip qui permettent de créer respectivement des archives en format .tar, .tar.bz2, .tar.gz et .zip. Il faut spécifier le nom du fichier de sortie. Par exemple :
dvbackup.py tarbz backup.tar.bz2


dvbackup offre des fonctionnalités supplémentaires comme le chiffrement/déchiffrement de fichiers en AES.
On utilisera la commande encrypt avec deux arguments : le nom du fichier à chiffrer suivi du nom de fichier qui sera généré. La commande decrypt fonctionne de la même façon. Exemple :
dvbackup.py encrypt backup.tar.bz2 backuptbz.enc

Un mot de passe vous sera demandé pour le chiffrement. Il sera hashé en SHA236 et le résultat utilisé pour le chiffrement AES du fichier.

La commande ip permet de vous donner votre adresse IP externe, telle que vous êtes vu depuis Internet.

La commande clear vide votre base de données des fichiers (les fichiers eux ne sont pas touchés). C'est une commande SQL DROP qui est soumise.

Pour terminer la commande help vous affiche l'ensemble des commandes disponibles que l'on a vu précédemment.

dvbackup utilise des codes de retour spécifique : 0 en cas de succès, 1 en cas de problème détecté (fichier manquant ou modifié) et 2 en cas d'erreur de l'utilisateur (comprendre mauvaise utilisation du logiciel et ses commandes). C'est pratique pour appeler le logiciel depuis un script.
L'affichage généré est très succinct et peut donc être réutilisé facilement par d'autres scripts (redirection pipe).

On peut imaginer une tache cron qui fait un check des fichiers, enregistre le résultat dans un journal, effectue un update, ajoute/supprime quelques fichiers de la base, créé une archive avec targz, la chiffre avec AES (encrypt) puis envoie le tout sur un serveur avec un autre logiciel.

Le script dvbackup.py (sous licence GNU GPL) est téléchargeable ici.

Mise à jour urlfilter.ini françaisJ'ai testé Patriot NG

Comments

Unregistered user Friday, May 6, 2011 8:27:56 AM

flem77 writes: Hello, je viens de tester ton script, très sympa.Par contre est-ce que les accents sont pris en charge car j'ai essayé d'ajouter un fichier sans accent qui est dans un répertoire avec accent et j'ai eu cette erreur: http://pastebin.com/DduSAxVB en essayant d'ajouter directement un fichier avec accent j'ai eu cette erreur: http://pastebin.com/UKBdXGZ9 @+

devloop Friday, May 6, 2011 12:34:08 PM

J'étais sûr d'avoir répondu mais j'ai du merder quelque part.

Pour les messages d'erreur, c'est les joies de l'unicode...
D'après la doc Python, les chaines renvoyées par sqlite devraient être de l'unicode par défaut :
http://docs.python.org/library/sqlite3.html#sqlite-and-python-types

Ca doit dépendre si ton système est lui en UTF-8 + la configuration Python.
Tu utilises quel OS ?

Unregistered user Friday, May 6, 2011 1:11:08 PM

flem77 writes: j'utilise debian squeeze.

devloop Saturday, June 4, 2011 12:56:46 PM

Le script a été mis à jour.
Testé sur mon système openSUSE, fonctionne avec les accents.
Il faut que tu le re-télécharges, même adresse.

Write a comment

New comments have been disabled for this post.