Mes passions, le boulots, mes coups de gueule...




Raspberry Pi : Upload d’un backup vers un serveur FTP avec la commande cURL

Catégories : Geek, Informatique, Linux, Raspberry Pi · par 8 Sep 2015

Introduction

Il y a quelques temps, j’ai publié des articles qui décrivaient la marche à suivre pour effectuer un backup de la carte SD d’un Raspberry Pi :

Problème, en cas de cambriolage, d’incendie ou de défauts électriques comme la foudre, on peut perdre le Pi et le HD contenant les backups.

La solution décrite ci-dessous va nous permettre d’uploader la sauvegarde vers le cloud en FTP grâce à la commande cURL.

Mise en œuvre

Upload

Nous allons utiliser la commande CURL pour envoyer le fichier backup-YYYYmmdd-hhmm.gz vers le serveur FTP.

Dans notre exemple, nous utiliserons le serveur ftp.netcourrier.com sur lequel j’ai un espace payant.

$ sudo curl -T /media/RPi-USB-Dsk/Backups/backup-YYYYmmdd-hhmm.gz ftp://ftp.netcourrier.com/CheminVersBackup/ --user Login:Password --disable-epsv

L’option -T permet d’uploader un fichier.

On indique ensuite le chemin vers le fichier d’origine.

Puis, le chemin vers le dossier de destination.

Le login et le mot de passe viennent après --user. On peut également utiliser l’abréviation -u Login:Password en début de commande.

Attention ! : Si le login contient un @ (Ex: une adresse mail comme login) on passera par un script dans lequel on définira des constantes :

log=login@netcourrier.com
pass=Password

Elles seront reprises comme ceci dans la commande du script :

curl -T /media/RPi-USB-Dsk/Backups/backup-YYYYmmdd-hhmm.gz ftp://ftp.netcourrier.com/CheminVersBackup/ --user $log:$pass --disable-epsv

L’option --disable-epsv indique au serveur d’entamer une session FTP passive plutôt qu’active.

Suppression d’un fichier

Pour supprimer un fichier la commande est similaire :

curl ftp://ftp.netcourrier.com/Backups_RPi/ -Q "-DELE backup-$(date --date="21 days ago" +%Y%m%d)-0330.gz" --user $log:$pass --disable-epsv

Là, on va supprimer un backup âgé de 3 semaines pour ne garder que les 3 plus récents sur le serveur.

Limiter la vitesse de transfert

Afin de ne pas monopoliser toute la bande passante montante, on peut limiter la vitesse de transfert avec cette option à la fin de la commande :

--limit-rate <speed>

Par défaut les valeurs <speed> sont données en octets/sec. Mais on peut définir le vitesse en ko/sec ou mo/sec avec k ou m :

--limit-rate 50k

Pour 50 ko/sec.

Le script

Je vous suggère de reprendre le script réalisé dans cet article et d’y ajouter quelques lignes à la fin.

Pour rappel, on édite le fichier comme ceci :

$ sudo nano /home/pi/RPi-Backup.sh
#!/bin/sh

echo "Exécution du script de Backup"
echo "============================="
echo "$(date +%Y%m%d-%T)"
echo

# Mémorisation de l'heure du début du backup
hback=$(date +%H%M)

# Arret des services
echo
echo "$(date +%Y%m%d-%T) : Arret des services"
echo
sudo service minidlna stop
sudo service transmission-daemon stop
sudo service nginx stop
sudo service mysql stop
sudo service php5-fpm stop
sudo service fr24feed stop

sleep 3

# Suppression des paquets périmés
echo
echo "$(date +%Y%m%d-%T) : Suppression des paquets périmés"
echo
sudo apt-get autoclean

sleep 3

