FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: th0nix am 14 Februar 2021, 10:10:45

Titel: Automatische Sicherung der Config in einem GIT
Beitrag von: th0nix am 14 Februar 2021, 10:10:45
Hi zusammen,

vielleicht möchte noch jemand anders die Konfiguration wie fhem.cfg und fhem.save beim speichern direkt in ein GIT (gitlab / github etc) einchecken um sie dort zu Sichern und eine Versionierung zu haben.

Howto:

1) Installieren von git tools auf dem Gerät wo das FHEM läuft.
Beispiel für ubuntu:
$ apt install git

2) unter dem Benutzer welcher der FHEM Prozess gestartet (im Beispiel der User: fhem) ist die globale Einstellung machen.

su fhem
$ git config --global user.name FHEM
$ git config --global user.email fhem@fhem.fhem


3) FHEM "trigger" anlegen. Hierbei die Attribute anpassen.


defmod conifgBackup2GIT DOIF ([global:"SAVE"]) \
{ \
my $now = TimeNow();; \
system("git add $attr{global}{configfile}");;\
system("git add $attr{global}{statefile}");;\
system("git commit -m 'triggert by FHEM config save ($now)'");;\
system("sh -c 'git push http://".AttrVal('$SELF','git_username','').":".AttrVal('$SELF','git_password','')."@".AttrVal('$SELF','git_host','')."/".AttrVal('$SELF','git_git','')." ".AttrVal('$SELF','git_repo','')."'" );;\
}
attr conifgBackup2GIT userattr git_username git_password git_host git_git git_repo
attr conifgBackup2GIT git_git fhem/fhem.git
attr conifgBackup2GIT git_host 192.168.1.11
attr conifgBackup2GIT git_password GITPasswort
attr conifgBackup2GIT git_repo master
attr conifgBackup2GIT git_username GitUser
attr conifgBackup2GIT wait 3


Wichtig ist der Wait Timer, da ansonsten die Datei noch nicht geschrieben ist und die "alte" Version gesichert wird.
Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: pldemon am 05 März 2021, 17:21:02
Danke, super Anleitung!

Für alle, die keine Passwörter in Git/FHEM speichern wollen, hier eine Abwandlung mit SSH-Keys:

1.) SSH-Keys auf FHEM-System erstellen
# sudo -u fhem ssh-keygen -t rsa

2.) SSH-Key auf dem GitServer ablegen (je nach Server verschiedene Vorgehensweise)
# sudo -u fhem cat /opt/fhem/.ssh/id_rsa

3.) Repository auf dem Remote-Git-Server erstellen.

4.) Git-Instanz unter FHEM erstellen
# cd /opt/fhem
# git init
# git config --global user.name FHEM
# git config --global user.email fhem@fhem.fhem
# git remote add origin http://IP_UND_PORT/fhem/fhem.git
# chown -R fhem /opt/fhem


5.) Git-Verbidnung testen - ist alles korrekt eingerichtet, sollte alles ohne Passwortabfrage funktionieren
# cd /opt/fhem
# sudo -u fhem git pull


6a.) FHEM definition erstellen
defmod System.SaveConfig DOIF ([global:"SAVE"]) \
{ \
my $now = TimeNow();; \
system("git add $attr{global}{configfile}");;\
system("git add $attr{global}{statefile}");;\
system("git commit -m 'Triggered by FHEM config save ($now)'");;\
system("git push");;\
}

attr System.SaveConfig wait 3


6b) Alternative, wenn das Kommando FHEM nicht blocken und im Hintergrund laufen soll

define System.SaveConfig DOIF ([global:"SAVE"]) \
{ \
my $now = TimeNow();; \
my $command = "git add $attr{global}{configfile};; " \
. "git add $attr{global}{statefile};; " \
. "git commit -m 'Triggered by FHEM config save ($now)';; " \
. "git push";; \
system("/bin/sh -c \"$command\" &");;\
}
attr System.SaveConfig wait 3


Gruß,
Mirko
Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: thunder1902 am 05 April 2021, 08:02:12
Ich habe Methode 1 (über Ben/PW) ausprobiert. Leider ohne Erfolg. Mit DOIF Variablen definieren funktioniert irgendwie nicht. Schon mit der ersten Zeile (my $now = TimeNow();; \" gibt es einen Fehler.
Wie bindet man das defmod ein? Ich habe es in ein define ersetzt und in die fhem.cfg geschrieben.
War das so richtig?
Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: pldemon am 07 April 2021, 14:32:56
Hallo,

wie lautet die Fehlermeldung? Du kannst die Kommandos entweder per Telnet oder in GUI von FHEM absetzen. Bei Telnet musst du natürlich den Dienst einschalten. Wie es geht, wird hier beschrieben: https://wiki.fhem.de/wiki/Telnet

Gruß,
Mirko
Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: Dries am 13 März 2022, 20:33:09
Hallo Zusammen,

auch wenn dieses Thema nicht aktuell diskutiert wird: mir hat der Thread sehr geholfen. Vielen Dank
@th0nix: für die Idee und iniiale Umsetzung
@pldemon (Mirko): für die Ergänzung um ssh

Da ich mich aktuell auch in anderen Projekten in GIT / GTHUB bzw GITEA  einarbeiten muss und tatsächlich ein wenig verliebt bin,
lag der Gedanke auch die FHEM Config darüber zu verwalten und gleichzeitig auch zu sichern nahe. Hier im Forum bin ich schnell bei Euch fündig geworden.

Ein Anmerkung zur Anleitung von Mirko
Zitat
2.) SSH-Key auf dem GitServer ablegen (je nach Server verschiedene Vorgehensweise)
Code:
# sudo -u fhem cat /opt/fhem/.ssh/id_rsa
Bei meinen "Standard" Installationen liegt in "id_rsa" der private Key.
Sollte es dort nicht besser # sudo -u fhem cat /opt/fhem/.ssh/id_rsa.pub
heißen um eindeutig zu sein?

