Tarsnap auf Uberspace
Tarsnap auf Uberspace

Tarsnap auf Uberspace

Lesedauer: ca. 11 Minuten

Tarsnap Header

Vor ein paar Tagen las ich viele Beiträge zum Brand beim Hoster OVH und die Tatsache, dass viele der Kunden dort anscheinend keine Backups hatten. In einigen Kommentaren wurde Tarsnap als sinnvolle Backuplösung empfohlen. Da ich das Programm noch nicht kannte habe ich mich auf dessen Website darüber eingelesen und mir gedacht, dass ich das auch mal ausprobieren möchte, um meine eigene Backupstrategie zu verbessern.

Was ist Tarsnap überhaupt?

Tarsnap ist ein quelloffenes Backuptool, welches mit dem Slogan „Online backups for the truly paranoid“ wirbt. Die vier Eckpfeiler von Tarsnap sind Sicherheit, Flexibilität, Effizienz und Kostengünstig. Es eignet sich exzellent, um automatisiert sicher verschlüsselte Offsite Backups von Servern zu erstellen. Tarsnap dedupliziert, komprimiert und legt eure Daten verschlüsselt auf einem externen Server ab. Das Programm an sich ist kostenlos. Die obligatorische Nutzung des Servers kostet Geld. Hierbei handelt es sich jedoch nicht um monatliche Fix- oder Mindestkosten. Die Kosten werden anhand der tatsächlichen Nutzung berechnet. Pro GB und Monat werden $0,25 (jeweils für Speichermenge und Bandbreite) berechnet. Durch die Deduplizierung und Komprimierung fallen im Gegensatz zu ’normalen‘ Backups relativ wenige einzigartige Datenmengen an, wodurch die Kosten letztendlich recht niedrig sind. Die verschlüsselten Daten liegen auf Amazon S3 Storage Servern.

Los gehts

Meine Website ist auf einem Uberspace gehostet und dort kann man ja fast alles auf der Konsole machen, was man sich so vorstellen kann. Leider funktioniert Tarsnap nicht out of the box. Man kann allerdings den Quellcode herunterladen und anschließend selbst kompilieren. Das habe ich auch gemacht. Die Anweisungen auf der Homepage müssen ein wenig angepasst werden, damit es auf einem Uberspace Host funktioniert. Da das bisher scheinbar noch niemand zusammengestellt hat, tue ich das hier Schritt für Schritt für euch.

Download von Tarsnap und der GPG Schlüsseldateien

Der Autor von Tarsnap empfiehlt den Quellcode nach dem Download mit GnuPG und Hashwert zu prüfen. Das machen wir wie in der Anleitung auf der Website beschrieben.

Achtet darauf, dass ihr euch in eurem Home Verzeichnis befindet, bevor ihr mit der Anleitung beginnt. Das erkennt ihr an der Tilde (~) in der Befehlszeile, wenn ihr euch per SSH auf eurem Server eingeloggt habt. Wechselt ihr ein Verzeichnis, erscheint anstelle der Tilde der Verzeichnisname, in dem ihr euch dann befindet.

wget https://www.tarsnap.com/tarsnap-signing-key-2021.asc
gpg --list-packets tarsnap-signing-key-2021.asc | grep signature
gpg --import tarsnap-signing-key-2021.asc
rm tarsnap-signing-key-2021.asc

Der Befehl in der ersten Zeile lädt den GPG Signaturschlüssel herunter. Anschließend zeigen wir uns mit dem Befehl in der zweiten Zeile die im Signaturschlüssel enthaltenen Signaturen an und können diese mit den Angaben auf der Website von Tarsnap prüfen. Der dritte Befehl importiert den Schlüssel. Anschließend löschen wir die Schlüsseldatei wieder, da wir sie nicht mehr benötigen.

Hier laden wir nun den Quellcode von Tarsnap und die signierte SHA256 Hashdatei herunter.

Mit dem dritten Befehlt überprüfen wir die Signatur der Hashdatei. Mittels shasum überprüfen wir, ob der Hashwert korrekt ist und löschen die Datei anschließend wieder.

wget https://www.tarsnap.com/download/tarsnap-autoconf-1.0.39.tgz
wget https://www.tarsnap.com/download/tarsnap-sigs-1.0.39.asc
gpg --decrypt tarsnap-sigs-1.0.39.asc
shasum -a 256 tarsnap-autoconf-1.0.39.tgz
rm tarsnap-sigs-1.0.39.asc

Quellcode kompilieren

tar -xzf tarsnap-autoconf-1.0.39.tgz
cd tarsnap-autoconf-1.0.39/