# Suppression du contenu de la corbeille de Root
echo
echo "$(date +%Y%m%d-%T) : Suppression du contenu de la corbeille de Root"
echo
sudo rm -r -f -v /root/.local/share/Trash/files/*

# Suppression du contenu de la corbeille de Pi
echo
echo "$(date +%Y%m%d-%T) : Suppression du contenu de la corbeille de Pi"
echo
sudo rm -r -f -v /home/pi/.local/share/Trash/files/*

sleep 3

# Suppression du contenu de UpDraft Plus
echo
echo "$(date +%Y%m%d-%T) : Suppression du contenu de UpDraft Plus"
echo
sudo rm -r -f -v /var/www/wordpress/wp-content/updraft/*.gz

sleep 3

# Remplissage de l'espace libre par des zéros
echo
echo "$(date +%Y%m%d-%T) : Remplissage de l'espace libre par des zéros"
echo

sudo sync

sudo dd if=/dev/zero of=/home/pi/Desktop/zero.small.file bs=1024 count=102400
sudo dd if=/dev/zero of=/home/pi/Desktop/zero.file bs=1024

sudo sync
sleep 30
sudo sync

sleep 3

# Suppression des fichiers de zéros
echo
echo "$(date +%Y%m%d-%T) : Suppression des fichiers de zéros"
echo

sudo rm -f -v /home/pi/Desktop/zero.small.file
sudo rm -f -v /home/pi/Desktop/zero.file

sleep 3

# Exécution du backup
echo
echo "$(date +%Y%m%d-%T) : Exécution du backup"
echo
sudo dd bs=4M if=/dev/mmcblk0 | gzip > /media/RPi-USB-Dsk/Backups/backup-`date +%Y%m%d`-$hback.gz

sleep 3

# Suppression du backup d'il y a 26 semaine (182 jours ou 6 mois)
echo
echo "$(date +%Y%m%d-%T) : Suppression du backup d'il y a 26 semaine (182 jours ou 6 mois)"
echo
sudo rm -f -v /media/RPi-USB-Dsk/Backups/backup-$(date --date="182 days ago" +%Y%m%d)-0330.gz

sleep 3

# Reprise des services
echo
echo "$(date +%Y%m%d-%T) : Reprise des services"
echo
sudo service php5-fpm start
sudo service mysql start
sudo service nginx start
sudo service transmission-daemon start
sudo service minidlna start
sudo service fr24feed start

sleep 3

# Upload vers le serveur FTP
echo
echo "$(date +%Y%m%d-%T) : Upload vers le serveur FTP"
echo
log=login@netcourrier.com
pass=Password
sudo curl -T /media/RPi-USB-Dsk/Backups/backup-`date +%Y%m%d`-$hback.gz ftp://ftp.netcourrier.com/CheminVersBackup/ --user $log:$pass --disable-epsv --limit-rate 50k

# Suppression d'un ancien backup sur le serveur FTP
# On garde juste les 3 derniers
echo
echo "$(date +%Y%m%d-%T) : Suppression d'un ancien backup sur le serveur FTP"
echo
log=login@netcourrier.com
pass=Password
sudo curl ftp://ftp.netcourrier.com/Backups_RPi/ -Q "-DELE backup-$(date --date="21 days ago" +%Y%m%d)-0330.gz" --user $log:$pass --disable-epsv --limit-rate 50k

sleep 3

echo
echo "$(date +%Y%m%d-%T) : Fin du script Backup.sh" 

Attention ! Le script est à adapter en fonction de votre configuration comme décrit sur cette page.

Alternative

Si vous ne possédez pas d’espace de stockage FTP dans le cloud et que vous ne voulez pas garder vos backups plus de 30 jours, Free propose une altenative intéressante. Accessible à tous. Sans inscription. Même si vous n’êtes pas client chez eux.

Il est possible d’uploader des fichiers de 10Go max sur le serveur ftp://dl.free.fr .

Login : Votre adresse email
Pass : Au choix

Dès que l’upload sera terminé, Free vous enverra, à l’adresse mail indiquée, un lien vers votre fichier. Celui-ci sera effacé après 30 jours.

On aura une ligne de ce genre dans le script du backup :

sudo curl -T /media/RPi-USB-Dsk/Backups/backup-`date +%Y%m%d`-$hback.gz ftp://dl.free.com/ --user $log:$pass --limit-rate 50k

--disable-epsv n’est pas nécessaire avec le FTP de Free.

Chiffrer le backup à la volée

log='mail@domain.tld'
pass='password'
key='UnMotDePasseRobustePourOpenSSL'

openssl enc -e -aes-256-cbc -pass pass:$key -in /media/RPi-USB-Dsk/Backups/backup-`date +%Y%m%d`-$hback.gz | curl -P - --insecure 'ftp://dl.free.fr:21/backup-`date +%Y%m%d`-$hback.gz.aes' --user $log:$pass -T - --limit-rate 2m

Et pour le déchiffrer sur Mac :

openssl enc -d -aes-256-cbc -in ~/Downloads/backup-20190603-0330.gz.aes -out ~/Desktop/backup-20190603-0330.gz -pass pass:UnMotDePasseRobustePourOpenSSL

Ouvrir le port FTP dans le firewall

On trouvera la solution chez devops-blog.

On édite le firewall :

$ sudo nano /etc/init.d/firewall

Et on y ajoute ces lignes :

# FTP (21)
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

(2) comments

Andre
5 ans ago · Répondre

Merci pour cet utilitaire.
Comment utiliser le backup avec un PC W10.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.