Automatisierte Backups per homebridge-config-ui-x

  • Die einen oder anderen werden es schon gesehen haben: das Web-UI von homebridge-config-ui-x bietet die Möglichkeit, Backups von der Homebridge-Konfiguration zu machen. Wer es nicht kennt: oben rechts gibt es ein Menü mit drei Punkten, und darunter gibt es den Menüpunkt Backup/Wiederherstellen.



    Das Backup per homebridge-config-ui-x funktioniert so: das Backup erstellt ein Verzeichnis namens storage, in dem sich der Inhalt eures Konfigurationsverzeichnissen befindet. Gesichert wurden also die config.json und auch die Verzeichnisse persist und accessories. Zusätzlich wird alles andere, was sich im Konfigurationsverzeichnis noch so angesammelt hat, ebenfalls gesichert.


    Weiterhin werden zwei Dateien erstellt. Die eine, info.json, enthält Informationen über die verwendete Node-Version und die verwendete homebridge-config-ui-x-Version, mit der das Backup erstellt wurde. Die andere, plugins.json, enthält Informationen über alle installierten Plugins sowie deren Versionsnummer.


    Diese Bestandteile werden in eine große Datei gepackt, nämlich in ein sogenanntes tar-Archiv, und dann auf den Computer, der das Web-UI anzeigt (also euer Mac oder PC), heruntergeladen. Wenn man mit seiner Homebridge umziehen will oder eine kaputte Homebridge wiederherstellen will, dann kann man mittels der Wiederherstellen-Funktion dieses tar-Archiv laden und sowohl config.json, die Verzeichnisse accessories und persist als auch alle Plugins werden erneut installiert. Neuere Versionen von Plugins werden ersetzt durch diejenigen, die in plugins.json angegeben sind.


    Das ist doch schon mal ganz nett. Leider muss dieser Vorgang manuell angestoßen werden. Da wir in diesem Forum nicht so auf manuelles Ausführen stehen, wäre es wünschenswert, wenn man das Backup automatisieren könnte. Oznu, der Entwickler von homebridge-config-ui-x, hat mir mitgeteilt, dass er diese Automatik eines Tages in sein Plugin eingebaut werden wird. Bis dahin habe ich hier eine Lösung, mit der man das von der Shell aus automatisieren kann.


    Dazu muss man ein Shell-Skript schreiben und einen Cronjob. Das Skript stößt homebridge-config-ui-x an, das Backup zu erstellen. Der Cronjob führt das Skript automatisch einmal täglich aus. Das Skript ist übrigens ebenfalls von Oznu (siehe https://github.com/oznu/homebridge-config-ui-x/issues/660). Ich habe es leicht verändert.


    So wird's gemacht:

    jq installieren

    Zunächst müsst ihr ein weiteres Programm auf eurem Raspi installieren:

    sudo apt-get install -y jq


    Shell-Skript schreiben

    Danach schreibt ihr das Shell-Skript:

    sudo nano /usr/local/bin/backup-homebridge-config-ui-x.sh


    Ein leerer Editor erscheint. Dort wird eingefügt:


    Bitte beachtet, dass ihr im Skript eure Login-Daten für das Web-UI angeben müsst. Also den Usernamen und das Passwort, die ihr für das Login verwendet, wenn ihr die grafische Oberfläche der Homebridge aufruft. Ihr müsst im Skript eure Daten angeben, und zwar hier:


    USERNAME=admin

    PASSWORD=admin


    Bei vielen wird das möglicherweise schon so passen.


    Dann müsst ihr den Port angeben, den ihr für homebridge-config-ui-x verwendet:

    UI_HOST=http://localhost:8080


    Auch das wird bei den meisten so richtig sein.


    Nun könnt ihr das Skript speichern und den Editor verlassen, am besten indem ihr ctrl-x (oder strg-x) drückt, danach y und dann die Eingabetaste. Dann macht ihr das Skript ausführbar:


    sudo chmod +x /usr/local/bin/backup-homebridge-config-ui-x.sh


    Zeit zum Testen. Ruft das Skript auf mit

    /usr/local/bin/backup-homebridge-config-ui-x.sh


    Wenn alles funktioniert, gibt das Skript am Ende aus:

    Backup saved to /home/pi/backup-2020-05-08.tar.gz

    wobei das Datum im Dateinamen morgen schon ein anderes sein wird.


    Das tar-Archiv wurde heruntergeladen auf den Raspi. Ihr könnt es sehen, indem ihr einfach die Dateiliste anzeigt:

    ls -l

    Cronjob erstellen

    Das ist einfach. Geht so vor:


    cd /etc/cron.daily

    sudo ln -s /usr/local/bin/backup-homebridge-config-ui-x.sh .

    cd


    Das war's. Einmal am Tag wird nun das Backup erstellt. Bei mir ist das immer um 6.28 Uhr morgens, aber das mag bei jedem anders sein.


    Sicherlich kann man hier noch eine Menge verbessern. Vielleicht hat ja det noch ein paar Ideen, wie das Skript am besten in seine Backupstrategie passt.


    Viel Erfolg.

    4 Mal editiert, zuletzt von sschuste ()

  • sschuste, ich habe diese Option selbst kuerzlich genutzt, als ich nach dem Update auf [email protected] Fehler hatte... Es lief alles sauber durch, wie von dir beschrieben. Nun aber zu meinen Fragen:


    Ich habe aktuell eingestellt, dass ich ohne passwort Eingabe direkt auf meine homebridge komme, der standard user admin bleibt ja aber. Durch die restore Funktion, sollte es ja auch die Daten uebernehmen und mich wieder so reinlassen, oder?


    Kann man auch einstellen, dass nach dem erfolgreichen Erstellen eines neues Backups, das alte backup geloescht wird und ich nicht irgendwann 43289479203790 Backups zu liegen habe?

  • ann man auch einstellen, dass nach dem erfolgreichen Erstellen eines neues Backups, das alte backup geloescht wird und ich nicht irgendwann 43289479203790 Backups zu liegen habe?

    Klar, du musst nur eine Zeile im Skript ändern:

    BACKUP_FILE_NAME="backup-$(date '+%Y-%m-%d').tar.gz"


    in:

    BACKUP_FILE_NAME="backup.tar.gz"

  • Ich hätte das Backup gerne aus Sicherheitsgründen auf einem externen Rechner.

    Kann man mit dem Script auch realisieren, dass einem ein Download des Backups angeboten wird?

    Som wie aus config-ui-x auch.


    • Wenn du einen Mac hast, dann lass das Skript da laufen und gibt als Adresse die IP deines Raspi an. Im Skript änderst du dann die Zeile UI_HOST=http://localhost:8080 in etwas wie UI_HOST=http://192.168.1.22:8080. Allerdings musst du erst auf dem Mac das Programm jq installieren. Dazu brauch man den Paketmanager brew:
      brew install jq

      Falls du kein brew hast, musst du es erst installieren mit
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    • Wenn du einen anderen Raspi oder Linux-Rechner hast, lass es dort laufen und installiere vorher jq mit sudo apt-get install -y jq.
    • Wenn du einen Windows-Rechner hast, dann weiß ich nicht, wie das dort geht. Ich habe letzte Woche zum ersten Mal vor Windows 10 gesessen, weil mich eine Freundin bat, ihren neuen Laptop zu installieren. Jesses. Ich glaube, ich werde Windows nie begreifen. Ein echtes Betrübssystem. Dafür bin ich nicht hartgesotten genug.
  • Jupp, windows 10

    Mir gehts wie Dir , nur andersrum!;)


  • bei mir kommt nach dem /usr/local/bin/backup-homebridge-config-ui-x.sh der Fehler: parse error: Invalid numeric literal at line 1, column 10

  • bei mir kommt nach dem /usr/local/bin/backup-homebridge-config-ui-x.sh der Fehler: parse error: Invalid numeric literal at line 1, column 10

    Das scheint erzeugt zu werden durch diesen einzeiligen (!) Befehl:


    curl http://192.168.1.22:8080/api/auth/login -H 'Content-Type: application/json' --data-binary '{"username":"admin","password":"admin"}'


    Gib diesen Befehl im Terminal direkt ein, wobei du natürlich die fett dargestellten Begriffe durch die von dir genutzten ersetzt werden müssen. Herauskommen sollte sowas wie:


    {"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwibmFtZSI6IkFkbWluaXN0cmF0b3IiLCJhZG1pbiI6dHJ1ZSwiaW5zdKFuY2VJZCI6IjhiMzRiNTRkYzA0NTQ0ZjEyZDFjZjNjOTRkNzNhOTNhZGIzZliRVTNhYmNlMjQwNTUwQDI4Mjc3MWZjZDY1YWQiLCJpYXQiOjE1ODkwMzAxOTEsImV4cCI6MTU4OTA1ODk5MX0.F0omaKeF1TSAavqSCb11nv6hdAWAtUkkrrRUaKcuqn0","token_type":"Bearer","expires_in":28800}


    Was kommt bei dir da raus?

  • soll ich dir den ganzen token senden, sieht eigendlich genau so aus, aber halt mit anderen zahlen und nummenr

  • soll ich dir den ganzen token senden

    Nein, super, das sagt mir, dass der Befehl grundsätzlich funktioniert. Google behauptet, der Fehler sei eine typische Meldung des Programm jq. Also hängen wir das mal an:


    curl -sk https://192.168.1.22:8080/api/auth/login -H 'Content-Type: application/json' --data-binary '{"username":"admin","password":"admin"}' | jq -r .access_token



  • Nein, super, das sagt mir, dass der Befehl grundsätzlich funktioniert. Google behauptet, der Fehler sei eine typische Meldung des Programm jq. Also hängen wir das mal an:


    curl -sk https://192.168.1.22:8080/api/auth/login -H 'Content-Type: application/json' --data-binary '{"username":"admin","password":"admin"}' | jq -r .access_token



    % Total % Received % Xferd Average Speed Time Time Time Current

    Dload Upload Total Spent Left Speed

    100 407 100 368 100 39 13629 1444 --:--:-- --:--:-- --:--:-- 15074

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwibmFtZSI6IkFkbWluaXN0cmF0b3IiLCJhZG1pbiI6dHJ1ZSwiaW5zdGFuY2VJZCI6Ijk4MDRkYTVmMDViMmVlYmM0ZDdjMDNkMjM2OWE2ZWQ0MjY2Njk0MmJlMmIwMWQ1ZjE0YzhkNTBkNGI2ZmExMTYiLCJpYXQiOjE1ODkyMDMyNTY

  • So soll es aussehen. Sieh dir noch mal dein Skript an. Vielleicht ist da beim Kopieren irgendwas schief gegangen.

  • Gibt’s auch ne Möglichkeit, dass sich die Backup File direkt auf meinem NAS speichert?
    Weil wenn mir der Raspi mal abraucht, nützt mich das Backup dort nichts...

    Gruß

    Maddin

  • Ich habe keine Ahnung von NAS, würde aber erwarten, dass man dort irgendwas freigeben kann und diese Freigabe dann auf dem Raspi mounted. Googlet das.

  • Also eine Freigabe für mein NAS besteht. Ich kann diesen auch mit folgendem Befehl Mounten:


    Allerdings weiß ich nicht, wie ich den Befehl in das Script bekomme und woher das Script dann weiß, dass es dort speichert.

    Code
    mount -t cifs -o user=root,password=******,rw,file_mode=0777,dir_mode=0777 //192.168.178.60/homebridgebackup /mnt/nas

    Gruß

    Maddin

  • Nein, so versuchen:

    BACKUP_FILE_PATH="/mnt/nas"


    UI_HOST ist die Maschine, auf der homebridge-config-ui-x läuft.

  • Und wie und wo bekomme ich den Mount Befehl im Script eingebaut?

    Gruß

    Maddin