Verschlüsselte FTP Backups mit duplicity und duply erstellen (Debian Squeeze)

Version 1.0
Author: Falko Timme , Christian Schmalfeld <c [dot] schmalfeld [at] projektfarm [dot] de>
Follow me on Twitter

Mieten Sie heutzutage einen dedizierten Server, so stellen Ihnen die meisten Provider Platz für FTP Backups auf einem Ihrer Backup Systeme zur Verfügung. Dieses Tutorial zeigt Ihnen, wie Sie mit Hilfe von duplicity und duply über FTP verschlüsselte Backups auf dem abseitigen Backup Server Ihres Providers erstellen können (sodass keine kritischen Daten gelesen werden können, selbst wenn Zugriff auf den Backup Server besteht). duply ist ein duplicity Wrapper Skript, welches es uns erlaubt, duplicity ohne Interaktion zu benutzen (das heißt, Sie brauchen kein Passwort einzugeben).

Für die Richtigkeit der Inhalte dieses Tutorials gebe ich keinerlei Garantie.

1 Vorbemerkung

In diesem Tutorial nenne ich den Backupserver backup.example.com, auf dem ich ein FTP Konto mit dem Benutzernamen backupuser und dem Passwort secret habe. Ich möchte eine Sicherheitskopie des Verzeichnisses /home/exampleuser auf meinem Server machen.

2 Installation von duplicity

Stellen Sie als erster sicher, dass Ihr System aktuell ist:

apt-get update

apt-get upgrade

Installieren Sie duplicity dann folgendermaßen:

apt-get install duplicity ncftp


3 Das erste Backup

Erstellen Sie nun das erste Backup:

FTP_PASSWORD=secret duplicity /home/exampleuser ftp://backupuser@backup.example.com/

root@server1:/home/exampleuser# FTP_PASSWORD=secret
duplicity /home/exampleuser ftp://backupuser@backup.example.com/
NcFTP version is 3.2.4
GnuPG passphrase:
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
Retype passphrase to confirm:
--------------[ Backup Statistics ]--------------
StartTime 1341339005.14 (Tue Jul 3 20:10:05 2012)
EndTime 1341339006.46 (Tue Jul 3 20:10:06 2012)
ElapsedTime 1.32 (1.32 seconds)
SourceFiles 53
SourceFileSize 13494139 (12.9 MB)
NewFiles 53
NewFileSize 13494139 (12.9 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 53
RawDeltaSize 13461371 (12.8 MB)
TotalDestinationSizeChange 4687992 (4.47 MB)
Errors 0

-------------------------------------------------

root@server1:/home/exampleuser#

Wie Sie sehen, werden Sie nach einem GnuPG Passwort gefragt. Geben Sie hier irgendein Passwort ein; dies muss jedes Mal getan werden, wenn Sie duplicity starten. Das Backup wird mit Hilfe von GnuPG verschlüsselt. Zugriffs- und Benutzerrechte bleiben im Backup erhalten.

Um das Backup in einem Unterverzeichnis des Backupservers zu erstellen, würden Sie den Befehl folgendermaßen ändern:

FTP_PASSWORD=secret duplicity /home/exampleuser ftp://backupuser@backup.example.com/subdirectory

Duplicity wird beim ersten Ausführen ein komplettes Backup erstellen und bei jedem weiteren ein inkrementelles Backup. Um das Erstellen eines kompletten Backups zu erzwingen können Sie die full Option benutzen:

FTP_PASSWORD=secret duplicity full /home/exampleuser ftp://backupuser@backup.example.com/

Um ein Verzeichnis vom Backup auszuschließen, z.B. /home/exampleuser/tmp, können Sie die --exclude Option benutzen:

FTP_PASSWORD=secret duplicity --exclude /home/exampleuser/tmp /home/exampleuser ftp://backupuser@backup.example.com/

Erstellen Sie eine Sicherheitskopie des gesamten root Verzeichnisses /, so vergessen Sie nicht --exclude /proc hinzuzufügen, denn andernfalls stürzt Duplicity wahrscheinlich ab.

Um mehr über die verfügbaren Duplicity Optionen zu erfahren, benutzen Sie den man Befehl:

man duplicity


4 Ein Backup wiederherstellen

Nehmen wir nun an, Sie hätten alles in /home/exampleuser gelöscht und möchten es von Ihrem FTP Backup wiederherstellen. So wird es gemacht:

FTP_PASSWORD=secret duplicity ftp://backupuser@backup.example.com/ /home/exampleuser

Beachten Sie bitte, dass der abseitige Server diesmal vor dem lokalen Verzeichnis steht!

5 Automatische Backups mit duply

Da Duplicity bei jeder Benutzung nach einem GnuPG Passwort fragt, ist es schwer, es für automatische Backups zu verwenden (z.B. mit Cron). Glücklicherweise gibt es jedoch duply, ein Wrapper Skript welches es uns erlaubt, Duplicity ohne Passwortabfrage aufzurufen.

Generieren Sie als erstes einen GnuPG Schlüssel, den duply benutzen soll (sodass Sie kein Passwort mehr eingeben müssen):

gpg --gen-key

server1:/home/exampleuser# gpg --gen-key
gpg (GnuPG) 1.4.10; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection? <-- ENTER
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) <-- ENTER Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n>  = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
<-- ENTER Key does not expire at all
Is this correct? (y/N)
<-- y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Real name:
<-- Ihr Name, z.B. Falko Timme Email address: <-- Ihre E-Mail Adresse, z.B. ft@falkotimme.com Comment:
You selected this USER-ID:
"Falko Timme <ft@falkotimme.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? <-- O You need a Passphrase to protect your secret key. <-- Geben Sie hier Ihr gewünschtes Passwort ein (und danach noch einmal zur Bestätigung)
Der Schlüssel wird nun generiert. Sie können hier eine zweite Konsole öffnen und einige Buchstaben eintippen, sodass der Zufallszahlengenerator genug Entropie erhält:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
....+++++
+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
....+++++
+++++
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key
7C6E958B marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   1024D/7C6E958B 2007-12-10
Key fingerprint = 1FDC 60FB 8A27 90D8 553C  3C3E 8E1F 66F7 7C6E 958B
uid                  Falko Timme <ft@falkotimme.com>
sub   2048g/F1BB98F4 2007-12-10
server1:/home/exampleuser#

