Erstellen Von Verschlüsselten FTP Backups Mit duplicity Und ftplicity Auf Debian Etch - Seite 2


Nun bearbeiten wir /root/.ftplicity/conf. Sie enthält folgende Variablen:
  • GPG_KEY: die ID unseres GnuPG Keys;
  • GPG_PW: das Passwort, das wir eingegeben haben, als wir den GnuPG Key erstellt haben;
  • ZIEL: der Backup Server (inkl. des FTP Benutzernamens);
  • ZIEL_PW: das FTP Passwort im Backup Server;
  • QUELLE: das Quellverzeichnis (das heißt das Verzeichnis, das gesichert werden soll);
  • HOECHSTALTER: das Alter der letzten Sicherung; ältere Sicherungen werden gelöscht;
  • VERBOSITY: Menge an Information, die auf dem Screen von ftplicity angezeigt wird;
  • TEMP_DIR: ein Verzeichnis für temporäre Dateien; wenn Du eine Sicherung wiederherstellst, muss dieses Verzeichnis zumindest genug Speicherplatz für die größte Datei in der Sicherung haben.

vi /root/.ftplicity/conf


# Daten fuer GPG-Schluessel
GPG_KEY=7C6E958B GPG_PW='gpg_key_password' # Zugangsdaten fuer FTP-Server (URL-Format) ZIEL='ftp://backupuser@backup.example.com/' ZIEL_PW='secret' # Basisverzeichnis fuers Backup QUELLE='/home/exampleuser' # aeltester Wiederherstellungszeitpunkt HOECHSTALTER=1M # Ausfuehrlichkeit der Bildschirmausgaben (9 fuer Fehlersuche) VERBOSITY=4 # Verzeichnis fuer temporaere Dateien. Beim Restore muss dort # mindestens Patz fuer die groesste Datei im Backup sein TEMP_DIR=/tmp
Danach ändern wir die Berechtigungen der Datei, sodass nur Root Lese-und Schreibberechtigungen hat:

chmod 600 /root/.ftplicity/conf

Nun können wir drei andere Dateien erstellen, obwohl dies ganz optional ist:
  • /root/.ftplicity/exclude: beinhaltet eine Liste von Verzeichnissen, die von der Sicherung ausgeschlossen werden (ein Verzeichnis pro Zeile);
  • /root/.ftplicity/pre: beinhaltet Befehle, die vor der Sicherung ausgeführt werden sollen (z.B. eine MySQL Datenbankausgabe erstellen);
  • /root/.ftplicity/post: beinhaltet Befehle, die nach der Sicherung ausgeführt werden sollen.
Hier ist ein Muster /root/.ftplicity/exclude und /root/.ftplicity/pre Datei (der Syntax von /root/.ftplicity/post ist der gleiche wie in /root/.ftplicity/pre):

vi /root/.ftplicity/exclude


/proc
/dev /sys

chmod 600 /root/.ftplicity/exclude

vi /root/.ftplicity/pre


/usr/bin/mysqldump –-all-databases -u root -pyourrootsqlpassword > /home/exampleuser/db.sql
(Beachte, dass die Datenbank während dem Erstellen von SQL dump gesperrt wird; das muss kein Problem für kleine Webseiten sein, es kann aber eins für vielbesuchte Seiten werden - Deine Besucher werden nicht in der Lage sein, während des mysqldump Datenbank basierte Seiten zu erreichen. Hier ist ein Link zu einer störungsfreien MySQL Sicherungsmethode: How To Back Up MySQL Databases Without Interrupting MySQL)

/root/.ftplicity/pre muss ausführbar sein (genauso wie /root/.ftplicity/post wenn Du eine erstellen willst):

chmod 700 /root/.ftplicity/pre

Wie ich bereits erwähnt habe, brauchst Du nur /root/.ftplicity/conf; die anderen Dateien sind optional.

Nun ist ftplicity für den Gebrauch bereit; um unsere Sicherung zu erstellen, lassen wir einfach Folgendes laufen

ftplicity backup

Wenn alles gut läuft, wirst Du nicht nach einem Passwort aufgefordert:

