Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von IvicaE »

Hallo Leute,

ich habe hier ein kleines 'Miyterium'.
Ich habe ein Opsi-Script welches mir Schriftarten installieren soll. Keine bestimmten sondern alle die im entsprechenden Verzeichnis vorzufinden sind.
Dazu verwende ich ein Tool Namens "FontRegister.exe" und das funktioniert auch a) über die CMD und b) über ein OPSI-Script und der Winst.exe.
Beim Letzteren kopiere ich das komplette Paket-Verzeichnis des betreffenden Paketes von der opsi-workbench auf den Zielrechner, starte dort die Winst.exe, verweise auf das "Setup.opsiscript" und drücke 'Start'. Dann läuft das Script schnell durch und beendet sich nach getaner Arbeit (0 Warnungen, 0 Fehler). Die Schriften sind verfügbar und werden in der Fonts-Verwaltung auch korrekt angezeigt.

So, dann packe ich das Paket über Putty indem ich "opsi-makepackage -mm -vz" ausführe und es anschliessend installiere per "opsi-package-manager -i my_schriftarten_1.0-1.opsi"-Befehl.

Wenn ich nun den configed aktualisiere, wird mir das neue Paket angezeigt und ich kann es per OPSI verteilen.
Leider klappt dieser Schritt aber nicht! Er bleibt ewig 'hängen' und beendet sich nicht. Wenn ich es per Task-Manager abschiesse und anschliessend in der Fonts-Verwaltung nachschaue, sind die neuen Fonts nicht installiert. Ein Neustart des OS bringt auch nichts.

Der Installationsvorgang bleibt hängen mit folgendem Stand (auf dem Bildschirm angezeigt):
Installing Schriftarten ...
executing "C:\Program Files (x86)\opsi.org\opsi-client-agent\opsi-winst\winst32.exe" finished
Und da bleibt er und bleibt und bleibt. Auch nach Stunden immer noch das Gleiche.

So, die Frage ist nun: wie kann das sein?
Das OPSI-Script scheint ja korrekt zu sein, es läuft bei der manuellen Vorgehensweise ja ohne Fehler und Warnungen durch. Das gleiche Script, ohne das irgendwas verändert wurde, läuft vom OPSI-Server jedoch nicht?

Nachtrag:
jetzt habe ich mir die lokale Log-Datei auf dem Zielrechner angeschaut (opsi-script-part-Nfxxxx.log):

Code: Alles auswählen

[7] [Apr 03 14:05:21:866] [my_schriftarten]             C:\Windows\system32>p:\my_schriftarten\fontreg\FontRegister.exe --cleanup 
[7] [Apr 03 14:05:21:866] [my_schriftarten]             Failed creating temporary directory at\np:\my_schriftarten\fontreg\cache\nSystem.UnauthorizedAccessException: Der Zugriff auf den Pfad "p:\my_schriftarten\fontreg\cache" wurde verweigert.
[7] [Apr 03 14:05:21:866] [my_schriftarten]                bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
[7] [Apr 03 14:05:21:866] [my_schriftarten]                bei System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
[7] [Apr 03 14:05:21:866] [my_schriftarten]                bei FontRegAuto.Program.RunCleanup() in C:\Users\Eli\Desktop\fontregister\FontRegister\Program.cs:Zeile 176.
[7] [Apr 03 14:05:21:866] [my_schriftarten]             
[7] [Apr 03 14:05:21:866] [my_schriftarten]             Press Enter to exit...
[7] [Apr 03 14:05:21:866] [my_schriftarten]     
[7] [Apr 03 14:05:21:867] [my_schriftarten]     The file: c:\opsi.org\tmp\_opsiscript_Jh91Ae53.cmd has been deleted
[6] [Apr 03 14:05:21:867] [my_schriftarten]       Search "c:\opsi.org\tmp\"
[6] [Apr 03 14:05:21:867] [my_schriftarten]       Search "c:\opsi.org\tmp\_opsiscript_*"
[6] [Apr 03 14:05:21:868] [my_schriftarten] EndIf
Es scheint so zu sein das diese "FontRegister.exe" kein temporäres Verzeichnis erstellen darf? Ich dachte OPSI läuft mit SYSTEM-Berechtigung und darf nahezu alles? Oder erkenne ich das wahre Problem gerade nicht?
d.haberland
Beiträge: 46
Registriert: 27 Sep 2017, 16:47

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von d.haberland »

