Ankündigung

Einklappen
Keine Ankündigung bisher.

Konfigurations export/import

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Konfigurations export/import

    Hallo,

    wäre es eine gute Idee einen Eintrag in irgendeiner Form in der Systempage/Configurationpage zu erstellen, unter welchem die gesamte Konfiguration (eigene pages, dropins, das config file, usw.) z.B. als Zip exportiert und auch wieder importiert werden kann? Also im Prinzip so ähnlich wie bei SmarthomeNG.

    Dies wäre vor allem für Backups nützlich und auch bei einem Update sinnvoll, da hier auch eine komplette "Neuinstallation" empfohlen wird.

    Bin grade beim Ideen sammeln und überlegen was es zu beachten gibt. Würde dies dann selbst oder mit- implementieren.

    Lg Thomas
    Zuletzt geändert von hijacker7; 05.04.2023, 17:19.

    #2
    Moin Thomas,

    für ein vollständiges Backup braucht man
    • die config.ini im smartVISU Root Verzeichnis
    • den gesamten Ordner ./pages/<DeineSeiten> mit Unterordnern
    • den gesamten Ordner ./dropins/ mit Unterordnern.
    Ein Bash-Skript, das mit Rechten des Users smarthome im Terminal gestartet wird, wäre mir persönlich aus Sicherheitsgründen sympathischer, als dies über die Visu zu machen, die bei vielen Anwendern über das Internet erreichbar ist.

    Gruß
    Wolfram

    Kommentar


      #3
      Zitat von wvhn Beitrag anzeigen
      Sicherheitsgründen
      Nur um das zu diskutieren:
      Wenn die Visu sowieso öffentlich erreichbar ist, dann ist es doch auch egal wenn die Konfiguration runtergeladen werden kann. Denn eigentlich kann dann alles aus dem HTML Code bzw. aus der Configurationpage gelesen/geklaut werden was auch im Backup wäre. Auch der Inhalt der masteritem Datei ist über den Widget-Assistent einsehbar.

      Übersehe ich etwas grundlegendes?

      Kommentar


        #4
        Mir geht es weniger um die Daten, als um die Möglichkeit, über die Visu Systemaktionen auszulösen, wie Dateien kopieren und packen. Mag sein, dass ich da übervorsichtig bin, aber ich verstehe zu wenig von Schutzmechanismen, um die Tür einfach nur so aufzumachen.

        Vorschlag: wenn Du das realisieren möchtest, stelle ich das Ergebnis ins smartvisu-newstuff Repository zum Nachrüsten. Dann können Interessierte selbst Risiko und Nutzen abschätzen.

        Gruß
        Wolfram

        Kommentar


          #5
          Webspace und Datenbank Backups via PHP-Scripts zu erstellen und diese dann irgendwo zu hinterlegen bzw. diese zum Download anzubieten, ist eine gängige Methode, die quasi jedes CMS anbietet. Ich selbst mache das auch so auf meinen Webservern mit eigenen Backup-Scripts.

          Ich setz mich mal ran und dann sehen wir ja wie es weiter geht. Danke dir inzwischen.

          Ps: Eine größere Tür aufmachen als evtl. die eigene Haustür (über eine öffentlich erreichbare Visu), kann man aber auch auf einem Server nicht. 😉

          LG Thomas

          Kommentar


            #6
            Hallo,
            habe die Backup und Wiederherstellen Funktionalität implementiert.
            Bei einem Backup wird automatisch ein zip-Archiv mit dem Ordnern dropins, den eigenen (nicht im Repo enthaltenen) pages und der config.ini heruntergeladen. Beim Restore werden diese entpackt und an die richtigen Stellen gesetzt. Damit keine ausführbaren Dateien (vorallem php) eingeschleust werden können, werden nur jene Dateien überhaupt erst entpackt, die einer Liste von "vertrauenswürdigen" Dateiendungen entsprechen. Falls eine Datei diesen Kriterien nicht entspricht wird man in der notify darüber informiert und aufgefordert sich händisch darum zu künmmern. Da der Import vom "user" www-data gemacht wird, muss im Anschluss der Eigentümer der Dateien mit einem Terminal Befehl richtig gestellt werden. Dieser Befehl ist ebenfalls im notify enthalten und auf die jeweilige Installation angepasst.

            Im backup.zip sind drei Dateien enthalten:
            1. backup.php -> diese Datei muss ins smartVISU/lib/ Verzeichnis gelegt werden
            2. backup.html -> diese Datei muss ins smartVISU/dropins/ Verzeichnis gelegt werden
            3. system_menu.html -> dies ist die orginale systems_menu.html aus dem smartVISU/pages/base/ Verzeichnis, die um den nachstehenden Backup-Menüpunkt erweitert worden ist. Diese Datei sollte auch ins smartVISU/dropins/ Verzeichnis.
            Code:
                    <li data-icon="false">
                        <a href="index.php?page=backup">
                            <img class="icon" src="{{ icon0 }}edit_save.svg" alt="Backup" />
                            <h3>Backup config</h3>
                        </a>
                    </li>​
            So -spartanisch- sieht das ganze aus:
            grafik.png

            Kommentar


              #7
              Der aktuelle Stand ist super testbar und gibt einen Überblick. Es geht jetzt mal um das Prinzip. Ich hoffe, dass ich etwas Feedback bekomme, damit ich dies noch ausbauen und verbessern kann, bevor es dann irgendwie weiter veröffentlicht wird.

              Lg Thomas

              Kommentar


                #8
                Moin Thomas,

                vielen Dank!

                Auf meinem Test-PC mit Apache2 / PHP8.0 Webserver läuft das Skript durch und produziert eine Backup-Datei , in der nur die config.ini enthalten ist, aber keine Unterverzeichnisse von ./pages. Folgende Fehlermeldung erscheint im apache2 error.log:
                Code:
                [Mon Apr 10 11:37:52.339688 2023] [php:warn] [pid 6280:tid 1852] [client 127.0.0.1:62591] PHP Warning: Undefined array key -1 in C:\\xampp8\\htdocs\\svnext\\lib\\backup.php on line 49, referer: http://localhost/svnext/index.php?page=backup
                ​
                Auf meinem Test-Raspberry mit PHP7.3 (bisher offizielle Mindestversion für smartVISU) läuft das Skript nicht. Zunächst machen die benannten Argumente in den mkdir-Aufrufen Probleme, da PHP7 das noch nicht kennt. Ändert man das in eine kompatible Schreibweise, bemängelt PHP die fehlende Klasse "ZipArchive".
                Mit
                Code:
                sudo apt-get install php7.3-zip
                kommt man einen Schritt weiter. Dann werden der oben genannte Fehler geschmissen und die Verwendung der PHP8-Funktion str_starts_with() bemängelt. Da habe ich erstmal aufgehört, weiter zu suchen.

                Gruß
                Wolfram

                Kommentar


                  #9
                  Für die Weiterentwicklung habe ich die Dateien jetzt mal hier abgelegt: https://github.com/smartVISU-newstuf...ree/new/backup.

                  In die backup.html habe ich schonmal die Sprachunterstützung eingebaut. Die Texte dazu sind in den Sprachdateien ./lang/en.ini und de.ini zu finden.

                  Weitere Änderungen gerne als PR gegen das Repository.

                  Gruß
                  Wolfram

                  Kommentar


                    #10
                    wvhn großen Dank dir für deine Mühe.

                    Ja wäre nicht schlecht, wenn man Funktionalitäen mit der minimum erforderlichen php Version entwickelt, anstatt mit der aller neusten... 🙈

                    Ich meld mich und erstelle einen PR wenns was neues gibt.

                    Lg

                    Kommentar


                      #11
                      Habe gerade einen PR erstellt, der die Fixes enthält.
                      Bei mir läuft das Backup und der Import jetzt auf allen Versionen. Getestet habe ich:
                      • PHP v7.3.33
                      • PHP v7.4.33
                      • PHP v8.0.28
                      • PHP v8.1.16
                      • PHP v8.2.4

                      wvhn könntest du nochmal auf deinen Testservern gegenchecken?

                      LG

                      Kommentar


                        #12
                        Moin Thomas,

                        die gute Nachricht zuerst: auf dem Raspi mit PHP 7.3.31 läuft das Erstellen der ZIP-Datei und das Wiederherstellen prima. 👍

                        Mein Testserver mit PHP 8.0.3 ist wahrscheinlich ein spezieller Fall. Der Server (XAMPP) läuft auf meinem Windows-PC im Ordner C:\XAMPP8. Die ZIP-Ausgabe ist merkwürdig. In der Explorer-Ansicht sehe ich nur die config.ini in der ZIP-Datei. Öffne ich die Datei mit 7Zip, erhalte ich folgende Ausgabe (Auszug):

                        C:xampp8htdocssmartVISU
                        C:xampp8htdocssmartVISUdropins
                        C:xampp8htdocssmartVISUtpages
                        C:xampp8htdocssmartVISUpagesmyPages
                        C:xampp8htdocssmartVISUpagessmarthome
                        C:xampp8htdocssmartVISUpagesmyPageseg_ eingang.html
                        C:xampp8htdocssmartVISUpagesmyPageseg_ essen.html
                        config.ini


                        Vermutlich liegt das an dem mit XAMPP mitinstallierten ZIP-Modul oder dessen Einstellungen. Das muss ich mir bei Gelegenheit einmal ansehen.

                        Beim Rückspeichern wird in der Funktion rcp ein Fehler geschmissen, weil "opendir($src)" als Ergebnis "false" liefert und "readdir" mit einem BOOL-Wert als Datei-Handler nicht klar kommt. Das könnte man sicher bei opendir noch abfangen.

                        Ich übernehme die Version jetzt mal aus dem new-branch in den master. Um die Funktion ganz in smartVISU zu integrieren wäre es gut, wenn die Restore-Funktion schon im Grundmenü einer nicht konfigurierten Visu erscheinen würde (./pages/base/index.html).
                        grafik.png
                        Bis dahin muss man zuerst eine Beispielseite / Doku konfigurieren und die Rückspeicherung von dort aus aufrufen.

                        Danke und Gruß
                        Wolfram

                        Kommentar


                          #13
                          Bei Windows bin ich mir nicht sicher ob realpath() die korrekte Pfadangabe mit / oder \ liefert. Bzw. bei manchen Funktionen verwende ich explizit den normalen Slash /, dies könnte auch zu Problemen führe. Ich glaube das müsste man händisch korrigieren.

                          Das mit dem Grundmenü wollte ich gestern eigentlich auch noch machen. Ich glaube aber der Umweg über die Docu oder eine Beispieseite ist nicht nötig. Man kommt über Config auch dahin. Nichts desto trotz: Ich füge diesen Menü-Punkt nach Config noch hinzu.

                          Lg
                          Zuletzt geändert von hijacker7; 14.04.2023, 07:24.

                          Kommentar


                            #14
                            Was es vielleicht auch noch zu beachten gibt, ist die upload_max_filesize. Standardmäßig ist diese bei Apache auf 2MB eingestellt. Momentan prüfe ich die hochgeladene Zip im Php-Skript auf unter 10MB. Ich bin mir nicht sicher ob man die 10 so belässt und die Empfehlung gibt die uplad_max_filesize zu erhöhen oder umgekehrt. Meine Backups vom laufenden System haben nur ca 200KB, aber ich habe auch nur html, js und css. Falls man Bilder oder so hat kann man 2MB auch schnell erreichen. Die base, Kurzanleitung und Docu zusammmen haben auch schon knapp so viel (diese werden ja nicht mit gezippt, nur als Reverenz).
                            Zuletzt geändert von hijacker7; 14.04.2023, 07:49.

                            Kommentar


                              #15
                              Hallo Wolfram,
                              Im Zuge der Entwicklung bin ich auf was anderes gestoßen: ich verwende bei mir ein eigenes Design, welches sich im Verzeichnis designs befindet. Dadurch wird dieses natürlich nicht mit gezippt.
                              Wäre es sinnvoll unter dropins ein Verzeichnis für die eigenen Designs hinzufügen?

                              Lg Thomas

                              Kommentar

                              Lädt...
                              X