Ich habe die Schlüssel ID (7C6e958B) hervorgehoben, da Sie diese gleich brauchen werden. Laden Sie als nächstes duply herunter:

cd /tmp
wget http://downloads.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.5.x/duply_1.5.7.tgz
tar xvfz duply_1.5.7.tgz
cp duply_1.5.7/duply /usr/local/bin

Um duply benutzen zu können brauchen Sie mindestens ein Profil. Da ich in diesem Tutorial eine Sicherheitskopie von /home/exampleuser erstellen möchte, nenne ich das Profil exampleuser. Sie können das Profil folgendermaßen erstellen:

duply exampleuser create

Dies erstellt das Verzeichnis /root/.duply/exampleuser mit der duply Konfigurationsdatei conf darin. Öffnen Sie diese Datei:

vi /root/.duply/exampleuser/conf

Die wichtigsten Einstellungen in der Datei sind:
  • GPG_KEY: die ID Ihres GnuPG Schlüssels;
  • GPG_PW: das Passwort, das Sie bei der Erstellung des GnuPG Schlüssels eingegeben haben;
  • TARGET: der Backupserver (inkl. des FTP Benutzernamens);
  • TARGET_PASS: das FTP Passwort auf dem Backupserver;
  • SOURCE: das Quellverzeichnis (also das Verzeichnis, von dem Sie ein Backup anlegen möchten);
  • MAX_AGE: das Alter des ältesten Backups; ältere Backups werden gelöscht;
  • VERBOSITY: die Menge der Informationen, die von duply auf dem Bildschirm angezeigt wird;
  • TEMP_DIR: ein Verzeichnis für temporäre Dateien; wenn Sie ein Backup wiederherstellen muss hier mindestens genug Platz für die größte Datei des Backups sein.