Hallo,

wie sieht denn dein Skript aus würdest du es mal Posten?

Grüße Haberland
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von IvicaE »

Hier das Script:

Code: Alles auswählen

; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the General Public License.
; credits: http://www.opsi.org/credits/


[Actions]
requiredWinstVersion >= 4.11.4.12
setLogLevel=7
ScriptErrorMessages=off
ExitWindows /Reboot
DefVar $LogDir$
Set $LogDir$ = "%opsiLogDir%"
DefVar $ProductId$
DefVar $MinimumSpace$
DefVar $InstallDir$
DefVar $ExitCode$
DefVar $FontReg$
DefVar $FontSource$
DefVar $FontDestination$
; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
Set $ProductId$       = "Schriftarten"
Set $MinimumSpace$    = "10 MB"
Set $FontReg$ 		  = "%ScriptPath%\fontreg\FontRegister.exe"
Set $FontSource$	  = "%ScriptPath%\Fonts\"
Set $FontDestination$ = "%Systemroot%\Fonts"
; ----------------------------------------------------------------

if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
	LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
	isFatalError
	; Stop process and set installation status to failed
else
	comment "Show product picture"
	ShowBitmap "%ScriptPath%\fonts.png" $ProductId$
	
	Message "Installing " + $ProductId$ + " ..."
	
	comment "Start setup program"
	DosInAnIcon_copy
	DosInAnIcon_install
endif

[DosInAnIcon_copy]
robocopy /S $FontSource$ $FontDestination$


[DosInAnIcon_install]
$FontReg$ --cleanup
Um es nochmals zu wiederholen: manuell ausführen mit der "Winst.exe" funktioniert einwandfrei! Ohne Fehler und ohne Warnungen (Warnungen gibt es in meinen anderen Scripten häufiger, die tun aber trotzdem). Nur gepackt, auf dem Opsi installiert und von dort "heruntergedrückt" funktioniert nicht...
d.haberland
Beiträge: 46
Registriert: 27 Sep 2017, 16:47

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von d.haberland »

Ich weiß nicht ob das Hilft aber hast du schon versucht statt [DosInAnIcon] eine [WinBatch] Funktion zu benutzten?
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von IvicaE »

Nein, das habe ich noch nicht ausprobiert.
Ich dachte immer daß wenn ich DOS-Commands nutze, ich dies in der "DosInAction" machen muss?
Geht das denn auch in einer Winbatch-Sektion und was ist dann der Unterschied dabei?
Solange ich hier auf Antworten warte, werde ich das parallel mal ausprobieren und dann berichten...
d.haberland
Beiträge: 46
Registriert: 27 Sep 2017, 16:47

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von d.haberland »

Darf ich fragen was der "Befehl" bewirkt

Code: Alles auswählen

[DosInAnIcon_install]
$FontReg$ --cleanup
Ich hab das jetzt so mal geändert aus den Kopf raus, bis auf den Oben genanten Code ich nehme an das du so die .exe aufrufen willst aber weiß nicht was das mit --cleanup soll ist das ein Parameter wenn ja häng hinter meinen Code bei ""$FontReg$" --cleanup oder /cleanup

Code: Alles auswählen

[WinBatch_copy]
copy -s "%FontSource%" "%FontDestination%"


[WinBatch_install]
"$FontReg$"
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von larsg »

Edit: Ich denke ich hab den Fehler.

Aus deiner Logdatei:
Failed creating temporary directory at\np:\my_schriftarten\fontreg\cache\nSystem.UnauthorizedAccessException: Der Zugriff auf den Pfad "p:\my_schriftarten\fontreg\cache" wurde verweigert.
Du rufst das Tool vom Depot-Verzeichnis aus auf, und es versucht genau dort ein Verzeichnis zu erstellen, was nicht geht da nur lesender Zugriff.
Kopier es vor dem Aufruf mal nach %OpsiTmpDir% und ruf es von da aus auf ;)


Wenn es nur darum geht Schriftarten zu installieren, hierfür nutze ich folgendes VBS Skript:

Code: Alles auswählen