Wir entpacken nun den Quellcode und wechseln in das neu erstellte Verzeichnis.

Nun wird der Quellcode kompiliert. Hierbei ist zu beachten, dass man beim Befehl configure das Verzeichnis angeben muss, unter dem die kompilierte Version und die anderen erzeugten Dateien hinterlegt werden sollen. $USER ist ein Platzhalter für euren Benutzernamen. Der Server ersetzt den Platzhalter automatisch für euch. Anschließend wechseln wir ein Verzeichnis zurück und löschen das nun ebenfalls nicht mehr benötigte Quellcode Verzeichnis und das Archiv mit dem Quellcode.

./configure --prefix=/home/$USER
make -j2
make install
cd ..
rm -rf tarsnap-autoconf-1.0.39
rm tarsnap-autoconf-1.0.39.tgz

Konfiguration

Unter /home/$USER/etc/tarsnap.conf.sample befindet sich eine Beispielkonfigurationsdatei, die ihr für euch passend abändern könnt. Hierzu kopiert ihr die Datei durch den Befehl cp /home/$USER/etc/tarsnap.conf.sample /home/$USER/etc/tarsnap.conf und bearbeitet die tarsnap.conf anschließend mit dem Editor eurer Wahl. Die einzelnen Optionen sind dokumentiert. Nun legt ihr noch ein Arbeitsverzeichnis und ein Cacheverzeichnis für Tarsnap an. Dort werden dann der Cache und auch die Keys, die wir in einem späteren Arbeitsschritt generieren lassen, abgelegt. Hierzu einfach mkdir /home/$USER/tarsnap und danach mkdir /home/$USER/tarsnap/cache eingeben. Die Verzeichnisnamen tragt ihr am besten in der tarsnap.conf ein, dann müsst ihr diese Angaben nicht jedes Mal machen, wenn ihr tarsnap aufruft. Schaut euch hierzu meine Beispielkonfiguration weiter unten an.

Anlegen eines Benutzerkontos und Geld aufladen

Nun ist so weit alles installiert und wir können uns bei Tarsnap ein Konto anlegen und Geld aufladen. Hierzu geht ihr auf die Website unter https://www.tarsnap.com/register.cgi und erstellt euch ein Konto. Anschließend müsst ihr mindestens $5 auf euer Konto einzahlen. Das geht auch per PayPal.

Damit ihr eure Dateien sichern könnt, müsst ihr eure Installation noch mit dem Tarsnap Server verbinden. Das macht ihr durch Anlegen einer Keydatei. Ihr startet tarsnap-keygen und übergebt folgende Parameter: --keyfile gibt an, wo euer Keyfile abgespeichert werden soll. --user ist die E-Mail-Adresse, unter der ihr euch eben ein Konto bei Tarsnap angelegt habt. --machine ist der Name, der bei Tarsnap in den Abrechnungen aufgeführt wird und dient dazu mehr Übersicht zu behalten. Es können auch mehrere Keyfiles (z.B. für unterschiedliche Systeme) angelegt werden und durch Vergabe unterschiedlicher Namen behält man so den Überblick über die einzelnen Datenmengen und Kosten. --passphrased gibt an, dass ihr euren Key mit einem Passwort schützen wollt.

tarsnap-keygen \
	--keyfile /home/$USER/tarsnap/tarsnap.key \
	--user EURE_REGISTRIERTE_EMAIL_ADRESSE \
	--machine IRGENDEINE_BEZEICHNUNG \
	--passphrased

Nun habt ihr ein passwortgeschütztes Keyfile, das alle Rechte besitzt, um eure Daten bei Tarsnap zu verwalten. Damit automatische Sicherungen funktionieren können, müsst ihr euch nun noch ein Keyfile generieren lassen, das lediglich Schreibrechte besitzt und ohne Passwort auskommt. Wer im Besitz dieser Datei ist, kann lediglich neue Dateien hinzufügen, aber keine Dateien einsehen, zurückspielen oder gar löschen. Das geht über den Befehl tarsnap-keymgmt. --outkeyfile gibt an, wo und unter welchem Namen die neue Datei mit den beschränkten Rechten abgespeichert werden soll. -w gibt an, dass nur Schreibrechte gewährt werden sollen.

tarsnap-keymgmt \
	--outkeyfile /home/$USER/tarsnap/tarsnapwrite.key \
	-w /home/$USER/tarsnap/tarsnap.key

Die Keys unbedingt sichern – ohne diese Dateien könnt ihr ansonsten nicht mehr auf eure gesicherten Daten bei Tarsnap zugreifen.

Erstellen eines automatischen Backups per Cronjob

