Klaus1: VMWare Umgebung per Script abfragen - Fehlermeldung Can't locate Functions.pm

Hallo zusammen,

ich hoffe, ich finde hier jemanden, der mir weiterhelfen kann, wo es ja nur bedingt etwas mit HTML zu tun hat. 😕

Wir hatten bis vor kurzem noch eine VMWare-Umgebung in Version 5.1. Bis dahin liefen auch die Aufrufe der check_vmware_api.pl problemlos. Ich konnte die Auslastung (Speicher, Prozessor, Netzwerk), die Anzahl der Hosts je ESX-Host und die Auslastung der Datastores ermitteln.

Nach der Migration auf 6.7 funktionierte die Ermittlung der Auslastung der Datastores nicht mehr und ich nahm an, dass es dem großen Release-Sprung geschuldet war und ich eine neue Version des Scripts und der VMWare vSphere CLI installieren muss.

Nun funktioniert aber keiner der Abfragen mehr. Ich erhalte immer den Fehler: Can't locate Monitoring/Plugin/Functions.pm in @INC at check_vmware_api.pl line 39.

Das Internet zeigt für Linux-Versionen, dass dire Nagios Plugins noch nachinstalliert werden müssten, aber zum Einen läuft der Apache läuft unter Windows und ich finde keine Nagios-Plugins für Windows und zum Anderen ist das Modul eigentlich vorhanden und innerhalb des Suchzweigs ../Perl/lib/Nagios/Plugin.

Hat jemand eine Idee, wie ich das Script zum Laufen bekomme?

Liebe Grüße,

