From e133ffd77cb7f5060fe4eba5a868eac91de3b682 Mon Sep 17 00:00:00 2001 From: Dennis Trinks Date: Thu, 21 Jun 2012 15:55:25 +0200 Subject: [PATCH] exception handling script copy --- CLIENT_DATA/delsub32_inact.ins | 95 ++++++++++++++++++++++++ CLIENT_DATA/set_2nd_ip.vbs | 22 ++++++ CLIENT_DATA/setup32.ins | 107 +++++++++++++++++++++++++++ CLIENT_DATA/uninstall32.ins | 68 ++++++++++++++++++ OPSI/changelog.txt | 2 + OPSI/control | 40 +++++++++++ OPSI/postinst | 9 +++ OPSI/preinst | 9 +++ builder-product.cfg | 127 +++------------------------------ windows.2nd-ip.sha1sum | 1 + 10 files changed, 361 insertions(+), 119 deletions(-) create mode 100644 CLIENT_DATA/delsub32_inact.ins create mode 100644 CLIENT_DATA/set_2nd_ip.vbs create mode 100644 CLIENT_DATA/setup32.ins create mode 100644 CLIENT_DATA/uninstall32.ins create mode 100644 OPSI/changelog.txt create mode 100644 OPSI/control create mode 100644 OPSI/postinst create mode 100644 OPSI/preinst create mode 100644 windows.2nd-ip.sha1sum diff --git a/CLIENT_DATA/delsub32_inact.ins b/CLIENT_DATA/delsub32_inact.ins new file mode 100644 index 0000000..f9bbf36 --- /dev/null +++ b/CLIENT_DATA/delsub32_inact.ins @@ -0,0 +1,95 @@ +; Copyright (c) uib gmbh (www.uib.de) +; This sourcecode is owned by uib gmbh +; and published under the Terms of the General Public License. +; credits: http://www.opsi.org/credits/ + + +Set $MsiId$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}' +Set $UninstallProgram$ = $InstallDir$ + "\uninstall.exe" + +Message "Uninstalling " + $ProductId$ + " ..." + +if FileExists($UninstallProgram$) + comment "Uninstall program found, starting uninstall" + Winbatch_uninstall + sub_check_exitcode +endif +if not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId$ + "] DisplayName") = "") + comment "MSI id " + $MsiId$ + " found in registry, starting msiexec to uninstall" + Winbatch_uninstall_msi + sub_check_exitcode +endif + +comment "Delete files" +Files_uninstall /32Bit + +comment "Cleanup registry" +Registry_uninstall /32Bit + +comment "Delete program shortcuts" +LinkFolder_uninstall + +[Winbatch_uninstall] +; Choose one of the following examples as basis for program uninstall +; +; === Nullsoft Scriptable Install System ================================================================ +; "$UninstallProgram$" /S +; +; === Inno Setup ======================================================================================== +; "$UninstallProgram$" /silent /norestart /SUPPRESSMSGBOXES + + +[Winbatch_uninstall_msi] +msiexec /x $MsiId$ /qb! REBOOT=ReallySuppress + +[Files_uninstall] +; Example for recursively deleting the installation directory (don't forget the trailing backslash): +; +; delete -sf "$InstallDir$\" + +[Registry_uninstall] +; Example of deleting a registry key: +; +; deletekey [HKEY_LOCAL_MACHINE\Software\$ProductId$] + +[LinkFolder_uninstall] +; Example of deleting a folder from AllUsers startmenu: +; +; set_basefolder common_programs +; delete_subfolder $ProductId$ +; +; Example of deleting a shortcut from AllUsers desktop: +; +; set_basefolder common_desktopdirectory +; set_subfolder "" +; delete_element $ProductId$ + +[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 + diff --git a/CLIENT_DATA/set_2nd_ip.vbs b/CLIENT_DATA/set_2nd_ip.vbs new file mode 100644 index 0000000..04f6765 --- /dev/null +++ b/CLIENT_DATA/set_2nd_ip.vbs @@ -0,0 +1,22 @@ +On Error Resume Next +Const HKEY_LOCAL_MACHINE = &H80000002 + +IParrData = Array("0.0.0.0", Wscript.Arguments(0)) +SubnetarrData = Array("0.0.0.0", Wscript.Arguments(1)) +strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" + +strComputer = "." + +Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ +& strComputer & "\root\default:StdRegProv") + +Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") +Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter where NetConnectionStatus = 2 AND Name <> 'TAP-Win32 Adapter V9'",,48) +For Each objItem in colItems + Set colItems2 = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where index = "&objItem.index,,48) + For Each objItem2 in colItems2 + strKeyPath = strKeyPath &"\"& objItem2.SettingID + objWMI.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,"IPAddress",IParrData + objWMI.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,"SubnetMask",SubnetarrData + next +Next \ No newline at end of file diff --git a/CLIENT_DATA/setup32.ins b/CLIENT_DATA/setup32.ins new file mode 100644 index 0000000..7759b7d --- /dev/null +++ b/CLIENT_DATA/setup32.ins @@ -0,0 +1,107 @@ +; 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.10.8.6" + +DefVar $local_ip_addr2$ +DefVar $local_netmask2$ +DefVar $MsiId$ +DefVar $UninstallProgram$ +DefVar $LogDir$ +DefVar $ProductId$ +DefVar $MinimumSpace$ +DefVar $InstallDir$ +DefVar $ExitCode$ +DefVar $LicenseRequired$ +DefVar $LicenseKey$ +DefVar $LicensePool$ + +Set $LogDir$ = "%SystemDrive%\tmp" +Set $local_ip_addr2$ = GetProductProperty("local-addr2.ip","values") + if not ($local_ip_addr2$ = "") + Set $local_netmask2$ = GetProductProperty("local-addr2.netmask","values") + endif + +; The token BUILDER_VARIABLES will be replaced by opsi-builder.sh +; and adds the following variables: +; from builder-product.cfg : all variables definded by attribute WINST[index] +; from builder-product.cfg : VENDOR PN VERSION RELEASE PRIORITY ADVICE TYPE +; from opsi-builder.cfg : CREATOR_TAG CREATOR_NAME CREATOR_EMAIL +; auto generated winst-variables +; $IconFile$: path to product picture +; +@@BUILDER_VARIABLES@@ + +; ---------------------------------------------------------------- +; - 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$ = "windows.2nd-ip" +Set $MinimumSpace$ = "1 MB" +; the path were we find the product after the installation +Set $InstallDir$ = "%ProgramFiles32Dir%\" +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 +else + comment "Show product picture" + ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$ + + if FileExists("%ScriptPath%\delsub32.ins") + comment "Start uninstall sub section" + Sub "%ScriptPath%\delsub32.ins" + endif + + Message "Installing " + $ProductId$ + " ..." + + if $LicenseRequired$ = "true" + comment "Licensing required, reserve license and get license key" + Sub_get_licensekey + endif + + if FileExists("%SystemDrive%\tmp\set_2nd_ip.vbs") + DosInAnIcon_delvbs + EndIf + + comment "Copy files" + Files_install /32Bit + + if not (FileExists("%SystemDrive%\tmp\set_2nd_ip.vbs")) + isFatalError + Endif + + comment "Start setup program" + Winbatch_install + Sub_check_exitcode + + comment "Reboot" + ExitWindows /Reboot +endif + +[DosInAnIcon_delvbs] +del "%SystemDrive%\tmp\set_2nd_ip.vbs" + +[Files_install] +copy "%ScriptPath%\set_2nd_ip.vbs" %SystemDrive%\tmp\ + +[Winbatch_install] +; Choose one of the following examples as basis for your installation +; You can use $LicenseKey$ var to pass a license key to the installer +; +; === Nullsoft Scriptable Install System ================================================================ + +if not ($local_ip_addr2$ = "") + %SystemDrive%\tmp\set_2nd_ip.vbs $local_ip_addr2$ $local_netmask2$ +endif + + diff --git a/CLIENT_DATA/uninstall32.ins b/CLIENT_DATA/uninstall32.ins new file mode 100644 index 0000000..ede4908 --- /dev/null +++ b/CLIENT_DATA/uninstall32.ins @@ -0,0 +1,68 @@ +; Copyright (c) uib gmbh (www.uib.de) +; This sourcecode is owned by uib gmbh +; and published under the Terms of the General Public License. +; credits: http://www.opsi.org/credits/ + +[Actions] +requiredWinstVersion >= "4.10.8.6" + +DefVar $MsiId$ +DefVar $UninstallProgram$ +DefVar $LogDir$ +DefVar $ExitCode$ +DefVar $ProductId$ +DefVar $InstallDir$ +DefVar $LicenseRequired$ +DefVar $LicensePool$ + +Set $LogDir$ = "%SystemDrive%\tmp" + +; The token BUILDER_VARIABLES will be replaced by opsi-builder.sh +; and adds the following variables: +; from builder-product.cfg : all variables definded by attribute WINST[index] +; from builder-product.cfg : VENDOR PN VERSION RELEASE PRIORITY ADVICE TYPE +; from opsi-builder.cfg : CREATOR_TAG CREATOR_NAME CREATOR_EMAIL +; auto generated winst-variables +; $IconFile$: path to product picture +; +@@BUILDER_VARIABLES@@ + +; ---------------------------------------------------------------- +; - Please edit the following values - +; ---------------------------------------------------------------- +Set $ProductId$ = "opsi-template" +Set $InstallDir$ = "%ProgramFiles32Dir%\" +Set $LicenseRequired$ = "false" +Set $LicensePool$ = "p_" + $ProductId$ +; ---------------------------------------------------------------- + + +comment "Show product picture" +ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$ + +Message "Uninstalling " + $ProductId$ + " ..." + +if FileExists("%ScriptPath%\delsub32.ins") + comment "Start uninstall sub section" + Sub "%ScriptPath%\delsub32.ins" +endif + +if $LicenseRequired$ = "true" + comment "Licensing required, free license used" + Sub_free_license +endif + +[Sub_free_license] +comment "License management is enabled and will be used" + +comment "Trying to free license used for the product" +DefVar $result$ +Set $result$ = FreeLicense($LicensePool$) +; If there is an assignment of a license pool to the product, it is possible to use +; Set $result$ = FreeLicense("", $ProductId$) +; +; If there is an assignment of a license pool to a windows software id, it is possible to use +; DefVar $WindowsSoftwareId$ +; $WindowsSoftwareId$ = "..." +; set $result$ = FreeLicense("", "", $WindowsSoftwareId$) + diff --git a/OPSI/changelog.txt b/OPSI/changelog.txt new file mode 100644 index 0000000..bc69317 --- /dev/null +++ b/OPSI/changelog.txt @@ -0,0 +1,2 @@ +Don't add cahngelog entries here! +It get autogenerated by the opsi-builder.sh \ No newline at end of file diff --git a/OPSI/control b/OPSI/control new file mode 100644 index 0000000..6c60c79 --- /dev/null +++ b/OPSI/control @@ -0,0 +1,40 @@ +[Package] +version: RELEASE +depends: +incremental: False + +[Product] +type: localboot +id: windows.2nd-ip +name: windows.2nd-ip +description: Set second IP-adress and netmask for sharing local printer +advice: ADVICE +version: VERSION +priority: PRIORITY +licenseRequired: False +productClasses: +setupScript: setup32.ins +uninstallScript: uninstall32.ins +updateScript: +alwaysScript: +onceScript: +customScript: +userLoginScript: + +[ProductProperty] +type: unicode +name: local-addr2.ip +multivalue: False +editable: True +description: Adds 2nd IP-address on primary ethernet adapter +values: [""] +default: [""] + +[ProductProperty] +type: unicode +name: local-addr2.netmask +multivalue: False +editable: True +description: 'Adds netmask for 2nd IP-address on primary ethernet adapter +values: [""] +default: [""] \ No newline at end of file diff --git a/OPSI/postinst b/OPSI/postinst new file mode 100644 index 0000000..a8e33fc --- /dev/null +++ b/OPSI/postinst @@ -0,0 +1,9 @@ +#! /bin/sh +# +# postinst script for softprod +# This script executes after unpacking files from that archive and registering the product at the server. +# +# The following environment variables can be used to obtain information about the current installation: +# PRODUCT_ID: id of the current product +# CLIENT_DATA_DIR: directory which contains the installed client data +# diff --git a/OPSI/preinst b/OPSI/preinst new file mode 100644 index 0000000..15a5320 --- /dev/null +++ b/OPSI/preinst @@ -0,0 +1,9 @@ +#! /bin/sh +# +# preinst script for softprod +# This script executes before that package will be unpacked from its archive file. +# +# The following environment variables can be used to obtain information about the current installation: +# PRODUCT_ID: id of the current product +# CLIENT_DATA_DIR: directory where client data will be installed +# diff --git a/builder-product.cfg b/builder-product.cfg index 7501b12..58db7e4 100644 --- a/builder-product.cfg +++ b/builder-product.cfg @@ -1,130 +1,19 @@ ############################ # Setup product information ############################ -VENDOR="itwatch.de" -PN="itwatch" -VERSION="4.10.19" -RELEASE="3" -PRIORITY="0" -ADVICE="" +VENDOR="dtnet.de" +PN="windows.2nd-ip" +VERSION="1" +RELEASE="1" +PRIORITY="-10" +ADVICE="Set second IP-adress and netmask for sharing local printer" # TYPE - defines, if the install files are public or restricted. # Valid value: restricted | public TYPE="public" - -# EXTRACTWITH - defines the used programm for decompression -# Valid values: 7zip | unzip -# Default value: 7zip -# This Value is only usefull in combinnation with Variable INSTALL[INDEX] -# EXTRACTWITH="7zip" - -# Begin Not Implemented --- -# DOWNLOADWITH - defines the used programm for download -# Valid values: wget | plowdown -# Default value: wget -# DOWNLOADWITH="wget" -# End Not Implemented --- - - -################# -# Downloader (DL) object array -################ -# -# To build the opsi-packet, some files are needed. The files are defined by a file object. -# A file object contains different attributes. All attributes (FILE, SOURCE, ..) are binded together -# using a file index. -# -# Target "prepare" : Working directory INST_DIR and OUTPUT_DIR are prepared -# Target "retrieve" : the files are downloaded to the the caching storage ${DIST_CACHE_DIR}/$DL_ARCH[i]/$DL_FILE[i] -# Target "create" : the files are extrated/copied to ${INST_DIR}/CLIENT_DATA/${DL_ARCH[$i]} -# Target "package" : opsi-makeproductfile is called processing ${INST_DIR} directory -# -# - Filename -# Filename used inside the builder and opsi package -# Mandatory parameter. -# DL_FILE[index]="cool-stuff.exe" -# -# - Source URL -# The source URL to download the file from. Multiple URLs are separted by a ";" or "," -# The $DIST_PRIVATE_REPOS variable will be added as the first URL automatically -# Therefore, you download the non-public programs to your local/privagte repository. -# You can use variable like $PN or $Version inside the URLs -# DL_SOURCE[index]="http://cool-stuff.de/download/cool-stuff_1.001.exe;http://mirro5.cool-stuff.at/$PN_$VERSION.exe" -# -# - Architecture -# Definition of the architecture to separate different files. This will be used in -# the file structure inside the opsi-package. Also, you can use it in your repos-URL's -# or filenames (OPSI_REPOS_FILE_PATTERN, OPSI_REPOS_PRODUCT_DIR) to structure the repos. -# If it's a file for all architecture, the variable have not to be set. -# Optional parameter. Default value: -# Valid values: , "X86", "X86_64" -# DL_ARCH[index]="X86" -# -# - WINST variable: -# You can access the file (included in the opsi-package) using WINST script language. -# The target "package" will replace all occurence of the string "@@BUILDER_VARIABLES@@" -# by pairs of "DefVar/Set"-commands, if the WINST attribute is set. Default value: -# Optional parameter. Default value: , -# DL_WINST_NAME[index]=itWESS -# -# - Compression format -# If the retrieved file is compressed, the compression format is specified to -# extract it. If the parameter is not set, no extraction happens -# Optional parameter. Valid values: unzip, 7zip. Default value: . -# DL_EXTRACT_FORMAT="zip" -# -# - Extraction directory for compressed files -# This Variable only works in combination with INSTALL and forces the extraction -# to be done into the specified directory. -# This will result in the files to be extracted to ${OUTPUT_DIR}/${DL_ARCH}/${DL_EXTRACT_TO}. -# This feature is mostly needed if a package includes more setup programms that are nemed the -# same. This way you place the setups into diffent dirs -# Optional parameter. Default value: -# DL_EXTRACT_TO[index]="office" -# -# - Specify Downloader -# Defines the downloader to use to retrieve the SOURCE file -# Optional parameter. Valid values: wget|plowdown. Default value: wget -# -DL_FILE[0]="itWatchLogo.jpg" -DL_SOURCE[0]="http://www.itwatch.de/logos/itWatchLogo.jpg" - -DL_FILE[1]="itWESS-Client_German.msi" -DL_SOURCE[1]="http://repos.dtnet.de/itwatch/itwatch/4.10.19/itWESS-Client_German.msi;http://internal.graz.disconnected-by-peer.at/Orig/itWatch/itWESS/HB/4.10.19/itWESS-Client_German.msi" -DL_ARCH[1]="X86" -DL_WINST_NAME[1]=itWESS - -DL_FILE[2]="itWESS-64bit_German.msi" -DL_SOURCE[2]="http://repos.dtnet.de/itwatch/itwatch/4.10.19/itWESS-64bit_German.msi;http://internal.graz.disconnected-by-peer.at/Orig/itWatch/itWESS/HB/4.10.19/itWESS-64bit_German.msi" -DL_ARCH[2]="X86_64" -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_EXTRACT_FORMAT[3]="unzip" -DL_EXTACT_TO[3]="office" +DL_FILE[0]="windows.2nd-ip" +DL_SOURCE[0]="http://www.bitblokes.de/wp-content/uploads/2010/10/openvpn-logo-150x150.png" # File array index for the image showing while installing the program ICON_DL_INDEX=0 - -######################### -# Setup additional, custom 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 -# -# @DL_EXTRACT_WINST_PATH[]@ : contains the WINST location of the directory, the files from DL_FILE[] was extracted to. -# Sample: -# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[]@\\svcpack\\aio-runtimes.exe" -# results in "%ScriptPath%\X86_64\svcpack\aio-runtimes.exe" -# -######################### -WINST_NAME[0]="InstallExe" -WINST_VALUE[0]="@DL_EXTRACT_WINST_PATH[2]@\\svcpack\\aio-runtimes.exe" - -WINST_NAME[1]="MyVar" -WINST_VALUE[1]="My content" - diff --git a/windows.2nd-ip.sha1sum b/windows.2nd-ip.sha1sum new file mode 100644 index 0000000..085c95d --- /dev/null +++ b/windows.2nd-ip.sha1sum @@ -0,0 +1 @@ +1e55e6d56fd54b044fedb5863e1693e812b776fe /home/dtrinks/.opsi-dist-cache/dtnet.de/windows.2nd-ip/1//windows.2nd-ip