Software aus Netzwerk installieren

Antworten
Oliver K.
Beiträge: 15
Registriert: 31 Jan 2017, 08:09

Software aus Netzwerk installieren

Beitrag von Oliver K. »

Guten Tag,

ich möchte eine Software verteilen, deren Sources sich nicht im OPSI_Depot befinden. Die Quelldateien für die Installation befinden sich im Netzwerk.

Nun startet OPSI die Installation ja mit der lokalen Ressource, die auf den Netzwerkpfad keinen Zugriff hat.

Lässt sich irgendwie steuern, dass Setup-Script Zugriffsrecht auf eine Netzwerkfreigabe erhält?
Wie würdet Ihr einen Netzwerkzugriff dieser Art steuern?

Danke und Gruß
ewimar
Beiträge: 14
Registriert: 10 Aug 2018, 10:19

Re: Software aus Netzwerk installieren

Beitrag von ewimar »

Hallo Oliver,

für Deine Anforderung musste ich letztes Jahr eine Lösung finden und habe es so gemacht:

Kurz: Das winst-Install-Skript verbindet die Freigabe (1), installiert das Programm (2) und trennt danach die Freigabe wieder (3).

Lang: Die benötigten Daten sind als Produkt-Properties hinterlegt:
  • - Freigabepfad (Freigabe)
    - Benutzername (Freigabe_Benutzer)
    - Passwort (Freigabe_Passwort)

Code: Alles auswählen

	DefVar $PROP_Freigabe$
	DefVar $PROP_Freigabe_Benutzer$
	DefVar $PROP_Freigabe_Passwort$
	Set $PROP_Freigabe$ = GetProductProperty("Freigabe","\\server\Programme-S")
	Set $PROP_Freigabe_Benutzer$ = GetProductProperty("Freigabe_Benutzer","")
	Set $PROP_Freigabe_Passwort$ = GetProductProperty("Freigabe_Passwort","")
(1) Per DosInAnIcon-Sekundärsektion wird die Freigabe verbunden:

Code: Alles auswählen

DefVar "$PROP_Freigabe$"
Set "$PROP_Freigabe$" = "\Server\Freigabe"
DosInAnIcon_MountShare "$PROP_Freigabe$" "$PROP_Freigabe_Benutzer$" "$PROP_Freigabe_Passwort$"

[DosInAnIcon_MountShare]
; Parameter1: Freigabepfad
; Parameter2: Benutzername
; Parameter3: Kennwort
NET USE * %1 %3 /USER:%2 /PERSISTENT:NO
exit %ERRORLEVEL%
(2) Nun findet die eigentliche Installation statt...

(3) Am Schluss wird per DosInAnIcon-Sekundärsektion die Freigabe wieder getrennt:

Code: Alles auswählen

DosInAnIcon_UnMountShare "$PROP_Freigabe$"

[DosInAnIcon_UnMountShare]
; funktioniert nur, wenn ein Buchstabe zugewiesen wurde.
@echo off
set drive=leer
for /f "tokens=2,3" %%a in ('net use') do if "%%b"==%1 set drive=%%a
if "%drive%"=="leer" Goto WEITER
echo Freigabe ist gemappt auf Laufwerk %drive%
echo Trenne Freigabe...
NET USE %drive% /DELETE
exit %ERRORLEVEL%
:WEITER
echo Freigabe ist nicht gemappt.
exit %ERRORLEVEL%
Ganz lang: Alternativ kann auch der Benutzer aus dem opsi-Produkt windomain benutzt werden - das macht es einfacher, denn die Daten müssen in Zukunft nur in einem einzigen opsi-Produkt gepflegt werden.

Die Produkt-Properties des opsi-Produkts windomain können per OpsiServiceCall-Sekundärsektion auslesen werden.
Hier werden die Werte für $PROP_Freigabe_Benutzer$ und $PROP_Freigabe_Passwort$ betankt.
:!: Es geht bestimmt einfacher. Lokale Funktionen wären hier sicherlich auch von Vorteil.

Code: Alles auswählen

DefStringlist $resultlist$
DefVar $ArrayStr$
DefVar $PROP_Freigabe_Benutzer$
DefVar $PROP_Freigabe_Passwort$

