Benutzerdefinierte Pakete erstellen

Antworten
MaZzEe
Beiträge: 18
Registriert: 21 Jun 2018, 18:39

Benutzerdefinierte Pakete erstellen

Beitrag von MaZzEe »

Huhu,

Die Pakete werden ja mittels opsi-setup-detector und dem opsi backage builder erstellt.
Das funktioniert bis jetzt auch soweit ganz gut.
Mein Frage hierbei wäre: Wie kann ich die Installation benutzerdefiniert bearbeiten?
Als Beispiel hierbei habe ich den Firefox. Wenn man dort den Wartungsdienst nicht mitinstallieren will, muss ja der Haken raus genommen werden.
Wie kann ich so eine Paketinstallation bearbeiten, dass man z.B. diverse Haken setzen kann bzw Komponenten auswählen kann, die mit installieren werden sollen, oder halt nicht?
Bei den Paketen die ich bis jetzt erstellt habe, macht er nämlich immer eine komplette Installation. Manchmal will man aber nicht alles ausgewählt haben. Das wird wahrscheinlich nicht ganz so einfach machbar sein, aber hat jemand da Tipps, Guides, Lektüre, Erfahrungen oder ähnliches, wie ich da am besten ran gehe?
andré
Beiträge: 324
Registriert: 07 Jan 2014, 10:48

Re: Benutzerdefinierte Pakete erstellen

Beitrag von andré »

Das läuft alles über die setup-Datei, da kann opsi selber nichts machen.

Zum Beispiel Firefox:
Du installierst mit Verweis auf die install.ini, die im selben Verzeichnis wie die setup-Datei liegt.

Code: Alles auswählen

setup.exe -ms /INI=install.ini
In der install.ini steht dann drin, dass der Maintenance-Service nicht installiert werden soll.

Code: Alles auswählen

[Install]
MaintenanceService=false
Da musst du bei jedem Softwarepaket einzeln schauen, was für Optionen die einzelnen Pakete bei der Installation anbieten und die lässt du opsi dann ausführen. Manche bieten eine msi-Datei an, die nur den /s-Schalter für eine silent-Installation anbietet. Dann wiederum gibt es z.B. LibreOffice, die Hunderte Optionen anbieten, um die Installation bis ins Kleinste anzupassen. Kommt halt immer darauf an.
MaZzEe
Beiträge: 18
Registriert: 21 Jun 2018, 18:39

Re: Benutzerdefinierte Pakete erstellen

Beitrag von MaZzEe »

Hallo und danke erstmal für die Antwort/Hilfe

Okay und wie bzw wann genau mache ich das?

Im Moment erstelle ich mit dem setup-detector das Paket und packe es mit dem packet-builder zu einer .opsi Datei. Die muss dann ja nur noch auf dem opsi Server installiert werden.

Muss dann bevor ich das Paket zu einer .opsi Datei packe in dem Ordner "CLIENT_DATA" eine install.ini mit dem MaintenanceService=false-Eintrag erstellt werden, oder bin ich da voll auf dem Holzweg?
Ich bin nämlich ganz ehrlich, ich kann mit dem Code "setup.exe -ms /INI=install.ini" gerade nicht viel anfangen. :? Wo und wie genau erstelle ich diesen Verweis zu der .ini Datei?

Zu der install.ini

Wie erfahre ich denn, was für Optionen die einzelnen Pakete anbieten?
Kann man diese Informationen bzw die Syntax aus bestimmten Dateien ziehen, oder muss man die sich irgenwie "ergoogeln"?
Als Beispiel:
Wie hätte ich das in Erfahrung bringen können, dass der Eintrag in der .ini genau so heißen muss (MaintenanceService=false)

Fragen über Fragen. :)
Ich hoffe es ist nicht so wild, dass ich da noch nicht so ganz den Durchblick habe.
andré
Beiträge: 324
Registriert: 07 Jan 2014, 10:48

Re: Benutzerdefinierte Pakete erstellen

Beitrag von andré »

Ah ok, ich habe den opsi-setup-detector noch nie benutzt, cooles Teil.

Du gibst den Basispfad im setup-detector an. Da drin wird unter dem Ordnernamen, der den Programmnamen trägt, ein weiterer Ordner erstellt, namens CLIENT_DATA. Das setup.opsiscript ist das Skript, was du bearbeiten musst, wenn du benutzerdefinierte Pakete haben willst. Soweit ich das sehe, erstellt der setup-detector das Grundskript, aber alles andere musst du selbst machen. Opsi-Pakete arbeiten einfach nur ein Skript ab, in dem du Opsi sagst, was es zur Installation zu tun hat.