ExecWith_install_fonts CScript //nologo //e:vbs PASS "%ScriptPath%\OrdnerMitSchriftarten"

[ExecWith_install_fonts]
Option Explicit
Dim StrPath, ObjShell, ObjFSO, ObjNameSpace, ObjFolder, ObjFile, ObjFont
StrPath = WScript.Arguments(0)
Set ObjShell = CreateObject("Shell.Application")
Set ObjFSO = CreateObject("Scripting.FilesystemObject")
Set ObjNameSpace = ObjShell.Namespace(StrPath)
If ObjFSO.FolderExists(StrPath) Then
	WScript.Echo "Install font files from folder " & StrPath
	WScript.Echo " "
	Set ObjFolder = ObjFSO.GetFolder(StrPath)
	For Each ObjFile In ObjFolder.Files
		If LCase(Right(ObjFile,4)) = ".ttf" OR LCase(Right(ObjFile,4)) = ".otf" Then
			If ObjFSO.FileExists("C:\Windows\Fonts\" & ObjFile.Name) Then
				WScript.Echo "Font already installed: " & ObjFile.Name
			Else
				Set ObjFont = ObjNameSpace.ParseName(ObjFile.Name)
				ObjFont.InvokeVerb("Install")
				WScript.Echo "Installed Font: " & ObjFile.Name
				Set ObjFont = Nothing
			End If
		End If
	Next
ElseIf ObjFSO.FileExists(StrPath) Then
	WScript.Echo "Install font file " & StrPath
	WScript.Echo " "
	Set ObjFile = ObjFSO.GetFile(StrPath)
	If LCase(Right(ObjFile,4)) = ".ttf" OR LCase(Right(ObjFile,4)) = ".otf" Then
		If ObjFSO.FileExists("C:\Windows\Fonts\" & ObjFile.Name) Then
			WScript.Echo "Font already installed: " & ObjFile.Name
		Else
			Set ObjFont = ObjNameSpace.ParseName(ObjFile.Name)
			ObjFont.InvokeVerb("Install")
			WScript.Echo "Installed Font: " & ObjFile.Name
			Set ObjFont = Nothing
		End If
	End If
Else
	WScript.Echo "Source path does not exist"
End If
Das Skript akzeptiert als Parameter entweder eine Schriftartdatei (.ttf oder .otf), oder einen Ordner der nach entsprechenden Dateien durchsucht wird.
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von IvicaE »

Mit WinBatch- statt DosInAnIcon-Subsektion ist das Spiel leider das Gleiche.

Wenn ich alles in der winBatch-Sektion habe, dann will mir das Robocopy nicht, wenn ich das Kopieren in der DosInAnIcon stehen lasse und nur das "FontRegister.exe" aus der WinBatch-Sektion ausführe, habe ich das gleiche Problem wie wenn es in der DosInAnIcon-Sektion steht. Es bleibt einfach stehen und die Fonts sind NICHT installiert.

Wenn ich es wieder manuell per Winst.exe ausführe, klappt es wunderbar. Auch wenn ich es in der cmd ausführe auch.

Übrigens:
Das FontRegister-Tool mit dem Parameter --Cleanup bewirkt das alle Fonts im Fonts-Verzeichnis von Windows registriert oder deregistriert werden, jenachdem ob die Fonts 'physikalisch' im Ordner enthalten sind oder nicht. Somit muss ich die gewünschten Fonts in den Ordner kopieren und dann ihn machen lassen. Im Normalfall erscheinen die dann als installierte und registrierte Fonts in der Font-Liste von Windows. Leider bleibt die Installation vom OPSI ja hängen.....
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von IvicaE »

@larsg

Sorry, schreibe meinen Beitrag schon seit 9 Uhr morgens und werde immer wieder abgehalten durch andere Aufgaben. Ich habe dein Beitrag noch gar nicht gesehen gehabt. Werde ich mal ausprobieren....
Schon einmal Danke für deine Hilfe!
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: Opsi-Script funktioniert bei "manueller" installation, per OPSI-Server nicht?

Beitrag von larsg »

Hey ich hab nur mein senf dazugegeben, kein Grund sich bei mir zu entschuldigen weil du nicht direkt geantwortet hast :? ;)
Antworten