FHEM Backup täglich verschlüsselt auf GoogleDrive oder S3-Bucket sichern

Begonnen von CoolTux, 27 Februar 2017, 10:23:04

Vorheriges Thema - Nächstes Thema

CoolTux

Aus aktuellen Anlass schreibe ich hier mal 3-4 Punkte zusammen wie man sein tägliches FHEM Backup verschlüsselt auf GoogleDrive ablegen kann.


Ich übernehme keinerlei Haftung für gelöschte oder zerstörte FHEM Installationen. Die hier exemplarisch zur Verfügung gestellten Scripte funktionieren seit über 2 Jahren in meiner Umgebung. Bitte schaut sie Euch genau an und versucht zu verstehen.


Nötige Vorarbeiten

  • Man besorge sich GoogleDrive. Ich bezahle für 100GB 2-3 Euro im Monat
  • einrichten einer Sync Software für GoogleDrive und Linux. Ich verwende insync
  • ein tägliches Backup in FHEM einrichten (zeige ich nachher kurz)
  • einrichten eines encfs Verzeichnisses
  • ein Backupscript welches das tägliche Backup aus /opt/fhem/backup/ ins verschlüsselte Verzeichnis kopiert(zeige ich nachher kurz)


Weiter gehts.
Google Drive und insync sollten eingerichtet sein, ebenso ein encfs Verzeichnis.

Nun richten wir als erstes ein FHEM Backup ein. Hierfür verwende ich das hauseigene backup von FHEM

Internals:
   CFGFN
   COMMAND    backup
   DEF        *02:30:00 backup
   NAME       atFHEM_BackupTaeglich
   NR         109
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 02:30:00
   TIMESPEC   02:30:00
   TRIGGERTIME 1488245400
   TRIGGERTIME_FMT 2017-02-28 02:30:00
   TYPE       at
   Readings:
     2017-02-27 02:37:35   state           Next: 02:30:00
Attributes:
   group      Backup
   room       EDV


Erledigt. Täglich um 02:30 Uhr wird gesichert. Meines Wissens nach geschieht die Sicherung blockierend. Daher habe ich das ganze auf Nachts gelegt.
Diese Sicherung wird nun von einem bash Backupscript ins angelegte verschlüsselte Verzeichnis kopiert.

Script

#!/bin/sh

# config
SOURCEPATH="/opt/fhem/backup" # path to your backupsource, no symbolic links are allowed!

BACKUPPATH="/home/leon/Google_Drive_Secure/pi-fhem01_BACKUPS" # where do you save the backups?
DAILY_DATA_BACKUPS="6" # keep this amount backups
# no more config



### Clean up old FHEM backup parts
# configDB SQL dumps
find /opt/fhem/log/configDB_* -mtime +2 -exec rm -vrf {} \;

# dbLog SQL dumps
find /opt/fhem/log/logDB_* -mtime +0 -exec rm -vrf {} \;

# FHEM Backupverzeichnis
find /opt/fhem/backup/FHEM-* -mtime +4 -exec rm -vrf {} \;



# check encfs Laufwerk vorhanden?
encfs_check () {
if [ ! -d "${BACKUPPATH}" ]
        then
                echo "\n\n !!! ERROR !!!\n";
                echo "$BACKUPPATH not found! check encfs mount?\n"
                exit 1
        fi
        return 0
}

# creates $1, if not existant
checkDir()
{
        if [ ! -d "${BACKUPPATH}/$1" ]
        then
                mkdir -p "${BACKUPPATH}/$1"
                echo "Erstelle Backupverzeichnis ${BACKUPPATH}/$1"
        fi
}

# 1 -> path
# 2 -> name
# 3 -> number of backups
rotateDir()
{
        for i in `seq $(($3 - 1)) -1 1`
        do
                if [ -f "$1/$2.$i.tar.bz2" ]
                then
                        mv "$1/$2.$i.tar.bz2" "$1/$2.$((i + 1)).tar.bz2"
                        echo "Räume Backupverzeichnis auf $i"
                fi
        done
        find ${BACKUPPATH}/fhem_backups/archive/ -mtime +60 -exec rm -vrf {} \;
        echo "Lösche alle Archive die älter als 60 Tage sind"
}

## make fhem DbLog Databasedump
mysqldump --user=fhem --password=XXXXXX -Q fhem > $SOURCEPATH/log/logDB_"`date +%d-%m-%Y`".sql

encfs_check
# make sure everything exists
checkDir "fhem_backups"
checkDir "fhem_backups/archive"
checkDir "fhem_backups/daily"

# first step: rotate daily.
rotateDir "${BACKUPPATH}/fhem_backups/daily" "fhem_backup" "$DAILY_DATA_BACKUPS"

