[Modulbaustein] Module Self-Updater

  • Hallo Miteinander


    Ich habe mich mal der Sache mit dem 3rd. Party Moduleupdating angenommen, da es in diese Richtung von der SF noch keine Lösung gibt. Und weil das kürzlich SF-Update einen so grossen aufwand verursacht hat.


    Wie das ganze konkret Funktioniert:


    Es wird ein Modulbaustein Importiert, den ihr nach belieben (Zb. Tägl./Wöchentl. Timer) auslösen könnt.


    Ihr könnt einen eigenen Update Server definieren, welcher via HTTP(S)-GET zuerst eine meta.xml Datei lädt:
    Ein Beispiel:

    Code
    <modules>
        <module id="00b9fa5f-9f02-42a2-9e1c-9c6da7fb4bbf" name="Testmodul" >    
            <version version="100" sfversion="6.4" file="TestUpdate/6.4/TestUpdate.sfm" hash="42f630fc2e2b10f9b2cf9e692fcc0fc14cde95b5"/>
            <version version="112" sfversion="6.4.2.11" file="TestUpdate/6.4/Security_Release_TestUpdate.sfm" hash="ea10679e2720b5391c640d6aea3720765c3a10fe"/>
        </module>
        <module id="75ad75a3-a423-4c45-b442-9930d2cd7702" name="Testmodul2" >
            <version version="260" sfversion="6.1" file="TestUpdate2/6.1/Update_v260.sfm" hash="91c640d6aea3720765c3a10feea10679e2720b53" />
            <version version="276" sfversion="6.4" file="TestUpdate2/6.4/Update_v276.sfm" hash="9e692fcc0fc14cde9542f630fc2e2b10f9b2cfb5" />
        </module>
    </modules>


    Die Metadatei Enthält Infos über alle Module, die auf diesem Updateserver sind, sowie welche Updates für welche SF-Versionen zur Verfügung stehen.


    Dabei Prüft er zuerst, ob eine Spezifische Version für die SF Vorhanden ist, bevor er immer gröber mit der Suche wird (6.4.2.11, 6.4.2, 6.4, 6)


    Findet er ein Modul, dessen SF-Version mit der von der SF passt, prüft er, ob nicht schon die gleiche Version installiert ist. Falls nicht, lädt er das Update.


    Danach wird noch eine Hashüberprüfung mit dem im meta.xml Hinterlegten Hash durchgeführt, anschliessend wird das Modul Importiert.


    Die Parameter, welche das Modul annimmt:


    • http(s) URL (STRING) Target URL
    • Get-Arguments (MAP) Attaches those values to URL as get arguments http://?<Key>=<Value>&<Key>=<Value>...<br>[*]AllowRedirect (BOOLEAN) Allow URL-Redirection (302)<br>[*]Module ID (STRING) Type in your module identifiers from your meta.xml<br>[*]Module ID Auto-detect (BOOLEAN) Uses this module UUID as ID<br>[*]Module Version (STRING) The Module version of this module<br>[*]Module Version Auto-Detect (BOOLEAN) Use the Starface module version<br>[*]Manual Starface Version (STRING) Starface version<br>[*]Starface Version Auto-detect (BOOLEAN) Auto-detects the Starface version<br>[*]Starface Version Fuzzy Search (BOOLEAN) Does Fuzzy Search, if the exact version was not found. Example: 6.1.2.3 = Not found looking for => 6.1.2 = Not found looking for => 6.1 = Not found looking for => 6<br>

    http://<br>Outputs:<br><woltlab-metacode-marker data-name="list" data-uuid="1237e11b-1c5b-40d6-a07d-813fc74ebb6c" data-source="W0xJU1Rd" /><br>[*]hasError (BOOLEAN) Return True when an Error Occured, while Downloading or Updating an Module. Not finding a module on an updateserver is not an error<br>[*]Errormessage (STRING) Returns the Error Message.<br><woltlab-metacode-marker data-uuid="1237e11b-1c5b-40d6-a07d-813fc74ebb6c" data-source="Wy9MSVNUXQ==" /></p><p><br></p><p>Die Funktion ist so designt, dass ihr auch andere Module (Manuell eine Module_ID eingeben) updaten könnt, ihr könnt also theoretisch ein Installer/Updater Modul bauen welches all eure Module automatisch importiert/updatet.</p><p><br></p><p>Was haltet ihr von diesem Spielzeug? Ich stelle es hier zur Verfügung, nachdem ich noch die letzten Bugs ausgemerzt habe.</p><p><br></p><p>//edit: </p><p><br></p><p>Download: [URL='http://module.si-solutions.ch/metagenerator/Metagenerator.zip']http://module.si-solutions.ch/…nerator/Metagenerator.zip
    Target URL ==> GrundURL. Z.b. http://192.168.123.45/update/
    Dann muss das Metafile hier liegen: http://192.168.123.45/update/meta.xml


    Die XML Pfade sind Relativ zum TargetURl: also z.b. "TestUpdate2/6.4/Update_v276.sfm" ==> http:\\192.168.123.45/update/TestUpdate2/6.4/Update_v276.sfm
    Der Hash ist der FileHash vom Typ MD5 (Windows: cmd ==> CertUtil -hashfile [Dateiname], mac: Console ==>MD5 [Dateiname], Linux: md5sum [Dateiname])


    //edit: Ordnerstruktur für den Metagenerator:


    [ROOT]
    Metagenerator.jar
    meta.xml <==(Wird hier von Metagenerator.jar erstellt)
    Modulname1(Ordner)
    ________|_______Starface-Version(Ordner)
    _________________________|___________Modulname1.sfm
    Biespielmodul(Ordner)
    ________|_______6.4.11(Ordner)
    ________|___________|___________Beispielmodul_v12.sfm
    ________|_______6.3(Ordner)
    ________|___________|___________Beispielmodul_v5.sfm
    ________|_______6(Ordner)
    ____________________|___________Beispielmodul_v1.sfm
    updater.gif


    MfG


    Fabian

  • Ich hab Oben einen DL Link zur Verfügung gestellt.


    Noch @SF darf ich den Sourcecode der selbst geschrieben Klasse freigeben? Oder muss ich den zuerst um die SF Funktionen "Abspecken"?


    MfG


    Fabian

  • Finde ich aus Kundensicht auch ganz interessant, wenn es einen nativen Modul-Updater gäbe.
    Wir haben z.B. Module von Fluxpunkt und O-Byte.
    Fluxpunkt hat das offene Wiki mit Downloadmöglichkeit ("Daumen hoch"), bei O-Byte muss ich leider immer den Support anfunken (geht auch, funktioniert auch reibungslos, aber auch wieder Zeitaufwand).
    Vielleicht macht es Sinn, dass die Partner die jeweiligen Modulversionen direkt Richtung Starface pushen (ein gemeinsamer Modulpool) und ein etwaiger Modul-Updater schaut dann täglich nach, ob Updates für installierte Module (auch 3rd Party) verfügbar sind (kennt man ja z.B. von JIRA, Confluence, etc. da ist es im Backend auch möglich alles auf einen Schlag abzudaten).
    Die Idee von Fabian (nucom) weist ja schon in die richtige Richtung.

  • Zitat

    Finde ich aus Kundensicht auch ganz interessant, wenn es einen nativen Modul-Updater gäbe.


    Zitat

    die jeweiligen Modulversionen direkt Richtung Starface pushen (ein gemeinsamer Modulpool) und ein etwaiger Modul-Updater schaut dann täglich nach, ob Updates für installierte Module (auch 3rd Party) verfügbar sind


    Der von mir geschriebene ModulUpdater wurde eben darum geschrieben, weil ich nicht so bald mit einer Möglichkeit Seitens SF-Rechne einen Zentralen Module Store mit implementierter Update-Funktion zu bieten.


    Mit diesem Modulbaustein kann jeder seinen eigenen Updateserver für seine Module einrichten, und diesen auch Managen.


    Ich werde diesen Baustein zukünftig in all meinen Modulen implementieren.


    MfG


    Fabian

  • Hallo Fabian,


    zunächst mal: soviele "Daumen hoch" für Deine Initiative habe ich gar nicht an der Hand :o


    Mal ganz abgesehen davon, ob das zentral bei Starface zu erwarten oder gut aufgehoben wäre (ich würde das auch als vielleicht interessante Ergänzung ansehen), ist ein Stück Unabhängigkeit und trotzdem mögliche Update-Funktion eine richtig gute Geschichte. Ich denke dabei auch an all die Lösungen, die eben nicht zwangsläufig als "Massenware" verkauft werden, sondern nur als Sonderlösungen an einen kleinen Kundenkreis weitergereicht werden. Inwiefern man auf Seiten Starface tatsächlich die Verantwortung für dort verteilte Updates übernehmen wollte, würde ich mal mit ganz vielen Fragezeichen stehen sehen - immerhin bekäme das damit auch einen scheinbar "offiziellen" Charakter mit "Modul durch Starface abgenommen" - Aufdruck (zumindest ganz sicher in den Köpfen mancher Nutzer). Vermutlich wird sich kein Dritter (SF) irgendwelchen Haftungsdiskussionen stellen wollen ...


    Insofern ist dieser externe Weg wirklich richtig gut und es sollte für die allermeisten Modulersteller kein großes Problem darstellen, einen eigenen kleinen Updateserver zu betreiben, wenn man das nutzen möchte.

  • Hallo Fabian,


    Sieht sehr interessant aus. Die Frage ist hat, was in Zukunft noch Möglich ist.
    Wahrscheinlich wird es noch weitere Abstriche gemacht werden im Modulstore.
    Aber cool wäre schon einen "Zentrale" Update Server


    Gruss
    CH

  • Hallo Miteinander


    Zitat

    zunächst mal: soviele "Daumen hoch" für Deine Initiative habe ich gar nicht an der Hand


    Dankeschön :D nach dem Security Release, wurde mir ziemlich schnell klar, dass ich etwas bauen musste, welches mir das manuelle updaten abnimmt, damit ich nicht wie beim Kürzlichen Security Release. plötzlich auf 30-40 Anlagen 3-4 meiner Module mit einem neuen Patch versehen muss. Das ist ziemlich repetitiv, und zeitaufwendig zu tun. Stattdessen einfach n Update speziell für den Release 6.4.12 auf den Updateserver pushen, und am nächsten Tag ist es auf allen anlagen drinn.


    Zitat

    Aber cool wäre schon einen "Zentrale" Update Server


    Zitat

    Vielleicht macht es Sinn, dass die Partner die jeweiligen Modulversionen direkt Richtung Starface pushen (ein gemeinsamer Modulpool)


    Das wäre natürlich das schönste, wenn die SF dort auf uns zukommen würde. Aber es geht auch nicht nur um die Zentralisierung des Modulpools, sondern um eine allgemeine Zentralisierte Plattform, um Module zu vertreiben, lizensieren, und Updates bereitzustellen.


    Die O-Byte ist da mit dem star.place natürlich auf einem guten weg, aber dort ist die Anbindung an das Starface System "begrenzt" auf den Partnerlogin. Wenn sich dieses Hand in Hand mit der SF ausbauen liesse, um die Starface Lizenzierung zu Implementieren, sowie einen weg bereitstellen würde, mit dem man Module auf einem Zentralen Server ablegen könnte, wäre das doch bald perfekt.



    Noch zurück zum Modul, ich stelle bald noch ein Update bereit, welches die meta.xml mithilfe eines Java Runnable automatisch generiert, wenn man die korrekte Struktur einhält:


    meta.xml
    Modulname(Ordner)
    ________|_______Starface-Version(Ordner)
    _________________________|___________Modulname.sfm


    Das Tool nimmt die Starface-Version vom Ordnername unterhalb des Modulnamens, und die Modulversion, sowie ID des Moduls liest er direkt aus der .sfm Datei heraus. Der Hash wird ebenfalls gleich aus dem Modul generiert.


    MfG


    Fabian

  • FabianZ

    Hat den Titel des Themas von „[Spielzeug] Module Self-Updater“ zu „[Modulbaustein] Module Self-Updater“ geändert.
  • Ich verwende den Self-Updater selbst schon eine weile nicht mehr, aber den Source-Code habe ich immer noch, und habe ihn auch für die 7.3.X kompilliert.


    Ich habe ihn dir in mein Github Repository hochgeladen:


    Fertige Bausteine: https://github.com/Fabian95qw/…ulefunction/moduleupdater

    Quellcode: https://github.com/Fabian95qw/…ulefunction/moduleupdater


    MfG


    Fabian

  • Ich verwende den Self-Updater selbst schon eine weile nicht mehr, [...]

    Darf ich fragen warum nicht? Ich bin für ein bestimmtes Modul von mir am überlegen ob das nicht doch sinnvoll ist. Zu komplex mit den ganzen Starface-Versionen?

    Viele Grüße,


    Andreas Stein
    IT Fabrik Systemhaus GmbH & Co. KG


    STARFACE Excellence PLUS Partner

  • Darf ich fragen warum nicht? Ich bin für ein bestimmtes Modul von mir am überlegen ob das nicht doch sinnvoll ist. Zu komplex mit den ganzen Starface-Versionen?

    Es gab eine Hand voll Problemen:

    • Versionsmanagement
    • Hinzufügen von neuen Features zu bestehenden Modulen, welche das Modul unbrauchbar machen, wenn diese nicht ausgefüllt sind.
    • Module, welche nach einem Update einen Systemneustart benötigen.


    Wenn nun die Module automatisch gepatcht wurden so hatten wir plötzlich Anrufe von Kunden, dass das Modul nicht mehr funktionierte oder sich das Verhalten geändert habe.


    Ich hatte mich deshalb Entschieden, den Self-Updater mit der 6.7.X aus den Modulen zu entfernen, und stattdessen ein Zentrales Updatemodul zu bauen, ähnlich zu dem was Fluxpunkt aktuell hat.


    Die Idee war aber hier, dass das nicht nur für meine Module war, sondern ich wollte ein allgemeines System, mit Versionsmanagement bauen, auf dem alle STARFACE Partner ihre Module hochladen konnten,


    Jetzt ist die 7.3 da, und ich bin immer noch nicht dazu gekommen sowas zu Entwickeln, deshalb müssen meine Module von hand geupdatet werden.


    MfG


    Fabian

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!