Problem mit dem Suchpfad für Module

Begonnen von maf, 24 Juli 2015, 23:35:15

Vorheriges Thema - Nächstes Thema

maf

Hallo,

das ist meine Chance, mich gleich als zweifachen Anfänger zu outen: FHEM und Perl  ;)

Ich habe FHEM 5.6 unter Ubuntu installiert und experimentiere mit einer Debian-artigen Aufteilung der Dateien und einem angepassten Startskript. Dabei bin ich über ein Problem beim Zugriff auf Perl-Module gestolpert, das beim Start des Servers auftritt.

Wenn ich FHEM aus einem anderen als seinem Wurzelverzeichnis zu starten versuche, tritt ein Fehler auf:
root@ubuntu_vb:~# perl /usr/lib/fhem/fhem.pl /etc/fhem/fhem.cfg
Can't locate RTypes.pm:   Keine Berechtigung at /usr/lib/fhem/fhem.pl line 444.

Die fragliche Zeile in fhem.pl ist
require RTypes;
Perl findet also FHEM/RTypes.pm nicht, obwohl die Datei existiert. Es ist egal, ob ich in der Konfiguration für modpath einen relativen Pfad (".") oder einen absuluten Pfad ("/usr/lib/fhem") angebe. Ich habe mich auch vergewissert, dass $modpath/FHEM korrekt in @INC eingetragen wird.

Das Problem tritt nicht auf, wenn fhem.pl beim Start im aktuellen Verzeichnis liegt:
root@ubuntu_vb:/usr/lib/fhem# perl fhem.pl /etc/fhem/fhem.cfg

Ich habe zwar eine Erläuterung gefunden, wie Perl nach Modulen sucht, verstehe aber leider immer noch nicht, was hier schiefgeht...

Gruß, maf

maf

Ich habe nun vor der Zeile, die den Fehler auslöst, eine Ausgabe des Suchpfads eingefügt:

print "XXX search path\n", join("\n", @INC), "\n";
require RTypes;

Wenn modpath auf /usr/lib/fhem gesetzt ist, erhalte ich beim einfachen Aufruf den bereits bekannten Fehler, obwohl /usr/lib/fhem/FHEM im Suchpfad enthalten ist:
root@ubuntu_vb:~# perl /usr/lib/fhem/fhem.pl /etc/fhem/fhem.cfg
XXX search path
/etc/perl
/usr/local/lib/i386-linux-gnu/perl/5.20.2
/usr/local/share/perl/5.20.2
/usr/lib/i386-linux-gnu/perl5/5.20
/usr/share/perl5
/usr/lib/i386-linux-gnu/perl/5.20
/usr/share/perl/5.20
/usr/local/lib/site_perl
.
/usr/lib/fhem/FHEM
Can't locate RTypes.pm:   Keine Berechtigung at /usr/lib/fhem/fhem.pl line 448.


Wenn ich allerdings beim Aufruf die Option -I benutze, um /usr/lib/fhem/FHEM direkt anzugeben, gibt es keinen Fehler:
root@ubuntu_vb:~# perl -I /usr/lib/fhem/FHEM /usr/lib/fhem/fhem.pl /etc/fhem/fhem.cfg
XXX search path
/usr/lib/fhem/FHEM
/etc/perl
/usr/local/lib/i386-linux-gnu/perl/5.20.2
/usr/local/share/perl/5.20.2
/usr/lib/i386-linux-gnu/perl5/5.20
/usr/share/perl5
/usr/lib/i386-linux-gnu/perl/5.20
/usr/share/perl/5.20
/usr/local/lib/site_perl
.


Das brachte mich auf die Idee, dass vielleicht die Position des Eintrags in der Liste eine Rolle spielen könnte. Deshalb habe ich folgende Änderung in fhem.pl versucht, durch die modpath vorne in @INC eingefügt wird:

#push @INC, $modpath if(!grep(/\Q$modpath\E/, @INC));
unshift @INC, "$modpath" if(!grep(/\Q$modpath\E/, @INC));

Und tatsächlich: Damit tritt der Fehler nicht mehr auf:
root@ubuntu_vb:~# perl /usr/lib/fhem/fhem.pl /etc/fhem/fhem.cfgXXX search path
/usr/lib/fhem/FHEM
/etc/perl
/usr/local/lib/i386-linux-gnu/perl/5.20.2
/usr/local/share/perl/5.20.2
/usr/lib/i386-linux-gnu/perl5/5.20
/usr/share/perl5
/usr/lib/i386-linux-gnu/perl/5.20
/usr/share/perl/5.20
/usr/local/lib/site_perl
.

Könnte mir das bitte jemand erklären? Und was ist dann mit der Suche nach Modulen in anderen Unterverzeichnissen, z.B. in contrib?

Gruß, maf

LuckyDay

Verschieb dir deinen Beitrag selber nach sonstiges, da wäre das Thema bezüglich fhem.pl und fhem.cfg
besser augehoben, da liest Rudi mit.

verschieben kannst du selber

maf

Danke für Deinen Vorschlag. Den Titel habe ich auch gleich noch nachzubessern versucht.