Sauvegarde – via RSS

Un petit hack de 5min pour télécharger des sauvegardes via un agrégateur RSS.

Pour faire court, je cherchai un moyen simple, fiable et peu couteux en temps de rapatrier automatiquement les sauvegardes de ce site chez moi, sur mon NAS (un Synology).

Il existe plein de manière de le faire, mais je voulais un truc qui marche tout de suite sans installer quoi que ce soit d’un coté (serveur) ou de l’autre (NAS).

Ce NAS dispose d’un logiciel bien pratique pour télécharger automatiquement des podcasts via leurs flux RSS, j’ai donc décidé de m’en servir pour récupérer mes sauvegardes. Il faut juste lui donner l’adresse d’un XML et lui dire où copier les données.

Le script suivant permet de générer ce XML :

#!/bin/bash
#une petite rotation avant de créer le XML
/usr/sbin/logrotate -f  /etc/logrotate.d/backup
#emplacement des fichiers à récupérer
BASEDIR='/home/backups'
#adresse à utiliser pour les liens vers les fichiers
URL='http://mon.serveur.internet'
DATE=`date -R`
cd $BASEDIR
#une petite boucle qui va créer un XML pour chaque dossier
for DIR in `ls`;do
    Dtype=`stat --printf="%F" $DIR`
    if [ "$Dtype" == "directory" ]; then
        echo '<?xml version="1.0" ?>
            <rss version="2.0">
                <channel>
                    <title>Les fichiers du dossier '$DIR'</title>
                    <link>'$URL'/'$DIR'.xml</link>
                    <description>Backup '$DIR'</description>
                    <lastBuildDate>'$DATE'</lastBuildDate>'
        > $BASEDIR/$DIR.xml
        #une autre boucle qui va créer une entrée "item" pour chaque fichier
        cd $DIR
        for FILE in `find . -type f`; do
            Fname=`basename $FILE`
            Fsize=`stat --printf=%s $FILE`
            Fdate=`stat --printf=%Y $FILE`
            Fdate=`date -R -d @$Fdate`
            Fmime=`file --mime-type $FILE | awk '{print $2}'`
            echo '<item>
                <title>'$Fname'</title>
                <guid isPermaLink="false">'$URL'/'$DIR'/'$Fname'</guid>
                <pubDate>'$Fdate'</pubDate>
                <enclosure url="'$URL'/'$DIR'/'$Fname'" length="'$Fsize'" type="'$Fmime'"></enclosure>
            </item>'
            >> $BASEDIR/$DIR.xml
        done
        echo '</channel>
        </rss>' >> $BASEDIR/$DIR.xml
        cd $BASEDIR
    fi
done

Il ne reste plus qu’à planifier l’exécution de ce script sur le serveur afin qu’il actualise les XML et à donner leurs adresses au NAS qui se charge du reste (il va régulièrement vérifier si le flux RSS a été mis à jour et le cas échéant télécharge les nouvelles sauvegardes).

Je n’ai pas testé avec d’autres logiciels de podcast (je n’utilise que celui de Synology), mais ça devrait marcher avec la plupart d’entre eux.

Veillez bien à ce que ces XML et surtout les fichiers qui y sont référencés (vos sauvegardes) ne soient pas accessibles à tout le monde !!!!

Laisser un commentaire