Sub_User_und_Passwort_aus_Produkt_windomain_ermitteln

[Sub_User_und_Passwort_aus_Produkt_windomain_ermitteln]
set $resultlist$ = getReturnListFromSection("opsiservicecall_get_windomain_properties")
Set $ArrayStr$ = takestring(0, $resultlist$)
if not(jsonIsValid($ArrayStr$))
	LogError "got no valid json from Service"
	isFatalError
endif
; Username aus dem Produkt 'windomain' ermitteln - nicht elegant, aber funktionsfähig
set $resultlist$ = emptylist($resultlist$)
set $resultlist$ = jsonAsArrayToStringList($ArrayStr$)
Set $PROP_Freigabe_Benutzer$ = takeFirstStringContaining($resultlist$ , '"propertyId":"username"') 
set $resultlist$ = emptylist($resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Benutzer$, ',"values":["')
if not(count($resultlist$) = "2")
	isFatalError "Fehler beim Ermittlen von 'username' aus dem Produkt 'windomain'. Bitte tragen Sie den Benutzer in das Property 'freigabe_benutzer' ein."
endif
Set $PROP_Freigabe_Benutzer$ = takeString (1, $resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Benutzer$, '"')
Set $PROP_Freigabe_Benutzer$ = takeString (0, $resultlist$)
if not(strLength($PROP_Freigabe_Benutzer$) > "0")
	isFatalError "Fehler beim Ermittlen von 'username' aus dem Produkt 'windomain'. Bitte tragen Sie den Benutzer in das Property 'freigabe_benutzer' ein."
endif
; Passwort aus dem Produkt 'windomain' ermitteln - nicht elegant, aber funktionsfähig
set $resultlist$ = emptylist($resultlist$)
set $resultlist$ = jsonAsArrayToStringList($ArrayStr$)
Set $PROP_Freigabe_Passwort$ = takeFirstStringContaining($resultlist$ , '"propertyId":"password"') 
set $resultlist$ = emptylist($resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Passwort$, ',"values":["')
if not(count($resultlist$) = "2")
	isFatalError "Fehler beim Ermittlen von 'password' aus dem Produkt 'windomain'. Bitte tragen Sie das Passwort in das Property 'freigabe_passwort' ein."
endif
Set $PROP_Freigabe_Passwort$ = takeString (1, $resultlist$)
Set $resultlist$ = splitString($PROP_Freigabe_Passwort$, '"')
Set $PROP_Freigabe_Passwort$ = takeString (0, $resultlist$)
if not(strLength($PROP_Freigabe_Passwort$) > "0")
	isFatalError "Fehler beim Ermittlen von 'password' aus dem Produkt 'windomain'. Bitte tragen Sie das Passwort in das Property 'freigabe_passwort' ein."
endif

[opsiservicecall_get_windomain_properties]
	"method": "productPropertyState_getObjects"
	"params":[
           "[]",
           '{"productId":"windomain"}'
           ]
:!: Vorsicht Falle: Beachte beim interaktiven Testen (https://download.uib.de/opsi4.1/documen ... est-script) bitte, dass der OpsiServiceCall-Aufruf nicht funktioniert. Die Verbindung muss zunächst initialisiert werden.
Zum Testen musst Du das vorher ausführen:

Code: Alles auswählen

DefVar $Service_User$
DefVar $Service_PWD$
DefVar $Sevice_URL$
; Die Werte findet man in der Datei "opsiclientd.conf"
Set $Service_User$ = "host_id"
Set $Service_PWD$ = "opsi_host_key"
; In der Url die Endung "/rpc" entfernen
Set $Sevice_URL$ = "config_service"

opsiservicecall_testaufruf /username "$Service_User$" /password "$Service_PWD$" /serviceurl "$Sevice_URL$"

[opsiservicecall_testaufruf]
	"method": "accessControl_authenticated"
	"params":[
           ]
Ich hoffe das hilft Dir weiter.

Viele Grüße
Martin
pandel
Beiträge: 830
Registriert: 25 Jan 2013, 16:47

Re: Software aus Netzwerk installieren

Beitrag von pandel »

+1 für die Lösung von Martin! Habe ich auch schon so gemacht, als wir einige Zeit MS Patche von einem zentralen Share verteilt haben.
Antworten