# then create our backup
echo "Erstelle Backup"
tar -cvjf "/tmp/fhem_backup.1.tar.bz2" "${SOURCEPATH}/backup/FHEM-`date +%Y%m%d`"*".tar.gz"


# create an weekly archive backup?
if [ `date +%a` = "So" ]
then
        cp "/tmp/fhem_backup.1.tar.bz2" "${BACKUPPATH}/fhem_backups/archive/fhem_backup-"`date +%d-%m-%Y`".tar.bz2"
        echo "Erstelle wöchentliches Archiv Backup"
fi

# add them to daily.
echo "Verschiebe Tagesbackup ins Backupverzeichnis"
mv "/tmp/fhem_backup.1.tar.bz2" "${BACKUPPATH}/fhem_backups/daily"



Bitte schaut Euch das Script genau an. Es ist auf meine Umgebung zugeschnitten, daher möchte ich Euch bitten zu verstehen was da genau passiert so das Ihr es auf Eure Umgebung anpassen könnt. Ihr müsst eventuell noch benötigte Verzeichnisse anlegen.
Bei Fragen einfach fragen.


Sobald nun neue Dateien ins verschlüsselte Backupverzeichnis kopiert werden, startet automatisch insync die Synchronisation.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

#1
Als sqlite Anwender habe ich das ähnlich gelöst, sichere aber nur das, was als configDB Anwender notwendig ist.

1. man lege sich einen S3-Bucket an, wer es verschlüsselt braucht, kann das direkt für den bucket konfigurieren

2. man lege sich ein Backup-Skript an


#!/bin/sh
clear
cd /opt/fhem

echo "#"
echo "# waiting for logfile availability"
while [ -e sqldb/logDBprodfhem.db-wal ]
  do
    echo -n "."
    sleep 1
  done

echo "#"
echo "# vacuum logfile"
sqlite3 sqldb/logDBprodfhem.db vacuum;

echo "#"
echo "# copy logfile"
cp sqldb/logDBprodfhem.db sqldb/logDBprodfhem.db.bak

echo "#"
echo "# rsync to s3"
aws s3 sync /opt/fhem s3://<bucketName>/ \
        --delete \
        --exclude "*" \
        --include "configDB.conf" \
        --include "sqldb/configDB.db" \
        --include "sqldb/logDBprodfhem.db.bak"\
        --include "log/*.log"

echo "#"
echo "# done."


3. man definiere ein at, das im 03:05 Uhr ein "set dbLogDevice reopen 60" ausführt

4. man definiere einen cronjob, der um 03:05 Uhr das obige Skript startet.


  • das Skript wartet nach dem Start solange, bis das Logfile von FHEM geschlossen wurde und kopiert dann die zuvor per vacuum aufgeräumte Logdatei.
  • sollte die Zeit für das vacuum und das kopieren nicht ausreichen, kann die reopen-Zeit entsprechend angepasst werden.
  • das rsync überträgt ohnehin schon verschlüsselt
  • wer möchte, kann am Ende des Skripts die kopierte Datei wieder löschen. Das Kopieren findet statt, damit FHEM mit der Logdatei weiterarbeiten kann und während des sync zu S3 keine offenen Logfiledateien vorhanden sind.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Hallo Udo,

Vielen Dank für Deine Erweiterung/andere Sichtweise für ein tägliches FHEM Backup. Ich denke mal so eine Sammlung kann nicht schaden.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Ok. Hast Recht. Dann lassen wir das so wie es ist. Hauptsache Hilfreich sag ich immer.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Wenn man das "Workshop" nennt, tauchen wieder User auf, die Support fordern...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Ach Udo. You make my Day. Aber Recht hast.
Wobei ich aber auch sagen möchte, wer Fragen hat darf gerne Fragen. Zu mindest was meinen Teil an geht. Nur bisschen Grundkenntnis erwarte ich schon.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Es geht nicht darum, dass jemand nicht fragen darf oder soll. Aber immer mehr User verstehen nicht, dass das hier keine 24/7 Support-Plattform ist. Und wenn dann 30 Minuten nach einer im Forum gestellten Frage bereits zwei emails mit Hinweis auf den Forumeintrag in meinem Posteingang liegen, warum ich eine Frage noch nicht beantwortet habe, vergeht mir einfach manchmal der Spaß.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

AxelSchweiss

Dann habe ich da auch noch einen:

