[Geklärt] 98_Installer listet Perl Module als built-in, die separat installiert.

Begonnen von KernSani, 11 Januar 2020, 23:39:37

Vorheriges Thema - Nächstes Thema

KernSani

Hi Loredo,

ich habe mich gerade ein bisschen in Meta und Installer eingelesen und mir das Ganze mal an einem in Entwicklung befindlichem Modul angesehen. Ich habe in dem Modul (noch) keine Metadaten gepflegt. Der Installer sagt nun (showModuleInfo) u.a. folgendes:

IO::Compress::Gzip suggested built-in
IO::Uncompress::Gunzip suggested built-in
MIME::Base64 suggested built-in


Ich weiß aber mit Sicherheit, dass ich diese Module (auf Raspian Lite) erst installieren musste. Zudem verstehe ich die "suggested"-Logik nicht... Ohne die Module geht nix, ich würde also ein "required" o.ä. erwarten...

Kannst du mich da etwas aufschlauen?

Danke,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Loredo

Moin!


wenn du dein Modul so baust, dass du beim Laden von Perl Modulen immer mit eval arbeitest, dann kann bei der automatischen Sourcecode Analyse nicht erkannt werden, dass dieses Perl Modul eigentlich required ist. Da du aus Sicht der Sourcecode Analyse den Fehler eben sanft abfängst, kann nicht vorhergesagt werden, dass der Code ansonsten nicht erfolgreich ausgeführt werden könnte. Folglich werden solche Abhängigkeiten als "suggested" geführt, da sie augenscheinlich eben nicht für den Betrieb zwingend notwendig scheinen. Abhilfe schafft hier dein Modul zu vereinfachen und alles, was required ist, auch hard ohne eval zu laden. Wenn du die META.json Daten selbst definierst, hast du natürlich selbst in der Hand, welche Perl Module required sind und kannst das entsprechend dorthin schreiben, wo du es haben möchtest. Da dort dann auch keine Sourcecode Analyse mehr notwendig ist, wird die Abhängigkeit dann so geführt wie von dir erwartet.

Übrigens zeigt der Installer auch eine entsprechende Erläuterung für "suggested" an (siehe Screenshot anbei).

Der Installationsstatus "built-in" bezeichnet Perl Module, die wahrscheinlich mit der jeweiligen Perl Version mitgeliefert werden. Die Subroutine FHEM::Meta::ModuleIsPerlCore() ermittelt das mit Hilfe des Perl Moduls Module::CoreList. Selbiges ist eigentlich schon länger Bestandteil von Perl5, weshalb es dann darauf ankommt, was dieses Modul sagt. Für den Fall, dass Module::CoreList nicht verfügbar ist und auch als zusätzliche Liste gibt es noch das Array @FHEM::Meta::perlCoreModules mit manuell gepflegten Perl Modulnamen, welche ich auf Basis von Perl Release Informationen zusammengestellt habe.


Wenn du der Meinung bist, dass du die drei von dir genannten Perl Module manuell nachinstallieren musstest, dann ist es wahrscheinlich, dass die Perl5 Installation auf deinem Raspi abgespeckt ist und nicht dem Standardumfang entspricht. Du kannst aber beruhigt sein, denn fehlende Perl Module haben natürlich Vorrang. Erst wenn etwas dann installiert wurde, dann wird die Einordnung in installed/included/built-in vorgenommen. Halte ich dann für ein rein kosmetisches Problem.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

KernSani

Hi Julian,

danke für die ausführliche Erläuterung. Macht Sinn. Ich versuche gerade noch mein Modul mit Meta-JSON zu versorgen, aber irgendwie ignoriert der Installer das konsequent. Aber das ist ein anderes Thema, zu dem ich ggf. nochmal auf dich zu komme.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...