Hetzner - DokuWiki

Duplicity Script
Zeile 1: Zeile 1:
Dieses HowTo ist fuer duplicity 0.4.11 .
+
== Backup-Skript für Duplicity ==
  
'''''Hinweis: Dieses Script funktioniert nur, wenn man mit dem Backup am 01. eines Monats anfängt, oder zuerst manuell ein "Full Backup" erstellt'''''
+
'''Hinweis: Dieses Skript muß zuerst mit der Option ''full'' aufgerufen werden, damit ein erstes Vollbackup erstellt wird'''
  
Nach der erfolgreichen installation von duplicity, wollen wir 2 monate lang einen taeglichen backup haben.
+
Das Skript hält die Backups über einen Zeitraum von 2 Monaten vor. Ältere Backups werden gelöscht. Am jeweils ersten des Monats wird neues ein Vollbackup erstellt.
Dazu, jeden ersten des monats soll ein voller backup erstellt werden.
+
  
In meinem fall, hab ich ein separates backup fuer /etc /home /srv [ was bei mir die meisten daten hat], und / .
+
Über die Variable BDIRS können im Skript getrennte Backups für einzelne Verzeichnisse angelegt werden. Diese sollten dann entsprechend von Sicherungen darüberliegender Verzeichnisse ausgenommen werden.
  
 
+
Das Skript kann z.B. unter /usr/local/sbin/backup.sh abgelegt und mittels
So, das geht ganz einfach:
+
''chmod 755 /usr/local/sbin/backup.sh'' ausführbar gemacht werden.
 
+
Vor Benutzung müssen die Zugangsdaten wie Nutzername, Passwort und Hostname entsprechend angepasst werden. Ebesno wie die GPG Passphrase, die zur Verschlüsselung der Backups genutzt wird.
Erstellen wir mal ein file was /usr/sbin/duplicity.sh heisst.
+
Sie muessen dan noch die informationen wie das ftp kennwort, den gpg passphrase den sie benutzen wollen, den ftp benutzername und den host, austauschen.
+
Da kommt folgendes rein:
+
  
 
<pre>
 
<pre>
#!/bin/sh
+
#!/bin/bash
 
#
 
#
# Script created on 17-6-2008
+
# Simple script for creating backups with Duplicity.
 +
# Full backups are made on the 1st day of each month or with the 'full' option.
 +
# Incremental backups are made on any other days.
 
#
 
#
# This script was created to make Duplicity backups.
+
# USAGE: backup.sh [full]
# Full backups are made on the 1st day of each month.
+
# Then incremental backups are made on the other days.
+
 
#
 
#
  
# Loading the day of the month in a variable.
+
# get day of the month
date=`date +%d`
+
DATE=`date +%d`
  
 +
# Set protocol (use scp for sftp and ftp for FTP, see manpage for more)
 +
BPROTO=scp
  
 +
# set user and hostname of backup account
 +
BUSER='u10000'
 +
BHOST='u10000.your-backup.de'
  
# Setting the pass phrase to encrypt the backup files. Will use symmetrical keys in this case.
+
# Setting the password for the Backup account that the
 +
# backup files will be transferred to.
 +
# for sftp a public key can be used, see:
 +
# http://wiki.hetzner.de/index.php/Backup
 +
#BPASSWORD='yourpass'
 +
 
 +
# directories to backup (but . for /)
 +
BDIRS="etc home srv ."
 +
LOGDIR='/var/log/duplicity'
 +
 
 +
# Setting the pass phrase to encrypt the backup files. Will use symmetrical keys in this case.
 
PASSPHRASE='yoursecretgpgpassphrase'
 
PASSPHRASE='yoursecretgpgpassphrase'
 
export PASSPHRASE
 
export PASSPHRASE
  
# Setting the password for the FTP account that the
+
# encryption algorithm for gpg, disable for default (CAST5)
# backup files will be transferred to.
+
# see available ones via 'gpg --version'
FTP_PASSWORD='yourftppass'
+
ALGO=AES
export FTP_PASSWORD
+
EXCLUDELIST='/usr/local/etc/duplicity-exclude.conf'
 +
 
 +
 
 +
if [ $ALGO ]; then
 +
GPGOPT="--gpg-options '--cipher-algo $ALGO'"
 +
fi
 +
 
 +
if [ $EXCLUDELIST ]; then
 +
  EXCLUDE="--exclude-filelist $EXCLUDELIST"
 +
fi
 +
 
 +
if [ $BPASSWORD ]; then
 +
BAC="$BPROTO://$BUSER:$BPASSWORD@$BHOST"
 +
else
 +
BAC="$BPROTO://$BUSER@$BHOST"
 +
fi
  
 
# Check to see if we're at the first of the month.
 
# Check to see if we're at the first of the month.
Zeile 43: Zeile 69:
 
# a full backup. If not, then run an incremental
 
# a full backup. If not, then run an incremental
 
# backup.
 
# backup.
if [ $date = 01 ]
 
then
 
  
duplicity remove-older-than 2M -v5 ftp://user@host/srv >>/var/log/duplicity/srv.log
+
if [ $DATE = 01 ] || [ "$1" = 'full' ]; then
  duplicity remove-older-than 2M -v5 ftp://user@host/etc >>/var/log/duplicity/etc.log