Du kommst für weiterführende Skripterstellung nicht drum herum, dich einzulesen. Doku dazu findest du hier:

Winst-Handbuch: Darin ist die Dokumentation zur Skriptsprache enthalten.
Getting started: Hier hast du ein kleines Tutorial, wie man die Installationsskripte erstellt.
Opsi Wiki: Im WIki findest du Beispielskripte.
ich kann mit dem Code "setup.exe -ms /INI=install.ini" gerade nicht viel anfangen.
Das ist der Befehl zur Installation von Firefox, der von der setup.opsiscript ausgeführt wird. Die install.ini legst du neben die Firefox-Setupdatei und änderst den entsprechenden Befehl ab.

Die optionen findest du raus, indem du entweder googlest. Stichworte sind "silent install 'gewünschtes Programm'" oder "command line arguments setup 'gewünschtes Programm'" o.ä.

Für den Firefox kommst du da zum Beispiel hier raus: https://wiki.mozilla.org/Installer:Comm ... _Arguments

Oder du nimmst den setup-detector, erstellst ein Paket und schaust dort in das Skript rein, da stehen die Silent-Optionen drin.
MaZzEe
Beiträge: 18
Registriert: 21 Jun 2018, 18:39

Re: Benutzerdefinierte Pakete erstellen

Beitrag von MaZzEe »

Wie erstellst du dir denn so deine Pakete zum Installieren?^^

Ich habe die install.ini und den Verweis erstellt. Dennoch will es nicht funktionieren.
Danach habe ich mal auf dem Windows Client den Befehl per cmd ausgeführt. Dort hat es dann, nachdem ich den ganzen Pfad zur .ini angegeben hatte, funktioniert.
Also "setup.exe -ms /INI=C:/.../install.ini" anstatt nur "setup.exe -ms /INI=install.ini"
Der Maintenance Service wurde hier nicht installiert. Bei der Installation durch opsi, wird es aber dennoch gemacht.

Wie du schon sagtest, erstellt der Setup-Detektor das Installationsskript selber.
In dem Script wird die setup.exe wie folgt aufgerufen:
Set $Setupfile$ = "setup.exe"
Das habe ich dann geändert zu:
Set $Setupfile$ = "setup.exe -ms /INI=/var/lib/opsi/workbench/firefox-60-0-2/CLIENT_DATA/install.ini"
Leider installiert opsi weiterhin den Maintenance Service mit.
Die install.ini habe ich auch test weise mit vollen Rechten ausgestattet, aber das half auch nicht.


In dem Basis Script stehen noch weitere Variablen z.b.
$InstallDir$ = "C:\Program Files\Mozilla Firefox\"
Wenn ich jetzt in der install.ini einen Pfad angeben würde, müsste ich dann wahrscheinlich diese Variable löschen, richtig?
andré
Beiträge: 324
Registriert: 07 Jan 2014, 10:48

Re: Benutzerdefinierte Pakete erstellen

Beitrag von andré »

Als ich vor einigen Jahren damit angefangen habe, habe ich die Pakete noch händisch per Terminal direkt auf dem Server bearbeitet.
Mittlerweile, wenn ich ein neues Paket brauche, kopiere ich mir ein vorhandenes, was ungefähr dasselbe macht und passe das dann mithilfe des opsi-package-builder an. Die meisten Pakete brauchen eh nur Updates, weil z.B. eine neue Firefox-Version rauskam, da muss nur das vorhandene Paket angepasst werden. Ich benötige mittlerweile viele zusätzliche Funktionen in den Paketen, die könnte mir der setup-detector leider eh nicht liefern.
Ich habe die install.ini und den Verweis erstellt. Dennoch will es nicht funktionieren.
- setup.exe und install.ini müssen im selben Ordner zu finden sein.
- Es reicht, wenn der Pfad zur setup-Datei richtig angegeben wird.

Du hast in deinem Beispiel folgendes Problem:
- Der opsiclient verbindet sich mit dem Server, indem er das depot mit einem Laufwerksbuchstaben einbindet. Du versuchst jetzt mit deinem Skript, einen Linux-Dateipfad unter WIndows aufzulösen, was nicht funktionieren wird. Nimm stattdessen die Variablen von opsi, die stehen im winst-Handbuch. Bei dir wäre das %ScriptPath%, das löst dann zum beispiel zu P:\firefox auf.
- Und zum anderen setzt du Argumente hinter die Variable $setupfile$, die zumindest in dem Skript, das ich habe erstellen lassen, überhaupt nicht verwendet wird. Der Aufruf erfolgt nicht mit

