98_Installer - Modul komplett refaktoriert inkl. nutzbarer Online-Hilfe

Begonnen von DS_Starter, 14 Oktober 2026, 17:27:48

Vorheriges Thema - Nächstes Thema

DS_Starter

Hallo Rudi,

in meinen Systemen nutze ich das Installer-Modul sehr gern und intensiv für alle Perl-Modul Verwaltungen.
Mir waren aber immer wieder Fehler, (für mich) nicht erklärbare Verhaltensweisen und fehlende Features aufgefallen.

Ich habe mich daher hingesetzt und das Modul vollständig refaktoriert, um sowohl die Lesbarkeit als auch die Wartbarkeit deutlich zu verbessern.
Besonders hilfreich sind die neuen Set-/Get‑Befehle zzExportPerlList, zzImportPerlList und showDiffPerlList, die Systemumzüge oder Systemvergleiche erheblich vereinfachen.

Mit set ... zzExportPerlList lässt sich die auf System 1 installierte Perl‑Modulliste (Name/Version als JSON) exportieren.
Auf System 2 kann diese Liste anschließend über get ... showDiffPerlList mit dem dortigen Ist‑Stand verglichen werden. Abweichungen werden übersichtlich im Popup dargestellt und können direkt per Install/Deinstall bereinigt werden.

set ... zzImportPerlList geht einen Schritt weiter: Es vergleicht den Modulstand des Zielsystems automatisch mit der exportierten Quelle und installiert alle fehlenden oder veralteten Pakete selbstständig nach.

Da sowohl Installer.pm als auch Meta.pm aktuell von dir gepflegt werden, in der Maintainer.txt aber als verwaist markiert sind, würde ich beide Module übernehmen und
als Interims‑Maintainer die neue Installer-Version einchecken/weiterführen — zumindest solange, bis sich jemand mit mehr Zeit findet, sofern das für dich in Ordnung ist.
Alternativ steht die neue Datei 98_Installer in meinem Contrib zur Verfügung. Ein Patch lohnt sich nicht, da das Modul strukturell grundlegend überarbeitet wurde.
(Interessenten können sich das Modul gern vorab laden und ausprobieren)

Der Installer ist für mich zwar eher ein Nebenschauplatz, aber ich halte das Modul für sehr nützlich in der Systempflege. Sicherlich gibt es noch weitere Optimierungsmöglichkeiten, und ich habe mit Sicherheit
noch nicht alle Möglichkeiten des Moduls verstanden und ergründen können. Dennoch läuft es inzwischen stabil und wie gewünscht, und man kann seine Systeme damit komfortabel und zuverlässig verwalten.


Zur Übersicht das Changelog was in 98_Installer.pm bis jetzt umgesetzt ist:


- **Change:**
  * Code-Refactoring (Lesbarkeit, einheitlicher Stil)
    - alle Subs sowie der Modulkopf neu strukturiert, doppelten Code in Hilfssubs zusammengeführt
      (u.a. UpdatablePerlPackages, __GetLayout, __TableHeader/__TableRow, __InfoLink, __SudoError)
    - Laden des JSON-Moduls als Schleife statt verschachtelter eval-Blöcke, das geladene Modul
      wird auch für die Ausgabe der Meta-JSON verwendet
    - Konstanten (POLLINTERVAL, UPDATEINTERVAL, HAS_METARequirementsRange) in einem use constant-Block
  * fehlt jedes JSON-Modul, wird nicht mehr abgebrochen, sondern Define liefert eine Fehlermeldung
  * Get-Usage im Modus install listet cfg-Dateien sortiert und prüft Verzeichnisse relativ zu modpath
  * Attribut updatePerlUsedModulesOnly hat jetzt den Default 0,
    set updatePerl zeigt dadurch alle veralteten Module in der Update-Liste
  * Online-Hilfe (deutsch und englisch) komplett neu erstellt (Define, Set, Get, Attribute und Readings, Verweis auf das Wiki zu FHEM::Meta und CPAN)
  * Abstract in den Metadaten angepasst
  * Kommandos, die einen Hintergrundprozess starten, werden abgelehnt, solange ein anderes läuft
 