+
  TYPE='full'
  duplicity remove-older-than 2M -v5 ftp://user@host/home >>/var/log/duplicity/home.log
+
else
duplicity remove-older-than 2M -v5 ftp://user@host/system >>/var/log/duplicity/system.log
+
  TYPE='incremental'
 +
fi
  
 +
for DIR in $BDIRS
  
duplicity full -v5 /srv ftp://user@host/srv >>/var/log/duplicity/srv.log
+
  # first remove everything older than 2 months
duplicity full -v5 /etc ftp://user@host/etc >>/var/log/duplicity/etc.log
+
  if [ $DIR = '.' ]; then
duplicity full -v5 /home ftp://user@host/home >>/var/log/duplicity/home.log
+
  CMD="duplicity remove-older-than 2M -v5 $BAC/system >> $LOGDIR/system.log"
duplicity full -v5 --exclude-filelist /etc/duplicityfilelist.conf / ftp://user@host/system >>/var/log/duplicity/system.log
+
  else
 +
  CMD="duplicity remove-older-than 2M -v5 $BAC/$DIR >> $LOGDIR/$DIR.log"
 +
  fi
 +
  eval $CMD
  
else
+
  # do a backup
 +
  if [ $DIR = '.' ]; then
 +
    CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE / $BAC/system >> $LOGDIR/system.log"
 +
  else  
 +
    CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE /$DIR $BAC/$DIR >> $LOGDIR/$DIR.log"
 +
  fi
 +
  eval  $CMD
  
duplicity remove-older-than 2M -v5 ftp://user@host/srv >>/var/log/duplicity/srv.log
+
done
duplicity remove-older-than 2M -v5 ftp://user@host/etc >>/var/log/duplicity/etc.log
+
duplicity remove-older-than 2M -v5 ftp://user@host/home >>/var/log/duplicity/home.log
+
duplicity remove-older-than 2M -v5 ftp://user@host/system >>/var/log/duplicity/system.log
+
  
duplicity incremental -v5 /srv ftp://user@host/srv >>/var/log/duplicity/srv.log
 
duplicity incremental -v5 /etc ftp://user@host/etc >>/var/log/duplicity/etc.log
 
duplicity incremental -v5 /home ftp://user@host/home >>/var/log/duplicity/home.log
 
duplicity incremental -v5 --exclude-filelist /etc/duplicityfilelist.conf / ftp://user@host/system >>/var/log/duplicity/system.log
 
  
fi
+
# Check the manpage for all available options for Duplicity.
# Check http://www.nongnu.org/duplicity/duplicity.1.html
+
# Unsetting the confidential variables
# for all the options available for Duplicity.
+
unset PASSPHRASE
# Unsetting the confidential variables so they are
+
unset FTP_PASSWORD
# gone for sure.
+
unset PASSPHRASE
+
unset FTP_PASSWORD
+
  
exit 0
+
exit 0
 
</pre>
 
</pre>
  
Dateien oder Verzeichnisse, die nicht gesichert werden sollen, werden in der Datei ''/etc/duplicityfilelist.conf'' eingetragen, die im Skript per exclude-filelist an duplicity übergeben wird. Diese könnte z.B. folgenden Inhalt haben:
+
Dateien oder Verzeichnisse, die nicht gesichert werden sollen, werden in der Datei ''/usr/local/etc/duplicity-exclude.conf'' eingetragen, die im Skript per exclude-filelist an duplicity übergeben wird. Diese könnte z.B. folgenden Inhalt haben:
  
 
  - /dev
 
  - /dev
Zeile 92: Zeile 117:
  
 
Für eine regelmäßig Ausführung wird ein Cronjob benötigt. Dazu kann das Skript entweder unter ''/etc/cron.daily'' (täglich), ''/etc/cron.weekly'' (wöchentlich) oder ''/etc/cron.monthly'' (monatlich) abgelegt werden. Für eine genaue Einstellung des Zeitpunkts kann auch eine Crontab verwendet werden.
 
Für eine regelmäßig Ausführung wird ein Cronjob benötigt. Dazu kann das Skript entweder unter ''/etc/cron.daily'' (täglich), ''/etc/cron.weekly'' (wöchentlich) oder ''/etc/cron.monthly'' (monatlich) abgelegt werden. Für eine genaue Einstellung des Zeitpunkts kann auch eine Crontab verwendet werden.
Hierfür wird eine Datei unter ''/etc/cron.d/'' erstellt:  
+
Hierfür wird eine Datei unter ''/etc/cron.d/'' erstellt:
+
 
 
  # /etc/cron.d/duplicity
 
  # /etc/cron.d/duplicity
 
  0 0 * * * root /usr/sbin/duplicity.sh >/dev/null 2>&1
 
  0 0 * * * root /usr/sbin/duplicity.sh >/dev/null 2>&1
  
+
 
  
 