Meine Datei sieht folgendermaßen aus:
# gpg encryption settings, simple settings:
# GPG_KEY='disabled' - disables encryption alltogether # GPG_KEY='<key1>[,<key2>]'; GPG_PW='pass' - encrypt with keys, sign # with key1 if secret key available and use GPG_PW for sign & decrypt # GPG_PW='passphrase' - symmetric encryption using passphrase only GPG_KEY='7C6E958B' GPG_PW='gpg_key_password' # gpg encryption settings in detail (extended settings) # the above settings translate to the following more specific settings # GPG_KEYS_ENC='<keyid1>,[<keyid2>,...]' - list of pubkeys to encrypt to # GPG_KEY_SIGN='<keyid1>|disabled' - a secret key for signing # GPG_PW='<passphrase>' - needed for signing, decryption and symmetric # encryption. If you want to deliver different passphrases for e.g. # several keys or symmetric encryption plus key signing you can use # gpg-agent. Add '--use-agent' to the duplicity parameters below. # also see "A NOTE ON SYMMETRIC ENCRYPTION AND SIGNING" in duplicity manpage # notes on en/decryption # private key and passphrase will only be needed for decryption or signing. # decryption happens on restore and incrementals (compare archdir contents). # for security reasons it makes sense to separate the signing key from the # encryption keys. https://answers.launchpad.net/duplicity/+question/107216 #GPG_KEYS_ENC='<pubkey1>,<pubkey2>,...' #GPG_KEY_SIGN='<prvkey>' # set if signing key passphrase differs from encryption (key) passphrase # NOTE: available since duplicity 0.6.14, translates to SIGN_PASSPHRASE #GPG_PW_SIGN='<signpass>' # gpg options passed from duplicity to gpg process (default='') # e.g. "--trust-model pgp|classic|direct|always" # or "--compress-algo=bzip2 --bzip2-compress-level=9" # or "--personal-cipher-preferences AES256,AES192,AES..." #GPG_OPTS='' # disable preliminary tests with the following setting #GPG_TEST='disabled' # credentials & server address of the backup target (URL-Format) # syntax is # scheme://[user:password@]host[:port]/[/]path # probably one out of # file://[/absolute_]path # ftp[s]://user[:password]@other.host[:port]/some_dir # hsi://user[:password]@other.host/some_dir # cf+http://container_name # imap[s]://user[:password]@host.com[/from_address_prefix] # rsync://user[:password]@other.host[:port]::/module/some_dir # # rsync over ssh (only keyauth) # rsync://user@other.host[:port]/relative_path # rsync://user@other.host[:port]//absolute_path # # for the s3 user/password are AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY # s3://[user:password]@host/bucket_name[/prefix] # s3+http://[user:password]@bucket_name[/prefix] # # scp and sftp are aliases for the ssh backend # ssh://user[:password]@other.host[:port]/some_dir # tahoe://alias/directory # webdav[s]://user[:password]@other.host/some_dir # ATTENTION: characters other than A-Za-z0-9.-_.~ in user,password,path have # to be replaced by their url encoded pendants, see # http://en.wikipedia.org/wiki/Url_encoding # if you define the credentials as TARGET_USER, TARGET_PASS below # duply will url_encode them for you #TARGET='scheme://user[:password]@host[:port]/[/]path' TARGET='ftp://backupuser@backup.example.com/' # optionally the username/password can be defined as extra variables # setting them here _and_ in TARGET results in an error #TARGET_USER='_backend_username_' TARGET_PASS='secret' # base directory to backup SOURCE='/home/exampleuser' # exclude folders containing exclusion file (since duplicity 0.5.14) # Uncomment the following two lines to enable this setting. #FILENAME='.duplicity-ignore' #DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'" # Time frame for old backups to keep, Used for the "purge" command. # see duplicity man page, chapter TIME_FORMATS) MAX_AGE=1M # Number of full backups to keep. Used for the "purge-full" command. # See duplicity man page, action "remove-all-but-n-full". #MAX_FULL_BACKUPS=1 # activates duplicity --full-if-older-than option (since duplicity v0.4.4.RC3) # forces a full backup if last full backup reaches a specified age, for the # format of MAX_FULLBKP_AGE see duplicity man page, chapter TIME_FORMATS # Uncomment the following two lines to enable this setting. #MAX_FULLBKP_AGE=1M #DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE " # sets duplicity --volsize option (available since v0.4.3.RC7) # set the size of backup chunks to VOLSIZE MB instead of the default 25MB. # VOLSIZE must be number of MB's to set the volume size to. # Uncomment the following two lines to enable this setting. #VOLSIZE=50 #DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE " # verbosity of output (error 0, warning 1-2, notice 3-4, info 5-8, debug 9) # default is 4, if not set VERBOSITY=4 # temporary file space. at least the size of the biggest file in backup # for a successful restoration process. (default is '/tmp', if not set) TEMP_DIR=/tmp # Modifies archive-dir option (since 0.6.0) Defines a folder that holds # unencrypted meta data of the backup, enabling new incrementals without the # need to decrypt backend metadata first. If empty or deleted somehow, the # private key and it's password are needed. # NOTE: This is confidential data. Put it somewhere safe. It can grow quite # big over time so you might want to put it not in the home dir. # default '~/.cache/duplicity/duply_<profile>/' # if set '${ARCH_DIR}/<profile>' #ARCH_DIR=/some/space/safe/.duply-cache # DEPRECATED setting # sets duplicity --time-separator option (since v0.4.4.RC2) to allow users # to change the time separator from ':' to another character that will work # on their system. HINT: For Windows SMB shares, use --time-separator='_'. # NOTE: '-' is not valid as it conflicts with date separator. # ATTENTION: only use this with duplicity < 0.5.10, since then default file # naming is compatible and this option is pending depreciation #DUPL_PARAMS="$DUPL_PARAMS --time-separator _ " # DEPRECATED setting # activates duplicity --short-filenames option, when uploading to a file # system that can't have filenames longer than 30 characters (e.g. Mac OS 8) # or have problems with ':' as part of the filename (e.g. Microsoft Windows) # ATTENTION: only use this with duplicity < 0.5.10, later versions default file # naming is compatible and this option is pending depreciation #DUPL_PARAMS="$DUPL_PARAMS --short-filenames " # more duplicity command line options can be added in the following way # don't forget to leave a separating space char at the end #DUPL_PARAMS="$DUPL_PARAMS --put_your_options_here "

