Hi,
es wäre schön, wenn die o.g. Zeile aus fhem.pl entfernt werden könnte.
Für Installationen, bei denen "attr global modpath ." gesetzt ist, wird '.' ja korrekterweise als Pfad in @INC mit aufgenommen.
Ansonsten ist es problematisch und führt abhängig vom Init-System (OpenWRT in diesem Fall) und den Verzeichnis-Rechten sogar zu Fehlern. Wenn Perl z.B. nicht als root ausgeführt wird, bricht der Interpreter die Suche nach Modulen nach dem ersten "Permission denied" ab, und sucht nicht in /usr/lib/perl5/5.40/ weiter, wo das Modul zu finden wäre.
2025.12.08 17:04:09 5: Cmd: >define FHEMWEB FHEMWEB 8083 global<
2025.12.08 17:04:09 5: Loading /usr/lib/fhem/FHEM/01_FHEMWEB.pm
2025.12.08 17:04:09 1: reload: Error:Modul 01_FHEMWEB deactivated:
Can't locate MIME/Base64.pm: ./MIME/Base64.pm: Permission denied at /usr/lib/fhem/FHEM/HttpUtils.pm line %, <$fh> line 1.
BEGIN failed--compilation aborted at /usr/lib/fhem/FHEM/HttpUtils.pm line %, <$fh> line 1.
Compilation failed in require at /usr/lib/fhem/FHEM/01_FHEMWEB.pm line %, <$fh> line 1.
BEGIN failed--compilation aborted at /usr/lib/fhem/FHEM/01_FHEMWEB.pm line %, <$fh> line 1.
2025.12.08 17:04:09 0: Can't locate MIME/Base64.pm: ./MIME/Base64.pm: Permission denied at /usr/lib/fhem/FHEM/HttpUtils.pm line %, <$fh> line 1.
BEGIN failed--compilation aborted at /usr/lib/fhem/FHEM/HttpUtils.pm line %, <$fh> line 1.
Compilation failed in require at /usr/lib/fhem/FHEM/01_FHEMWEB.pm line %, <$fh> line 1.
BEGIN failed--compilation aborted at /usr/lib/fhem/FHEM/01_FHEMWEB.pm line %, <$fh> line 1.
2025.12.08 17:04:09 5: /etc/config/fhem/mod.cfg.d/01_fhemweb.cfg line 1 returned >Cannot load module FHEMWEB<
2025.12.08 17:04:09 5: Cmd: >attr FHEMWEB group System<
2025.12.08 17:04:09 5: /etc/config/fhem/mod.cfg line 1 returned >Cannot load module FHEMWEB<
Ohne die eine Zeile in fhem.pl funktioniert alles auch z.B. als Benutzer "fhem".
Zitates wäre schön, wenn die o.g. Zeile aus fhem.pl entfernt werden könnte.
Habs gemacht und versucht fhem mit configDB zu starten:
> perl fhem.pl configDB
2025.12.08 20:54:15 1: Can't locate configDB.pm in @INC (you may need to install the configDB module) (@INC entries checked: /usr/lib/perl5/5.42/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.42/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/5.42/core_perl /usr/share/perl5/core_perl) at (eval 9) line 1.
BEGIN failed--compilation aborted at (eval 9) line 1.
Undefined subroutine &main::cfgDB_Init called at fhem.pl line 590.
Exit 2
Ah, das eine Modul, dass im gleichen Verzeichnis wie die Binary liegt...
Den gleichen Fehler bekomme ich übrigens aktuell auch, wenn ich z.B. "path/to/fhem.pl ConfigDB" aus einem anderen Verzeichnis heraus aufrufe.
Unter diesen Umständen wäre der korrekte Fix wie folgt:
Zitatuse FindBin;
use lib $FindBin::Bin;
FindBin ist Teil der Core Perl Distribution. https://perldoc.perl.org/FindBin
Läge configDB.pm im Unterverzeichnis /lib, würde das wie folgt ausschauen:
Zitatuse FindBin;
use lib "$FindBin::Bin/lib";
Am allerschönsten wäre allerdings ein Kommandozeilen-Paramter -I für fhem.pl selbst, dem man einen Pfad mit angeben kann.
Wenn der angegeben wird, sollte fhem.pl diesen anstelle von '.' oder $FindBin::Bin verwenden.
Oder noch eine elegantere Lösung: Ganz oben das "use lib '.';" weg, und unten eine Zeile einfügen:
if(configDBUsed()) {
eval "use configDB";
eval "use lib '.'; use configDB" if ($@);
Log 1, $@ if($@);
cfgDB_Init();
}
Die Verwendung anderer Pfade könnte man auch über die Umgebungsvariable PERL5LIB steuern, dann brauchts keinen neuen Parameter.
ZitatOder noch eine elegantere Lösung: Ganz oben das "use lib '.';" weg, und unten eine Zeile einfügen:
Danke fuer den Vorschlag, ich habe es genauso eingecheckt.
Besten Dank dafür (und für FHEM sowieso)!
- jens
Unter Windows führt diese Änderung wohl dazu, dass sich FHEM nicht mehr so einfach per Kommandozeile als Dienst einrichten lässt: https://forum.fhem.de/index.php?topic=143363.msg1353846#msg1353846
Könntet Ihr Euch das bitte einmal anschauen. Danke.
Schande über mein Haupt, ich habe keine Windows Instanz zum Testen :-/
Für das FHEM on OpenWrt Projekt benötige ich die Änderung auch nicht zwingend, mir ist es nur dadurch aufgefallen.
Im Service-Script habe ich ein cd /usr/share/fhem vor dem Start eingebaut, das reicht für den Zweck aus.
Allerdings ist fhem.pl ja auch dazu gedacht, als Client aufgerufen zu werden, und da führt die Verwendung von '.' zu undefiniertem Verhalten.
ZitatSchande über mein Haupt, ich habe keine Windows Instanz zum Testen :-/
Entspann Dich, ich habe die Aenderung eingebaut, weil ich das fuer richtig halte.
Fuer perl Pakete ist "neuerdings" /opt/fhem/lib/FHEM die richtige Stelle, und nicht /opt/fhem/FHEM.