Code: Alles auswählen

Set $Setupfile$ = "setup.exe"
denn da wird nur die Variable Setupfile definiert.
Der Aufruf erfolgt weiter unten mit dem Befehl

Code: Alles auswählen

Winbatch_install_nsis
In der gleichnamigen Sektion noch weiter unten siehst du den dahinterstehenden Befehl, der ausgeführt wird, $NsisInstallBatch$. In dieser Variable muss am Ende alles korrekt drin stehen.

Ändere dein Skript mal so ab:

Code: Alles auswählen

Set $Setupfile$ = "setup.exe"
Set $InstallDir$ = ""
[..]
Set $NsisInstallBatch$ = "%ScriptPath\setup.exe -ms /INI=install.ini"

MaZzEe
Beiträge: 18
Registriert: 21 Jun 2018, 18:39

Re: Benutzerdefinierte Pakete erstellen

Beitrag von MaZzEe »

Ich habe mal wieder den Code angepasst, aber es wird jedes mal der Maintenance Service installiert.
Das es so schwer ist die Installation anzupassen hätte ich nicht gedacht. :?
Ich habe jetzt einfach mal den Code mit angefügt.


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/en/credits/
; ----------------------------------------------------------------

;****************************************
; SETUPTYPE      nsis
;****************************************
; PRODUCTID      firefox-60-0-2-win64-de
; SETUPFILE      setup.exe
;****************************************
; LICENSE        false     
; PRODUCTDESC    Firefox 60.0.2 (64-bit)

; PRODUCTNAME    Firefox 60.0.2 (64-bit)
; PRODUCTSIZE    4 MB
; PRODUCTVER     60.0.2
;****************************************
; SETUPSCRIPT    setup.opsiscript
; UNINSSCRIPT    uninstall.opsiscript
;****************************************
; MSIID          
; USE-MST        
; INSTALLDIR     C:\Program Files\Mozilla Firefox\
;****************************************
; TIMESTAMP      25.06.2018 10:17:57
;****************************************

[Actions]
;SetLogLevel = 8
requiredWinstVersion >= "4.11.4.3"
ScriptErrorMessages = false



DefVar $SetupType$
DefVar $ProductId$ 
DefVar $Setupfile$ 
DefVar $InstallDir$
DefVar $MinimumSpace$
DefVar $ExitCode$
DefVar $ErrorMsg$
DefVar $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
DefVar $MsiId$
DefVar $NsisInstallBatch$
DefVar $LogDir$

Set $LogDir$ = "%opsiLogDir%"

include_append "%ScriptPath%\check_nsis_exitcode.opsiscript"

; ----------------------------------------------------------------
Set $SetupType$       = "nsis"
; ----------------------------------------------------------------

; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a seperator
Set $ProductId$       = "firefox-60-0-2-win64-de"
Set $Setupfile$       = "setup.exe"
; the path where we find the product after the installation
Set $InstallDir$      = ""
Set $LicenseRequired$ = "false"
Set $LicensePool$     = "p_" + $ProductId$
Set $MsiId$           = ""
Set $MinimumSpace$    = "4 MB"
; ----------------------------------------------------------------
; ----------------------------------------------------------------

if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
   LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
   isFatalError "No Space"
   ; Stop process and set installation status to failed
else
   comment "Show product picture"
   ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$

   if FileExists("%ScriptPath%\delsub.opsiscript")
      comment "Start uninstall sub section"
      Sub "%ScriptPath%\delsub.opsiscript"
   endif
   
   Message "Installing " + $ProductId$ + " ..."
   
   if $LicenseRequired$ = "true"
      comment "Licensing required, reserve license and get license key"
      Sub_get_licensekey
   endif

   if ($SetupType$ = "nsis")
      Set $NsisInstallBatch$ = "%ScriptPath%\setup.exe -ms /INI=install.ini"
      if not ($InstallDir$ = '')
         Set $NsisInstallBatch$ = $NsisInstallBatch$ + ' /D="' + $InstallDir$ + '"'
      endif
   endif
   
   comment "Start setup program"
   ChangeDirectory "%SCRIPTPATH%"
   ;----------------------------------------------
   Winbatch_install_nsis
   ;----------------------------------------------
   Sub_check_exitcode	