server2:~# ftplicity backup
Reading globbing filelist /root/.ftplicity/exclude
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1197309836.07 (Mon Dec 10 19:03:56 2007)
EndTime 1197309909.96 (Mon Dec 10 19:05:09 2007)
ElapsedTime 73.90 (1 minute 13.90 seconds)
SourceFiles 343
SourceFileSize 10859083 (10.4 MB)
NewFiles 343
NewFileSize 10859083 (10.4 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 343
RawDeltaSize 10826315 (10.3 MB)
TotalDestinationSizeChange 9052110 (8.63 MB)
Errors 0
-------------------------------------------------

server2:~#

Um die Sicherungen zu automatisieren, können wir einen Cron Job erstellen (ich erstelle zwei Cron Jobs, einen, der täglick läuft und inkrementelle Sicherungen erstellt, und einen, der einmal im Monat läuft und eine vollständige Sicherung erstellt und alte Dateien löscht):

crontab -e


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

6 Eine Sicherung Mit ftplicity Wiederherstellen

Natürlich kannst Du ftplicity auch dafür verwenden, Sicherungen wiederherzustellen (Du wirst nicht nach einem Passwort gefragt). Der Syntax ist sehr einfach:

ftplicity restore /home/exampleuser

Sieh Dir die ftplicity Hilfe an um zu erfahren, welche anderen Optionen Du hast:

ftplicity --help


server2:~# ftplicity --help
Usage: ftplicity <Kommando> [<Optionen> ...]

Kommandos:
backup: inkrementelles Backup
full: vollstaendiges Backup erzwingen
list: Dateien im Backup auflisten
verify: Backup pruefen und Aenderungen anzeigen
purge [--force]:
veraltete Backup-Archive anzeigen [und loeschen]
cleanup [--force]:
Backup-Verzeichnis aufraeumen (nach Programmabbruch)
restore <Zielpfad> [<Alter>]:
Backup nach <Zielpfad> restaurieren [vom Stand <Alter>]
fetch <Datei/Verzeichnis> <Ziel> [<Alter>]
Datei/Verzeichnis einzeln restaurieren (siehe Beispiel)

Beispiele:
Veraltete Backup-Archive anzeigen und loeschen:
ftplicity purge --force
Vollstaendiges Backup nach /mnt zurueckspielen:
ftplicity restore /mnt
Datei /etc/passwd nach /root/pw restaurieren, Stand vor 4 Tagen:
ftplicity fetch etc/passwd /root/pw 4D
(siehe "man duplicity", Abschnitt TIME FORMATS)

Dateien in /root/.ftplicity
conf Haupt-Konfigurationsdatei
pre wird vor einem Backup ausgefuehrt
post wird nach einem Backup ausgefuehrt
gpgkey enthaelt exportierten GPG-Schluessel
exclude Liste ausgeschlossener Dateien und Verzeichnisse
(siehe "man duplicity", Abschnitt FILE SELECTION)

server2:~#


7 Links

4 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: Feanwulf

Bei mir bleibt es bei dem erstellen des Keys höngen:

> Not enough random bytes available. Please do some other work to give
> the OS a chance to collect more entropy! (Need 277 more bytes)

Das öffnen einer zweiten Console und rumgeklimpere auf der Tastatur war leider nicht hilfreich!


Von: mcclane

Habe das gleiche Problem. Habe hier gerade dazu einen Foreneintrag eröffnet:
http://www.howtoforge.de/forum/showthread.php?t=685


Von: gamma7

zuerst Dankeschön für das Howto, es ist recht instruktiv.
duplicity fünktioniert auf etch (aktuell) einwandfrei.

beim Abarbeiten des Howto funtkioniert alles bis hierher:
ftplicity bringt beim Aufruf folgenden Fehler:
/tmp# ftplicity list
Traceback (most recent call last):
File "/usr/bin/duplicity", line 373, in ?
if __name__ == "__main__": main()
File "/usr/bin/duplicity", line 347, in main
action = commandline.ProcessCommandLine(sys.argv[1:])
File "/usr/lib/python2.4/site-packages/duplicity/commandline.py", line 236, in ProcessCommandLine
globals.backend = backends.get_backend(args[0])
File "/usr/lib/python2.4/site-packages/duplicity/backends.py", line 41, in get_backend
return backend_class(pu)
File "/usr/lib/python2.4/site-packages/duplicity/backends.py", line 330, in __init__
self.ftp.cwd(parsed_url.path)
File "/usr/lib/python2.4/ftplib.py", line 494, in cwd
return self.voidcmd(cmd)
File "/usr/lib/python2.4/ftplib.py", line 246, in voidcmd
return self.voidresp()
File "/usr/lib/python2.4/ftplib.py", line 221, in voidresp
resp = self.getresp()
File "/usr/lib/python2.4/ftplib.py", line 216, in getresp
raise error_perm, resp
ftplib.error_perm: 550 Failed to change directory.

hat jemand einen Hinweis?


Von: Zeitkind

Achtung: Bei den neueren Versionen von ftplicity gibt es Profile für verschiedene Backupjobs. Entsprechend müssen die Kommandos alle angepaßt werden, z.B. (ohne die !):
???47 4 1 * * /usr/local/bin/ftplicity full && /usr/local/bin/ftplicity purge –-force
Sonst gibt es Fehlermeldungen a la:
Sorry. A fatal error occured:
Selected profile 'cleanup' does not resolve to a profile folder in
'/username/.ftplicity/cleanup'.
da ftplicity durch die geänderte Syntax jetzt "cleanup" für einen Jobnamen aka profile hält.