- Man hole sich einen box.com Account mit 5GB für lau.
- Mount des Accounts mittels WebDAV. Auszug aus der FSTAB: https://dav.box.com/dav         /webdav/backup.box.com  davfs noauto,user,rw,gid=davfs2,dir_mode=770 2 0 0
- dann mounte man mittels encfs das verschlüsselte FS auf das DavFS: Auszug aus der FSTAB /webdav/encfs/encfs.dokumente#/webdav/backup.box.com/dokumente.enc /webdav/encfs/dokumente fuse rw,user,noauto 0 0
- Danach kann man dan mit beliebigen Tools (rsync und mysqldump) seine Backups anlegen.
- Wenn die Backups fertig sind das ganze wieder rückwärts unmounten

Bei mir läuft das ganze mittels Cron in der Nacht.

CoolTux

Zitat von: betateilchen am 27 Februar 2017, 15:12:41
Es geht nicht darum, dass jemand nicht fragen darf oder soll. Aber immer mehr User verstehen nicht, dass das hier keine 24/7 Support-Plattform ist. Und wenn dann 30 Minuten nach einer im Forum gestellten Frage bereits zwei emails mit Hinweis auf den Forumeintrag in meinem Posteingang liegen, warum ich eine Frage noch nicht beantwortet habe, vergeht mir einfach manchmal der Spaß.

Ach Du Kacke. Echt jetzt. Ok da habe ich definitiv noch die netten User bei mir.
Aber gut zu wissen das es sowas auch gibt. Muss man sich wohl drauf einstellen. Sehr schade eigentlich.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Standarduser

Vielen Dank für Eure Backup-Methoden. Ich nutze dafür ein Shell-Script, dass mir täglich /opt/fhem sichert und auf einen NAS schiebt. Kürzlich hab ich das wirklich mal gebraucht, weil mir die Speicherkarte vom RPi abgeraucht ist, und ich war froh, dass ich es hatte  8)

Eine Erfahrung habe ich dabei gemacht:
Ein Backup zu besitzen ist das eine, aber das System wieder ans Laufen zu bekommen, etwas ganz anderes.

Ich hatte natürlich keine Probleme, den Raspi grundsätzlich wieder zum Laufen zu bringen, jedoch scheint es bei der Installation von FHEM einige Probleme mit der Rechtevergabe zu geben. Die wird nämlich (zumindest unter Raspbian Jessie) nicht korrekt durchgeführt. Das hat dann zur Folge, dass FHEM zwar installiert ist, sich jedoch nicht starten lässt. Nachdem ich das irgendwie hinbekommen habe, musste ja noch mein Backup eingespielt werden. Dann wieder die Sache mit den Rechten, was im zweiten Anlauf jedoch viel leichter von der Hand ging.
Letztlich mussten noch etliche Pakete neu installiert werden, um alle Funktionen wiederherzustellen. Hier half mir ein Blick ins Logfile das mich an fehlende Perl-Pakete erinnerte.

Was ich damit sagen will: man sollte sich nicht nur auf das Backup ansich verlassen, sondern auch mal versuchen, ein System neu aufzusetzen, solange alles noch funktioniert. Sonst kann es im Fall der Fälle ganz schön stressig werden  ;)

Wernieman

wobei Du in diesem Falle doppelt-gemoppelt hast.

1. FHEM installiert
2. FHEM durch restore installiert

Denn eine Installation ist, mit wenigen ausnahmen, praktisch ein generieren von /opf/fhem
+ User anlegen
+ Start-Script erstellen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

Zitat von: Standarduser am 07 März 2017, 15:36:37
Was ich damit sagen will: man sollte sich nicht nur auf das Backup ansich verlassen, sondern auch mal versuchen, ein System neu aufzusetzen, solange alles noch funktioniert. Sonst kann es im Fall der Fälle ganz schön stressig werden  ;)

5 Minuten...

1. FHEM neu aufsetzen aus https://debian.fhem.de -> nightly build = benötigte perl Pakete werden automatisch mit installiert, Benutzer und Startskript werden automatisch generiert.

2. configDB aus der Sicherung zurückkopieren, sie enthält auch alle externen Dateien wie .gplot, .holiday, 99_myUtils usw., die FHEM braucht

Einmal FHEM neu starten - fertig.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus M.

Dropbox!
FHEM samt allen dynamischen Dateien wie Statefile und Logs in einen Ordner konfiguriert, den in die Dropbox gelinkt und fertig ist die ultimative Backup-Lösung.
Ich hab damit nicht nur ein tägliches Backup sondern kann 30 Tage lang für jede Datei zu jedem beliebigen Zustand zurück wechseln.
Für Entwickler: Modul Dateien kann ich auf jedem anderen Rechner mit meinem Dropbox Account direkt lokal editieren und nach einer Sekunde Wartezeit per reload auf dem Server aktualisieren.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0