From 021d1a761a3e49d68dadfc73502843a3b758f9cb Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Sat, 12 May 2012 21:18:37 +0200 Subject: [PATCH 1/3] new support for old versions of package --- .../product-template/CLIENT_DATA/delsub32.ins | 13 +++++++- .../CLIENT_DATA/delsub3264.ins | 30 +++++++++++++++++-- .../product-template/CLIENT_DATA/delsub64.ins | 13 +++++++- .../product-template/CLIENT_DATA/opsi-PN.ini | 11 +++++++ .../product-template/CLIENT_DATA/setup32.ins | 9 +++++- .../CLIENT_DATA/setup3264.ins | 14 +++++++-- .../product-template/CLIENT_DATA/setup64.ins | 7 ++++- .../CLIENT_DATA/uninstall32.ins | 3 ++ .../CLIENT_DATA/uninstall3264.ins | 5 ++++ .../CLIENT_DATA/uninstall64.ins | 3 ++ sample/product-template/builder-product.cfg | 25 +++++++++++++++- 11 files changed, 123 insertions(+), 10 deletions(-) create mode 100644 sample/product-template/CLIENT_DATA/opsi-PN.ini diff --git a/sample/product-template/CLIENT_DATA/delsub32.ins b/sample/product-template/CLIENT_DATA/delsub32.ins index f9bbf36..0f955e8 100644 --- a/sample/product-template/CLIENT_DATA/delsub32.ins +++ b/sample/product-template/CLIENT_DATA/delsub32.ins @@ -4,11 +4,19 @@ ; credits: http://www.opsi.org/credits/ -Set $MsiId$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}' Set $UninstallProgram$ = $InstallDir$ + "\uninstall.exe" +Set $IniFile$ = $InstallDir$ + "\opsi-" + $ProductId$ + ".ini" Message "Uninstalling " + $ProductId$ + " ..." +if FileExists($IniFile$) + Set $MsiIdOld$ = GetValueFromInifile($IniFile$,"X86","MsiId","{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}") + if not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiIdOld$ + "] DisplayName") = "") + comment "Old MSI id " + $MsiIdOld$ + " found in registry, starting msiexec to uninstall old version" + Winbatch_uninstall_msi_old + sub_check_exitcode + endif +endif if FileExists($UninstallProgram$) comment "Uninstall program found, starting uninstall" Winbatch_uninstall @@ -39,6 +47,9 @@ LinkFolder_uninstall ; "$UninstallProgram$" /silent /norestart /SUPPRESSMSGBOXES +[Winbatch_uninstall_msi_old] +msiexec /x $MsiIdOld$ /qb! REBOOT=ReallySuppress + [Winbatch_uninstall_msi] msiexec /x $MsiId$ /qb! REBOOT=ReallySuppress diff --git a/sample/product-template/CLIENT_DATA/delsub3264.ins b/sample/product-template/CLIENT_DATA/delsub3264.ins index be5e544..c3f7f1d 100644 --- a/sample/product-template/CLIENT_DATA/delsub3264.ins +++ b/sample/product-template/CLIENT_DATA/delsub3264.ins @@ -4,15 +4,25 @@ ; credits: http://www.opsi.org/credits/ -Set $MsiId32$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}' Set $UninstallProgram32$ = $InstallDir32$ + "\uninstall.exe" - -Set $MsiId64$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}' Set $UninstallProgram64$ = $InstallDir64$ + "\uninstall.exe" +Set $IniFile32$ = $InstallDir32$ + "\opsi-" + $ProductId$ + ".ini" +Set $IniFile64$ = $InstallDir64$ + "\opsi-" + $ProductId$ + ".ini" + + if (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only") Message "Uninstalling " + $ProductId$ + " 32 Bit..." + if FileExists($IniFile32$) + Set $MsiIdOld32$ = GetValueFromInifile($IniFile32$,"X86","MsiId32","{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}") + if not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiIdOld32$ + "] DisplayName") = "") + comment "Old MSI id " + $MsiIdOld32$ + " found in registry, starting msiexec to uninstall old version" + Winbatch_uninstall_msi_old_32 + sub_check_exitcode + endif + endif + if FileExists($UninstallProgram32$) comment "Uninstall program found, starting uninstall" Winbatch_uninstall_32 @@ -34,6 +44,14 @@ endif if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only")) Message "Uninstalling " + $ProductId$ + " 64 Bit..." + if FileExists($IniFile64$) + Set $MsiIdOld64$ = GetValueFromInifile($IniFile64$,"X86_64","MsiId64","{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}") + if not (GetRegistryStringValue64("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiIdOld64$ + "] DisplayName") = "") + comment "Old MSI id " + $MsiIdOld64$ + " found in registry, starting msiexec to uninstall old version" + Winbatch_uninstall_msi_old_64 + sub_check_exitcode + endif + endif if FileExists($UninstallProgram64$) comment "Uninstall program found, starting uninstall" Winbatch_uninstall_64 @@ -65,6 +83,9 @@ LinkFolder_uninstall ; "$UninstallProgram32$" /silent /norestart /SUPPRESSMSGBOXES +[Winbatch_uninstall_msi_old_32] +msiexec /x $MsiIdOld32$ /qb! REBOOT=ReallySuppress + [Winbatch_uninstall_msi_32] msiexec /x $MsiId32$ /qb! REBOOT=ReallySuppress @@ -83,6 +104,9 @@ msiexec /x $MsiId32$ /qb! REBOOT=ReallySuppress ; "$UninstallProgram64$" /silent /norestart /SUPPRESSMSGBOXES +[Winbatch_uninstall_msi_old_64] +msiexec /x $MsiIdOld64$ /qb! REBOOT=ReallySuppress + [Winbatch_uninstall_msi_64] msiexec /x $MsiId64$ /qb! REBOOT=ReallySuppress diff --git a/sample/product-template/CLIENT_DATA/delsub64.ins b/sample/product-template/CLIENT_DATA/delsub64.ins index a633255..894f772 100644 --- a/sample/product-template/CLIENT_DATA/delsub64.ins +++ b/sample/product-template/CLIENT_DATA/delsub64.ins @@ -4,11 +4,19 @@ ; credits: http://www.opsi.org/credits/ -Set $MsiId$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}' Set $UninstallProgram$ = $InstallDir$ + "\uninstall.exe" +Set $IniFile$ = $InstallDir$ + "\opsi-" + $ProductId$ + ".ini" Message "Uninstalling " + $ProductId$ + " ..." +if FileExists($IniFile$) + Set $MsiIdOld$ = GetValueFromInifile($IniFile$,"X86_64","MsiId","{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}") + if not (GetRegistryStringValue64("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiIdOld$ + "] DisplayName") = "") + comment "Old MSI id " + $MsiIdOld$ + " found in registry, starting msiexec to uninstall old version" + Winbatch_uninstall_msi_old + sub_check_exitcode + endif +endif if FileExists($UninstallProgram$) comment "Uninstall program found, starting uninstall" Winbatch_uninstall @@ -39,6 +47,9 @@ LinkFolder_uninstall ; "$UninstallProgram$" /silent /norestart /SUPPRESSMSGBOXES +[Winbatch_uninstall_msi_old] +msiexec /x $MsiIdOld$ /qb! REBOOT=ReallySuppress + [Winbatch_uninstall_msi] msiexec /x $MsiId$ /qb! REBOOT=ReallySuppress diff --git a/sample/product-template/CLIENT_DATA/opsi-PN.ini b/sample/product-template/CLIENT_DATA/opsi-PN.ini new file mode 100644 index 0000000..978f02e --- /dev/null +++ b/sample/product-template/CLIENT_DATA/opsi-PN.ini @@ -0,0 +1,11 @@ +[X86] +MsiId={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} +MsiId32={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} + +[X86_64] +MsiId={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} +MsiId64={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} + +[COMMON] +PN=name +VERSION=version diff --git a/sample/product-template/CLIENT_DATA/setup32.ins b/sample/product-template/CLIENT_DATA/setup32.ins index 3333fbd..43d4214 100644 --- a/sample/product-template/CLIENT_DATA/setup32.ins +++ b/sample/product-template/CLIENT_DATA/setup32.ins @@ -6,8 +6,11 @@ [Actions] requiredWinstVersion >= "4.10.8.6" -DefVar $MsiId$ +; DefVar $MsiId$ +DefVar $MsiIdOld$ DefVar $UninstallProgram$ +DefVar $IniFile$ +DefVar $IniCfgFile$ DefVar $LogDir$ DefVar $ProductId$ DefVar $MinimumSpace$ @@ -39,6 +42,7 @@ Set $ProductId$ = "opsi-template" Set $MinimumSpace$ = "1 MB" ; the path were we find the product after the installation Set $InstallDir$ = "%ProgramFiles32Dir%\" +Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini" Set $LicenseRequired$ = "false" Set $LicensePool$ = "p_" + $ProductId$ ; ---------------------------------------------------------------- @@ -114,6 +118,9 @@ endif ; "%ScriptPath%\setup.exe" /sp- /silent /norestart /SUPPRESSMSGBOXES [Files_install] +; copy the ini file to the InstallDir +copy "$IniCfgFile$" "$InstallDir$" + ; Example of recursively copying some files into the installation directory: ; ; copy -s "%ScriptPath%\files\*.*" "$InstallDir$" diff --git a/sample/product-template/CLIENT_DATA/setup3264.ins b/sample/product-template/CLIENT_DATA/setup3264.ins index 7ff0f3e..6c9d30e 100644 --- a/sample/product-template/CLIENT_DATA/setup3264.ins +++ b/sample/product-template/CLIENT_DATA/setup3264.ins @@ -6,10 +6,15 @@ [Actions] requiredWinstVersion >= "4.10.8.6" -DefVar $MsiId32$ +; DefVar $MsiId32$ +DefVar $MsiIdOld32$ DefVar $UninstallProgram32$ -DefVar $MsiId64$ +DefVar $IniFile32$ +; DefVar $MsiId64$ +DefVar $MsiIdOld64$ DefVar $UninstallProgram64$ +DefVar $IniFile64$ +DefVar $IniCfgFile$ DefVar $LogDir$ DefVar $ProductId$ DefVar $MinimumSpace$ @@ -49,6 +54,7 @@ Set $MinimumSpace$ = "1 MB" ; the path were we find the product after the installation Set $InstallDir32$ = "%ProgramFiles32Dir%\" Set $InstallDir64$ = "%ProgramFiles64Dir%\" +Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini" Set $LicenseRequired$ = "false" Set $LicensePool$ = "p_" + $ProductId$ ; ---------------------------------------------------------------- @@ -128,6 +134,8 @@ endif ; "%ScriptPath%\setup.exe" /sp- /silent /norestart /SUPPRESSMSGBOXES [Files_install_32] +copy "$IniCfgFile$" "$InstallDir32$" + ; Example of recursively copying some files into the installation directory: ; ; copy -s "%ScriptPath%\files\*.*" "$InstallDir32$" @@ -159,6 +167,8 @@ endif ; "%ScriptPath%\setup.exe" /sp- /silent /norestart /SUPPRESSMSGBOXES [Files_install_64] +copy "$IniCfgFile$" "$InstallDir64$" + ; Example of recursively copying some files into the installation directory: ; ; copy -s "%ScriptPath%\files\*.*" "$InstallDir64$" diff --git a/sample/product-template/CLIENT_DATA/setup64.ins b/sample/product-template/CLIENT_DATA/setup64.ins index 045cf7f..d4ebde1 100644 --- a/sample/product-template/CLIENT_DATA/setup64.ins +++ b/sample/product-template/CLIENT_DATA/setup64.ins @@ -6,9 +6,11 @@ [Actions] requiredWinstVersion >= "4.10.8.6" -DefVar $MsiId$ +; DefVar $MsiId$ DefVar $UninstallProgram$ DefVar $LogDir$ +DefVar $IniFile$ +DefVar $IniCfgFile$ DefVar $ProductId$ DefVar $MinimumSpace$ DefVar $InstallDir$ @@ -39,6 +41,7 @@ Set $ProductId$ = "opsi-template" Set $MinimumSpace$ = "1 MB" ; the path were we find the product after the installation Set $InstallDir$ = "%ProgramFiles64Dir%\" +Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini" Set $LicenseRequired$ = "false" Set $LicensePool$ = "p_" + $ProductId$ ; ---------------------------------------------------------------- @@ -114,6 +117,8 @@ endif ; "%ScriptPath%\setup.exe" /sp- /silent /norestart /SUPPRESSMSGBOXES [Files_install] +copy "$IniCfgFile$" "$InstallDir$" + ; Example of recursively copying some files into the installation directory: ; ; copy -s "%ScriptPath%\files\*.*" "$InstallDir$" diff --git a/sample/product-template/CLIENT_DATA/uninstall32.ins b/sample/product-template/CLIENT_DATA/uninstall32.ins index ede4908..6d2ef5d 100644 --- a/sample/product-template/CLIENT_DATA/uninstall32.ins +++ b/sample/product-template/CLIENT_DATA/uninstall32.ins @@ -7,8 +7,11 @@ requiredWinstVersion >= "4.10.8.6" DefVar $MsiId$ +DefVar $MsiIdOld$ DefVar $UninstallProgram$ DefVar $LogDir$ +DefVar $IniFile$ +DefVar $IniCfgFile$ DefVar $ExitCode$ DefVar $ProductId$ DefVar $InstallDir$ diff --git a/sample/product-template/CLIENT_DATA/uninstall3264.ins b/sample/product-template/CLIENT_DATA/uninstall3264.ins index 4dec196..8ddb30d 100644 --- a/sample/product-template/CLIENT_DATA/uninstall3264.ins +++ b/sample/product-template/CLIENT_DATA/uninstall3264.ins @@ -7,9 +7,14 @@ requiredWinstVersion >= "4.10.8.6" DefVar $MsiId32$ +DefVar $MsiIdOld32$ DefVar $UninstallProgram32$ +DefVar $IniFile32$ DefVar $MsiId64$ +DefVar $MsiIdOld64$ DefVar $UninstallProgram64$ +DefVar $IniFile64$ +DefVar $IniCfgFile$ DefVar $LogDir$ DefVar $ExitCode$ DefVar $ProductId$ diff --git a/sample/product-template/CLIENT_DATA/uninstall64.ins b/sample/product-template/CLIENT_DATA/uninstall64.ins index 0eb5f4e..7c8e390 100644 --- a/sample/product-template/CLIENT_DATA/uninstall64.ins +++ b/sample/product-template/CLIENT_DATA/uninstall64.ins @@ -7,7 +7,10 @@ requiredWinstVersion >= "4.10.8.6" DefVar $MsiId$ +DefVar $MsiIdOld$ DefVar $UninstallProgram$ +DefVar $IniFile$ +DefVar $IniCfgFile$ DefVar $LogDir$ DefVar $ExitCode$ DefVar $ProductId$ diff --git a/sample/product-template/builder-product.cfg b/sample/product-template/builder-product.cfg index 7501b12..1e9ff4f 100644 --- a/sample/product-template/builder-product.cfg +++ b/sample/product-template/builder-product.cfg @@ -103,13 +103,36 @@ DL_WINST_NAME[2]=itWESS64 DL_FILE[3]="AiO-Runtimes-x86-v1.7.1.7z" DL_SOURCE[3]="http://ftp.computerbase.de/dl-758/weJMhoTGCTbFI5mzRnMlAg/1327825564/AiO-Runtimes-x86-v1.7.1.7z" DL_ARCH[3]="X86" -DL_DOWNLOADER="wget" +DL_DOWNLOADER[3]="wget" DL_EXTRACT_FORMAT[3]="unzip" DL_EXTACT_TO[3]="office" # File array index for the image showing while installing the program ICON_DL_INDEX=0 +######################### +# Setup required WINST variables +# which will be injected to the *.ins files (replaces token @@BUILDER_VARIABLES@@ ) +# +# The following tokens inside the WINST_VALUE will be replaced dynamically +# +# if your package is not msi based then you can remove the msi part from *.ins files and drop this variables compleatly +# !!! These Variables are requred if you remove them in this cfg file you will get error's about not defined Variables !!! +# +######################### +# if the packaga just supports X86 OR X86_64 (setupXX.ins delsubXX.ins uninstallXX.ins) then you have to just specify one MsiId + +WINST_NAME[0]="MsiId" +WINST_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" + +# if the package supports X86 AND X86_64 (setup3264.ins delsub3264.ins uninstall3264.ins) then you have to specify 2 MsiId's + +WINST_NAME[0]="MsiId32" +WINST_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" + +WINST_NAME[1]="MsiId64" +WINST_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" + ######################### # Setup additional, custom WINST variables # which will be injected to the *.ins files (replaces token @@BUILDER_VARIABLES@@ ) From 182bf06e0d96f84bcdb7d0a584f06b93cd61c2e4 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Sat, 12 May 2012 21:54:49 +0200 Subject: [PATCH 2/3] correct small prblem in uninstall ins samples --- sample/product-template/CLIENT_DATA/uninstall32.ins | 2 +- sample/product-template/CLIENT_DATA/uninstall3264.ins | 4 ++-- sample/product-template/CLIENT_DATA/uninstall64.ins | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sample/product-template/CLIENT_DATA/uninstall32.ins b/sample/product-template/CLIENT_DATA/uninstall32.ins index 6d2ef5d..97e01be 100644 --- a/sample/product-template/CLIENT_DATA/uninstall32.ins +++ b/sample/product-template/CLIENT_DATA/uninstall32.ins @@ -6,7 +6,7 @@ [Actions] requiredWinstVersion >= "4.10.8.6" -DefVar $MsiId$ +; DefVar $MsiId$ DefVar $MsiIdOld$ DefVar $UninstallProgram$ DefVar $LogDir$ diff --git a/sample/product-template/CLIENT_DATA/uninstall3264.ins b/sample/product-template/CLIENT_DATA/uninstall3264.ins index 8ddb30d..2396024 100644 --- a/sample/product-template/CLIENT_DATA/uninstall3264.ins +++ b/sample/product-template/CLIENT_DATA/uninstall3264.ins @@ -6,11 +6,11 @@ [Actions] requiredWinstVersion >= "4.10.8.6" -DefVar $MsiId32$ +; DefVar $MsiId32$ DefVar $MsiIdOld32$ DefVar $UninstallProgram32$ DefVar $IniFile32$ -DefVar $MsiId64$ +; DefVar $MsiId64$ DefVar $MsiIdOld64$ DefVar $UninstallProgram64$ DefVar $IniFile64$ diff --git a/sample/product-template/CLIENT_DATA/uninstall64.ins b/sample/product-template/CLIENT_DATA/uninstall64.ins index 7c8e390..e64e576 100644 --- a/sample/product-template/CLIENT_DATA/uninstall64.ins +++ b/sample/product-template/CLIENT_DATA/uninstall64.ins @@ -6,7 +6,7 @@ [Actions] requiredWinstVersion >= "4.10.8.6" -DefVar $MsiId$ +; DefVar $MsiId$ DefVar $MsiIdOld$ DefVar $UninstallProgram$ DefVar $IniFile$ From 1f212c3b4995526e85467636be82316a288421e8 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Wed, 16 May 2012 06:32:07 +0200 Subject: [PATCH 3/3] add targz and tarbz2 support --- lib/builder-targets.sh | 1 + lib/builder-utils.sh | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lib/builder-targets.sh b/lib/builder-targets.sh index 3ef979f..54e2efb 100644 --- a/lib/builder-targets.sh +++ b/lib/builder-targets.sh @@ -16,6 +16,7 @@ builder_config() { CMD_unrar="`which unrar`" ; builder_check_error "Command 'unrar' not installed" CMD_zip="`which zip`" ; builder_check_error "Command 'zip' not installed" CMD_lha="`which lha`" ; builder_check_error "Command 'lha' not installed" + CMD_tar="`which tar`" ; builder_check_error "Command 'tar' not installed" CMD_unix2dos="`which unix2dos`" ; builder_check_error "Command 'unix2dos' not installed" CMD_identify="`which identify`" ; builder_check_error "Command 'identify' (ImageMagick) not installed" CMD_zsyncmake="`which zsyncmake`" ; builder_check_error "Command 'zsyncmake' not installed" diff --git a/lib/builder-utils.sh b/lib/builder-utils.sh index 6ac35ea..a0dc093 100644 --- a/lib/builder-utils.sh +++ b/lib/builder-utils.sh @@ -64,6 +64,10 @@ function process_file() { $CMD_unrar x $src $dst elif [ "$format" = "lha" ]; then $CMD_lha x -w=$dst $src + elif [ "$format" = "targz" ]; then + $CMD_tar xzvf $src -C $dst + elif [ "$format" = "tarbz2" ]; then + $CMD_tar xjvf $src -C $dst else fatal_error "Unknown compression format: $format" fi