Ursprüngliche Version von sethx im [http://forum.hetzner.de/wbb2/thread.php?threadid=11248 Hetznerforum] veröffentlicht.
 
Ursprüngliche Version von sethx im [http://forum.hetzner.de/wbb2/thread.php?threadid=11248 Hetznerforum] veröffentlicht.
  
 
[[Kategorie:Dedizierte Server]]
 
[[Kategorie:Dedizierte Server]]
 +
[[Kategorie:Dedi-Überwachung, Sicherung und Wartung]]

Version vom 31. August 2012, 10:19 Uhr

Backup-Skript für Duplicity

Hinweis: Dieses Skript muß zuerst mit der Option full aufgerufen werden, damit ein erstes Vollbackup erstellt wird

Das Skript hält die Backups über einen Zeitraum von 2 Monaten vor. Ältere Backups werden gelöscht. Am jeweils ersten des Monats wird neues ein Vollbackup erstellt.

Über die Variable BDIRS können im Skript getrennte Backups für einzelne Verzeichnisse angelegt werden. Diese sollten dann entsprechend von Sicherungen darüberliegender Verzeichnisse ausgenommen werden.

Das Skript kann z.B. unter /usr/local/sbin/backup.sh abgelegt und mittels chmod 755 /usr/local/sbin/backup.sh ausführbar gemacht werden. Vor Benutzung müssen die Zugangsdaten wie Nutzername, Passwort und Hostname entsprechend angepasst werden. Ebesno wie die GPG Passphrase, die zur Verschlüsselung der Backups genutzt wird.

#!/bin/bash
#
# Simple script for creating backups with Duplicity.
# Full backups are made on the 1st day of each month or with the 'full' option.
# Incremental backups are made on any other days.
#
# USAGE: backup.sh [full]
#

# get day of the month
DATE=`date +%d`

# Set protocol (use scp for sftp and ftp for FTP, see manpage for more)
BPROTO=scp

# set user and hostname of backup account
BUSER='u10000'
BHOST='u10000.your-backup.de'

# Setting the password for the Backup account that the
# backup files will be transferred to.
# for sftp a public key can be used, see:
# http://wiki.hetzner.de/index.php/Backup
#BPASSWORD='yourpass'

# directories to backup (but . for /)
BDIRS="etc home srv ."
LOGDIR='/var/log/duplicity'

# Setting the pass phrase to encrypt the backup files. Will use symmetrical keys in this case.
PASSPHRASE='yoursecretgpgpassphrase'
export PASSPHRASE

# encryption algorithm for gpg, disable for default (CAST5)
# see available ones via 'gpg --version'
ALGO=AES
EXCLUDELIST='/usr/local/etc/duplicity-exclude.conf'


if [ $ALGO ]; then
 GPGOPT="--gpg-options '--cipher-algo $ALGO'"
fi

if [ $EXCLUDELIST ]; then
  EXCLUDE="--exclude-filelist $EXCLUDELIST"
fi

if [ $BPASSWORD ]; then
 BAC="$BPROTO://$BUSER:$BPASSWORD@$BHOST"
else
 BAC="$BPROTO://$BUSER@$BHOST"
fi

# Check to see if we're at the first of the month.
# If we are on the 1st day of the month, then run
# a full backup. If not, then run an incremental
# backup.

if [ $DATE = 01 ] || [ "$1" = 'full' ]; then
 TYPE='full'
else
 TYPE='incremental'
fi

for DIR in $BDIRS

  # first remove everything older than 2 months
  if [ $DIR = '.' ]; then
   CMD="duplicity remove-older-than 2M -v5 $BAC/system >> $LOGDIR/system.log"
  else
   CMD="duplicity remove-older-than 2M -v5 $BAC/$DIR >> $LOGDIR/$DIR.log"
  fi
  eval $CMD

  # do a backup
  if [ $DIR = '.' ]; then
    CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE / $BAC/system >> $LOGDIR/system.log"
  else 
    CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE /$DIR $BAC/$DIR >> $LOGDIR/$DIR.log"
  fi
  eval  $CMD

done


# Check the manpage for all available options for Duplicity.
# Unsetting the confidential variables
unset PASSPHRASE
unset FTP_PASSWORD

exit 0

Dateien oder Verzeichnisse, die nicht gesichert werden sollen, werden in der Datei /usr/local/etc/duplicity-exclude.conf eingetragen, die im Skript per exclude-filelist an duplicity übergeben wird. Diese könnte z.B. folgenden Inhalt haben:

- /dev
- /proc
- /sys
- /tmp
- /etc
- /home
- /srv
- /var/cache

Für eine regelmäßig Ausführung wird ein Cronjob benötigt. Dazu kann das Skript entweder unter /etc/cron.daily (täglich), /etc/cron.weekly (wöchentlich) oder /etc/cron.monthly (monatlich) abgelegt werden. Für eine genaue Einstellung des Zeitpunkts kann auch eine Crontab verwendet werden. Hierfür wird eine Datei unter /etc/cron.d/ erstellt:

# /etc/cron.d/duplicity
0 0 * * * root /usr/sbin/duplicity.sh >/dev/null 2>&1


Ursprüngliche Version von sethx im Hetznerforum veröffentlicht.



© 2020. Hetzner Online GmbH. Alle Rechte vorbehalten.