Sie können nun drei weitere Dateien erstellen; dies ist aber optional:
  • /root/.duply/exampleuser/exclude: enthält eine Liste von Verzeichnissen, die vom Backup ausgeschlossen werden sollen (ein Verzeichnis pro Zeile);
  • /root/.duply/exampleuser/pre: enthälts Befehle, die vor dem Backup ausgeführt werden sollen (z.B. die Erstellung einer  MySQL Datenbank Dump);
  • /root/.duply/exampleuser/post: enthält Befehle, die nach dem Backup ausgeführt werden sollen.
Hier sind Beispiele für die /root/.duply/exampleuser/exclude und /root/.duply/exampleuser/pre Datei (die Syntax von /root/.duply/exampleuser/post ist die selbe wie die von /root/.duply/exampleuser/pre):

vi /root/.duply/exampleuser/exclude

/home/exampleuser/news
/home/exampleuser/messages /home/exampleuser/tmp

chmod 600 /root/.duply/exampleuser/exclude

vi /root/.duply/exampleuser/pre

/usr/bin/mysqldump --all-databases -u root -pyourrootsqlpassword > /home/exampleuser/db.sql
(Beachten Sie bitte, dass die Datenbank während der Erstellung einer SQL Dump gesperrt wird; dies wird für kleinere Webseiten vielleicht kein Problem sein, wohl aber für jene mit hohem Traffic - Ihre Besucher können in dieser Zeit nicht auf datenbankbasierte Seiten zugreifen. Hier ein Link zu einer unterbrechungsfreien MySQL Backupmethode: How To Back Up MySQL Databases Without Interrupting MySQL)

/root/.duply/exampleuser/pre muss ausführbar sein (genauso wie /root/.duply/exampleuser/post, falls Sie diese erstellt haben):

chmod 700 /root/.duply/exampleuser/pre

Wie zuvor erwähnt brauchen Sie nur /root/.duply/exampleuser/conf; die anderen Dateien sind optional.