Nun haben wir es fast geschafft. Wir erstellen nun mit dem Editor unserer Wahl ein Skript, dass uns automatisch per Cronjob unsere WordPress Website sichert, ohne dass wir uns künftig darum kümmern müssen. Die Pfade sind im folgenden Beispiel auf eine WordPress Installation auf einem Uberspace abgestimmt. Das Skript speichern wir unter /home/$USER/bin/tarsnap-backup.sh.

#!/bin/sh
/home/$USER/bin/tarsnap -c \
	-f "SICHERUNGSNAME-$(date +%d-%m-%Y_%H-%M-%S)" \
	/var/www/virtual/$USER

Dieses Skript erstellt uns ein Backup mit den Standardeinstellungen in der tarsnap.conf mit dem Namen SICHERUNGSNAME. Der Sicherungsname muss pro Keyfile (Abwandlungen bezüglich der Keyrechte sind egal) einzigartig sein, weshalb man hier am sinnvollsten das aktuelle Datum und die Uhrzeit anhängt.

Sinnvoll ist es, nicht nur die komplette WordPress Installation zu sichern, sondern auch noch die Datenbank. Hierzu wandeln wir das Skript wie folgt ab:

#!/bin/sh
mysqldump --defaults-file=$HOME/.my.cnf --compact --comments --dump-date --quick --all-databases > "/var/www/virtual/$USER/database.sql"
/home/$USER/bin/tarsnap -c \
	-f "SICHERUNGSNAME-$(date +%d-%m-%Y_%H-%M-%S)" \
	/var/www/virtual/$USER
rm /var/www/virtual/$USER/database.sql

Hier wird mittels mysqldump eine Kopie eurer Datenbank erstellt und dadurch, dass sie in /var/www/virtual/$USER abgespeichert wird, automatisch mitgesichert. Nach erfolgter Sicherung wird die Datei wieder gelöscht.

Ihr könnt auf die gleiche Art natürlich auch noch andere Dateien hinzufügen, die nicht zur eigentlichen WordPress Installation gehören und ebenfalls in einem Rutsch mitsichern lassen.

Damit ihr das Skript nun auch direkt ausführen könnt, müsst ihr es ausführbar machen. 🙂 Das geht mit dem Befehl chmod u+x /home/$USER/bin/tarsnap-backup.sh.

Abschließend legen wir noch einen Cronjob mit dem Befehl crontab -e an. Angenommen ihr wollt, dass die Sicherung jede Nacht um 2 Uhr startet, tragt ihr in der angezeigten Datei folgendes ein: 0 2 * * * tarsnap-backup.sh Eine sehr gute Hilfestellung zur Erstellung von Cronjobs findet ihr übrigens hier: crontab guru

Durch die Eingabe von tarsnap-backup.sh wird das Backup gestartet.

Testen der Sicherung

Da eine Sicherung nichts bringt, wenn sie nicht funktioniert, müssen wir nun noch prüfen, ob alles geklappt hat, wie wir uns das vorgestellt haben.

Tarsnap bietet mehrere Optionen, um sich die gemachten Sicherungen anzusehen, Dateien zurückzuschreiben oder Statistiken anzusehen.

Um zu sehen, welche einzelnen Sicherungen bereits gemacht wurden, gibt man tarsnap --list-archives --keyfile /home/$USER/tarsnap/tarsnap.key | sort ein. Hier sollte in unserem Beispiel nun eine Sicherung auftauchen.

Zum Testen legen wir nun ein Verzeichnis an, in das unsere Sicherung zurückgeschrieben werden soll: mkdir /home/$USER/restoretest Unsere Sicherung können wir anschließend mit dem Befehl tarsnap -x -v -f SICHERUNGSNAME --keyfile /home/$USER/tarsnap/tarsnap.key -C /home/$USER/restoretest zurückschreiben. Die komplette Sicherung wird nun in das angegebene Verzeichnis zurückgeschrieben. Wird -C weggelassen, wird die Sicherung unter dem aktuellen Verzeichnis zurückgeschrieben, was bei einem Test gefährlich sein kann, je nachdem, in welchem Verzeichnis man sich gerade befindet.

Beispiel für eine Konfigurationsdatei

Meine Konfigurationsdatei sieht folgendermaßen aus. Das ist natürlich nur ein Beispiel und muss bei euch entsprechend angepasst werden. Hier stehen die Pfade zum Cache Ordner und zum Keyfile drin. Eine sinnvolle Option ist auch die Zeile exclude /var/www/virtual/$USER/html/wp-content/cache. Dadurch wird verhindert, dass mein Website-Cache mitgesichert wird. Wenn ihr auch bestimmte Verzeichnisse ausschließen möchtet, dann tragt ihr diese entsprechend ein. Es können auch mehrere Verzeichnisse angegeben werden. Diese dann jeweils untereinander in eine eigene Zeile. exclude muss jedes Mal davorgestellt sein. Wenn hier etwas geändert wurde, ist es sinnvoll ein Backup mit dem Parameter --dry-run zu starten. Dadurch wird nichts hochgeladen und man kann man prüfen, ob auch wirklich alles mitgesichert wird.