- **Fix:**
  * Voreinstellung für 'devStateIcon' angepasst
  * Attribut installerMode, der Wert install fehlte in der Attributliste
  * Attribut updateListReading hat das Reading updateListAsJSON auch bei Wert 0 geschrieben
  * Notify, nach dem Start wurde das nie geschriebene Reading cpanVersion abgefragt, jetzt cpanminusVersion
  * Suche, HTML-Tabellenköpfe wurden mit </td> statt </th> geschlossen
  * Suche, Package-Abstracts bei Keywords waren leer
  * Suche, Textausgabe enthielt das HTML-Suchformular und Listen waren ohne Trennzeichen
  * Modulinfo, fehlendes </tr> in der Device-Liste und ein verirrtes </span> bei Node.js
  * Modulinfo, bei veralteten Perl-Paketen wird jetzt Update statt Install angeboten
  * Modulinfo, Link zum Dev-Branch bei SVN-Repositories zeigte auf den Main-Branch
  * Prerequisites-Check, leere Einträge in den Modul- und Package-Listen vermieden
  * Prerequisites-Check, Attribut global verbose wird nach dem Laden der Pakete wiederhergestellt
    bzw. wieder entfernt, wenn es vorher nicht gesetzt war
  * Prerequisites-Check, Perl-Pakete werden ohne String-eval geladen
  * Prerequisites-Check, "Alles in Ordnung"-Meldung konnte einen leeren Text ausgeben
  * Parser für veraltete Pakete erkennt weitere Versionsformate und ignoriert Leerzeilen,
    current und latest gingen bei Namen mit Bindestrich verloren
  *
 
  * CpanInstall: Unkritische und harmlose Tar-Meldungen bezüglich unbekannter Extended Header Keywords
    (z.B. Apple-spezifische 'LIBARCHIVE.xattr'-Attribute beim Entpacken von Modulen) werden nun korrekt gefiltert und ignorieren den Parsing-Fehler 'E501'.
  * CpanOutdated: Der Regex zum Parsen der veralteten Perl-Pakete wurde robuster gestaltet (unterstützt nun flexiblere Versionsformate wie SemVer
    oder Alpha/Beta-Zusätze) und leere Zeilen am Ende der Konsolenausgabe werden automatisch übersprungen, um fälschliche 'E501'-Fehler zu verhindern.
   
- **Neu:**
  * Export & Import: Neue Set-Kommandos 'zzExportPerlList' und 'zzImportPerlList' hinzugefügt, um installierte Perl-Pakete in eine JSON-Datei zu exportieren
    bzw. auf anderen Systemen einzulesen und Differenzen direkt zur Installation anzubieten.
  * Differenzliste: Neues Get-Kommando 'showDiffPerlList' implementiert, das eine übersichtliche Differenztabelle zwischen einer exportierten JSON-Datei
    und dem lokalen System anzeigt – inklusive interaktiver Direktlinks ("Install" / "Deinstall") für eine gezielte Paketverwaltung.
  * Dokumentation: Die integrierte Online-Hilfe wurde um die Dokumentation der neuen Kommandos 'zzExportPerlList', 'zzImportPerlList' und 'showDiffPerlList' ergänzt.
  * Perl-Paketliste exportieren und importieren
    - set zzExportPerlList schreibt die installierten Perl-Pakete mit Version in eine JSON-Datei
    - set zzImportPerlList installiert fehlende und ältere Pakete aus einer solchen Datei
    - get showDiffPerlList zeigt die Differenz (Missing, Outdated, Newer locally, Extra)
      mit Links zum Installieren, Aktualisieren und Deinstallieren
    - Deinstall in der Differenzliste fragt vorher nach und nennt die FHEM-Module, die das Paket verwenden
    - Vergleich und Import nutzen die zuletzt ermittelte Paketliste, kein Scan im FHEM-Prozess


LG,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron+Pylontech
Maintainer:SSCam,SSChatBot,SSCal,SSFile,DbLog,DbRep,Log2Syslog,SolarForecast,Watches,Dashboard,PylonLowVoltage,MemSaver
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

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