Klaus

  1. Ich erhalte immer den Fehler: Can't locate Monitoring/Plugin/Functions.pm in @INC at check_vmware_api.pl line 39.

    Ganz einfach: Das Modul Monitoring::Plugin::Functions ist nicht in diesem Pfad installiert. MFG

    1. @INC sucht in drei Verzeichnissen:

      • Perl/site/lib
      • Perl/vendor/lib
      • Perl/lib

      Ich bin zunächst davon ausgegangen, dass er auch die in diesem Pfad angegebenen Unterverzeichnisse mit durchsuchen würde, aber ich habe auch versucht, alle Dateien aus dem Unterverzeichnis Nagios/Plugin direkt nach Perl/lib, nach Perl/vendor/lib und nach Perl/site/lib kopiert.

      Hatte aber nicht den erhofften Erfolg.

      1. Es gibt verschiedene Möglichkeiten @INC zu erweitern das hängt auch von Deiner Perlversion ab. Wenn der bisherige Pfad Monitoring/Plugin/Functions.pm lautete, ist der auch in der bisherigen Datei Funkctions.pm als package Monitoring::Plugin::Functions; deklariert.

        Also falls Du den Pfad ändern solltest, die package Deklaration beachten. Du kannst aber auch Perl/site/lib für Dein Modul verwenden, wenn es nur die o.g. Datei ist: dahinkopieren und die Packagedeklaration anpassen. Und je nachdem wie Letztere lautet wird das Modul dann eingebunden.

        Beachte auch: Nicht ins vendor/lib und nicht ins /lib Verzeichnis! Eigene Module immer nach site/lib weil dieses Verzeichnis bei einem Upgrade nicht verändert wird. MFG

  2. Hallo Klaus,

    Nun funktioniert aber keiner der Abfragen mehr. Ich erhalte immer den Fehler: Can't locate Monitoring/Plugin/Functions.pm in @INC at check_vmware_api.pl line 39.

    Hat jemand eine Idee, wie ich das Script zum Laufen bekomme?

    Du musst den Perl-Include-Pfad so anpassen, dass das Modul wieder gefunden wird.

    Viele Grüße
    Robert

    1. In der Systemumgebung habe ich sowohl den Pfad für PERL5LIB als auch für PELRLIB auf Perl/lib gesetzt.

      In der Fehlermeldung steht, dass Perl das Modul in den folgenden Verzeichnissen sucht.

      @INC sucht in drei Verzeichnissen:

      • Perl/site/lib
      • Perl/vendor/lib
      • Perl/lib

      In alle dieser drei Verzeichnisse habe ich schon die Module aus Nagios/Plugin kopiert, aber ohne Erfolg.

      1. Hallo Klaus,

        In der Systemumgebung habe ich sowohl den Pfad für PERL5LIB als auch für PELRLIB auf Perl/lib gesetzt.

        Was spricht denn dagegen, PERL5LIB so zu setzen, dass auch deine Monitoring/Plugin/Functions.pm gefunden wird?

        Wie sieht eigentlich das use dafür aus?

        use Functions;
        
        # oder etwa
        
        use Monitoring::Plugin::Functions;
        

        In der Fehlermeldung steht, dass Perl das Modul in den folgenden Verzeichnissen sucht.

        @INC sucht in drei Verzeichnissen:

        • Perl/site/lib
        • Perl/vendor/lib
        • Perl/lib

        Und wie ich schrieb, kann man @INC erweitern.

        In alle dieser drei Verzeichnisse habe ich schon die Module aus Nagios/Plugin kopiert, aber ohne Erfolg.

        Der Pfad und use müssen auch zueinander passen.

        Viele Grüße
        Robert

        1. Ich bin jetzt einen deutlichen Schritt weiter, nachdem ich im site/lib Verzeichnis ein Verzeichnis Monitoring erstellt habe und dort die Module kopiert habe, die im Verzeichnis Nagios liegen. Nachdem ich so ein paar weitere Module zum Laufen bringen konnte, bricht das Script jetzt mit der Fehlermeldung ab:

          Can't locate loadable object for module Crypt::SSLeay in @INC at perl/site/lib/Net/SSL.pm line 16.

          Habt ihr hier eine Idee?

          1. Auf der Kommandozeile: cpan -i Crypt::SSLeay fertig.

            1. Auf der Kommandozeile: cpan -i Crypt::SSLeay fertig.

              Das funktioniert aber doch nur unter Linux oder? Oder unter Windows auch?

              1. Auf der Kommandozeile: cpan -i Crypt::SSLeay fertig.

                Das funktioniert aber doch nur unter Linux oder? Oder unter Windows auch?

                Selbstverständlich funktioniert cpan unter Windows. Und wenn ppm instaliert ist (Windows) kanst Du das auch mit ppm install Crypt::SSLeay installieren. MFG

                1. Ok, mit cpan -i Crypt::SSLeay funktionierte es erstmal nicht direkt. Das System konnte, warum auch immer, nicht das MiniGW und DMAKE automatisch installieren. Mit ppm install MiniGW wurde dann beides heruntergeladen, aber letztlich dann auch abgebrochen:

                  openssl-version.c:2:30: fatal error: openssl/opensslv.h: No such file or directory. compilation terminated. Failed to build and link a simple executible using OpenSSL

                  Unter Linux soll man libssl-dev installieren. Aber unter Windows?

                  1. perl -V:make zeigt ob Deine gcc Umgebung konfiguriert ist. Für die cpan Shell muss ein einmaliges Setup gemacht werden. Und wahrscheinlich erfordert Deine ganze Umgebung, daß openssl (f. Windows) installiert sein muss. Danach Crypt::SSLeay. MFG

                    Zeig mal perl -v

                    1. perl -v zeigt:

                      This is perl 5, version 26, subversion 3 (v5.26.3) built for MSWin32-x64-multi-thread 
                      

                      Mich wundert, dass ich Softwarekomponenten nachinstallieren soll, obwohl die frühere Version von der check_vmware_api.pl mit der alten VMWare-Umgebung prima funktioniert hatte.

                      Ich habe die OpenSSL-Zip-Datei heruntergeladen und nach c:\openssl entpackt. Da Perl ja noch nichts von c:\openssl wissen kann, habe ich versucht:

                      perl c:\openssl\Configure VC-WIN64I

                      Das hat erstmal keinen Fehler produziert, aber da fehlt laut Installationsanleitung noch das nmake install. nmake ist für mein Windows erstmal unbekannt, als Alternative soll wohl dmake genutzt werden können. Da weiß ich wiederum nicht wie ich das aufrufen soll, denn dmake install sagt, "Don't know how to make 'install'" .

                      1. dmake oder nmake kriegst Du von Deinem Perlvendor. Openssl für Windows hat ein Setup. Viel Erfolg!

                        1. Siehe auch und OpenSSL für Win32 kriegst Du bei heise downloads. MFG

                        2. dmake oder nmake kriegst Du von Deinem Perlvendor. Openssl für Windows hat ein Setup. Viel Erfolg!

                          Eigentlich wird dmake automatisch schon mit MiniGw mitinstalliert. Bei der Installation anderer Module funktioniert es auch. Nur bei Crypt::SSLeay nicht.

                          Ich habe sowohl die Github-Version von OpenSSL probiert, als auch die installierbare Windows-Binary. Noch immer wird openssl/opensslv.h nicht gefunden.

                          Wenn ich nur wüsste, wo diese Datei gesucht wird... Den Pfad auf das Verzeichnis setzen, hat nicht geholfen.

                          1. Moin,

                            Eigentlich wird dmake automatisch schon mit MiniGw mitinstalliert.

                            Was heißt denn eigentlich? Ist es dabei oder nicht?

                            Ich habe sowohl die Github-Version von OpenSSL probiert, als auch die installierbare Windows-Binary. Noch immer wird openssl/opensslv.h nicht gefunden.

                            Wenn ich nur wüsste, wo diese Datei gesucht wird... Den Pfad auf das Verzeichnis setzen, hat nicht geholfen.

                            Im Makefile sollte eigentlich der Include-Pfad von C enthalten sein. Ggf. musst du diesen anpassen.

                            Viele Grüße
                            Robert

                          2. dmake oder nmake kriegst Du von Deinem Perlvendor. Openssl für Windows hat ein Setup. Viel Erfolg!

                            Eigentlich wird dmake automatisch schon mit MiniGw mitinstalliert.

                            Msys bringt ein make.exe mit. Und Msys kommt zusammen mit MinGW.

                            Aber wenn Du mit ppm installierst, brauchst Du das alles gar nicht. Was hast Du denn für ein Poblem mit ppm?

                            Was passiert wenn Du ppm install Crypt::SSLeay eingibst?

                            MFG

                            1. Hallo,

                              Aber wenn Du mit ppm installierst, brauchst Du das alles gar nicht. Was hast Du denn für ein Poblem mit ppm?

                              Was passiert wenn Du ppm install Crypt::SSLeay eingibst?

                              ppm install failed: Can't find any package that provides Crypt::SSLeay

                              1. Hallo,

                                Aber wenn Du mit ppm installierst, brauchst Du das alles gar nicht. Was hast Du denn für ein Poblem mit ppm?

                                Was passiert wenn Du ppm install Crypt::SSLeay eingibst?

                                ppm install failed: Can't find any package that provides Crypt::SSLeay

                                Hab schon versucht das Modul darüber zu installieren: ppm install http://www.bribes.org/perl/ppm64/Crypt-SSLeay.ppd aber erhalte die Fehlermeldung: The PPD does not provide code to install for this platform. Ist möglicherweise zu alt für Perl 5.26.3 ?

                                1. Hab schon versucht das Modul darüber zu installieren: ppm install http://www.bribes.org/perl/ppm64/Crypt-SSLeay.ppd aber erhalte die Fehlermeldung: The PPD does not provide code to install for this platform. Ist möglicherweise zu alt für Perl 5.26.3 ?

                                  Die Dateien downloadn und händische Korrektur.

                                  http://www.bribes.org/perl/ppm/Crypt-SSLeay.ppd ist nur eine Textdatei, da trägst Du einfach Deine Perlversion ein.

                                  Lokal: ppm install Crypt-SSLeay.ppd

                                  zipdate nicht vergessen:

                                  MFG

                                  PS: Beispiel ohne Angabe der Perlversion

                                  <SOFTPKG NAME="Device-USB-PX1674" VERSION="1.01">
                                      <ABSTRACT>CMD for USB-Dongle</ABSTRACT>
                                      <AUTHOR>xx@example.de</AUTHOR>
                                      <IMPLEMENTATION>
                                          <CODEBASE HREF="Device-USB-PX1674.zip" />
                                      </IMPLEMENTATION>
                                  </SOFTPKG>
                                  
                                  
                                  1. Danke Dir vielmals! Das hat mir echt deutlich weitergeholfen.

                                    Jetzt habe ich noch einen Fehler beim Aufruf: Undefined subroutine &Util::disconnect called at check_vmware_api.pl line 819

                                    In Zeile 819 steht: Util::disconnect();

                                    Hast Du da auch noch eine Idee?

                                    1. Danke Dir vielmals! Das hat mir echt deutlich weitergeholfen

                                      Wow, Applause 😉

                                      Jetzt habe ich noch einen Fehler beim Aufruf: Undefined subroutine &Util::disconnect called at check_vmware_api.pl line 819

                                      In Zeile 819 steht: Util::disconnect();

                                      Hast Du da auch noch eine Idee?

                                      Das Modul kenne ich nicht. perldoc Util sagt bei mir:

                                      perlutil - utilities packaged with the Perl distribution
                                      

                                      die funktion disconnect() ist da jedoch nicht beschrieben, wahrscheinlich ist das proprietär. Guck mal warum die Funktion aufgerufen wird, evntl. kann man darauf auch verzichten. MFG

                                      1. Das Modul kenne ich nicht. perldoc Util sagt bei mir:

                                        perlutil - utilities packaged with the Perl distribution
                                        

                                        die funktion disconnect() ist da jedoch nicht beschrieben, wahrscheinlich ist das proprietär. Guck mal warum die Funktion aufgerufen wird, evntl. kann man darauf auch verzichten. MFG

                                        Ich vermute, dass diese Funktion(en) mit der Installation vom VMWare vSphere CLI dazukommen.

                                        Jetzt ist im Installationsverzeichnis vom VMWare vSphere CLI auch ein Perl-Verzeichnis, zwar ohne bin, aber mit den Verzeichnissen apps und lib. Kann ich bei Perl vielleicht die Suche nach den Modulen erweitern und in beiden Verzeichnis-Strukturen suchen lassen? Oder hätte ich Perl in das Perl-Verzeichnis vom VMWare-vSphere CLI installieren müssen? Oder kann ich die "einfach" die beiden Verzeichnisse apps und lib in die Verzeichnisse der Perl-Installation integrieren?

                                        1. Moin Klaus,

                                          Kann ich bei Perl vielleicht die Suche nach den Modulen erweitern und in beiden Verzeichnis-Strukturen suchen lassen?

                                          Ja.

                                          Viele Grüße
                                          Robert

                                        2. Frage: Wohin hat ppm das Modul Crypt::SSLeay installiert? Wenn es ein Perl für Windows ist, liegt diese Installation in C:\Perl\site\lib\auto\Crypt\SSLeay wo es eine SSLeay.dll geben sollte. Ebenso gibt es weiter oben ein Perl/bin Verzeichnis und das ist Dein aktuelles Perl.

                                          Wenn Applications wie VMWare ihre Module woanders hintun ist das völlig in Ordnung, ein Deiner main kannst Du ja den lib Path beliebig erweitern. Musst nur gucken daß es keine Versionskonflikte gibt. MFG

                              2. ppm repo zeigt konfigurierte Repositories. Füge diese hier

                                http://www.bribes.org/perl/ppm/

                                hinzu. Altenative: ppd und zip Datei download und local installieren. ppm help

                                MFG