Backup du dump SPIP (dand une page perso Free) via CURL
Par olberger le mardi, janvier 23 2007, 12:17 - technique - Lien permanent
J'ai mis en place un site SPIP dans une page perso Free.
SPIP propose une interface permettant de sauvegarder un fichier de dump SPIP, qui permet de restaurer le site (si tout va bien), mais elle est accessible uniquement en tant qu'administrateur en mode connecté, et nécessite la création d'un truc en FTP... bref, pas cool pour automatiser les sauvegardes.
J'ai donc bidouillé un truc avec CURL qui permet de récupérer le dump et de faire des sauvegardes automatisées, donc, en crontab.
Voici le dirty hack, sans m'être plongé dans le code de SPIP pour savoir si on peut faire mieux et, comme de bien entendu, vous l'utilisez à vos risques et périls.
#! /bin/bash
#set -x
login=votre_login_free
user=votre_user_spip
password=votre_mdp
sauvegarde=$(tempfile)
count=5
while [ $count -gt 0 ]
do
echo "Attempt at saving a dump for http://$login.free.fr/spip/"
curl -s -S -L -c cookies.txt -D curl.headers -d "session_login_hidden=$user&session_login=$user&session_password=$password&session_remember=oui&essai_login=oui&url=ecrire/?exec=export_all&reinstall=non" "http://$login.free.fr/spip/spip.php?action=cookie" >$sauvegarde
if [ $? -ne 0 ] ; then
echo "problème : vérifier dans $sauvegarde"
exit 1
fi
grep -q 'Sauvegarde réussie.' $sauvegarde
if [ $? -eq 0 ]; then
break
else
let count--
fi
grep -q "NAME\='fichier'" $sauvegarde
if [ $? -eq 0 ]; then
filename=$(grep "NAME\='fichier'" $sauvegarde | sed 's/.*VALUE="//' | sed 's/".*//')
if [ "x$filename" != "x" ]; then
echo "ftp://ftpperso.free.fr/spip/ecrire/data/$filename/ must be created"
echo "hello" | curl -s -S -T - -u $login:$password --ftp-create-dirs ftp://ftpperso.free.fr/spip/ecrire/data/$filename/hello.txt
rm $sauvegarde
sleep 10
fi
else
sleep 5
echo " Sauvegarde pas reussie et pas de fichier a crer demande, on boucle..."
fi
done
if [ $count -gt 0 ]; then
grep -q "La base a été sauvegardée dans <b>ecrire/data/dump.xml</b>" $sauvegarde
if [ $? -eq 0 ]; then
dumpfile=$(grep "La base a été sauvegardée dans <b>ecrire/data/dump.xml</b>" $sauvegarde | sed "s/.* sauvegardée dans <b>//" | sed "s/<\/b>.*//")
if [ "x$dumpfile" != "x" ]; then
echo "OK, dump has been saved by SPIP in ftp://ftpperso.free.fr/spip/$dumpfile"
echo "Waiting 30 seconds"
sleep 30
curl -s -S -O -u $login:$password ftp://ftpperso.free.fr/spip/$dumpfile
date=$(date +%Y-%m-%d-%H-%M-%S)
file=$(basename $dumpfile)
mv $file $date"_$file"
file=$date"_$file"
grep -q '<SPIP version="1.9.1" version_base="1.917" version_archive="1.3">' $file
if [ $? -ne 0 ]; then
echo "problem in $file : wrong xml header"
exit 1
fi
grep -q '</SPIP>' $file
if [ $? -ne 0 ]; then
echo "problem in $file : wrong xml footer"
exit 1
fi
echo "OK, dump downloaded to $file."
ls -l $file
else
echo "problem"
exit 1
fi
else
echo "problem"
exit 1
fi
fi
echo "Purging old dumps if necessary"
ls -1 *_dump.xml | sort -u | head -n-10 | xargs -r rm -v