duply kann nun benutzt werden; um ein Backup zu erstellen, führen Sie einfach folgendes aus:

duply exampleuser backup

Verläuft alles glatt werden Sie nicht nach einem Passwort gefragt:

root@server1:~# duply exampleuser backup
Start duply v1.5.7, time is 2012-07-03 21:02:33.
Using profile '/root/.duply/exampleuser'.
Using installed duplicity version 0.6.08b, python 2.6.6, gpg 1.4.10
(Home: ~/.gnupg), awk 'mawk 1.3.3 Nov 1996, Copyright (C) Michael D.
Brennan', bash '4.1.5(1)-release (x86_64-pc-linux-gnu)'.
Autoset found secret key of first GPG_KEY entry '7C6E958B' for signing.
Test - Encrypt to 7C6E958B & Sign with 7C6E958B (OK)
Test - Decrypt (OK)
Test - Compare (OK)
Cleanup - Delete '/tmp/duply.4161.1341342154_*'(OK)

--- Start running command PRE at 21:02:34.459 ---
Running '/root/.duply/exampleuser/pre' - OK
--- Finished state OK at 21:02:34.535 - Runtime 00:00:00.075 ---

--- Start running command BKP at 21:02:34.599 ---
NcFTP version is 3.2.4
Reading globbing filelist /root/.duply/exampleuser/exclude
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Tue Jul 3 20:47:50 2012
--------------[ Backup Statistics ]--------------
StartTime 1341342156.07 (Tue Jul 3 21:02:36 2012)
EndTime 1341342156.13 (Tue Jul 3 21:02:36 2012)
ElapsedTime 0.06 (0.06 seconds)
SourceFiles 50
SourceFileSize 13490043 (12.9 MB)
NewFiles 0
NewFileSize 0 (0 bytes)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 0
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 716 (716 bytes)
Errors 0
-------------------------------------------------

--- Finished state OK at 21:02:37.483 - Runtime
00:00:02.884 ---

--- Start running command POST at 21:02:37.556 ---
Skipping n/a script '/root/.duply/exampleuser/post'.
--- Finished state OK at 21:02:37.636 - Runtime 00:00:00.080 ---
root@server1:~#

Um die Backups zu automatisieren können Sie einen Cron Job erstellen (Ich erstelle zwei Cron Jobs; einen der täglich ausgeführt wird und inkrementelle Backups anlegt und einen der monatlich ausgeführt wird und komplette Backups anlegt sowie alte Dateien löscht):

crontab -e

# run the (incremental) backup each night at 03:23h
23 3 * * * /usr/local/bin/duply exampleuser backup # do a full backup once per month & delete old backups 47 4 1 * * /usr/local/bin/duply exampleuser full && /usr/local/bin/duply exampleuser purge --force

6 Backups mit duply wiederherstellen

Natürlich können Sie duply auch dazu benutzen um Backups wiederherzustellen (auch hier werden Sie nicht nach einem Passwort gefragt). Die Syntax ist sehr einfach:

duply exampleuser restore /home/exampleuser

Sie können einen Blick auf die duply Hilfsseite werfen um mehr über die anderen Optionen zu erfahren:

duply -h

