Script bash pour sauvegarde svn et trac sur ftp

bonsoir

j’ai monté un serveur svn et trac récemment chez moi pour les besoins d’un projet en groupe important
j’en suis presque content mais j’ai peur que mon serveur perso ai un problème et donc j’aimerais pouvoir sauvegarder mon svn et mon trac
j’ai grace à google trouver des choses mais pas exactement ce que je veut parceque je veut une vrai sauvegarde (donc les données sorte du pc (par mail ou ftp par exemple)
le problème c’est que par mail cela va vite saturé je pense donc j’aimerais envoyé une sauvegarde sur un serveur ftp (free sera parfait je pense)
mon problème c’est que je n’ai jamais fait de script bash et que je n’ai pas la moindre idée de comment faire
de plus idéalement (je sais pas si c’est possible) la sauvegarde se ferais toute les heures si il ya eu un changement (si as de changement pas besoin de faire une nouvelle sauegarde)
j’ai trouver ça qui va je pense beaucoup m’aider :
http://www.fbollon.net/node/77

mais je me demandais si vous pouviez m’aidé aussi :smt006 :mrgreen:
parceque je sais vraiment pas comment faire et je ne sais meme pas si c’est possible
merci :wink:

Salut,

Ce que j’ai sur mon serveur SVN pourrait probablement être un bon point de départ pour tes recherches :

J’ai ajouté cette règle au cron de mon utilisateur root (grâce à crontab -e) :

Le script /srv/scripts/svn_dump.sh est donc exécuté à 3h30 toutes les nuits. Toutes les heures, cela donnerait :

Le script en question est le suivant (pense aux droits d’exécution) :

[code]##============================================================================

Fichier : svn_dump.sh

Auteur : Phil

Licence : GPLv3 - http://www.gnu.org/licenses/gpl.html

Description : Script de dump des projets SVN

##============================================================================

Parametres d’entree : aucun

Code de retour :

0 - Retour par defaut (on suppose un succes du dump)

##============================================================================
#!/bin/bash

Liste des entrees de /var/svn sauf les fichiers de configuration DAV_SVN

for repo in ls /var/svn/ | grep -v "dav_svn"
do
echo “Sauvegarde du dépôt ${repo}”

# Avant
echo -e "Dépôt original :\t`du -hs /var/svn/${repo}`"

# Pour chaque depot SVN, on effectue un dump que l'on compresse
svnadmin dump -q /var/svn/${repo} | gzip > /srv/sauvegardes/svn/"${repo}".dump.gz

# Apres
echo -e "Dépôt sauvegardé :\t`du -h /srv/sauvegardes/svn/${repo}*`\n"

done

exit 0
[/code]

Extrêmement simple à comprendre/adapter :

  • Chaque dépôt SVN dans /var/svn, dont le nom ne contient pas “dav_svn” (je place dans le répertoire mes fichiers d’autorisations d’accès), est “dumpé” par svnadmin puis gzipé à la volée.
  • Le reste est de l’affichage (taille avant/après)…
  • Il te resterait à ajouter une commande pour envoyer par FTP (man ftp, je n’ai jamais fait ça).

Bon courage.

J’ai zappé la sauvegarde de Trac.

Tu peux probablement ajouter à la fin du script un rsync -a /var/www/trac /home/cheztoi/depart/ (à adapter) et choisir comme emplacement de dump svn (voire plus tôt) /home/cheztoi/depart/ également.

Comme ça une seule commande ftp te sauvera la mise (après un tar -cf backup.tar /home/cheztoi/depart/*).

Bonne chance.

merci
mais en faite ce qui me pose problèmes c’est que j’aimerais faire une sauvegarde toutes les heures mais uniquement si quelques chose a changer (dans le svn ou le trac)
et c’est ça que je sais pas faire
peut etre en gardant le fichier de sauvegarde de il y a une heure pour comparer le md5 avec le nouveau ? comme ça si c’est les meme on envoie pas sur le ftp (et dans tout les cas on supprime celui qui est plus vieux ?

Exactement, md5sum ou diff : ce ne sont pas les solutions qui manquent, il te reste simplement à écrire un petit script pour ça appelé par le Cron.

Scénario :

  • Après la commande FTP du fais mv backup.tar backup_old.tar
  • La commande ftp et ce dernier mv sont dans un if [ “$(md5sum backup.tar)” != “$(md5sum backup_old.tar)” ]

Bon courage.

merci je vais essayer de faire ça ce WE

Juste un point, j’ai répondu un peu vite : je dirais que la commande md5sum prend en compte le nom du fichier… Du coup ce sera toujours différent avec ma méthode :slightly_smiling:

Il faut écrire le md5sum du fichier dans un autre fichier temporaire !

Bon courage.