Wo muss ich Fremd LIB`s einbinden ? in meinem Fall SAP-RFC

Hi Zusammen,

auf meinem alten Server liefen mein SAP Check`s noch wunderbar aber nach dem ich nun (fragt lieber nicht warum …) einen neuen Server aufsetzen mußte bekomme ich folgenden Meldung:

Can’t locate SAPNW/Rfc.pm in @INC

Fehler

Can’t locate SAPNW/Rfc.pm in @INC (you may need to install the SAPNW::Rfc module) (@INC contains: /omd/sites/main/local/lib/perl5/lib/perl5 /omd/sites/main/lib/perl5/lib/perl5/x86_64-linux-gnu-thread-multi /omd/sites/main/lib/perl5/lib/perl5 /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.36.0 /usr/local/share/perl/5.36.0 /usr/lib/x86_64-linux-gnu/perl5/5.36 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.36 /usr/share/perl/5.36 /usr/local/lib/site_perl)

Als Site User die Pfade in der ~etc/enviroment eingetragen.

ENV

LD_LIBRARY_PATH=/usr/lib64:/usr/lib:/opt/ibm/db2/lib:/betrieb/nwrfcsdk/lib:/opt/omd/sites/main/local/lib:/opt/omd/sites/main/lib
SSL_CERT_FILE=/omd/sites/main/var/ssl/ca-certificates.crt
REQUESTS_CA_BUNDLE=/omd/sites/main/var/ssl/ca-certificates.crt
LC_ALL=C.utf8
PATH=/omd/sites/main/lib/perl5/bin:/omd/sites/main/local/bin:/omd/sites/main/bin:/omd/sites/main/local/lib/perl5/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/betrieb/nwrfcsdk/lib

Noch einer eine Idee wo die noch eingetragen werden müssen ???

lG Bernd

Wo ist denn dein SAPNW-Verzeichnis?
Für Perl gibt es die Variable PERL5LIB (wie bei PATH mit Doppelpunkt getrennte Pfade).
In den Pfaden wird zusätzlich zu den “eingebauten” Pfaden gesucht. DIe Variable ist normalerweie nicht gesetzt.

Lass die Variable mal auf ein Verzeichnis über SAPNW zeigen und mach sicherheitshalber

PERL5LIB=/path/to/parent_of_SAPNW:$PERL5LIB

der Pfad ist :
/betrieb/nwrfcsdk/lib

Dann setz mal

PERL5LIB=/betrieb/nwrfcsdk/lib

und starte deinen Check. Erstmal nur an der Shell.

als Site user ??

export PERL5LIB=/betrieb/nwrfcsdk/lib

bzw wie lasse ich mir die PERL5LIB variable anzeigen

via “env” sehe ich sie im Output nicht

Komando zurück :wink:

PERL5LIB=/omd/sites/main/local/lib/perl5/lib/perl5:/omd/sites/main/lib/perl5/lib/perl5:

das ist der Output

lG

Ja genau. Das habe ich auch gerade bei meinen Sites gesehen. Das wird für den Site-User in dessen ~/.profile gesetzt.

Dein Check läuft ja doch als Site-User, wenn ich das richtig verstehe. Dann würde ich die .profile des Site-Users ergänzen um

export PERL5LIB=/betrieb/nwrfcsdk/lib:$PERL5LIB

immer noch folgender Fehler:

Can’t locate SAPNW/Rfc.pm in @INC (you may need to install the SAPNW::Rfc module) (@INC contains: /omd/sites/main/local/lib/perl5/lib/perl5/x86_64-linux-gnu-thread-multi /omd/sites/main/local/lib/perl5/lib/perl5 /omd/sites/main/lib/perl5/lib/perl5/x86_64-linux-gnu-thread-multi /omd/sites/main/lib/perl5/lib/perl5 /betrieb/nwrfcsdk/lib /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.36.0 /usr/local/share/perl/5.36.0 /usr/lib/x86_64-linux-gnu/perl5/5.36 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.36 /usr/share/perl/5.36 /usr/local/lib/site_perl)

obwohl das SDK installiert ist und der Pfad stimmt …

mhhh

habe auch nochmals die shared Libs des SDK aus dem Verzeichnis in das local/lib -Verzeichnis der OMD-Site kopiert

Ich erinnere mich an meine Icinga Tage mit (zu) vielen Perl-Check-Scripts.
War immer ein großer Schmerz im Hintern.
VIelleicht kannst du die PERL5LIB direkt im Befehl angeben?
PERL5LIB=/betrieb/nwrfcsdk/lib /path/to/plugin.pl --arguments

