; 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/ [Actions] requiredWinstVersion >= "4.10.8.6" DefVar $MsiId32$ DefVar $UninstallProgram32$ DefVar $MsiId64$ DefVar $UninstallProgram64$ DefVar $LogDir$ DefVar $ProductId$ DefVar $ProductVer$ DefVar $MinimumSpace$ DefVar $InstallDir$ DefVar $InstallDir32$ DefVar $InstallDir64$ DefVar $InstallDirOpsi$ DefVar $ExitCode$ DefVar $LicenseRequired$ DefVar $LicenseKey$ DefVar $LicensePool$ DefVar $INST_SystemType$ DefVar $INST_NTVersion$ DefVar $INST_architecture$ DefVar $catalog$ DefVar $filedaemon_full_name$ DefVar $filedaemon_full_password$ DefVar $filedaemon_monitor_name$ DefVar $filedaemon_monitor_password$ DefVar $director_name$ DefVar $director_address$ DefVar $director_password$ Set $INST_SystemType$ = GetSystemType set $INST_NTVersion$ = GetMsVersionInfo set $INST_architecture$ = GetProductProperty("install_architecture","system specific") set $catalog$ = GetProductProperty( "catalog", "MyCatalog" ) set $filedaemon_full_name$ = GetProductProperty( "filedaemon_full_name", "" ) set $filedaemon_full_password$ = GetProductProperty( "filedaemon_full_password", "filedaemon_full_password" ) set $filedaemon_monitor_name$ = GetProductProperty( "filedaemon_monitor_name", "" ) set $filedaemon_monitor_password$ = GetProductProperty( "filedaemon_monitor_password", "filedaemon_monitor_password" ) set $director_name$ = GetProductProperty( "director_name", "director_name" ) set $director_address$ = GetProductProperty( "director_address", "director_address.example.com" ) set $director_password$ = GetProductProperty( "director_password", "director_password" ) Set $LogDir$ = "%SystemDrive%\tmp" ; ---------------------------------------------------------------- ; - Please edit the following values - ; ---------------------------------------------------------------- ;$ProductId$ should be the name of the product in opsi ; therefore please: only lower letters, no umlauts, ; no white space use '-' as a seperator Set $ProductId$ = "bacula" Set $ProductVer$ = "5.2.10" Set $MinimumSpace$ = "30 MB" ; the path were we find the product after the installation Set $InstallDir$ = "%ProgramFilesDir%\Bacula" Set $InstallDir32$ = "%ProgramFiles32Dir%\Bacula" Set $InstallDir64$ = "%ProgramFiles64Dir%\Bacula" ; opsi requires path seperation by "\\" instead of "\" Set $InstallDirOpsi$ = composeString( splitString ( $InstallDir$, "\"), "\\" ) Set $LicenseRequired$ = "false" Set $LicensePool$ = "p_" + $ProductId$ ; ---------------------------------------------------------------- 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 endif comment "Show product picture" ShowBitmap "%ScriptPath%\logo.png" $ProductId$ if FileExists("%ScriptPath%\delsub3264.ins") comment "Start uninstall sub section" Sub "%ScriptPath%\delsub3264.ins" endif ;if $LicenseRequired$ = "true" ; comment "Licensing required, reserve license and get license key" ; Sub_get_licensekey ;endif comment "installing" if $filedaemon_full_name$ = "" set $filedaemon_full_name$ = "%HostID%-fd" opsiservicecall_set_product_property_filedaemon_full_name endif if $filedaemon_monitor_name$ = "" set $filedaemon_monitor_name$ = "%HostID%-mon" opsiservicecall_set_product_property_filedaemon_monitor_name endif if (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only") Message "Installing " + $ProductId$ + " 32 Bit..." comment "Start setup program" Winbatch_install_32 Sub_check_exitcode ;comment "Copy files" ;Files_install_32 /32Bit ;comment "Patch Registry" ;Registry_install /32Bit ;comment "Create shortcuts" ;LinkFolder_install endif if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only")) Message "Installing " + $ProductId$ + " 64 Bit..." comment "Start setup program" Winbatch_install_64 Sub_check_exitcode ;comment "Copy files" ;Files_install_64 /64Bit ;comment "Patch Registry" ;Registry_install /64Bit ;comment "Create shortcuts" ;LinkFolder_install endif ;Patches_bacula_conf $InstallDir$+"\bacula-fd.conf" DosBatch_bacula-fd.conf DosBatch_bconsole.conf DosBatch_bat.conf DosBatch_tray_monitor.conf if ($INST_NTVersion$ >= "6.0") DosShell_open_firewall_nt6 else DosShell_open_firewall endif ; start FD immediatly, not only after reboot DosBatch_start_bacula-fd ; ; end ; ; winbatch installer: ; /S silent installl ; /D destination path ; use this, otherwise it installs to "program files" for all languages. ; don't use " around argument, otherwise argument is ignored [Winbatch_install_32] "%ScriptPath%\data\bacula-win32-$ProductVer$.exe" /S /D=$InstallDir32$ [Winbatch_install_64] "%ScriptPath%\data\bacula-win64-$ProductVer$.exe" /S /D=$InstallDir64$ [DosBatch_bacula-fd.conf] ( echo # echo # managed by opsi echo # echo # "Global" File daemon configuration specifications echo # echo FileDaemon { # this is me echo Name = "$filedaemon_full_name$" echo FDport = 9102 # where we listen for the director echo WorkingDirectory = "$InstallDirOpsi$\\working" echo Pid Directory = "$InstallDirOpsi$\\working" echo Plugin Directory = "$InstallDirOpsi$\\plugins" echo Maximum Concurrent Jobs = 10 echo } ;echo echo # echo # List Directors who are permitted to contact this File daemon echo # echo Director { echo Name = "$director_name$" echo Password = "$filedaemon_full_password$" echo } ;echo echo # echo # Restricted Director, used by tray-monitor to get the echo # status of the file daemon echo # echo Director { echo Name = "$filedaemon_monitor_name$" echo Password = "$filedaemon_monitor_password$" echo Monitor = yes echo } ;echo echo # Send all messages except skipped files back to Director echo Messages { echo Name = Standard echo director = $director_name$ = all, !skipped, !restored echo } ) > $InstallDir$/bacula-fd.conf [DosBatch_bconsole.conf] ( echo # echo # managed by opsi echo # echo Director { echo Name = "$director_name$" echo Address = "$director_address$" echo DIRport = 9101 echo Password = "$director_password$" echo } ) > $InstallDir$/bconsole.conf [DosBatch_bat.conf] ( echo # echo # managed by opsi echo # echo Director { echo Name = "$director_name$" echo Address = "$director_address$" echo DIRport = 9101 echo Password = "$director_password$" echo } ) > $InstallDir$/bat.conf [DosBatch_tray-monitor.conf] ( echo # echo # managed by opsi echo # echo Monitor { echo Name = "$filedaemon_monitor_name$" echo Password = "$filedaemon_monitor_password$" echo RefreshInterval = 30 seconds echo } echo echo Client { echo Name = "$filedaemon_full_name$" echo Address = localhost echo FDport = 9102 echo Password = "$filedaemon_monitor_password$" echo } ) > $InstallDir$/tray-monitor.conf [DosBatch_open_firewall] netsh firewall add portopening protocol=TCP port=9102 name=bacula-fd-port [DosBatch_open_firewall_nt6] netsh advfirewall firewall add rule name="bacula-fd-port" dir=in action=allow protocol=TCP localport=9102 [DosBatch_start_bacula-fd] net start bacula-fd [opsiservicecall_set_product_property_filedaemon_full_name] "method": "setProductProperty", "params": [ 'bacula', 'filedaemon_full_name', '$filedaemon_full_name$', '%HostID%' ] [opsiservicecall_set_product_property_filedaemon_monitor_name] "method": "setProductProperty", "params": [ 'bacula', 'filedaemon_monitor_name', '$filedaemon_monitor_name$', '%HostID%' ] [Files_install_32] ; Example of recursively copying some files into the installation directory: ; ; copy -s "%ScriptPath%\files\*.*" "$InstallDir32$" [Files_install_64] ; Example of recursively copying some files into the installation directory: ; ; copy -s "%ScriptPath%\files\*.*" "$InstallDir64$" [Registry_install] ; Example of setting some values of an registry key: ; ; openkey [HKEY_LOCAL_MACHINE\Software\$ProductId$] ; set "name1" = "some string value" ; set "name2" = REG_DWORD:0001 ; set "name3" = REG_BINARY:00 af 99 cd [LinkFolder_install] ; Example of deleting a folder from AllUsers startmenu: ; ; set_basefolder common_programs ; delete_subfolder $ProductId$ ; ; Example of creating an shortcut to the installed exe in AllUsers startmenu: ; ; set_basefolder common_programs ; set_subfolder $ProductId$ ; ; set_link ; name: $ProductId$ ; target: ; parameters: ; working_dir: $InstallDir$ ; icon_file: ; icon_index: ; end_link ; ; Example of creating an shortcut to the installed exe on AllUsers desktop: ; ; set_basefolder common_desktopdirectory ; set_subfolder "" ; ; set_link ; name: $ProductId$ ; target: ; parameters: ; working_dir: $InstallDir$ ; icon_file: ; icon_index: 2 ; end_link [Sub_get_licensekey] 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 [Sub_check_exitcode] comment "Test for installation success via exit code" set $ExitCode$ = getLastExitCode ; informations to exit codes see ; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx ; http://msdn.microsoft.com/en-us/library/aa368542.aspx if ($ExitCode$ = "0") comment "Looks good: setup program gives exitcode zero" else comment "Setup program gives a exitcode unequal zero: " + $ExitCode$ if ($ExitCode$ = "1605") comment "ERROR_UNKNOWN_PRODUCT 1605 This action is only valid for products that are currently installed." comment "Uninstall of a not installed product failed - no problem" else if ($ExitCode$ = "1641") comment "looks good: setup program gives exitcode 1641" comment "ERROR_SUCCESS_REBOOT_INITIATED 1641 The installer has initiated a restart. This message is indicative of a success." else if ($ExitCode$ = "3010") comment "looks good: setup program gives exitcode 3010" comment "ERROR_SUCCESS_REBOOT_REQUIRED 3010 A restart is required to complete the install. This message is indicative of a success." else logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$ isFatalError endif endif endif endif