ich schreibe momentan ein Python-Skript, dass über eine Webseite aufgerufen werden soll. Dieses Skript hat dann die Aufgabe, einen OPSI-Client zu erstellen (Open PC Server Integration - ein Server zum Rollout von Software und zur Inventarisierung von Rechnern). Dieser Opsi-Server ist ebenfalls in Python geschrieben, und so existiert ein eigenes Package namens "opsi", welches einen Befehl mitbringt, um per Shell einen Client auch manuell anzulegen.
Nachdem ich nun bereits über einige Steine gestolpert bin, komme ich mit folgendem Problem nicht nach: Sofern ich im Terminal selber über
Code: Alles auswählen
python script.py
Nun habe ich dieses Skript in Apache eingebettet, und möchte es über eine Webseite
ausführen.
Es wird auch ausgeführt, jedoch werden sämtliche Befehle die einen Systemaufruf antriggern einfach "überfahren", und "funktionieren nicht". Print-Ausgaben zum Beispiel funktionieren wie gewohnt.
Was ich bereits probiert habe:
Code: Alles auswählen
os.system("opsi-admin -rd method createClient ....)"
Code: Alles auswählen
print(os.system("opsi-admin -rd method createClient ...."))
Ergebnis:
Der Return-Code ist 256 (also nach dem 16bit-Schema: 1), also scheint es irgendwo Probleme zu geben. Der Error-Log von Apache ist diesbezüglich leer, der Client wird nicht angelegt.
Dann habe ich probiert, über einen subprocess den Client zu erstellen:
Code: Alles auswählen
subprocess.Popen(["/usr/bin/opsi-admin", "-d", "method", "createClient", ....])
Code: Alles auswählen
subprocess.call(["/usr/bin/opsi-admin", "-d", "method", "createClient", ....])
Komplette Print-Ausgabe des Skripts, augenscheinlich alles gut, Client ist trotzdem nicht erstellt worden. Keine Fehlermeldungen im Apache.log.
Dann habe ich noch eine andere opsi-seitige Möglichkeit probiert, und zwar über ein Backend, hier ein copy-paste aus dem OPSI-Forum:
Code: Alles auswählen
backend = BackendManager(
dispatchConfigFile=u'/etc/opsi/backendManager/dispatch.conf',
backendConfigDir=u'/etc/opsi/backends',
extensionConfigDir=u'/etc/opsi/backendManager/extend.d'
)
# Ab python-opsi 4.0.6.39 geht es dann sogar so:
# backend = BackendManager()
# Direkter Weg ohne Backend-Erweiterung:
backend.host_createOpsiClient(id='client{0}.uib.local'.format(someID), ipAddress=theIP, hardwareAddress=theMAC)
# Über die Erweiterung wäre es dann:
# backend.createClient("client" + str(someID), 'uib.local', ipAddress=theIP, hardwareAddress=theMAC)
Ergebnis:
Die Datei /etc/opsi/backendManager/dispatch.conf ist aber an jenem Ort aufzufinden...Traceback (most recent call last):
File "/usr/lib/cgi-bin/script.py", line 123, in <module>
backend = BackendManager(dispatchConfigFile=u'/etc/opsi/backendManager/dispatch.conf', backendConfigDir=u'/etc/opsi/backends',
extensionConfigDir=u'/etc/opsi/backendManager/extend.d')
File "/usr/lib/python2.7/dist-packages/OPSI/Backend/BackendManager.py", line 256, in __init__
self._backend = BackendDispatcher(context=self, **kwargs)
File "/usr/lib/python2.7/dist-packages/OPSI/Backend/BackendManager.py", line 372, in __init__
self.__loadDispatchConfig()
File "/usr/lib/python2.7/dist-packages/OPSI/Backend/BackendManager.py", line 404, in __loadDispatchConfig
raise BackendConfigurationError: <BackendConfigurationError(u"Dispatch config file '/etc/opsi/backendManager/dispatch.conf' not found")>
Es scheint, als habe er generell Probleme mit Systemaufrufen. Also nicht nur im Kontext dieses einen Zwecks, einen neuen Client anzulegen. Das lässt in mir die Ahnung reifen, dass das Problem etwas mit dem Apache und dem Skript bzw. Zugriff des Skripts selber zutun haben könnte.
Es wird nicht gemeckert, und es scheint als würde alles ausgeführt werden, aber das Ergebnis ist nicht wie erwartet.
So funktioniert zum Beispiel auch ein einfaches
Code: Alles auswählen
os.system("opsi-convert file mysql")
Das Skript selbst hat die Berechtigung "-rwxr-xr-x" über
Code: Alles auswählen
chmod 0755 /usr/lib/cgi-bin/script.py
Kann mir jemand helfen? Ich habe echt keine Ahnung mehr wo ich suchen soll.
Viele Grüße und Danke im Voraus,
Lucky