### Recommended options

# Tarsnap cache directory
cachedir /home/$USER/tarsnap/cache

# Tarsnap key file
keyfile /home/$USER/tarsnap/tarsnapwrite.key

# Don't archive files which have the nodump flag set.
nodump

# Print statistics when creating or deleting archives.
print-stats

# Create a checkpoint once per GB of uploaded data.
checkpoint-bytes 1G

### Commonly useful options

# Use SI prefixes to make numbers printed by --print-stats more readable.
humanize-numbers

### Other options, not applicable to most systems

# Aggressive network behaviour: Use multiple TCP connections when
# writing archives.  Use of this option is recommended only in
# cases where TCP congestion control is known to be the limiting
# factor in upload performance.
#aggressive-networking

# Exclude files and directories matching specified patterns.
# Only one file or directory per command; multiple "exclude"
# commands may be given.
exclude /var/www/virtual/$USER/html/wp-content/cache

# Include only files and directories matching specified patterns.
# Only one file or directory per command; multiple "include"
# commands may be given.
#include

# Attempt to reduce tarsnap memory consumption.  This option
# will slow down the process of creating archives, but may help
# on systems where the average size of files being backed up is
# less than 1 MB.
#lowmem

# Try even harder to reduce tarsnap memory consumption.  This can
# significantly slow down tarsnap, but reduces its memory usage
# by an additional factor of 2 beyond what the lowmem option does.
#verylowmem

# Snapshot time.  Use this option if you are backing up files
# from a filesystem snapshot rather than from a "live" filesystem.
#snaptime <file>

Tarsnap Befehle

Tarsnap lässt sich nicht nur durch unsere Skript-Datei aufrufen, sondern auch direkt über die Kommandozeile. Der grundsätzliche Aufbau sieht dabei folgendermaßen aus: tarsnap gefolgt von den gewünschten Parametern.

Hier eine kleine Auswahl:

-c Backup erstellen
-x Backup zurückschreiben
-f gibt an, auf welches Archiv sich die Aktion auswirken soll
-t Inhalt einer Sicherung bzw. Archiv auflisten
-v zeigt beim Sichern/Zurückschreiben die einzelnen Dateinamen an
-C Verzeichnis wechseln. Sinnvoll beim Zurückschreiben einer Sicherung
--print-stats zeigt Statistiken an

Hier ergibt es durchaus Sinn, sich die manpages anzusehen, die bei Tarsnap mitgeliefert werden. Hierzu gibt man den Befehl man tarsnap oder man tarsnap-keygen usw. ein und kann sich ausführliche Hinweistexte durchlesen.

Noch ein paar Tipps und abschließende Worte

So, das wäre geschafft. Eure Backups laufen nun automatisch jede Nacht durch und ihr braucht euch nicht mehr drum zu kümmern. Es schadet nicht, von Zeit zu Zeit einmal die Statistiken mit --print-stats zu prüfen und auch darauf zu achten, dass immer genügend Geld auf eurem Tarsnap Konto vorhanden ist. Sollte euer Guthaben unter die Speicherkosten von 7 Tagen fallen, werdet ihr per E-Mail angeschrieben, dass ihr Geld nachzahlen solltet. Fällt der Kontostand unter null, beginnt ein 7 Tage Countdown. Sollte nach Ablauf dieser Frist nicht genügend Geld eingezahlt worden sein, habt ihr keinen Zugang mehr zu Tarsnap und euer Konto inkl. aller gespeicherten Daten kann gelöscht werden. Der Betreiber schreibt jedoch, dass man ihn auch kontaktieren kann, sollte man aus bestimmten Gründen erst später zahlen können. Das muss dann mit ihm ausgemacht werden.

Ich hoffe, ich konnte euch die Installation und Nutzung von Tarsnap erläutern und somit einen Beitrag zu mehr Datensicherung leisten. Wie immer freue ich mich über einen wohlwollenden Kommentar aber auch über Fragen und Hinweise. Viel Spaß beim Daten sichern!

Abonnieren
Benachrichtige mich bei
guest
0 Kommentare
Inline Feedbacks
Zeige alle Kommentare
0
Ich freue mich auf deinen Kommentar.x
()
x