root@server1:~# duply -h
VERSION:
duply version 1.5.7
(http://duply.net)

DESCRIPTION:
Duply deals as a wrapper for the mighty duplicity magic.
It simplifies running duplicity with cron or on command line by:

- keeping recurring settings in profiles per backup job
- enabling batch operations eg. backup_verify_purge
- executing pre/post scripts for every command
- precondition checking for flawless duplicity operation

For each backup job one configuration profile must be created.
The profile folder will be stored under '~/.duply/<profile>'
(where ~ is the current users home directory).
Hint:
If the folder '/etc/duply' exists, the profiles for the super
user root will be searched & created there.

USAGE:
first time usage (profile creation):
duply <profile> create

general usage in single or batch mode (see EXAMPLES):
duply <profile> <command>[_<command>_...] [<options> ...]

Non duply options are passed on to duplicity (see OPTIONS).
All conf parameters can also be defined in the environment instead.

PROFILE:
Indicated by a path or a profile name (<profile>), which is resolved
to '~/.duply/<profile>' (~ expands to environment variable $HOME).

Superuser root can place profiles under '/etc/duply'. Simply create
the folder manually before running duply as superuser.
Note:
Already existing profiles in root's profile folder will cease to work
unless there are moved to the new location manually.

example 1:   duply humbug backup

Alternatively a _path_ might be used e.g. useful for quick testing,
restoring or exotic locations. Shell expansion should work as usual.
Hint:
The path must contain at least one path separator '/',
e.g. './test' instead of only 'test'.

example 2:   duply ~/.duply/humbug backup

COMMANDS:
usage      get usage help text

create     creates a configuration profile
backup     backup with pre/post script execution (batch: pre_bkp_post),
full (if full_if_older matches or no earlier backup is found)
incremental (in all other cases)
pre/post   execute '<profile>/pre', '<profile>/post' scripts
bkp        as above but without executing pre/post scripts
full       force full backup
incr       force incremental backup
list [<age>]
list all files in backup (as it was at <age>, default: now)
status     prints backup sets and chains currently in repository
verify     list files changed since latest backup
restore <target_path> [<age>]
restore the complete backup to <target_path> [as it was at <age>]
fetch <src_path> <target_path> [<age>]
fetch single file/folder from backup [as it was at <age>]
purge [<max_age>] [--force]
list outdated backup files (older than $MAX_AGE)
[use --force to actually delete these files]
purge-full [<max_full_backups>] [--force]
list outdated backup files ($MAX_FULL_BACKUPS being the number of
full backups and associated incrementals to keep, counting in
reverse chronological order)
[use --force to actually delete these files]
cleanup [--force]
list broken backup chain files archives (e.g. after unfinished run)
[use --force to actually delete these files]

changelog  print changelog / todo list
txt2man    feature for package maintainers - create a manpage based on the
usage output. download txt2man from http://mvertes.free.fr/, put
it in the PATH and run 'duply txt2man' to create a man page.

OPTIONS:
--force    passed to duplicity (see commands: purge, purge-full, cleanup)
--preview  do nothing but print out generated duplicity command lines
--disable-encryption
disable encryption, overrides profile settings

PRE/POST SCRIPTS:
All internal duply variables will be readable in the scripts.
Some of interest might be

CONFDIR, SOURCE, TARGET_URL_<PROT|HOSTPATH|USER|PASS>,
GPG_<KEYS_ENC|KEY_SIGN|PW>, CMD_<PREV|NEXT>

The CMD_* variables were introduced to allow different actions according to
the command the scripts were attached to e.g. 'pre_bkp_post_pre_verify_post'
will call the pre script two times, with CMD_NEXT variable set to 'bkp'
on the first and to 'verify' on the second run.

EXAMPLES:
create profile 'humbug':
duply humbug create (now edit the resulting conf file)
backup 'humbug' now:
duply humbug backup
list available backup sets of profile 'humbug':
duply humbug status
list and delete obsolete backup archives of 'humbug':
duply humbug purge --force
restore latest backup of 'humbug' to /mnt/restore:
duply humbug restore /mnt/restore
restore /etc/passwd of 'humbug' from 4 days ago to /root/pw:
duply humbug fetch etc/passwd /root/pw 4D
(see "duplicity manpage", section TIME FORMATS)
a one line batch job on 'humbug' for cron execution:
duply humbug backup_verify_purge --force

FILES:
in profile folder '~/.duply/<profile>' or '/etc/duply'
conf             profile configuration file
pre,post         pre/post scripts (see above for details)
gpgkey.*.asc     exported GPG key files
exclude          a globbing list of included or excluded files/folders
(see "duplicity manpage", section FILE SELECTION)

IMPORTANT:
Copy the _whole_ profile folder after the first backup to a safe place.
It contains everything needed to restore your backups. You will need
it if you have to restore the backup from another system (e.g. after a
system crash). Keep access to these files restricted as they contain
_all_ informations (gpg data, ftp data) to access and modify your backups.

Repeat this step after _all_ configuration changes. Some configuration
options are crucial for restoration.

SEE ALSO:
duplicity man page:
duplicity(1) or http://duplicity.nongnu.org/duplicity.1.html
root@server1:~#

7 Links