[GELÖST] opsi-makeproductfile via cmd in winst auslösen !?

D3r_Pilg3r
Beiträge: 28
Registriert: 26 Jan 2011, 07:12
Kontaktdaten:

[GELÖST] opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von D3r_Pilg3r »

Guten Morgen zusammen,

ich arbeite an einem Paket, welches die Treiberintegration von OPSI Client-Modell-Spezifisch automatisiert und die entsprechenden netboot-Produkte automatisch aktualisiert und für alle Depots bereitstellt.
Die Basis dazu ist das automatisierte Ausführen von DoubleDriver auf einem Client, dem verschieben der so ausgelesenen Treiber auf Basis des OS in einen durch den Client erstelltes Verzeichnis auf dem OPSI Config Server (/home/opsiproduct/$ProductId$/CLIENT_DATA/driver/drivers/additional/byAudit/$Hersteller$/$Modell$) nach dem Schema des byAudit verfahren.

Anschließend wird über ein CMD-Aufruf eine Putty Konsole via ssh-key aufgerufen und eine Befehlsdatei übergeben um das Netboot-Produkt zu löschen -> neu zu packen -> auf alle Depots hochzuladen.

Letzteres funktioniert nicht, da die Textdatei die übergeben wird wohl nicht UTF8-Codiert ist. Ändere ich das vorgehen und übergebe eine UTF8-Codierte datei, kennt die SSH die Befehle nicht mehr.... :/
Ich bin nicht so fit das ich gerade weis wie ich die Codierung on the fly umsetze. Auch das erstellen eines Shell Scripts auf dem Server und dem "nur noch" dortigen Ausführen durch Putty änder nichts daran, da der Befehl den ich übergebe "nie" UTF8 ist und das vermeindlich das Problem verursacht. Sofern ich die Fehlermeldung richtig verstehe.

Die entsprechenden Script-Sections:

Code: Alles auswählen

[DosBatch_InAnIcon_exe_putty]
echo on
"%Scriptpath%\files\Putty\putty.exe" root@<Server>-i "%Scriptpath%\files\Putty\root.ppk" -m "C:\tmp\include_driver.txt"

[Files_uninstall_dummy.txt]
del -sf "C:\tmp\include_driver.txt"

[PatchTextFile_AddLine]
GoToBottom
AddLine "opsi-setup --set-rights /home/opsiproducts/$ProductId$/CLIENT_DATA/drivers/drivers/additional/byAudit"
AddLine "cd /home/opsiproducts/$ProductId$"
AddLine "rm $ProductId$*"
AddLine "opsi-makeproductfile &> /home/opsiproducts/logfiles/doubledriver/%hostId%_makeproductfile.log
AddLine "opsi-package-manager -i $ProductId$* -d all -v"
Ich habe auch schon die Übergabe der Befehle in abgewandelter Form versucht:

Code: Alles auswählen

GoToBottom
AddLine "opsi-setup --set-rights /home/opsiproducts/$ProductId$/CLIENT_DATA/drivers/drivers/additional/byAudit"
AddLine "rm /home/opsiproducts/$ProductId$/$ProductId$*"
AddLine "opsi-makeproductfile /home/opsiproducts/$ProductId$ &> /home/opsiproducts/logfiles/doubledriver/%hostId%_makeproductfile.log
AddLine "opsi-package-manager -i $ProductId$* -d all -v"
Fehlerlog des makeproductfile Befehls bei Übergabe durch eine ASCII Textdatei:

Code: Alles auswählen