1 Like

Leider nicht die Lösung … ich schau am Montag mir das nochmal an …

aber mit den “alten” Tagen hast du recht das ganze SAP Check Konstrukt basiert immer noch auf der Basis von Gerhard Laußer und leider habe ich noch keine andere Lösung (Build in wäre schön) gefunden

Wenn du was auf Python Basis kennst fände ich das auch besser aber leider basiert das nun mal auf PERL

Ich nehme an die built-in Funktionalität, die wir haben, hast du dir schon angesehen? Ich habe da gerade das Linux Plugin im Sinn, habe damit aber selbst noch nicht gearbeitet.

Hi Robin …

zurück von #CMKConf10 habe ich gestern angefangen alles auf pyrfc umzubauen das geht recht easy habe ich festgestellt

Code
!/usr/bin/python3

import sys
from pyrfc import Connection

def get_function_module_status(conn, func):
    # Call the function module
    result = conn.call(func)

    # Return the status
    return result

# Check if the correct number of command line arguments is provided
if len(sys.argv) != 7:
    print("Usage: python sap_connection.py <ashost> <sysnr> <client> <user> <passwd> <function_module>")
    sys.exit(1)

# Extract the connection parameters from the command line arguments
ashost = sys.argv[1]
sysnr = sys.argv[2]
client = sys.argv[3]
user = sys.argv[4]
passwd = sys.argv[5]
function_module = sys.argv[6]

# Define the connection parameters
conn_params = {
    'ashost': ashost,
    'sysnr': sysnr,
    'client': client,
    'user': user,
    'passwd': passwd
}

# Establish the connection
conn = Connection(**conn_params)

# Call the function module and get the status
status = get_function_module_status(conn, function_module)

## Print the status
#print(status)
#message=(status)
## Drucken Sie die Elemente der Nachricht
#print("Message Type:", message['MESSAGE']['TYPE'])
#print("Message ID:", message['MESSAGE']['ID'])
#print("Message Number:", message['MESSAGE']['NUMBER'])
#print("Message Text:", message['MESSAGE']['MESSAGE'])
#print("Log Number:", message['MESSAGE']['LOG_NO'])
#print("Log Message Number:", message['MESSAGE']['LOG_MSG_NO'])
#print("Message V1:", message['MESSAGE']['MESSAGE_V1'])
#print("Message V2:", message['MESSAGE']['MESSAGE_V2'])
#print("Message V3:", message['MESSAGE']['MESSAGE_V3'])
#print("Message V4:", message['MESSAGE']['MESSAGE_V4'])
#print("Parameter:", message['MESSAGE']['PARAMETER'])
#print("Row:", message['MESSAGE']['ROW'])
#print("Field:", message['MESSAGE']['FIELD'])
#print("System:", message['MESSAGE']['SYSTEM'])
#print("Return Code:", message['RETURNCODE'])
#
## Drucken Sie die Elemente der Nachrichtentabelle
#for i, tab in enumerate(message['MESSAGE_TAB']):
#    print(f"Message Tab {i+1}:")
#    print("\tType:", tab['TYPE'])
#    print("\tID:", tab['ID'])
#    print("\tNumber:", tab['NUMBER'])
#    print("\tMessage:", tab['MESSAGE'])
#    print("\tLog Number:", tab['LOG_NO'])
#    print("\tLog Message Number:", tab['LOG_MSG_NO'])
#    print("\tMessage V1:", tab['MESSAGE_V1'])
#    print("\tMessage V2:", tab['MESSAGE_V2'])
#    print("\tMessage V3:", tab['MESSAGE_V3'])
#    print("\tMessage V4:", tab['MESSAGE_V4'])
#    print("\tParameter:", tab['PARAMETER'])
#    print("\tRow:", tab['ROW'])
#    print("\tField:", tab['FIELD'])
#    print("\tSystem:", tab['SYSTEM'])
#


if status['RETURNCODE'] == 0:
    print("0 \" System: \"", status['MESSAGE']['SYSTEM'],")
    # exit 0
elif status['RETURNCODE'] == 2:
    print("CRITICAL")
    # return(2)

mal schauen das ich das noch als Plugin umbaue und die Parameter dann via GUI und PW Safe übergeben kann da bin ich allerding immer noch nicht so fit drin aber im Moment als Classic Check geht es schon mal.

Danke für die Tip`s
lG Bernd

1 Like

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed. Contact an admin if you think this should be re-opened.