Ich nutze die non-blocking Variante. Sie funktioniert, aber aber zeigt sich danach mit einem Fehlercode "-1" (Ende vorletzte Zeile) im FHEM-Log. Wisst Ihr ob dies die normale Rückgabe eines git-Push mit Changes ist oder eine ernst zunehmende Warnung?


2022.03.13 19:35:42 2: System.SaveConfig: {  my $now = TimeNow();  my $command = "git add $attr{global}{configfile}; "  . "git add $attr{global}{statefile}; "  . "git add README.md; "  . "git commit -m 'Triggered by FHEM config save ($now)'; "  . "git push";  system("/bin/sh -c \"$command\" &"); }: -1
[master ######] Triggered by FHEM config save (2022-03-13 19:35:42)


PS und ein persönliche Empfehlung: Ich habe zusätzlich eine README.md in /opt/fhem/ erstellt und ins Repo aufgenommen. Das ist Standard-Doku Vorgehen bei mir, da ich sonst nach kurzer Zeit nicht mehr weiß, was da eigentlich vor sich geht. Zudem eine Möglichkeit die FHEM Instanz inkl Backup/Recovery (aber ohne Passworte!!!) vergleichsweise einfach und  an einem logischen Ort zu dokumentieren.

Viele Grüße,

Andreas
   

Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: der-Lolo am 05 Juni 2022, 20:48:08
Sehr schön, das ganze gefällt mir!
Es läuft auch mittlerweile nach einigen Hürden mit der key authorization auf der Synology NAS.

Kann man nun auch von FHEM aus einige Stati vom Git-Server abfragen? Wäre toll eine Liste zu haben welche commits gepusht wurden, wäre auch toll die commit message selbst schreiben zu können.

sowas wie

save "Änderungen am DOIF xxx & globales update"

in die FHEM cmd-line eintippen wäre klasse.

die -1 Rückgabe des System wird auch offenbar noch als error eingestuft, oder ist doch noch was falsch bei mir? Die Sicherung funktioniert...

error
{ my $now = TimeNow(); my $command = "git add $attr{global}{configfile}; " . "git add $attr{global}{statefile}; " . "git commit -m 'Triggered by FHEM config save ($now)'; " . "git push"; system("/bin/sh -c \"$command\" &"); }: -1



2022.06.05 20:51:48 2: System.SaveConfig: {  my $now = TimeNow();  my $command = "git add $attr{global}{configfile}; "  . "git add $attr{global}{statefile}; "  . "git commit -m 'Triggered by FHEM config save ($now)'; "  . "git push";  system("/bin/sh -c \"$command\" &"); }: -1
[master 8174902] Triggered by FHEM config save (2022-06-05 20:51:48)
2 files changed, 8 insertions(+), 9 deletions(-)
To ssh://192.168.1.5/volume1/**/fhem.git
   d7a2c9b..8174902  master -> master


Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: Gisbert am 22 Juni 2022, 08:54:43
Hallo th0nix,
Hallo pldemon (Mirko),

sehr interessanter Ansatz, den ich gerne aufgreifen möchte.
Ich habe ein Konto bei Github, bisher um dort ausschließlich zu lesen. Kann ich als einfacher (nicht zahlender) User dort etwas speichern? Ich möchte nicht, dass alle meine Definitionen öffentlich verfügbar sind. Kann man bei Github es so einstellen, dass dort gespeicherte Daten privat gehalten werden?

Viele​ Grüße​ Gisbert​
Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: dominik am 22 August 2022, 22:35:10
Ich habe die Tage ein fhempy Modul für das Backup in ein privates Github Repository erstellt.

Ist vielleicht für ein paar hier interessant:
https://forum.fhem.de/index.php/topic,128873.0.html
Titel: Antw:Automatische Sicherung der Config in einem GIT
Beitrag von: der-Lolo am 25 August 2022, 20:35:58
Ja vielleicht - das hier funktioniert schon sehr gut, aber fhempy wollte ich mir eh genauer anschauen um "exoten" zu integrieren...