[1;31;40mcritical: Traceback:[0;0;0m
[1;31;40mcritical:      line 386 in '<module>' in file '/usr/bin/opsi-makeproductfile'[0;0;0m
[1;31;40mcritical:      line 270 in 'main' in file '/usr/bin/opsi-makeproductfile'[0;0;0m
[1;31;40mcritical:      ==>>> 'ascii' codec can't encode character u'\xe8' in position 59: ordinal not in range(128)[0;0;0m
ERROR: 'ascii' codec can't encode character u'\xe8' in position 59: ordinal not in range(128)

Sperre Paket

Paket-Informationen
----------------------------------------------------------------------------
   version              : 1
   custom package name  : 
   incremental package  : False
   package dependencies : 

Produkt-Informationen
----------------------------------------------------------------------------
   product id           : win7_krefeld
   product type         : netboot
   version              : 4.0.3
   name                 : Windows 7 - x64
Hebe Paket-Sperre auf

Fehlerlog des makeproductfile Befehls bei Übergabe durch eine UTF8 Textdatei:

Code: Alles auswählen

bash: $'\357\273\277opsi-makeproductfile': Kommando nicht gefunden.
Zuletzt geändert von D3r_Pilg3r am 31 Okt 2013, 11:27, insgesamt 1-mal geändert.
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von tobias »

ich würde das nicht über SSH machen.
Ich hab dir mal was gebaut:

Code: Alles auswählen

def opsiMakeProductfile (self, ProductID):
        import os
        def getch():
                os.environ['ProductID'] = ProductID
                result= os.popen('cd /home/opsiproducts/$ProductID/; opsi-makeproductfile -q')
        getch()
Das ist eine simple OPSI Methode die du dann aus einem WINST Script ausführen kannst.
Einbauen kannst du die genauso wie diese hier: viewtopic.php?f=7&t=5309

Das selbige kannst du dir fürs Pakete installieren bauen :)

Die Methoden kannst du dann über eine OpsiServiceCall Sektion ausführen.


Leider gibts keine Fehlermeldungen zurück. Könnte man aber wenn man Python beherrscht sicherlich auch realisieren. Ich tus nicht ;)
D3r_Pilg3r
Beiträge: 28
Registriert: 26 Jan 2011, 07:12
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von D3r_Pilg3r »

Hey Tobi, danke für die Antwort

aber ist es nicht so, das der makeproductfile Befehl als sudo ausgeführt werden muss?
Und dann müsste ich ins Winst-Script das Login für root bzw. das sudo Passwort übergeben.

Die ssh wird per private Key sowieso entsprechend übergeben.

Oder habe ich hier einen Denkfehler und eventuell ziemlich verwurschtelte Rechte auf meinem Linux System =?

Gruß Martin
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von tobias »

als methode läuft das ja mit den OPSI rechten also kein problem ;) du brauchst gar keine login daten mehr in deinem WINST Script eintragen weil das über den OPSI Service läuft.
D3r_Pilg3r
Beiträge: 28
Registriert: 26 Jan 2011, 07:12
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von D3r_Pilg3r »

Okey....

gut das man hier aufgeklärt wird :)

Bist stehts ne große Hilfe Tobi. Deine Beiträge sind oft ech Goldwert.

Muss ja mal erwähnt werden. So ich schau mal ob ich das so umgesetzt bekomme :)
D3r_Pilg3r
Beiträge: 28
Registriert: 26 Jan 2011, 07:12
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von D3r_Pilg3r »

Ha da fällt mir gerade auf,

ist der Wert (self, ProductID) der des gerade ausgeführten Pakets? Denn das wäre ja ein anderes als jenes, welches gepackt werden soll.
Aufgerufen wird das in dem Product "doubledriver" und soll angewendet werden auf z.B. "win7_krefeld"...oder kann ich in der Methode selbst wieder $ProductId$ übergeben ?

Gruß Martin :D
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von tobias »

Hi,

das ist ja eine methode. Du kannst aus dem WInstScript oder über opsi-admin diese methoden aufrufen.
ProductID ersetzt du einfach durch das Paket welches du neu paketieren möchtest (also in deinem WINST Script, kann Natürlich auch eine Variable sein die du entsprechend befüllst)

also z.B. method opsiMakeProductfile Win7

Dann wechselt das script in den ordner /home/opsiproducts/Win7/ und führt dort opsi-makeproductfile -q aus


so eine Sektion kann so aussehen im WINST Script:

Code: Alles auswählen

[opsiServiceCall_MakeProductFile]
"method": "opsiMakeProductfile"
"params": [
"Win7"
]

Methoden sind toll :)
D3r_Pilg3r
Beiträge: 28
Registriert: 26 Jan 2011, 07:12
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von D3r_Pilg3r »

Ja gut XD dann meinten wir das selbe.

Danke dir. Wenn das mal druch ist muss ich dazu mal was im Wiki erstellen.

Gruß Martin
D3r_Pilg3r
Beiträge: 28
Registriert: 26 Jan 2011, 07:12
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von D3r_Pilg3r »

Mh doch noch ne Frage,

sähe eine methode für z.b den package-manager dann so aus?

Code: Alles auswählen

def opsiPackageManager (self, ProductID):
        import os
        def getch():
                os.environ['ProductID'] = ProductID
                result= os.popen('cd /home/opsiproducts/$ProductID/; opsi-packagemanager -i $ProductID* -d all')
        getch()
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsi-makeproductfile via cmd in winst auslösen !?

Beitrag von tobias »

schaut gut aus.
Antworten