endif


; ----------------------------------------------------------------
; install section
; ----------------------------------------------------------------

[Winbatch_install_nsis]
;NSIS Nullsoft Scriptable Install System 
$NsisInstallBatch$

; ----------------------------------------------------------------


[Sub_get_licensekey]
if opsiLicenseManagementEnabled
   comment "License management is enabled and will be used"

   comment "Trying to get a license key"
   Set $LicenseKey$ = demandLicenseKey ($LicensePool$)
   ; If there is an assignment of exactly one licensepool to the product the following call is possible:
   ; Set $LicenseKey$ = demandLicenseKey ("", $ProductId$)
   ;
   ; If there is an assignment of a license pool to a windows software id, it is possible to use:
   ; DefVar $WindowsSoftwareId$
   ; $WindowsSoftwareId$ = "..."
   ; Set $LicenseKey$ = demandLicenseKey ("", "", $WindowsSoftwareId$)

   DefVar $ServiceErrorClass$
   set $ServiceErrorClass$ = getLastServiceErrorClass
   comment "Error class: " + $ServiceErrorClass$
   
   if $ServiceErrorClass$ = "None"
      comment "Everything fine, we got the license key '" + $LicenseKey$ + "'"
   else
      if $ServiceErrorClass$ = "LicenseConfigurationError"
         LogError "Fatal: license configuration must be corrected"
         LogError getLastServiceErrorMessage
         isFatalError
      else 
         if $ServiceErrorClass$ = "LicenseMissingError"
            LogError "Fatal: required license is not supplied"
            isFatalError
         endif
      endif
   endif
else
   LogError "Fatal: license required, but license management not enabled"
   isFatalError
endif

; ----------------------------------------------------------------
; ----------------------------------------------------------------

In der install.ini steht dann folgendes: (ist auch alles im selben Ordner)

Code: Alles auswählen

[Install]
MaintenanceService=false
InstallDirectoryPath=c:\Program Files\Mozilla Firefox\
Ich hoffe es kommt nicht so rüber, dass ich hier eine Musterlösung haben will bzw, dass andere die Arbeit machen. Ich versuche nur das ganze zu verstehen. Wenigstens für die Firefox Installation, damit ich das Wissen für andere Pakete anwenden kann.
Die ganzen Tipps und Informationen haben auf jeden Fall schon einiges gebracht, da bin ich auch dankbar für. :)

PS: Damit die Firefox Installation überhaupt funktioniert habe ich im Vorfeld das gemacht:
Entpacke die Firefox Installationsdatei mit 7zip und entpacke sie in einen Ordner. In diesem findest Du eine Setup.exe und einen Ordner core.
Öffne die setup.exe mit opsi-setup-detector und erstelle das Verzeichnis. Nun kopierst Du den Ordner core in den Ordner CLIENT_DATA. Danach öffne es mit opsi Packagebuilder (Achtung, es gibt eine neue Version) Packen & installieren; Fertig!
viewtopic.php?t=9643
thomas.besser
Beiträge: 461
Registriert: 09 Sep 2009, 09:40

Re: Benutzerdefinierte Pakete erstellen

Beitrag von thomas.besser »

Schau dir mal https://wiki.mozilla.org/Installer:Comm ... _Arguments an.

Du brauchst die Option "-ms" nicht zu setzen, mit "/INI" wird automatisch silent installiert.

Funktioniert hier mit FF-ESR 52.9 wunderbar.

Gruß
Thomas
MaZzEe
Beiträge: 18
Registriert: 21 Jun 2018, 18:39

Re: Benutzerdefinierte Pakete erstellen

Beitrag von MaZzEe »

Ich habe zwar immer noch keine Ahnung, warum das Script nicht funktioniert, aber habe nun dieses vorgefertigte Script genommen und abgeändert:
wiki/doku.php?id=userspace:firefox

Das klappt nun einwandfrei und installiert den Maintenance Service nicht mit. Zudem scheint das Script auch "sauberer" zu sein, da bei der Deinstallation von dem ersten Script, was ich genutzt habe, jedes mal die Verknüpfung auf dem Desktop und im Startmenü geblieben ist. Auch unter "Programme und Funktionen" war eine defekte Verknüpfung bzw Anzeige noch vorhanden. Na ja, immerhin klappt es nun :D

Vielen Dank für die Hilfe.
Antworten