remove opsi and change to 7z create
This commit is contained in:
parent
019b384e8a
commit
df3c29f0d9
@ -1,17 +1,17 @@
|
|||||||
###################################################
|
###################################################
|
||||||
# opsi-builder.cfg
|
# aio-builder.cfg
|
||||||
# Default values for opsi-builder system
|
# Default values for aio-builder system
|
||||||
####################################################
|
####################################################
|
||||||
#
|
#
|
||||||
# Define your local, private, individual, not-project dependent build setup
|
# Define your local, private, individual, not-project dependent build setup
|
||||||
# in the file ~/.opsi-builder.cfg OR by using the environment variable OPSI_BUILDER
|
# in the file ~/.aio-builder.cfg OR by using the environment variable AIO_BUILDER
|
||||||
# pointing the the configuration.
|
# pointing the the configuration.
|
||||||
# export OPSI_BUILDER=/home/dschwager/work/opsi-builder.cfg
|
# export AIO_BUILDER=/home/dschwager/work/aio-builder.cfg
|
||||||
# If no files are availble, the default values will be use
|
# If no files are availble, the default values will be use
|
||||||
# from <opsi-builder-home>/conf/opsi-builder.cfg
|
# from <aio-builder-home>/conf/aio-builder.cfg
|
||||||
#
|
#
|
||||||
# cp <opsi-builder-home>/conf/opsi-builder.cfg $HOME/.opsi-builder.cfg
|
# cp <aio-builder-home>/conf/aio-builder.cfg $HOME/.aio-builder.cfg
|
||||||
# vi $HOME/.opsi-builder.cfg
|
# vi $HOME/.aio-builder.cfg
|
||||||
# may you will change some locations
|
# may you will change some locations
|
||||||
###################################################
|
###################################################
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ STATUS="integration"
|
|||||||
# STATUS_INTEGRATION_RELEASE - automatically created release number,
|
# STATUS_INTEGRATION_RELEASE - automatically created release number,
|
||||||
# if STATUS is set to "integration". Valid values: anything, default value: "`date +%Y%m%d%H%M`"
|
# if STATUS is set to "integration". Valid values: anything, default value: "`date +%Y%m%d%H%M`"
|
||||||
# Samples:
|
# Samples:
|
||||||
# "func:inc1" - build-in function "inc1": search the opsi-repository for the latested release and increment 1
|
# "func:inc1" - build-in function "inc1": search the aio-repository for the latested release and increment 1
|
||||||
# "`date +%Y%m%d%H%M`" - command output, e.g. the date format YYMMDD-HHMM
|
# "`date +%Y%m%d%H%M`" - command output, e.g. the date format YYMMDD-HHMM
|
||||||
# "$BUILD_NUMBER" - Environment variables, jenkins https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables
|
# "$BUILD_NUMBER" - Environment variables, jenkins https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables
|
||||||
STATUS_INTEGRATION_RELEASE="func:inc1"
|
STATUS_INTEGRATION_RELEASE="func:inc1"
|
||||||
@ -53,8 +53,8 @@ CHECKSUM_AUTOCREATE=false
|
|||||||
###############################
|
###############################
|
||||||
# CREATOR
|
# CREATOR
|
||||||
###############################
|
###############################
|
||||||
# Part of the published OPSI-package name
|
# Part of the published AIO-package name
|
||||||
# Limitation: max 3 chars (beause OPSI limites REVISION to 16 chars)
|
# Limitation: max 3 chars (beause AIO limites REVISION to 16 chars)
|
||||||
CREATOR_TAG=xx
|
CREATOR_TAG=xx
|
||||||
|
|
||||||
# Additonal information from the person creating the packages
|
# Additonal information from the person creating the packages
|
||||||
@ -63,57 +63,52 @@ CREATOR_EMAIL="your-email@domain.de"
|
|||||||
|
|
||||||
|
|
||||||
##################################
|
##################################
|
||||||
# OPSI repository settings
|
# AIO repository settings
|
||||||
#################################
|
#################################
|
||||||
# Basedirectory storing OPSI-packages after building
|
# Basedirectory storing AIO-packages after building
|
||||||
OPSI_REPOS_BASE_DIR=$HOME/opsi-repository
|
AIO_REPOS_BASE_DIR=$HOME/aio-repository
|
||||||
|
|
||||||
# Directory- and filename pattern
|
# Directory- and filename pattern
|
||||||
OPSI_REPOS_PRODUCT_DIR=${OPSI_REPOS_BASE_DIR}/${STATUS}/${VENDOR}/${PN}/${VERSION}-${CREATOR_TAG}${RELEASE}
|
AIO_REPOS_PRODUCT_DIR=${AIO_REPOS_BASE_DIR}/${STATUS}/${VENDOR}/${PN}/${VERSION}-${CREATOR_TAG}${RELEASE}
|
||||||
|
|
||||||
# OPSI-package filepattern
|
# AIO-package filepattern
|
||||||
OPSI_REPOS_FILE_PATTERN=${PN}_${VERSION}-${CREATOR_TAG}${RELEASE}
|
AIO_REPOS_FILE_PATTERN=${PN}_${VERSION}-${CREATOR_TAG}${RELEASE}
|
||||||
|
|
||||||
# Force alway upload to opsi repos
|
# Force alway upload to aio repos
|
||||||
# Target: publish, Valid values: true|false, Default: false
|
# Target: publish, Valid values: true|false, Default: false
|
||||||
# OPSI_REPOS_FORCE_UPLOAD=true
|
# AIO_REPOS_FORCE_UPLOAD=true
|
||||||
|
|
||||||
# define the artifacts uploading to the repository (OPSI_REPOS_FORCE_UPLOAD must be "true")
|
# define the artifacts uploading to the repository (AIO_REPOS_FORCE_UPLOAD must be "true")
|
||||||
# OPSI_REPOS_UPLOAD_SOURCE product directory
|
# AIO_REPOS_UPLOAD_SOURCE product directory
|
||||||
# OPSI_REPOS_UPLOAD_OPSI : opsi package
|
# AIO_REPOS_UPLOAD_AIO : aio package
|
||||||
# OPSI_REPOS_UPLOAD_BIN : File used by opsi package creation
|
# AIO_REPOS_UPLOAD_BIN : File used by aio package creation
|
||||||
# OPSI_REPOS_UPLOAD_OPSI_ZSYNC : Additional files (*.md5, *.zsync) to sync opsi package using opsi-product-updater
|
# AIO_REPOS_UPLOAD_AIO : Additional files (*.md5)
|
||||||
# OPSI_REPOS_OPSIMANAGER_INSTALL : Install the created opsi packet automatically after building
|
AIO_REPOS_UPLOAD_AIO=true
|
||||||
# It equal to the command "opsi-package-manager -i"
|
AIO_REPOS_UPLOAD_AIO=false
|
||||||
# Note: the OPSI_REPOS_BASE_DIR must be RW for the user pcpatch.
|
AIO_REPOS_UPLOAD_SOURCE=false
|
||||||
# You must be member of the unix group pcpatch&opsiadmin
|
AIO_REPOS_UPLOAD_BIN=false
|
||||||
OPSI_REPOS_UPLOAD_OPSI=true
|
|
||||||
OPSI_REPOS_UPLOAD_OPSI_ZSYNC=false
|
|
||||||
OPSI_REPOS_UPLOAD_SOURCE=false
|
|
||||||
OPSI_REPOS_UPLOAD_BIN=false
|
|
||||||
OPSI_REPOS_OPSIMANAGER_INSTALL=false
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Limiting instances of published version
|
# Limiting instances of published version
|
||||||
# Valid values: true|false
|
# Valid values: true|false
|
||||||
OPSI_REPOS_PURGE=false
|
AIO_REPOS_PURGE=false
|
||||||
|
|
||||||
# Only purge projects using the defined STATUS
|
# Only purge projects using the defined STATUS
|
||||||
# ValidValues: integration|testing|release
|
# ValidValues: integration|testing|release
|
||||||
# Defaut: integration
|
# Defaut: integration
|
||||||
OPSI_REPOS_PURGE_STATUS=integration
|
AIO_REPOS_PURGE_STATUS=integration
|
||||||
|
|
||||||
# defines the max. instances of published versions per product
|
# defines the max. instances of published versions per product
|
||||||
# Valid values: 0...n, 0: disable autocleanup
|
# Valid values: 0...n, 0: disable autocleanup
|
||||||
OPSI_REPOS_PURGE_LIMIT=3
|
AIO_REPOS_PURGE_LIMIT=3
|
||||||
|
|
||||||
# defines limits for special products
|
# defines limits for special products
|
||||||
# Valid values: 0...n, 0: disable autocleanup
|
# Valid values: 0...n, 0: disable autocleanup
|
||||||
OPSI_REPOS_PURGE_LIMIT_productname1=2
|
AIO_REPOS_PURGE_LIMIT_productname1=2
|
||||||
OPSI_REPOS_PURGE_LIMIT_productname2=6
|
AIO_REPOS_PURGE_LIMIT_productname2=6
|
||||||
|
|
||||||
# create an gpg signfile
|
# create an gpg signfile
|
||||||
OPSI_REPOS_UPLOAD_OPSI_GPG=false
|
AIO_REPOS_UPLOAD_AIO_GPG=false
|
||||||
GPG_PASSPHRASE=""
|
GPG_PASSPHRASE=""
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
@ -121,12 +116,12 @@ GPG_PASSPHRASE=""
|
|||||||
###############################
|
###############################
|
||||||
|
|
||||||
# Directory downloading/cacheing the artifacts like MSI package or icons from the vendor webside
|
# Directory downloading/cacheing the artifacts like MSI package or icons from the vendor webside
|
||||||
DIST_CACHE_DIR=$HOME/.opsi-dist-cache/${PN}-${VERSION}
|
DIST_CACHE_DIR=$HOME/.aio-dist-cache/${PN}-${VERSION}
|
||||||
|
|
||||||
# private dist repository. You can use all variables from release.cfg insde the URL
|
# private dist repository. You can use all variables from release.cfg insde the URL
|
||||||
# this optinal URL will be the FIRST url to check for downloading vendor stuff.
|
# this optinal URL will be the FIRST url to check for downloading vendor stuff.
|
||||||
# To copy a local file, the repos should start with file://
|
# To copy a local file, the repos should start with file://
|
||||||
DIST_PRIVATE_REPOS=file://$HOME/opsi-dist.private/$VENDOR/$PN/$VERSION
|
DIST_PRIVATE_REPOS=file://$HOME/aio-dist.private/$VENDOR/$PN/$VERSION
|
||||||
|
|
||||||
# Force always downloading dist files
|
# Force always downloading dist files
|
||||||
# DIST_FORCE_DOWNLOAD=1
|
# DIST_FORCE_DOWNLOAD=1
|
@ -11,21 +11,18 @@
|
|||||||
builder_config() {
|
builder_config() {
|
||||||
|
|
||||||
# Define commands
|
# Define commands
|
||||||
CMD_7z="`which 7z`" ; builder_check_error "Command '7z' not installed"
|
CMD_7z="`which 7z.exe`" ; builder_check_error "Command '7z' not installed"
|
||||||
CMD_unzip="`which unzip`" ; builder_check_error "Command 'unzip' not installed"
|
CMD_unzip="`which unzip.exe`" ; builder_check_error "Command 'unzip' not installed"
|
||||||
CMD_unrar="`which unrar`" ; builder_check_error "Command 'unrar' not installed"
|
CMD_unrar="`which UnRAR.exe`" ; builder_check_error "Command 'UnRAR' not installed"
|
||||||
CMD_zip="`which zip`" ; builder_check_error "Command 'zip' not installed"
|
CMD_zip="`which zip.exe`" ; builder_check_error "Command 'zip' not installed"
|
||||||
CMD_lha="`which lha`" ; builder_check_error "Command 'lha' not installed"
|
CMD_lha="`which lha.exe`" ; builder_check_error "Command 'lha' not installed"
|
||||||
CMD_tar="`which tar`" ; builder_check_error "Command 'tar' not installed"
|
CMD_tar="`which tar.exe`" ; builder_check_error "Command 'tar' not installed"
|
||||||
CMD_cabextract="`which cabextract`" ; builder_check_error "Command 'cabextract' not installed"
|
CMD_cabextract="`which cabextract.exe`" ; builder_check_error "Command 'cabextract' not installed"
|
||||||
CMD_unix2dos="`which unix2dos`" ; builder_check_error "Command 'unix2dos' not installed"
|
CMD_unix2dos="`which unix2dos.exe`" ; builder_check_error "Command 'unix2dos' not installed"
|
||||||
CMD_identify="`which identify`" ; builder_check_error "Command 'identify' (ImageMagick) not installed"
|
CMD_sha1sum="`which sha1sum.exe`" ; builder_check_error "Command 'sha1sum' not installed"
|
||||||
CMD_zsyncmake="`which zsyncmake`" ; builder_check_error "Command 'zsyncmake' not installed"
|
CMD_inifile="`which inifile.exe`" ; builder_check_error "Command 'inifile' not installed (http://www.horstmuc.de/wbat32d.htm#inifile)"
|
||||||
CMD_comm="`which comm`" ; builder_check_error "Command 'comm' not installed"
|
CMD_showver="`which ShowVer.exe`" ; builder_check_error "Command 'ShowVer' not installed (http://www.codeproject.com/Articles/2457/ShowVer-exe-command-line-VERSIONINFO-display-progr)"
|
||||||
CMD_sha1sum="`which sha1sum`" ; builder_check_error "Command 'sha1sum' not installed"
|
CMD_tidy="`which tidy.exe`" ; builder_check_error "Command 'tidy' not installed"
|
||||||
CMD_iniset="`which ini-set`" ; builder_check_error "Command 'ini-set' (martINI a pypi project) not installed"
|
|
||||||
CMD_ruby="`which ruby`" ; builder_check_error "Command 'ruby' not installed"
|
|
||||||
CMD_gpg="`which gpg`" ; builder_check_error "Command 'gpg' not installed"
|
|
||||||
|
|
||||||
# Check temp dir
|
# Check temp dir
|
||||||
test -d ${TMP_DIR}
|
test -d ${TMP_DIR}
|
||||||
@ -37,14 +34,14 @@ builder_config() {
|
|||||||
. ${config}
|
. ${config}
|
||||||
|
|
||||||
# set default build configuration and source the user dependent file
|
# set default build configuration and source the user dependent file
|
||||||
local config=$BASEDIR/conf/opsi-builder.cfg
|
local config=$BASEDIR/conf/aio-builder.cfg
|
||||||
. ${config}
|
. ${config}
|
||||||
|
|
||||||
# Source local build configuration (must be done AFTER sourcing the builder-product.cfg.cfg)
|
# Source local build configuration (must be done AFTER sourcing the builder-product.cfg.cfg)
|
||||||
if [ -f "$OPSI_BUILDER" ] ; then
|
if [ -f "$AIO_BUILDER" ] ; then
|
||||||
config=$OPSI_BUILDER
|
config=$AIO_BUILDER
|
||||||
else
|
else
|
||||||
test -f $HOME/.opsi-builder.cfg && config=$HOME/.opsi-builder.cfg
|
test -f $HOME/.aio-builder.cfg && config=$HOME/.aio-builder.cfg
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Read ONLY the STATUS variable from the build configuration file
|
# Read ONLY the STATUS variable from the build configuration file
|
||||||
@ -57,7 +54,7 @@ builder_config() {
|
|||||||
. ${config}
|
. ${config}
|
||||||
calc_release
|
calc_release
|
||||||
else
|
else
|
||||||
# OPSI/control:RELEASE is limited to max 16 chars - take care in regards to the CREATOR_TAG
|
# AIO/control:RELEASE is limited to max 16 chars - take care in regards to the CREATOR_TAG
|
||||||
RELEASE="${STATUS_INTEGRATION_RELEASE}"
|
RELEASE="${STATUS_INTEGRATION_RELEASE}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -67,8 +64,8 @@ builder_config() {
|
|||||||
echo "Loaded builder configuration: $config"
|
echo "Loaded builder configuration: $config"
|
||||||
|
|
||||||
# Check variables
|
# Check variables
|
||||||
if [ -z ${OPSI_REPOS_BASE_DIR} ] || [ ! -d ${OPSI_REPOS_BASE_DIR} ] ; then
|
if [ -z ${AIO_REPOS_BASE_DIR} ] || [ ! -d ${AIO_REPOS_BASE_DIR} ] ; then
|
||||||
echo "configuration error: OPSI_REPOS_BASE_DIR directory does not exist: $OPSI_REPOS_BASE_DIR"
|
echo "configuration error: AIO_REPOS_BASE_DIR directory does not exist: $AIO_REPOS_BASE_DIR"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -77,8 +74,8 @@ builder_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Check, if variable is numeric
|
# Check, if variable is numeric
|
||||||
if [ ! `expr ${OPSI_REPOS_PURGE_LIMIT} + 1 2> /dev/null` ] ; then
|
if [ ! `expr ${AIO_REPOS_PURGE_LIMIT} + 1 2> /dev/null` ] ; then
|
||||||
fatal_error "OPSI_REPOS_PURGE_LIMIT must be numeric"
|
fatal_error "AIO_REPOS_PURGE_LIMIT must be numeric"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -89,8 +86,8 @@ builder_config() {
|
|||||||
builder_prepare() {
|
builder_prepare() {
|
||||||
echo "builder_prepare: "
|
echo "builder_prepare: "
|
||||||
# Check if the package is still build
|
# Check if the package is still build
|
||||||
if [ "$OPSI_REPOS_FORCE_UPLOAD" != "true" ] && [ -f "${OPSI_REPOS_PRODUCT_DIR}/${OPSI_REPOS_FILE_PATTERN}.opsi" ] ; then
|
if [ "$AIO_REPOS_FORCE_UPLOAD" != "true" ] && [ -f "${AIO_REPOS_PRODUCT_DIR}/${AIO_REPOS_FILE_PATTERN}.7z" ] ; then
|
||||||
echo "File ${OPSI_REPOS_PRODUCT_DIR}/${OPSI_REPOS_FILE_PATTERN}.opsi already exists."
|
echo "File ${AIO_REPOS_PRODUCT_DIR}/${AIO_REPOS_FILE_PATTERN}.7z already exists."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -98,7 +95,7 @@ builder_prepare() {
|
|||||||
log_debug "Distribution directory: $DIST_CACHE_DIR"
|
log_debug "Distribution directory: $DIST_CACHE_DIR"
|
||||||
|
|
||||||
# setup work directory
|
# setup work directory
|
||||||
OUTPUT_DIR="$TMP_DIR/opsi-builder.`date +%Y%m%d-%H%M%S`.$$"
|
OUTPUT_DIR="$TMP_DIR/aio-builder.`date +%Y%m%d-%H%M%S`.$$"
|
||||||
mkdir -p ${OUTPUT_DIR}
|
mkdir -p ${OUTPUT_DIR}
|
||||||
builder_check_error "Cannot create temp directory ${OUTPUT_DIR}"
|
builder_check_error "Cannot create temp directory ${OUTPUT_DIR}"
|
||||||
|
|
||||||
@ -190,17 +187,11 @@ builder_retrieve() {
|
|||||||
builder_create() {
|
builder_create() {
|
||||||
|
|
||||||
# Copy files and convert text files to dos format
|
# Copy files and convert text files to dos format
|
||||||
cp -Rv ${PRODUCT_DIR}/OPSI $INST_DIR
|
# cp -Rv ${PRODUCT_DIR}/AIO $INST_DIR
|
||||||
cp -Rv ${PRODUCT_DIR}/CLIENT_DATA $INST_DIR
|
# cp -Rv ${PRODUCT_DIR}/CLIENT_DATA $INST_DIR
|
||||||
if [ -d "${PRODUCT_DIR}/SERVER_DATA" ] ; then
|
# if [ -d "${PRODUCT_DIR}/SERVER_DATA" ] ; then
|
||||||
cp -Rv ${PRODUCT_DIR}/SERVER_DATA $INST_DIR
|
# cp -Rv ${PRODUCT_DIR}/SERVER_DATA $INST_DIR
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
# converting icon file
|
|
||||||
local iconfile_src=${DL_DIST_FILE[$ICON_DL_INDEX]}
|
|
||||||
ICONFILE=$OUTPUT_DIR/$PN.png
|
|
||||||
convert_image $iconfile_src $ICONFILE
|
|
||||||
cp -a $ICONFILE $INST_DIR/CLIENT_DATA
|
|
||||||
|
|
||||||
# copy binaries
|
# copy binaries
|
||||||
for (( i = 0 ; i < ${#DL_SOURCE[@]} ; i++ )) ; do
|
for (( i = 0 ; i < ${#DL_SOURCE[@]} ; i++ )) ; do
|
||||||
@ -214,58 +205,26 @@ builder_create() {
|
|||||||
process_file $format ${DL_DIST_FILE[$i]} ${DL_EXTRACT_PATH[$i]} $option
|
process_file $format ${DL_DIST_FILE[$i]} ${DL_EXTRACT_PATH[$i]} $option
|
||||||
done
|
done
|
||||||
|
|
||||||
# create winst variables
|
|
||||||
local var_file=${OUTPUT_DIR}/variable.ins
|
|
||||||
create_winst_varfile $var_file
|
|
||||||
|
|
||||||
# write ini file
|
# write ini file
|
||||||
local ini_file=${INST_DIR}/CLIENT_DATA/opsi-$PN.ini
|
local ini_file=${INST_DIR}/aio-$PN.ini
|
||||||
write_ini_file $ini_file $var_file
|
|
||||||
|
for var in VENDOR PN VERSION RELEASE TYPE CREATOR_TAG CREATOR_NAME CREATOR_EMAIL ; do
|
||||||
echo ";Hardcoded opsi vars" >>$var_file
|
write_ini_file $ini_file "COMMON" ${var}="${!var}"
|
||||||
echo "Set \$ProductId\$ = \"$PN\"" >>$var_file
|
|
||||||
|
|
||||||
# add the new vaiables to all *.ins winst files
|
|
||||||
for inst_file in `find ${INST_DIR}/CLIENT_DATA -type f -name "*.ins"` ; do
|
|
||||||
sed -i -e "/@@BUILDER_VARIABLES@@/ {
|
|
||||||
r "$var_file"
|
|
||||||
d
|
|
||||||
}" $inst_file
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# convert to dos file linefeed
|
# convert to dos file linefeed
|
||||||
find $INST_DIR/CLIENT_DATA -type f | xargs -n1 -iREP sh -c 'file -i $0 | grep -v "utf-16" | grep "text/plain" && '$CMD_unix2dos' $0 ' REP >/dev/null
|
find $INST_DIR -type f | xargs -n1 -iREP sh -c 'file -i $0 | grep -v "utf-16" | grep "text/plain" && '$CMD_unix2dos' $0 ' REP >/dev/null
|
||||||
|
|
||||||
# set exec bit on executeables
|
# set exec bit on executeables
|
||||||
find $INST_DIR/CLIENT_DATA -type f -iname "*.exe" -o -iname "*.bat" -o -iname "*.cmd" -o -iname "*.msi" -o -iname "*.msp" | xargs chmod +x -v
|
find $INST_DIR -type f -iname "*.exe" -o -iname "*.bat" -o -iname "*.cmd" -o -iname "*.msi" -o -iname "*.msp" | xargs chmod +x -v
|
||||||
|
|
||||||
# replace variables from file OPSI/control
|
|
||||||
local release_new=${CREATOR_TAG}${RELEASE}
|
|
||||||
# sed -e "s!VERSION!$VERSION!g" -e "s!RELEASE!${release_new}!g" -e "s!PRIORITY!$PRIORITY!g" -e "s!ADVICE!$ADVICE!g" ${PRODUCT_DIR}/OPSI/control >$INST_DIR/OPSI/control
|
|
||||||
write_control_file $INST_DIR/OPSI/control "Package" "version" "${release_new}"
|
|
||||||
write_control_file $INST_DIR/OPSI/control "Product" "id" "$PN"
|
|
||||||
write_control_file $INST_DIR/OPSI/control "Product" "name" "$NAME"
|
|
||||||
write_control_file $INST_DIR/OPSI/control "Product" "description" "$DESCRIPTION"
|
|
||||||
write_control_file $INST_DIR/OPSI/control "Product" "advice" "$ADVICE"
|
|
||||||
write_control_file $INST_DIR/OPSI/control "Product" "version" "$VERSION"
|
|
||||||
write_control_file $INST_DIR/OPSI/control "Product" "priority" "$PRIORITY"
|
|
||||||
|
|
||||||
# Create changelog based on git - if available
|
# Create changelog based on git - if available
|
||||||
if [ -d "${PRODUCT_DIR}/.git" ] ; then
|
if [ -d "${PRODUCT_DIR}/.git" ] ; then
|
||||||
# new changelog format
|
# new changelog format
|
||||||
echo "" >> $INST_DIR/OPSI/control
|
echo "" >> $INST_DIR/changelog.txt
|
||||||
echo "[Changelog]" >> $INST_DIR/OPSI/control
|
echo "[Changelog]" >> $INST_DIR/changelog.txt
|
||||||
$CMD_ruby $BASEDIR/libexec/gitlog-to-deblog.rb >> $INST_DIR/OPSI/control
|
#$CMD_ruby $BASEDIR/libexec/gitlog-to-deblog.rb >> $INST_DIR/AIO/changelog.txt
|
||||||
echo "" >> $INST_DIR/OPSI/control
|
echo "" >> $INST_DIR/changelog.txt
|
||||||
rm -f $INST_DIR/OPSI/changelog.txt
|
|
||||||
|
|
||||||
#old changelog format
|
|
||||||
#git log --date-order --date=short | \
|
|
||||||
#sed -e '/^commit.*$/d' | \
|
|
||||||
#awk '/^Author/ {sub(/\\$/,""); getline t; print $0 t; next}; 1' | \
|
|
||||||
#sed -e 's/^Author: //g' | \
|
|
||||||
#sed -e 's/>Date: \([0-9]*-[0-9]*-[0-9]*\)/>\t\1/g' | \
|
|
||||||
#sed -e 's/^\(.*\) \(\)\t\(.*\)/\3 \1 \2/g' > $INST_DIR/OPSI/changelog.txt
|
|
||||||
else
|
else
|
||||||
echo "No git repository present."
|
echo "No git repository present."
|
||||||
fi
|
fi
|
||||||
@ -273,30 +232,30 @@ builder_create() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
# build opsi package
|
# build aio package
|
||||||
#####################
|
#####################
|
||||||
builder_package() {
|
builder_package() {
|
||||||
|
|
||||||
# creating package
|
# creating package
|
||||||
local release_new=${CREATOR_TAG}${RELEASE}
|
local release_new=${CREATOR_TAG}${RELEASE}
|
||||||
local opsi_file=${PN}_${VERSION}-${release_new}.opsi
|
local aio_file=${PN}_${VERSION}-${release_new}.7z
|
||||||
|
|
||||||
pushd ${OUTPUT_DIR}
|
pushd ${OUTPUT_DIR}
|
||||||
rm -f ${opsi_file} ${OPSI_REPOS_FILE_PATTERN}.opsi
|
rm -f ${aio_file} ${AIO_REPOS_FILE_PATTERN}.7z
|
||||||
LANG="C" opsi-makeproductfile -v $INST_DIR
|
7z a ${AIO_REPOS_FILE_PATTERN}.7z -v $INST_DIR/*
|
||||||
builder_check_error "Building OPSI-package"
|
builder_check_error "Building AIO-package"
|
||||||
popd
|
popd
|
||||||
|
|
||||||
# rename opsi package file
|
# rename aio package file
|
||||||
if [ "${opsi_file}" != "${OPSI_REPOS_FILE_PATTERN}.opsi" ]; then
|
if [ "${aio_file}" != "${AIO_REPOS_FILE_PATTERN}.7z" ]; then
|
||||||
mv ${OUTPUT_DIR}/${opsi_file} ${OUTPUT_DIR}/${OPSI_REPOS_FILE_PATTERN}.opsi
|
mv ${OUTPUT_DIR}/${aio_file} ${OUTPUT_DIR}/${AIO_REPOS_FILE_PATTERN}.7z
|
||||||
builder_check_error "can't move file ${OUTPUT_DIR}/${opsi_file} ${OUTPUT_DIR}/${OPSI_REPOS_FILE_PATTERN}.opsi"
|
builder_check_error "can't move file ${OUTPUT_DIR}/${aio_file} ${OUTPUT_DIR}/${AIO_REPOS_FILE_PATTERN}.7z"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --exclude \*/.git\*
|
# --exclude \*/.git\*
|
||||||
# create source- and binary package package
|
# create source- and binary package package
|
||||||
test "${OPSI_REPOS_UPLOAD_BIN}" = "true" && $CMD_zip --exclude \*/.git\* @ -r ${OUTPUT_DIR}/${OPSI_REPOS_FILE_PATTERN}.zip $INST_DIR
|
test "${AIO_REPOS_UPLOAD_BIN}" = "true" && $CMD_zip --exclude \*/.git\* @ -r ${OUTPUT_DIR}/${AIO_REPOS_FILE_PATTERN}.zip $INST_DIR
|
||||||
test "${OPSI_REPOS_UPLOAD_SOURCE}" = "true" && $CMD_zip --exclude \*/.git\* @ -r ${OUTPUT_DIR}/${OPSI_REPOS_FILE_PATTERN}-src.zip ${PRODUCT_DIR}
|
test "${AIO_REPOS_UPLOAD_SOURCE}" = "true" && $CMD_zip --exclude \*/.git\* @ -r ${OUTPUT_DIR}/${AIO_REPOS_FILE_PATTERN}-src.zip ${PRODUCT_DIR}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -306,55 +265,52 @@ builder_package() {
|
|||||||
builder_publish() {
|
builder_publish() {
|
||||||
|
|
||||||
# Upload file to repository
|
# Upload file to repository
|
||||||
mkdir -p ${OPSI_REPOS_PRODUCT_DIR}
|
mkdir -p ${AIO_REPOS_PRODUCT_DIR}
|
||||||
|
|
||||||
echo "Publishing opsi-package to ${OPSI_REPOS_PRODUCT_DIR}"
|
echo "Publishing aio-package to ${AIO_REPOS_PRODUCT_DIR}"
|
||||||
local src=${OUTPUT_DIR}/${OPSI_REPOS_FILE_PATTERN}
|
local src=${OUTPUT_DIR}/${AIO_REPOS_FILE_PATTERN}
|
||||||
local dst=${OPSI_REPOS_PRODUCT_DIR}/${OPSI_REPOS_FILE_PATTERN}
|
local dst=${AIO_REPOS_PRODUCT_DIR}/${AIO_REPOS_FILE_PATTERN}
|
||||||
|
|
||||||
# Link dir
|
# Link dir
|
||||||
if [ "${OPSI_REPOS_LINK_NEWBUILDS}" = "true" ] ; then
|
if [ "${AIO_REPOS_LINK_NEWBUILDS}" = "true" ] ; then
|
||||||
mkdir -p ${OPSI_REPOS_BASE_DIR}/.new_builds
|
mkdir -p ${AIO_REPOS_BASE_DIR}/.new_builds
|
||||||
ln -sf ${OPSI_REPOS_PRODUCT_DIR} ${OPSI_REPOS_BASE_DIR}/.new_builds/${OPSI_REPOS_FILE_PATTERN}
|
ln -sf ${AIO_REPOS_PRODUCT_DIR} ${AIO_REPOS_BASE_DIR}/.new_builds/${AIO_REPOS_FILE_PATTERN}
|
||||||
builder_check_error "Can't Link file $dst.opsi --> $dst.opsi"
|
builder_check_error "Can't Link file $dst.7z --> $dst.7z"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# copy files
|
# copy files
|
||||||
if [ "${OPSI_REPOS_UPLOAD_OPSI}" = "true" ] ; then
|
if [ "${AIO_REPOS_UPLOAD_AIO}" = "true" ] ; then
|
||||||
cp ${src}.opsi ${dst}.opsi
|
cp ${src}.7z ${dst}.7z
|
||||||
builder_check_error "Can't upload file $dst.opsi --> $dst.opsi"
|
builder_check_error "Can't upload file $dst.7z --> $dst.7z"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${OPSI_REPOS_UPLOAD_BIN}" = "true" ] ; then
|
if [ "${AIO_REPOS_UPLOAD_BIN}" = "true" ] ; then
|
||||||
cp ${src}.zip ${dst}.zip
|
cp ${src}.zip ${dst}.zip
|
||||||
builder_check_error "Can't upload file $dst.zip --> $dst.zip"
|
builder_check_error "Can't upload file $dst.zip --> $dst.zip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${OPSI_REPOS_UPLOAD_SOURCE}" = "true" ] ; then
|
if [ "${AIO_REPOS_UPLOAD_SOURCE}" = "true" ] ; then
|
||||||
cp ${src}-src.zip ${dst}-src.zip
|
cp ${src}-src.zip ${dst}-src.zip
|
||||||
builder_check_error "Can't upload file ${dst}-src.zip --> ${dst}-src.zip"
|
builder_check_error "Can't upload file ${dst}-src.zip --> ${dst}-src.zip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${OPSI_REPOS_OPSIMANAGER_INSTALL}" = "true" ] ; then
|
if [ "${AIO_REPOS_AIOMANAGER_INSTALL}" = "true" ] ; then
|
||||||
opsi-package-manager -i -v ${src}.opsi
|
aio-package-manager -i -v ${src}.7z
|
||||||
builder_check_error "Can't install ${src}.opsi"
|
builder_check_error "Can't install ${src}.7z"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${OPSI_REPOS_UPLOAD_OPSI_ZSYNC}" = "true" ] ; then
|
if [ "${AIO_REPOS_UPLOAD_AIO}" = "true" ] ; then
|
||||||
md5sum "${src}.opsi" | sed 's/ .*//' > ${dst}.opsi.md5
|
md5sum "${src}.7z" | sed 's/ .*//' > ${dst}.7z.md5
|
||||||
builder_check_error "Can't create md5 file"
|
builder_check_error "Can't create md5 file"
|
||||||
|
|
||||||
${CMD_zsyncmake} -u ${OPSI_REPOS_FILE_PATTERN}.opsi -o "${dst}.opsi.zsync" "${src}.opsi"
|
|
||||||
builder_check_error "Can't create zsync file"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${OPSI_REPOS_UPLOAD_OPSI_GPG}" = "true" ] ; then
|
if [ "${AIO_REPOS_UPLOAD_AIO_GPG}" = "true" ] ; then
|
||||||
${CMD_gpg} --batch --passphrase ${GPG_PASSPHRASE} --output "${dst}.opsi.gpg" --detach-sig "${src}.opsi"
|
${CMD_gpg} --batch --passphrase ${GPG_PASSPHRASE} --output "${dst}.7z.gpg" --detach-sig "${src}.7z"
|
||||||
builder_check_error "Can't create gpg file"
|
builder_check_error "Can't create gpg file"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create revision file for this
|
# Create revision file for this
|
||||||
local rev_file=${OPSI_REPOS_PRODUCT_DIR}/${PN}-${VERSION}-${CREATOR_TAG}${RELEASE}.cfg
|
local rev_file=${AIO_REPOS_PRODUCT_DIR}/${PN}-${VERSION}-${CREATOR_TAG}${RELEASE}.cfg
|
||||||
cat > $rev_file <<EOF
|
cat > $rev_file <<EOF
|
||||||
REV_VENDOR=${VENDOR}
|
REV_VENDOR=${VENDOR}
|
||||||
REV_PN=${PN}
|
REV_PN=${PN}
|
||||||
@ -365,20 +321,20 @@ REV_TYPE=${TYPE}
|
|||||||
REV_STATUS=${STATUS}
|
REV_STATUS=${STATUS}
|
||||||
REV_TIMESTAMP=`date +"%s"`
|
REV_TIMESTAMP=`date +"%s"`
|
||||||
REV_CREATOR_TAG=${CREATOR_TAG}
|
REV_CREATOR_TAG=${CREATOR_TAG}
|
||||||
REV_OPSI_REPOS_FILE_PATTERN=${OPSI_REPOS_FILE_PATTERN}
|
REV_AIO_REPOS_FILE_PATTERN=${AIO_REPOS_FILE_PATTERN}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
# Purge old product versions - defined by limit OPSI_REPOS_PURGE_LIMIT
|
# Purge old product versions - defined by limit AIO_REPOS_PURGE_LIMIT
|
||||||
if [ "${OPSI_REPOS_PURGE}" = "true" ] && [ ! -z "${OPSI_REPOS_PURGE_LIMIT}" ] && [ "${OPSI_REPOS_PURGE_LIMIT}" > 0 ] && [ "${STATUS}" = "${OPSI_REPOS_PURGE_STATUS}" ] ; then
|
if [ "${AIO_REPOS_PURGE}" = "true" ] && [ ! -z "${AIO_REPOS_PURGE_LIMIT}" ] && [ "${AIO_REPOS_PURGE_LIMIT}" > 0 ] && [ "${STATUS}" = "${AIO_REPOS_PURGE_STATUS}" ] ; then
|
||||||
echo "Autopurging enabled"
|
echo "Autopurging enabled"
|
||||||
|
|
||||||
# determinte max version to delete
|
# determinte max version to delete
|
||||||
local limit
|
local limit
|
||||||
local pn_limit=`echo ${PN} | sed "s/[\.\-]/_/g"`
|
local pn_limit=`echo ${PN} | sed "s/[\.\-]/_/g"`
|
||||||
eval "`echo limit=\\$\\{OPSI_REPOS_PURGE_LIMIT_${pn_limit}\\}`"
|
eval "`echo limit=\\$\\{AIO_REPOS_PURGE_LIMIT_${pn_limit}\\}`"
|
||||||
if [ -z "$limit" ] || [ ! `expr $limit + 1 2>/dev/null` ] ; then
|
if [ -z "$limit" ] || [ ! `expr $limit + 1 2>/dev/null` ] ; then
|
||||||
limit=${OPSI_REPOS_PURGE_LIMIT}
|
limit=${AIO_REPOS_PURGE_LIMIT}
|
||||||
fi
|
fi
|
||||||
echo " Purging, max. number of versions: $limit"
|
echo " Purging, max. number of versions: $limit"
|
||||||
|
|
||||||
@ -391,7 +347,7 @@ EOF
|
|||||||
rm -f ${file_list}
|
rm -f ${file_list}
|
||||||
|
|
||||||
# first uniq sort all cfg based on version
|
# first uniq sort all cfg based on version
|
||||||
for cfg_file in `find ${OPSI_REPOS_PRODUCT_DIR} -name "${PN}-*.cfg" -print ` ; do
|
for cfg_file in `find ${AIO_REPOS_PRODUCT_DIR} -name "${PN}-*.cfg" -print ` ; do
|
||||||
. ${cfg_file}
|
. ${cfg_file}
|
||||||
echo $REV_VERSION >> ${file_list}
|
echo $REV_VERSION >> ${file_list}
|
||||||
done
|
done
|
||||||
@ -399,7 +355,7 @@ EOF
|
|||||||
|
|
||||||
# second uniq sort all versions based in release
|
# second uniq sort all versions based in release
|
||||||
for pkg_version in `cat ${file_sort_list_version}` ; do
|
for pkg_version in `cat ${file_sort_list_version}` ; do
|
||||||
for cfg_file_ver in ${OPSI_REPOS_PRODUCT_DIR}/${PN}-${pkg_version}-*.cfg ; do
|
for cfg_file_ver in ${AIO_REPOS_PRODUCT_DIR}/${PN}-${pkg_version}-*.cfg ; do
|
||||||
. ${cfg_file_ver}
|
. ${cfg_file_ver}
|
||||||
echo ${pkg_version}-$REV_CREATOR_TAG$REV_RELEASE >> ${file_sort_list_release}
|
echo ${pkg_version}-$REV_CREATOR_TAG$REV_RELEASE >> ${file_sort_list_release}
|
||||||
done
|
done
|
||||||
@ -408,8 +364,8 @@ EOF
|
|||||||
|
|
||||||
# third create versionrelease
|
# third create versionrelease
|
||||||
for release_file_list in `cat ${file_sort_list_final}` ; do
|
for release_file_list in `cat ${file_sort_list_final}` ; do
|
||||||
. ${OPSI_REPOS_PRODUCT_DIR}/${PN}-${release_file_list}.cfg
|
. ${AIO_REPOS_PRODUCT_DIR}/${PN}-${release_file_list}.cfg
|
||||||
echo "${OPSI_REPOS_PRODUCT_DIR}/${PN}-${release_file_list}.cfg" >> ${file_sort_list}
|
echo "${AIO_REPOS_PRODUCT_DIR}/${PN}-${release_file_list}.cfg" >> ${file_sort_list}
|
||||||
done
|
done
|
||||||
|
|
||||||
# Delete the oldest files
|
# Delete the oldest files
|
||||||
@ -417,14 +373,14 @@ EOF
|
|||||||
for cfg_sort_file in `head -n-${limit} ${file_sort_list}` ; do
|
for cfg_sort_file in `head -n-${limit} ${file_sort_list}` ; do
|
||||||
|
|
||||||
. ${cfg_sort_file}
|
. ${cfg_sort_file}
|
||||||
if [ "${REV_STATUS}" != "${OPSI_REPOS_PURGE_STATUS}" ] ; then continue; fi
|
if [ "${REV_STATUS}" != "${AIO_REPOS_PURGE_STATUS}" ] ; then continue; fi
|
||||||
|
|
||||||
dir_base=`dirname ${cfg_file}`
|
dir_base=`dirname ${cfg_file}`
|
||||||
product_file="${dir_base}/${REV_OPSI_REPOS_FILE_PATTERN}"
|
product_file="${dir_base}/${REV_AIO_REPOS_FILE_PATTERN}"
|
||||||
echo " Purging product version: $product_file*"
|
echo " Purging product version: $product_file*"
|
||||||
|
|
||||||
# Paranoid ... check the files to delete first
|
# Paranoid ... check the files to delete first
|
||||||
if [ ! -z "${dir_base}" ] && [ -d "${OPSI_REPOS_BASE_DIR}" ] && [ ! -z "$product_file" ] ; then
|
if [ ! -z "${dir_base}" ] && [ -d "${AIO_REPOS_BASE_DIR}" ] && [ ! -z "$product_file" ] ; then
|
||||||
rm -f ${product_file}* ${cfg_sort_file}
|
rm -f ${product_file}* ${cfg_sort_file}
|
||||||
|
|
||||||
# remove directory - if it's empty
|
# remove directory - if it's empty
|
||||||
@ -448,11 +404,11 @@ builder_commit() {
|
|||||||
|
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
# build opsi package
|
# build aio package
|
||||||
#####################
|
#####################
|
||||||
builder_cleanup() {
|
builder_cleanup() {
|
||||||
# Paranoia
|
# Paranoia
|
||||||
if [ -d "$OUTPUT_DIR" ] && [[ $OUTPUT_DIR == $TMP_DIR/opsi-builder.* ]] ; then
|
if [ -d "$OUTPUT_DIR" ] && [[ $OUTPUT_DIR == $TMP_DIR/aio-builder.* ]] ; then
|
||||||
rm -rf $OUTPUT_DIR
|
rm -rf $OUTPUT_DIR
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -138,159 +138,6 @@ log_info() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
###################
|
|
||||||
# Convert image
|
|
||||||
###################
|
|
||||||
convert_image() {
|
|
||||||
local src=$1
|
|
||||||
local dst=$2
|
|
||||||
|
|
||||||
local hight=`${CMD_identify} -format "%h" $src`
|
|
||||||
local wight=`${CMD_identify} -format "%w" $src`
|
|
||||||
${CMD_identify} -format "%wx%h" $src
|
|
||||||
|
|
||||||
# Add a white border to the image so that the convert to transparent can go around an image
|
|
||||||
convert -bordercolor White -border 3x3 $src $OUTPUT_DIR/bigger.png
|
|
||||||
|
|
||||||
# first resize the image to the new aspect ratio and add white borders
|
|
||||||
if [ $wight -lt $hight ] ; then
|
|
||||||
# Its higher so force x166 and let imagemagic decide the right wight
|
|
||||||
# then add white to the rest of the image to fit 166x166
|
|
||||||
log_debug "Icon Wight: $wight < Hight: $hight"
|
|
||||||
convert $OUTPUT_DIR/bigger.png -colorspace RGB -resize x166 \
|
|
||||||
-size 166x166 xc:white +swap -gravity center -composite \
|
|
||||||
-modulate 110 -colors 256 png8:$OUTPUT_DIR/resize.png
|
|
||||||
builder_check_error "converting image"
|
|
||||||
elif [ $wight -gt $hight ] ; then
|
|
||||||
# Its wider so force 166x and let imagemagic decide the right hight
|
|
||||||
# then add white to the rest of the image to fit 166x166
|
|
||||||
log_debug "Icon Wight: $wight > Hight: $hight"
|
|
||||||
convert $OUTPUT_DIR/bigger.png -colorspace RGB -resize 166x \
|
|
||||||
-size 166x166 xc:white +swap -gravity center -composite \
|
|
||||||
-modulate 110 -colors 256 png8:$OUTPUT_DIR/resize.png
|
|
||||||
builder_check_error "converting image"
|
|
||||||
elif [ $wight -eq $hight ] ; then
|
|
||||||
# Its scare so force 166x166
|
|
||||||
log_debug "Icon Wight: $wight = Hight: $hight"
|
|
||||||
convert $OUTPUT_DIR/bigger.png -colorspace RGB -resize 166x166 \
|
|
||||||
-size 166x166 xc:white +swap -gravity center -composite \
|
|
||||||
-modulate 110 -colors 256 png8:$OUTPUT_DIR/resize.png
|
|
||||||
builder_check_error "converting image"
|
|
||||||
else
|
|
||||||
# Imagemagic is unable to detect the aspect ratio so just force 166x166
|
|
||||||
# this could result in streched images
|
|
||||||
log_debug "Icon Wight: $wight unknown Hight: $hight"
|
|
||||||
convert $OUTPUT_DIR/bigger.png -colorspace RGB -resize 166x166 \
|
|
||||||
-size 166x166 xc:white +swap -gravity center -composite \
|
|
||||||
-modulate 110 -colors 256 png8:$OUTPUT_DIR/resize.png
|
|
||||||
builder_check_error "converting image"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# create a diffence image from the source
|
|
||||||
convert $OUTPUT_DIR/resize.png \( +clone -fx 'p{0,0}' \) -compose Difference -composite \
|
|
||||||
-modulate 100,0 +matte $OUTPUT_DIR/difference.png
|
|
||||||
|
|
||||||
# remove the black, replace with transparency
|
|
||||||
convert $OUTPUT_DIR/difference.png -bordercolor white -border 1x1 -matte \
|
|
||||||
-fill none -fuzz 7% -draw 'matte 1,1 floodfill' -shave 1x1 \
|
|
||||||
$OUTPUT_DIR/removed_black.png
|
|
||||||
|
|
||||||
# create the matte
|
|
||||||
if [ `convert | grep Version | awk '{print $3}' | sed "s/-.*//" | sed "s/\.//g"` -le 670 ] ; then
|
|
||||||
convert $OUTPUT_DIR/removed_black.png -channel matte -separate +matte \
|
|
||||||
$OUTPUT_DIR/matte.png
|
|
||||||
else
|
|
||||||
convert $OUTPUT_DIR/removed_black.png -channel matte -negate -separate +matte \
|
|
||||||
$OUTPUT_DIR/matte.png
|
|
||||||
fi
|
|
||||||
|
|
||||||
# negate the colors
|
|
||||||
convert $OUTPUT_DIR/matte.png -negate -blur 0x1 \
|
|
||||||
$OUTPUT_DIR/matte-negated.png
|
|
||||||
|
|
||||||
# you are going for: white interior, black exterior
|
|
||||||
composite -compose CopyOpacity $OUTPUT_DIR/matte-negated.png $OUTPUT_DIR/resize.png \
|
|
||||||
$OUTPUT_DIR/smaller.png
|
|
||||||
|
|
||||||
# now remove the added border that was added eaerlier
|
|
||||||
# Chop 3 pixels from the top and left side of
|
|
||||||
convert -chop 3x3 -rotate 180 $OUTPUT_DIR/smaller.png $OUTPUT_DIR/rotate.png
|
|
||||||
|
|
||||||
# Chop 3 pixels from the bottom and right side
|
|
||||||
convert -chop 3x3 -rotate 180 $OUTPUT_DIR/rotate.png $dst
|
|
||||||
|
|
||||||
# New size
|
|
||||||
# identify -format "%wx%h" $dst
|
|
||||||
hight=`${CMD_identify} -format "%h" $dst`
|
|
||||||
wight=`${CMD_identify} -format "%w" $dst`
|
|
||||||
log_debug "Opsi Icon Wight: $wight Hight: $hight"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
###################
|
|
||||||
# Create variable file
|
|
||||||
#
|
|
||||||
# Create a file containing all important winst variables
|
|
||||||
# (declaration and setings)
|
|
||||||
#
|
|
||||||
# Parameter
|
|
||||||
# file: file to create
|
|
||||||
#
|
|
||||||
###################
|
|
||||||
create_winst_varfile() {
|
|
||||||
local var_file=$1
|
|
||||||
|
|
||||||
echo -n >$var_file
|
|
||||||
echo "; Opsi Builder Variables" >>$var_file
|
|
||||||
|
|
||||||
# make the scriptpath for the binarys configurable
|
|
||||||
echo "DefVar \$PackagePath\$" >>$var_file
|
|
||||||
echo "Set \$PackagePath\$ = \"%ScriptPath%\"" >>$var_file
|
|
||||||
|
|
||||||
echo >>$var_file
|
|
||||||
for (( i = 0 ; i < ${#DL_SOURCE[@]} ; i++ )) ; do
|
|
||||||
if [ -z ${DL_WINST_NAME[$i]} ] ; then continue ; fi
|
|
||||||
|
|
||||||
if [ ! -z "${DL_ARCH[$i]}" ] ; then arch_str="${DL_ARCH[$i]}\\" ; fi
|
|
||||||
echo "DefVar \$${DL_WINST_NAME[$i]}\$" >>$var_file
|
|
||||||
echo "Set \$${DL_WINST_NAME[$i]}\$ = \$PackagePath\$ + \"\\${arch_str}${DL_FILE[$i]}\"" >>$var_file
|
|
||||||
done
|
|
||||||
|
|
||||||
# publish some other variables
|
|
||||||
for var in VENDOR PN VERSION RELEASE PRIORITY NAME ADVICE TYPE CREATOR_TAG CREATOR_NAME CREATOR_EMAIL ; do
|
|
||||||
echo "DefVar \$${var}\$" >>$var_file
|
|
||||||
echo "Set \$${var}\$ = \"${!var}\"" >>$var_file
|
|
||||||
done
|
|
||||||
|
|
||||||
# copy image and create variable
|
|
||||||
echo "DefVar \$IconFile\$" >>$var_file
|
|
||||||
echo "Set \$IconFile\$ = \"%ScriptPath%\\`basename $ICONFILE`\"" >>$var_file
|
|
||||||
|
|
||||||
# publish custom variables
|
|
||||||
for (( i = 0 ; i < ${#WINST_NAME[@]} ; i++ )) ; do
|
|
||||||
|
|
||||||
# replace DL_EXTRACT_WINST_PATH
|
|
||||||
local index=`echo ${WINST_VALUE[$i]} | sed -e "s#.*@DL_EXTRACT_WINST_PATH\[\([0-9]\)\]@.*#\1#"`
|
|
||||||
log_debug "calculated (DL_EXTRACT_WINST_PATH), Index: $index"
|
|
||||||
if [ "$index" != "${WINST_VALUE[$i]}" ] ; then
|
|
||||||
if [ ! -z "${DL_ARCH[$index]}" ] ; then arch_part="\\\\${DL_ARCH[$index]}" ; fi
|
|
||||||
if [ ! -z "${DL_EXTRACT_WINST_PATH[$index]}" ] ; then extr_part="\\\\${DL_EXTRACT_WINST_PATH[$index]}" ; fi
|
|
||||||
local new_val="\$PackagePath\$ + $arch_part$extr_part"
|
|
||||||
WINST_VALUE[$i]=`echo ${WINST_VALUE[$i]} | sed -e "s#@DL_EXTRACT_WINST_PATH\[[0-9]\]@#$new_val#"`
|
|
||||||
log_debug "calculated (DL_EXTRACT_WINST_PATH) WINST_VALUE: ${WINST_VALUE[$i]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "DefVar \$${WINST_NAME[$i]}\$" >>$var_file
|
|
||||||
echo "Set \$${WINST_NAME[$i]}\$ = \"${WINST_VALUE[$i]}\"" >>$var_file
|
|
||||||
done
|
|
||||||
|
|
||||||
# correct me im a hack
|
|
||||||
sed -e 's#"\$PackagePath\$ +#\$PackagePath\$ + "#' -i $var_file
|
|
||||||
sed -e 's#\$PackagePath\$ + " #\$PackagePath\$ + "#' -i $var_file
|
|
||||||
echo >>$var_file
|
|
||||||
}
|
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
# void calc_release()
|
# void calc_release()
|
||||||
#
|
#
|
||||||
@ -304,8 +151,8 @@ create_winst_varfile() {
|
|||||||
function calc_release() {
|
function calc_release() {
|
||||||
|
|
||||||
# Find all revision files and sort them
|
# Find all revision files and sort them
|
||||||
local file_list=`mktemp /tmp/opsi-builder.calc_release.XXXXXXXXXXX`
|
local file_list=`mktemp /tmp/aio-builder.calc_release.XXXXXXXXXXX`
|
||||||
for cfg_file in `find ${OPSI_REPOS_BASE_DIR} -name "${PN}-${VERSION}-${CREATOR_TAG}*.cfg" -print ` ; do
|
for cfg_file in `find ${AIO_REPOS_BASE_DIR} -name "${PN}-${VERSION}-${CREATOR_TAG}*.cfg" -print ` ; do
|
||||||
. ${cfg_file}
|
. ${cfg_file}
|
||||||
printf "%08d;$cfg_file\n" $REV_RELEASE >> ${file_list}
|
printf "%08d;$cfg_file\n" $REV_RELEASE >> ${file_list}
|
||||||
done
|
done
|
||||||
@ -335,43 +182,70 @@ function calc_release() {
|
|||||||
###################
|
###################
|
||||||
write_ini_file() {
|
write_ini_file() {
|
||||||
local ini_file=$1
|
local ini_file=$1
|
||||||
local var_file=$2
|
local ini_section=$2
|
||||||
|
local ini_option=$3
|
||||||
# create file if not exist
|
local ini_value=$4
|
||||||
|
|
||||||
touch $ini_file
|
touch $ini_file
|
||||||
|
$CMD_inifile $(cygpath -pw "$ini_file") [$ini_section] $ini_option=$ini_value
|
||||||
# publish some other variables
|
|
||||||
for var in VENDOR PN VERSION RELEASE TYPE CREATOR_TAG CREATOR_NAME CREATOR_EMAIL ; do
|
|
||||||
$CMD_iniset $ini_file --COMMON ${var}="${!var}"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "; Opsi INI File Variables" >>$var_file
|
|
||||||
echo >>$var_file
|
|
||||||
# publish custom variables
|
|
||||||
for (( i = 0 ; i < ${#OPSI_INI_OPTION[@]} ; i++ )) ; do
|
|
||||||
$CMD_iniset $ini_file --${OPSI_INI_SECTION[$i]} ${OPSI_INI_OPTION[$i]}="${OPSI_INI_VALUE[$i]}"
|
|
||||||
echo "DefVar \$${OPSI_INI_OPTION[$i]}\$" >>$var_file
|
|
||||||
echo "Set \$${OPSI_INI_OPTION[$i]}\$ = \"${OPSI_INI_VALUE[$i]}\"" >>$var_file
|
|
||||||
done
|
|
||||||
|
|
||||||
echo >>$var_file
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# Write control file
|
# Get Verison of File
|
||||||
#
|
#
|
||||||
# Create a ini file containing needed information for package uninstall
|
# Copy file only if it is newer
|
||||||
#
|
#
|
||||||
# Parameter
|
# Parameter
|
||||||
# file: file to create / modify
|
# File: to process
|
||||||
|
# Var:
|
||||||
#
|
#
|
||||||
###################
|
###################
|
||||||
write_control_file() {
|
get_file_version() {
|
||||||
local control_file=$1
|
local getver_file=$1
|
||||||
local control_section=$2
|
local getver_var=$2
|
||||||
local control_option=$3
|
|
||||||
local control_value=$4
|
|
||||||
|
|
||||||
sed -i -e "/^\[$control_section\]/,/^\[.*\]/ s|^\($control_option[ \t]*:[ \t]*\).*$|\1$control_value|" "$control_file"
|
if [ -f "$getver_file" ] ; then
|
||||||
|
$CMD_showver $getver_file | grep FileVersion: | rev | cut -d: -f1 | rev | tr -d ' ' > $getver_ver
|
||||||
|
echo "file $getver_file has version $getver_ver"
|
||||||
|
else
|
||||||
|
echo "$getver_file not found"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Copy Verison
|
||||||
|
#
|
||||||
|
# Copy file only if it is newer
|
||||||
|
#
|
||||||
|
# Parameter
|
||||||
|
# source: sourcefiel
|
||||||
|
# target: Targetfile
|
||||||
|
#
|
||||||
|
###################
|
||||||
|
copyver() {
|
||||||
|
local source_file=$1
|
||||||
|
local target_file=$2
|
||||||
|
local source_ver
|
||||||
|
local target_ver
|
||||||
|
|
||||||
|
get_file_version $source_file $source_ver
|
||||||
|
}
|
||||||
|
|
||||||
|
###################
|
||||||
|
# Tidy xml
|
||||||
|
#
|
||||||
|
# Tidy XML files (mainly Sereby package.xml)
|
||||||
|
#
|
||||||
|
# Parameter
|
||||||
|
# source: sourcefiel
|
||||||
|
# target: Targetfile
|
||||||
|
#
|
||||||
|
###################
|
||||||
|
tidy_xml() {
|
||||||
|
local source_file=$1
|
||||||
|
local target_file=$2
|
||||||
|
|
||||||
|
cat $source_file | $CMD_tidy -utf8 -xml -w 255 -i -c -q -asxml | sed -e 's!>!>!g' -e 's!<!<!g' > $target_file
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
libexec/ShowVer.exe
Normal file
BIN
libexec/ShowVer.exe
Normal file
Binary file not shown.
531
libexec/ShowVer/ShowVer.cpp
Normal file
531
libexec/ShowVer/ShowVer.cpp
Normal file
@ -0,0 +1,531 @@
|
|||||||
|
/*
|
||||||
|
* File: ShowVer.cpp
|
||||||
|
* Version: 1.0, 2002-6-4
|
||||||
|
* Purpose: console program to display file VERSIONINFO text
|
||||||
|
|
||||||
|
* Copyright (c) 2002 by Ted Peck <tpeck@roundwave.com>
|
||||||
|
* Permission is given by the author to freely redistribute and include
|
||||||
|
* this code in any program as long as this credit is given where due.
|
||||||
|
*
|
||||||
|
* THIS CODE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY
|
||||||
|
* OF ANY KIND, EITHER EXPRESSED OR IMPLIED. IN PARTICULAR, NO WARRANTY IS MADE
|
||||||
|
* THAT THE CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
|
||||||
|
* OR NON-INFRINGING. IN NO EVENT WILL THE AUTHOR BE LIABLE FOR ANY COSTS OR DAMAGES
|
||||||
|
* ARISING FROM ANY USE OF THIS CODE. NO USE OF THIS CODE IS AUTHORIZED EXCEPT UNDER
|
||||||
|
* THIS DISCLAIMER.
|
||||||
|
*
|
||||||
|
* Use at your own risk!
|
||||||
|
*/
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
typedef unsigned char byte;
|
||||||
|
|
||||||
|
#ifndef _DEBUG
|
||||||
|
# define ASSERT(s)
|
||||||
|
#else
|
||||||
|
# include <CRTDbg.h> // for _ASSERTE()
|
||||||
|
# define ASSERT _ASSERTE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HDUMP 0
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
#if HDUMP
|
||||||
|
|
||||||
|
#define CHARPRINT(a) \
|
||||||
|
{ unsigned char tchar; \
|
||||||
|
switch (a) { \
|
||||||
|
case 0x0D: /* CR */ \
|
||||||
|
tchar = 0x11; \
|
||||||
|
break; \
|
||||||
|
case 0x0A: /* LF */ \
|
||||||
|
tchar = 0x19; \
|
||||||
|
break; \
|
||||||
|
case 0x07: /* BEL */ \
|
||||||
|
tchar = 0x0F; \
|
||||||
|
break; \
|
||||||
|
case '\t': /* TAB */ \
|
||||||
|
tchar = 0x1D; \
|
||||||
|
break; \
|
||||||
|
case '\0': /* NUL */ \
|
||||||
|
tchar = 0xF8; \
|
||||||
|
break; \
|
||||||
|
case 0x08: /* BACKTAB? */ \
|
||||||
|
tchar = 0xAE; \
|
||||||
|
break; \
|
||||||
|
case 0x1A: /* BACKTAB? */ \
|
||||||
|
tchar = 0xAE; \
|
||||||
|
break; \
|
||||||
|
case 0x1B: /* BACKSPACE */ \
|
||||||
|
tchar = 0xAE; \
|
||||||
|
break; \
|
||||||
|
case ' ': /* SPACE */ \
|
||||||
|
tchar = 0xC4; \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
tchar = buf[i]; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
printf ("%c", tchar); \
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int hdump(byte* pBuf, size_t size, size_t start, size_t len)
|
||||||
|
{
|
||||||
|
int ch;
|
||||||
|
int i, firsti, lasti, tlasti;
|
||||||
|
unsigned char buf[16];
|
||||||
|
unsigned long offs, end;
|
||||||
|
firsti = (int)(start & 0xFL);
|
||||||
|
offs = start & ~0xFL;
|
||||||
|
|
||||||
|
byte* pEnd = pBuf+size;
|
||||||
|
|
||||||
|
if (pBuf == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
end = (len!=0) ? start+len : ~len;
|
||||||
|
lasti = 16;
|
||||||
|
tlasti = 8;
|
||||||
|
|
||||||
|
for ( ; offs < end; offs += 16) {
|
||||||
|
unsigned long rmdr = end - offs;
|
||||||
|
if (rmdr < 16) {
|
||||||
|
lasti = rmdr;
|
||||||
|
if (rmdr < 8) {
|
||||||
|
tlasti = rmdr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = firsti; i < lasti; i++) {
|
||||||
|
ch = (pBuf < pEnd) ? *(pBuf++) : EOF;
|
||||||
|
buf[i] = (unsigned char) ch;
|
||||||
|
if (ch == EOF) {
|
||||||
|
lasti = i;
|
||||||
|
if (i < 8) tlasti = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Print address */
|
||||||
|
printf("% 8lx: ", offs);
|
||||||
|
|
||||||
|
/* Print 2 groups of 8 chars in hex format */
|
||||||
|
for (i = 0; i < firsti && i < 8; i++) {
|
||||||
|
printf(" "); // only could happen first time around
|
||||||
|
}
|
||||||
|
for ( ; i < tlasti; i++) {
|
||||||
|
printf("%2.2x ", buf[i]);
|
||||||
|
}
|
||||||
|
for ( ; i < 8; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf(" ");
|
||||||
|
for ( ; i < firsti; i++) {
|
||||||
|
printf(" "); // only could happen first time around
|
||||||
|
}
|
||||||
|
for ( ; i < lasti; i++) {
|
||||||
|
printf("%2.2x ", (unsigned) buf[i]);
|
||||||
|
}
|
||||||
|
for ( ; i < 16; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf("| ");
|
||||||
|
|
||||||
|
/* Print 2 groups of 8 chars in char format */
|
||||||
|
for (i = 0; i < firsti && i < 8; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for ( ; i < tlasti; i++) {
|
||||||
|
CHARPRINT(buf[i])
|
||||||
|
}
|
||||||
|
for ( ; i < 8; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
for ( ; i < firsti; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
for ( ; i < lasti; i++) {
|
||||||
|
CHARPRINT(buf[i])
|
||||||
|
}
|
||||||
|
for ( ; i < 16; i++) {
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
if (ch == EOF) break;
|
||||||
|
|
||||||
|
firsti = 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif // HDUMP
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
int usage()
|
||||||
|
{
|
||||||
|
printf("ShowVer <filename>\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int error(wchar_t* sfnName)
|
||||||
|
{
|
||||||
|
DWORD dwErrCode = GetLastError();
|
||||||
|
wchar_t* sMsg;
|
||||||
|
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL,
|
||||||
|
dwErrCode,
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
||||||
|
(wchar_t*) &sMsg,
|
||||||
|
0,
|
||||||
|
NULL);
|
||||||
|
// Process any inserts in sMsg.
|
||||||
|
// ...
|
||||||
|
printf("Unable to access file \"%S\" : %S", sfnName, sMsg);
|
||||||
|
LocalFree(sMsg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileFlags ----- */
|
||||||
|
#define S_VS_FFI_SIGNATURE "VS_FFI_SIGNATURE"
|
||||||
|
#define S_VS_FFI_STRUCVERSION "VS_FFI_STRUCVERSION"
|
||||||
|
#define S_VS_FFI_FILEFLAGSMASK "VS_FFI_FILEFLAGSMASK"
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileFlags ----- */
|
||||||
|
#define S_VS_FF_DEBUG "VS_FF_DEBUG"
|
||||||
|
#define S_VS_FF_PRERELEASE "VS_FF_PRERELEASE"
|
||||||
|
#define S_VS_FF_PATCHED "VS_FF_PATCHED"
|
||||||
|
#define S_VS_FF_PRIVATEBUILD "VS_FF_PRIVATEBUILD"
|
||||||
|
#define S_VS_FF_INFOINFERRED "VS_FF_INFOINFERRED"
|
||||||
|
#define S_VS_FF_SPECIALBUILD "VS_FF_SPECIALBUILD"
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
char* showFileFlags(DWORD dwFileFlags)
|
||||||
|
{
|
||||||
|
#define MAXFLAGSSTR 200
|
||||||
|
static char s[MAXFLAGSSTR];
|
||||||
|
int pos = 0;
|
||||||
|
s[pos] = '\0';
|
||||||
|
#define VS_FF_KNOWNFLAGS (VS_FF_DEBUG \
|
||||||
|
| VS_FF_PRERELEASE \
|
||||||
|
| VS_FF_PATCHED \
|
||||||
|
| VS_FF_PRIVATEBUILD \
|
||||||
|
| VS_FF_INFOINFERRED \
|
||||||
|
| VS_FF_SPECIALBUILD \
|
||||||
|
)
|
||||||
|
if (dwFileFlags & ~VS_FF_KNOWNFLAGS) pos += sprintf(&s[pos], "0x%x", dwFileFlags & ~VS_FF_KNOWNFLAGS);
|
||||||
|
|
||||||
|
if (dwFileFlags & VS_FF_DEBUG) { if (pos) { memcpy(&s[pos], " | ", 3); pos += 3; } ; memcpy(&s[pos], S_VS_FF_DEBUG, sizeof(S_VS_FF_DEBUG)); pos += sizeof(S_VS_FF_DEBUG) - 1; }
|
||||||
|
if (dwFileFlags & VS_FF_PRERELEASE) { if (pos) { memcpy(&s[pos], " | ", 3); pos += 3; } ; memcpy(&s[pos], S_VS_FF_PRERELEASE, sizeof(S_VS_FF_PRERELEASE)); pos += sizeof(S_VS_FF_PRERELEASE) - 1; }
|
||||||
|
if (dwFileFlags & VS_FF_PATCHED) { if (pos) { memcpy(&s[pos], " | ", 3); pos += 3; } ; memcpy(&s[pos], S_VS_FF_PATCHED, sizeof(S_VS_FF_PATCHED)); pos += sizeof(S_VS_FF_PATCHED) - 1; }
|
||||||
|
if (dwFileFlags & VS_FF_PRIVATEBUILD) { if (pos) { memcpy(&s[pos], " | ", 3); pos += 3; } ; memcpy(&s[pos], S_VS_FF_PRIVATEBUILD, sizeof(S_VS_FF_PRIVATEBUILD)); pos += sizeof(S_VS_FF_PRIVATEBUILD) - 1; }
|
||||||
|
if (dwFileFlags & VS_FF_INFOINFERRED) { if (pos) { memcpy(&s[pos], " | ", 3); pos += 3; } ; memcpy(&s[pos], S_VS_FF_INFOINFERRED, sizeof(S_VS_FF_INFOINFERRED)); pos += sizeof(S_VS_FF_INFOINFERRED) - 1; }
|
||||||
|
if (dwFileFlags & VS_FF_SPECIALBUILD) { if (pos) { memcpy(&s[pos], " | ", 3); pos += 3; } ; memcpy(&s[pos], S_VS_FF_SPECIALBUILD, sizeof(S_VS_FF_SPECIALBUILD)); pos += sizeof(S_VS_FF_SPECIALBUILD) - 1; }
|
||||||
|
|
||||||
|
if (!pos) memcpy(s, "0", 2);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
/* ----- VS_VERSION.dwFileOS ----- */
|
||||||
|
#define S_VOS_UNKNOWN "VOS_UNKNOWN"
|
||||||
|
#define S_VOS_DOS "VOS_DOS"
|
||||||
|
#define S_VOS_OS216 "VOS_OS216"
|
||||||
|
#define S_VOS_OS232 "VOS_OS232"
|
||||||
|
#define S_VOS_NT "VOS_NT"
|
||||||
|
|
||||||
|
#define S_VOS__BASE "VOS__BASE"
|
||||||
|
#define S_VOS__WINDOWS16 "VOS__WINDOWS16"
|
||||||
|
#define S_VOS__PM16 "VOS__PM16"
|
||||||
|
#define S_VOS__PM32 "VOS__PM32"
|
||||||
|
#define S_VOS__WINDOWS32 "VOS__WINDOWS32"
|
||||||
|
|
||||||
|
#define S_VOS_DOS_WINDOWS16 "VOS_DOS_WINDOWS16"
|
||||||
|
#define S_VOS_DOS_WINDOWS32 "VOS_DOS_WINDOWS32"
|
||||||
|
#define S_VOS_OS216_PM16 "VOS_OS216_PM16"
|
||||||
|
#define S_VOS_OS232_PM32 "VOS_OS232_PM32"
|
||||||
|
#define S_VOS_NT_WINDOWS32 "VOS_NT_WINDOWS32"
|
||||||
|
|
||||||
|
char* showFileOS(DWORD dwFileOS)
|
||||||
|
{
|
||||||
|
switch(dwFileOS) {
|
||||||
|
case VOS_UNKNOWN: return S_VOS_UNKNOWN;
|
||||||
|
case VOS_DOS: return S_VOS_DOS;
|
||||||
|
case VOS_OS216: return S_VOS_OS216;
|
||||||
|
case VOS_OS232: return S_VOS_OS232;
|
||||||
|
case VOS_NT: return S_VOS_NT;
|
||||||
|
|
||||||
|
// case VOS__BASE: return S_VOS__BASE;
|
||||||
|
case VOS__WINDOWS16:return S_VOS__WINDOWS16;
|
||||||
|
case VOS__PM16: return S_VOS__PM16;
|
||||||
|
case VOS__PM32: return S_VOS__PM32;
|
||||||
|
case VOS__WINDOWS32:return S_VOS__WINDOWS32;
|
||||||
|
|
||||||
|
case VOS_DOS_WINDOWS16: return S_VOS_DOS_WINDOWS16;
|
||||||
|
case VOS_DOS_WINDOWS32: return S_VOS_DOS_WINDOWS32;
|
||||||
|
case VOS_OS216_PM16: return S_VOS_OS216_PM16;
|
||||||
|
case VOS_OS232_PM32: return S_VOS_OS232_PM32;
|
||||||
|
case VOS_NT_WINDOWS32: return S_VOS_NT_WINDOWS32;
|
||||||
|
|
||||||
|
default: return "Unknown FileOS";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* ----- VS_VERSION.dwFileType ----- */
|
||||||
|
#define S_VFT_UNKNOWN "VFT_UNKNOWN"
|
||||||
|
#define S_VFT_APP "VFT_APP"
|
||||||
|
#define S_VFT_DLL "VFT_DLL"
|
||||||
|
#define S_VFT_DRV "VFT_DRV"
|
||||||
|
#define S_VFT_FONT "VFT_FONT"
|
||||||
|
#define S_VFT_VXD "VFT_VXD"
|
||||||
|
#define S_VFT_STATIC_LIB "VFT_STATIC_LIB"
|
||||||
|
|
||||||
|
char* showFileType(DWORD dwFileType)
|
||||||
|
{
|
||||||
|
switch(dwFileType) {
|
||||||
|
case VFT_UNKNOWN: return S_VFT_UNKNOWN;
|
||||||
|
case VFT_APP: return S_VFT_APP;
|
||||||
|
case VFT_DLL: return S_VFT_DLL;
|
||||||
|
case VFT_DRV: return S_VFT_DRV;
|
||||||
|
case VFT_FONT: return S_VFT_FONT;
|
||||||
|
case VFT_VXD: return S_VFT_VXD;
|
||||||
|
case VFT_STATIC_LIB:return S_VFT_STATIC_LIB;
|
||||||
|
default: return "Unknown FileType";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV ----- */
|
||||||
|
#define S_VFT2_UNKNOWN "VFT2_UNKNOWN"
|
||||||
|
#define S_VFT2_DRV_PRINTER "VFT2_DRV_PRINTER"
|
||||||
|
#define S_VFT2_DRV_KEYBOARD "VFT2_DRV_KEYBOARD"
|
||||||
|
#define S_VFT2_DRV_LANGUAGE "VFT2_DRV_LANGUAGE"
|
||||||
|
#define S_VFT2_DRV_DISPLAY "VFT2_DRV_DISPLAY"
|
||||||
|
#define S_VFT2_DRV_MOUSE "VFT2_DRV_MOUSE"
|
||||||
|
#define S_VFT2_DRV_NETWORK "VFT2_DRV_NETWORK"
|
||||||
|
#define S_VFT2_DRV_SYSTEM "VFT2_DRV_SYSTEM"
|
||||||
|
#define S_VFT2_DRV_INSTALLABLE "VFT2_DRV_INSTALLABLE"
|
||||||
|
#define S_VFT2_DRV_SOUND "VFT2_DRV_SOUND"
|
||||||
|
#define S_VFT2_DRV_COMM "VFT2_DRV_COMM"
|
||||||
|
#define S_VFT2_DRV_INPUTMETHOD "VFT2_DRV_INPUTMETHOD"
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT ----- */
|
||||||
|
#define S_VFT2_FONT_RASTER "VFT2_FONT_RASTER"
|
||||||
|
#define S_VFT2_FONT_VECTOR "VFT2_FONT_VECTOR"
|
||||||
|
#define S_VFT2_FONT_TRUETYPE "VFT2_FONT_TRUETYPE"
|
||||||
|
|
||||||
|
char* showFileSubtype(DWORD dwFileType, DWORD dwFileSubtype)
|
||||||
|
{
|
||||||
|
static char s[50];
|
||||||
|
switch(dwFileType) {
|
||||||
|
case VFT_DRV:
|
||||||
|
switch(dwFileSubtype) {
|
||||||
|
case VFT2_UNKNOWN: return "FileSubtype: " S_VFT2_UNKNOWN;
|
||||||
|
case VFT2_DRV_PRINTER: return "FileSubtype: " S_VFT2_DRV_PRINTER;
|
||||||
|
case VFT2_DRV_KEYBOARD: return "FileSubtype: " S_VFT2_DRV_KEYBOARD;
|
||||||
|
case VFT2_DRV_LANGUAGE: return "FileSubtype: " S_VFT2_DRV_LANGUAGE;
|
||||||
|
case VFT2_DRV_DISPLAY: return "FileSubtype: " S_VFT2_DRV_DISPLAY;
|
||||||
|
case VFT2_DRV_MOUSE: return "FileSubtype: " S_VFT2_DRV_MOUSE;
|
||||||
|
case VFT2_DRV_NETWORK: return "FileSubtype: " S_VFT2_DRV_NETWORK;
|
||||||
|
case VFT2_DRV_SYSTEM: return "FileSubtype: " S_VFT2_DRV_SYSTEM;
|
||||||
|
case VFT2_DRV_INSTALLABLE:return "FileSubtype: " S_VFT2_DRV_INSTALLABLE;
|
||||||
|
case VFT2_DRV_SOUND: return "FileSubtype: " S_VFT2_DRV_SOUND;
|
||||||
|
case VFT2_DRV_COMM: return "FileSubtype: " S_VFT2_DRV_COMM;
|
||||||
|
case VFT2_DRV_INPUTMETHOD:return "FileSubtype: " S_VFT2_DRV_INPUTMETHOD;
|
||||||
|
default: s[0] = '\0'; sprintf(s, "Unknown FileSubtype: %x", dwFileSubtype); return s;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VFT_FONT:
|
||||||
|
switch(dwFileSubtype) {
|
||||||
|
case VFT2_FONT_RASTER: return "FileSubtype: " S_VFT2_FONT_RASTER;
|
||||||
|
case VFT2_FONT_VECTOR: return "FileSubtype: " S_VFT2_FONT_VECTOR;
|
||||||
|
case VFT2_FONT_TRUETYPE:return "FileSubtype: " S_VFT2_FONT_TRUETYPE;
|
||||||
|
default: s[0] = '\0'; sprintf(s, "Unknown FileSubtype: %x", dwFileSubtype); return s;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: s[0] = '\0'; if (dwFileSubtype) sprintf(s, ", FileSubtype: %x", dwFileSubtype); return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void showFIXEDFILEINFO(VS_FIXEDFILEINFO* pValue)
|
||||||
|
{
|
||||||
|
ASSERT(VS_FFI_SIGNATURE == pValue->dwSignature);
|
||||||
|
ASSERT(VS_FFI_STRUCVERSION == pValue->dwStrucVersion);
|
||||||
|
|
||||||
|
// dump the VS_FIXEDFILEINFO numbers
|
||||||
|
printf(" Signature: %08x\n"
|
||||||
|
, pValue->dwSignature
|
||||||
|
// , (VS_FFI_SIGNATURE == pValue->dwSignature) ? "" : " (expected " S_VS_FFI_SIGNATURE
|
||||||
|
);
|
||||||
|
printf(" StrucVersion: %d.%d\n"
|
||||||
|
, pValue->dwStrucVersion >> 16, pValue->dwStrucVersion & 0xFFFF);
|
||||||
|
printf(" FileVersion: %d.%d.%d.%d\n"
|
||||||
|
, pValue->dwFileVersionMS >> 16, pValue->dwFileVersionMS & 0xFFFF
|
||||||
|
, pValue->dwFileVersionLS >> 16, pValue->dwFileVersionLS & 0xFFFF);
|
||||||
|
printf(" ProductVersion: %d.%d.%d.%d\n"
|
||||||
|
, pValue->dwProductVersionMS >> 16, pValue->dwProductVersionMS & 0xFFFF
|
||||||
|
, pValue->dwProductVersionLS >> 16, pValue->dwProductVersionLS & 0xFFFF);
|
||||||
|
printf(" FileFlagsMask: %s%x\n"
|
||||||
|
, pValue->dwFileFlagsMask ? "0x" : ""
|
||||||
|
, pValue->dwFileFlagsMask);
|
||||||
|
if (pValue->dwFileFlags)
|
||||||
|
printf(" FileFlags: 0x%x (%s)\n"
|
||||||
|
, pValue->dwFileFlags
|
||||||
|
, showFileFlags(pValue->dwFileFlags));
|
||||||
|
else
|
||||||
|
printf(" FileFlags: 0\n");
|
||||||
|
printf(" FileOS: %s\n"
|
||||||
|
, showFileOS(pValue->dwFileOS));
|
||||||
|
printf(" FileType: %s%s\n" //FileSubtype
|
||||||
|
, showFileType(pValue->dwFileType)
|
||||||
|
, showFileSubtype(pValue->dwFileType, pValue->dwFileSubtype));
|
||||||
|
printf(" FileDate: %x.%x\n"
|
||||||
|
, pValue->dwFileDateMS, pValue->dwFileDateLS);
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
struct VS_VERSIONINFO {
|
||||||
|
WORD wLength;
|
||||||
|
WORD wValueLength;
|
||||||
|
WORD wType;
|
||||||
|
WCHAR szKey[1];
|
||||||
|
WORD Padding1[1];
|
||||||
|
VS_FIXEDFILEINFO Value;
|
||||||
|
WORD Padding2[1];
|
||||||
|
WORD Children[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct String {
|
||||||
|
WORD wLength;
|
||||||
|
WORD wValueLength;
|
||||||
|
WORD wType;
|
||||||
|
WCHAR szKey[1];
|
||||||
|
WORD Padding[1];
|
||||||
|
WORD Value[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct StringTable {
|
||||||
|
WORD wLength;
|
||||||
|
WORD wValueLength;
|
||||||
|
WORD wType;
|
||||||
|
WCHAR szKey[1];
|
||||||
|
WORD Padding[1];
|
||||||
|
String Children[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct StringFileInfo {
|
||||||
|
WORD wLength;
|
||||||
|
WORD wValueLength;
|
||||||
|
WORD wType;
|
||||||
|
WCHAR szKey[1];
|
||||||
|
WORD Padding[1];
|
||||||
|
StringTable Children[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Var {
|
||||||
|
WORD wLength;
|
||||||
|
WORD wValueLength;
|
||||||
|
WORD wType;
|
||||||
|
WCHAR szKey[1];
|
||||||
|
WORD Padding[1];
|
||||||
|
DWORD Value[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VarFileInfo {
|
||||||
|
WORD wLength;
|
||||||
|
WORD wValueLength;
|
||||||
|
WORD wType;
|
||||||
|
WCHAR szKey[1];
|
||||||
|
WORD Padding[1];
|
||||||
|
Var Children[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int showVer(void* pVer, DWORD size)
|
||||||
|
{
|
||||||
|
// Interpret the VS_VERSIONINFO header pseudo-struct
|
||||||
|
VS_VERSIONINFO* pVS = (VS_VERSIONINFO*)pVer;
|
||||||
|
#define roundoffs(a,b,r) (((byte*)(b) - (byte*)(a) + ((r)-1)) & ~((r)-1))
|
||||||
|
#define roundpos(b, a, r) (((byte*)(a))+roundoffs(a,b,r))
|
||||||
|
// byte* nEndRaw = roundpos((((byte*)pVer) + size), pVer, 4);
|
||||||
|
// byte* nEndNamed = roundpos((((byte*) pVS) + pVS->wLength), pVS, 4);
|
||||||
|
// ASSERT(nEndRaw == nEndNamed); // size reported from GetFileVersionInfoSize is much padded for some reason...
|
||||||
|
|
||||||
|
ASSERT(!wcscmp(pVS->szKey, L"VS_VERSION_INFO"));
|
||||||
|
printf(" (type:%d)\n", pVS->wType);
|
||||||
|
byte* pVt = (byte*) &pVS->szKey[wcslen(pVS->szKey)+1];
|
||||||
|
VS_FIXEDFILEINFO* pValue = (VS_FIXEDFILEINFO*) roundpos(pVt, pVS, 4);
|
||||||
|
if (pVS->wValueLength) {
|
||||||
|
showFIXEDFILEINFO(pValue); // Show the 'Value' element
|
||||||
|
}
|
||||||
|
// Iterate over the 'Children' elements of VS_VERSIONINFO (either StringFileInfo or VarFileInfo)
|
||||||
|
StringFileInfo* pSFI = (StringFileInfo*) roundpos(((byte*)pValue) + pVS->wValueLength, pValue, 4);
|
||||||
|
for ( ; ((byte*) pSFI) < (((byte*) pVS) + pVS->wLength); pSFI = (StringFileInfo*)roundpos((((byte*) pSFI) + pSFI->wLength), pSFI, 4)) { // StringFileInfo / VarFileInfo
|
||||||
|
if (!wcscmp(pSFI->szKey, L"StringFileInfo")) {
|
||||||
|
// The current child is a StringFileInfo element
|
||||||
|
ASSERT(1 == pSFI->wType);
|
||||||
|
ASSERT(!pSFI->wValueLength);
|
||||||
|
// Iterate through the StringTable elements of StringFileInfo
|
||||||
|
StringTable* pST = (StringTable*) roundpos(&pSFI->szKey[wcslen(pSFI->szKey)+1], pSFI, 4);
|
||||||
|
for ( ; ((byte*) pST) < (((byte*) pSFI) + pSFI->wLength); pST = (StringTable*)roundpos((((byte*) pST) + pST->wLength), pST, 4)) {
|
||||||
|
printf(" LangID: %S\n", pST->szKey);
|
||||||
|
ASSERT(!pST->wValueLength);
|
||||||
|
// Iterate through the String elements of StringTable
|
||||||
|
String* pS = (String*) roundpos(&pST->szKey[wcslen(pST->szKey)+1], pST, 4);
|
||||||
|
for ( ; ((byte*) pS) < (((byte*) pST) + pST->wLength); pS = (String*) roundpos((((byte*) pS) + pS->wLength), pS, 4)) {
|
||||||
|
wchar_t* psVal = (wchar_t*) roundpos(&pS->szKey[wcslen(pS->szKey)+1], pS, 4);
|
||||||
|
printf(" %-18S: %.*S\n", pS->szKey, pS->wValueLength, psVal); // print <sKey> : <sValue>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// The current child is a VarFileInfo element
|
||||||
|
ASSERT(1 == pSFI->wType); // ?? it just seems to be this way...
|
||||||
|
VarFileInfo* pVFI = (VarFileInfo*) pSFI;
|
||||||
|
ASSERT(!wcscmp(pVFI->szKey, L"VarFileInfo"));
|
||||||
|
ASSERT(!pVFI->wValueLength);
|
||||||
|
// Iterate through the Var elements of VarFileInfo (there should be only one, but just in case...)
|
||||||
|
Var* pV = (Var*) roundpos(&pVFI->szKey[wcslen(pVFI->szKey)+1], pVFI, 4);
|
||||||
|
for ( ; ((byte*) pV) < (((byte*) pVFI) + pVFI->wLength); pV = (Var*)roundpos((((byte*) pV) + pV->wLength), pV, 4)) {
|
||||||
|
printf(" %S: ", pV->szKey);
|
||||||
|
// Iterate through the array of pairs of 16-bit language ID values that make up the standard 'Translation' VarFileInfo element.
|
||||||
|
WORD* pwV = (WORD*) roundpos(&pV->szKey[wcslen(pV->szKey)+1], pV, 4);
|
||||||
|
for (WORD* wpos = pwV ; ((byte*) wpos) < (((byte*) pwV) + pV->wValueLength); wpos+=2) {
|
||||||
|
printf("%04x%04x ", (int)*wpos++, (int)(*(wpos+1)));
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ASSERT((byte*) pSFI == roundpos((((byte*) pVS) + pVS->wLength), pVS, 4));
|
||||||
|
return pValue->dwFileVersionMS; // !!! return major version number
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int wmain(int argc, wchar_t *argv[], wchar_t *envp[])
|
||||||
|
// Prints out the version info of the file named in argv[1], and returns the major version number as the exit code
|
||||||
|
{
|
||||||
|
if (argc <= 1) return usage();
|
||||||
|
|
||||||
|
wchar_t* sfnFile = argv[1];
|
||||||
|
DWORD dummy;
|
||||||
|
DWORD size = GetFileVersionInfoSizeW(sfnFile, &dummy);
|
||||||
|
if (!size) return error(sfnFile);
|
||||||
|
void* pVer = _alloca(size); memset(pVer, 0, size);
|
||||||
|
if (0 == GetFileVersionInfoW(sfnFile, 0, size, pVer)) return error(sfnFile);
|
||||||
|
#if HDUMP
|
||||||
|
printf("VERSIONINFO dump for file \"%S\":\n", sfnFile);
|
||||||
|
hdump((byte*) pVer, size, 0, 0);
|
||||||
|
#endif // HDUMP
|
||||||
|
printf("VERSIONINFO for file \"%S\": ", sfnFile);
|
||||||
|
return showVer(pVer, size);
|
||||||
|
}
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
112
libexec/ShowVer/ShowVer.dsp
Normal file
112
libexec/ShowVer/ShowVer.dsp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="ShowVer" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||||
|
|
||||||
|
CFG=ShowVer - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "ShowVer.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "ShowVer.mak" CFG="ShowVer - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "ShowVer - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "ShowVer - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ShowVer - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
|
||||||
|
# ADD CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FD /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 Version.lib /nologo /subsystem:console /machine:I386
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ShowVer - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 Version.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "ShowVer - Win32 Release"
|
||||||
|
# Name "ShowVer - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ShowVer.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ShowVer.rc
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# End Group
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ReadMe.txt
|
||||||
|
# End Source File
|
||||||
|
# End Target
|
||||||
|
# End Project
|
110
libexec/ShowVer/ShowVer.rc
Normal file
110
libexec/ShowVer/ShowVer.rc
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
//Microsoft Developer Studio generated resource script.
|
||||||
|
//
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
#include "afxres.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// English (U.S.) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
#ifndef _MAC
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Version
|
||||||
|
//
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION 1,0,0,1
|
||||||
|
PRODUCTVERSION 1,0,0,1
|
||||||
|
FILEFLAGSMASK 0x3fL
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x1L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x4L
|
||||||
|
FILETYPE 0x1L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "AuthorName", "Ted Peck\0"
|
||||||
|
VALUE "Comments", "\0"
|
||||||
|
VALUE "CompanyName", "\0"
|
||||||
|
VALUE "FileDescription", "ShowVer console app for VersionInfo display\0"
|
||||||
|
VALUE "FileVersion", "1, 0, 0, 1\0"
|
||||||
|
VALUE "InternalName", "ShowVer\0"
|
||||||
|
VALUE "LegalCopyright", "Copyright © 2002\0"
|
||||||
|
VALUE "LegalTrademarks", "\0"
|
||||||
|
VALUE "OriginalFilename", "ShowVer.exe\0"
|
||||||
|
VALUE "PrivateBuild", "\0"
|
||||||
|
VALUE "ProductName", "ShowVer\0"
|
||||||
|
VALUE "ProductVersion", "1, 0, 0, 1\0"
|
||||||
|
VALUE "SpecialBuild", "\0"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x409, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // !_MAC
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"resource.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"#include ""afxres.h""\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#endif // English (U.S.) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
BIN
libexec/UnRAR.exe
Normal file
BIN
libexec/UnRAR.exe
Normal file
Binary file not shown.
34
libexec/UnRAR/license.txt
Normal file
34
libexec/UnRAR/license.txt
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
****** ***** ****** UnRAR - free utility for RAR archives
|
||||||
|
** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
****** ******* ****** License for use and distribution of
|
||||||
|
** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
** ** ** ** ** ** FREEWARE version
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The UnRAR utility is freeware. This means:
|
||||||
|
|
||||||
|
1. All copyrights to RAR and the utility UnRAR are exclusively
|
||||||
|
owned by the author - Alexander Roshal.
|
||||||
|
|
||||||
|
2. The UnRAR utility may be freely distributed. It is allowed
|
||||||
|
to distribute UnRAR inside of other software packages.
|
||||||
|
|
||||||
|
3. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS".
|
||||||
|
NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT
|
||||||
|
YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS,
|
||||||
|
DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING
|
||||||
|
OR MISUSING THIS SOFTWARE.
|
||||||
|
|
||||||
|
4. Neither RAR binary code, WinRAR binary code, UnRAR source or UnRAR
|
||||||
|
binary code may be used or reverse engineered to re-create the RAR
|
||||||
|
compression algorithm, which is proprietary, without written
|
||||||
|
permission of the author.
|
||||||
|
|
||||||
|
5. If you don't agree with terms of the license you must remove
|
||||||
|
UnRAR files from your storage devices and cease to use the
|
||||||
|
utility.
|
||||||
|
|
||||||
|
Thank you for your interest in RAR and UnRAR.
|
||||||
|
|
||||||
|
|
||||||
|
Alexander L. Roshal
|
@ -1,92 +0,0 @@
|
|||||||
#!/usr/bin/ruby
|
|
||||||
require 'erb'
|
|
||||||
|
|
||||||
# Determines package name from the origin url on github. It's hackish, but it
|
|
||||||
# works (mostly).
|
|
||||||
def pkgname
|
|
||||||
# originurl = `basename $(git config --get remote.origin.url)`.strip
|
|
||||||
pkgname = `basename $(git config --get remote.origin.url) .git | tr '\n' ' '`
|
|
||||||
# _, pkgname = originurl.match(/\/([a-z0-9\-_]+).git/i).to_a
|
|
||||||
pkgname
|
|
||||||
end
|
|
||||||
|
|
||||||
# Accepts a hash of git log data and returns a properly formatted debian
|
|
||||||
# changelog entry.
|
|
||||||
def debchangelog(logdata)
|
|
||||||
template = <<-EOF
|
|
||||||
<%=PKGNAME%> (<%=logdata[:tag]%>) unstable; urgency=low
|
|
||||||
|
|
||||||
* <%=logdata[:subj]%>
|
|
||||||
|
|
||||||
-- <%=logdata[:name]%> <%=logdata[:date]%>
|
|
||||||
|
|
||||||
EOF
|
|
||||||
ERB.new(template).result(binding)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Checks to see if the repository has any tags already.
|
|
||||||
def repo_has_tag?
|
|
||||||
`git describe --tags 2>&1`
|
|
||||||
return ($? == 0)? true : false
|
|
||||||
end
|
|
||||||
|
|
||||||
# If the repository has no tags, we need to make one so we can get some kind
|
|
||||||
# of versioning number for the changelog.
|
|
||||||
def make_temporary_tag
|
|
||||||
firstcommit = `git log --format=%H | tail -1`.strip
|
|
||||||
`git tag #{TEMPTAG} #{firstcommit}`
|
|
||||||
end
|
|
||||||
|
|
||||||
# Removes the tag we added if the repo had no tags.
|
|
||||||
def cleanup_temporary_tag
|
|
||||||
`git tag -d #{TEMPTAG}`
|
|
||||||
end
|
|
||||||
|
|
||||||
# Removes jenkins build tags (if they exist)
|
|
||||||
def remove_jenkins_tags
|
|
||||||
IO.popen("git tag -l 'jenkins-*'").readlines.each do |tag|
|
|
||||||
`git tag -d #{tag}`
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Get the name of this repository
|
|
||||||
PKGNAME = pkgname
|
|
||||||
|
|
||||||
# Name for the temporary tag (only used if the repository has no tags)
|
|
||||||
TEMPTAG = 'GOPSI'
|
|
||||||
#TEMPTAG = pkgname
|
|
||||||
|
|
||||||
remove_jenkins_tags
|
|
||||||
|
|
||||||
if repo_has_tag?
|
|
||||||
dotagcleanup = false
|
|
||||||
else
|
|
||||||
dotagcleanup = true
|
|
||||||
make_temporary_tag
|
|
||||||
end
|
|
||||||
|
|
||||||
# Loop through the git log output and grab four lines at a time to parse.
|
|
||||||
gitlogcmd = %{git log --pretty=format:'hash: %H%nname: %aN <%aE>%ndate: %cD%nsubj: %s'}
|
|
||||||
IO.popen(gitlogcmd).readlines.each_slice(4) do |chunk|
|
|
||||||
|
|
||||||
temphash = {}
|
|
||||||
|
|
||||||
# split each line on the first colon and use what's on the left as the
|
|
||||||
# symbols within the hash
|
|
||||||
chunk.map { |line| line.split(/: /,2) }.each do |type, data|
|
|
||||||
temphash[type.to_sym] = data.strip
|
|
||||||
end
|
|
||||||
|
|
||||||
# dig up the most recent tag which contains the commit
|
|
||||||
temphash[:tag] = `git describe --tags #{temphash[:hash]} 2>/dev/null`.strip
|
|
||||||
if $? != 0
|
|
||||||
dotagcleanup = true
|
|
||||||
make_temporary_tag
|
|
||||||
temphash[:tag] = `git describe --tags #{temphash[:hash]}`.strip
|
|
||||||
end
|
|
||||||
|
|
||||||
puts debchangelog(temphash)
|
|
||||||
end
|
|
||||||
|
|
||||||
# If we added a temporary tag, let's remove it
|
|
||||||
cleanup_temporary_tag
|
|
BIN
libexec/inifile.exe
Normal file
BIN
libexec/inifile.exe
Normal file
Binary file not shown.
42
libexec/inifile/GetOutput.txt
Normal file
42
libexec/inifile/GetOutput.txt
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
To read statements from an INI file you have to capture the output
|
||||||
|
of INIfile.exe, which can be done either by ...
|
||||||
|
|
||||||
|
+ redirecting the output into a temporary file (all Windows versions),
|
||||||
|
+ using a FOR /F construct (requires Win2000, XP ++)
|
||||||
|
|
||||||
|
Assuming you have the INI file "My.ini" in the current directory,
|
||||||
|
with a section [Profile], and the item "Name":
|
||||||
|
|
||||||
|
[Profile]
|
||||||
|
Name=John Doe
|
||||||
|
|
||||||
|
+++ Example with output redirection:
|
||||||
|
|
||||||
|
INIfile.exe My.ini [Profile] Name > temp.bat
|
||||||
|
call temp.bat
|
||||||
|
|
||||||
|
INIfile.exe outputs the statement: SET Name=John Doe
|
||||||
|
which is redirected and written into "temp.bat",
|
||||||
|
which is CALLed to run the SET statement.
|
||||||
|
|
||||||
|
Note that this method produces a temporary file that you have
|
||||||
|
to delete later.
|
||||||
|
|
||||||
|
|
||||||
|
+++ Example with FOR construct (asssuming in a batch file):
|
||||||
|
|
||||||
|
for /f "delims=" %%a in ('INIfile.exe My.ini [Profile] Name') do %%a
|
||||||
|
|
||||||
|
This will capture and run the output line(s) from the command
|
||||||
|
which is enclosed in single(!) quote marks.
|
||||||
|
Double quote marks may be used within the command, if necessary.
|
||||||
|
For details see FOR /? at the command prompt.
|
||||||
|
|
||||||
|
|
||||||
|
In any case the variable %Name% will hold the string that was assigend
|
||||||
|
in the INI file. Note that the variable may be empty.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
|
||||||
|
|
121
libexec/inifile/inifile.txt
Normal file
121
libexec/inifile/inifile.txt
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
INIFILE - 32 bit tool, Ver 1.6 (c) 2006-2009, Horst Schaeffer
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
This tool handles Windows type INI files with section names in square brackets,
|
||||||
|
and assignments of the form: item=string (case ignored for section and item names).
|
||||||
|
The INI file must exist!
|
||||||
|
This program uses the functions supplied by the Microsoft Windows API.
|
||||||
|
|
||||||
|
++++ Change or add an assignment
|
||||||
|
|
||||||
|
Syntax: INIFILE inifileName [section] item=string
|
||||||
|
|
||||||
|
Example: INIFILE c:\some\where\program.ini [Profile] Name=John
|
||||||
|
|
||||||
|
The string is taken up to the end of the line.
|
||||||
|
Optionally, the (entire!) assignment may be enclosed in (double) quote marks
|
||||||
|
(in case there are redirection symbols in it).
|
||||||
|
In any case the item name as well as the string will be taken without leading
|
||||||
|
and trailing spaces.
|
||||||
|
|
||||||
|
Example: INIFILE c:\some\where\program.ini [Profile] "Name = John"
|
||||||
|
|
||||||
|
If the item is not found, a new line will be added.
|
||||||
|
If the section is not found it will be generated.
|
||||||
|
|
||||||
|
|
||||||
|
++++ Remove assignment
|
||||||
|
|
||||||
|
To remove an item: omit the string (the equal sign is mandatory)
|
||||||
|
|
||||||
|
Syntax: INIFILE inifileName [section] item=
|
||||||
|
|
||||||
|
Example: INIFILE c:\some\where\program.ini [Profile] Name=
|
||||||
|
|
||||||
|
The complete item (not just the assigned string) is removed.
|
||||||
|
If there are no items left, the section will NOT be removed.
|
||||||
|
No error will be reported (Errorlevel), if the item does not exist.
|
||||||
|
|
||||||
|
++++ Clear assignment
|
||||||
|
|
||||||
|
If you want to produce an empty assignment without removing it,
|
||||||
|
use two equal signs.
|
||||||
|
|
||||||
|
Syntax: INIFILE inifileName [section] item==
|
||||||
|
|
||||||
|
|
||||||
|
++++ Remove entire section
|
||||||
|
|
||||||
|
To remove a section the security option /REMOVE (case ignored)
|
||||||
|
is required. No error reported, if the section does not exist.
|
||||||
|
|
||||||
|
Syntax: INIFILE inifileName [section] /remove
|
||||||
|
|
||||||
|
|
||||||
|
++++ Get an assignment
|
||||||
|
|
||||||
|
Syntax: INIFILE inifileName [section] item
|
||||||
|
|
||||||
|
(Note that an additional equal sign would remove the item!!!)
|
||||||
|
|
||||||
|
The program will generate a SET statement, and send it to STDOUT.
|
||||||
|
If you want to produce an environmental variable, redirect the output
|
||||||
|
to a temporary batch file, and execute it (see also: GetOutput.txt)
|
||||||
|
Note: Character set is ANSI (Windows), not OEM (DOS).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
INIfile c:\some\where\program.ini [Profile] Name > temp.bat
|
||||||
|
call temp.bat
|
||||||
|
|
||||||
|
If the assignment could not be found for any reason,
|
||||||
|
the SET statement will be empty (set var=), which clears the variable.
|
||||||
|
|
||||||
|
Note: This method cannot be used when equal signs or redirection
|
||||||
|
symbols are expected in the assigned string.
|
||||||
|
|
||||||
|
++++ Get all assignments of a section
|
||||||
|
|
||||||
|
Syntax: INIFILE inifileName [section]
|
||||||
|
|
||||||
|
SET statements will be generated for all items in the section.
|
||||||
|
|
||||||
|
|
||||||
|
++++ Errorlevels
|
||||||
|
|
||||||
|
Errorlevel > 0 indicates an error (message to STDERR)
|
||||||
|
0 done
|
||||||
|
1 INI file does not exist
|
||||||
|
2 Section name in square brackets was not given
|
||||||
|
255 No INI file specified or help requested (/?)
|
||||||
|
|
||||||
|
The INI file operations are done through the Windows API which handles spaces,
|
||||||
|
upper/lower case etc.. There may be a size limit or a problem with long file
|
||||||
|
names in older Windows versions. Please test.
|
||||||
|
|
||||||
|
Note: In case you have used my old DOS program "INIFILE.COM" make sure that this new
|
||||||
|
version is found through your PATH assignment (or use the command "inifile.exe").
|
||||||
|
|
||||||
|
++++ History
|
||||||
|
|
||||||
|
version 1.6, 27 May 2009: Compiled with PB 4.30
|
||||||
|
version 1.5, 29 Sep 2006: Equal signs allowed in assigned string (though not recommended)
|
||||||
|
version 1.4, 02 Aug 2006: Added function: clear assignment without removing
|
||||||
|
version 1.1, 12 Feb 2006: Added: read all items of section
|
||||||
|
version 1.0, 05 Feb 2006
|
||||||
|
|
||||||
|
++++ Disclaimer, Copyright
|
||||||
|
|
||||||
|
This program is distributed as "freeware", copyright reserved by the
|
||||||
|
author. There are no warranties of any kind, nor any liability by
|
||||||
|
the author. Users accept full responsibility for the use they make
|
||||||
|
of the software and for any damage caused thereby.
|
||||||
|
|
||||||
|
Source available: http://www.horstmuc.de/source/inifile16.zip
|
||||||
|
|
||||||
|
Contact the author:
|
||||||
|
|
||||||
|
mailto:horst.schaeffer@gmx.net
|
||||||
|
http://www.horstmuc.de/
|
||||||
|
|
||||||
|
|
||||||
|
*** 27 May 2009
|
BIN
libexec/innounp.exe
Normal file
BIN
libexec/innounp.exe
Normal file
Binary file not shown.
626
libexec/innounp/innounp.htm
Normal file
626
libexec/innounp/innounp.htm
Normal file
@ -0,0 +1,626 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>innounp, the Inno Setup Unpacker</title>
|
||||||
|
<style>
|
||||||
|
body { font-family: Verdana, Myriad Web, Syntax, sans-serif; font-size: 90%; }
|
||||||
|
h1{
|
||||||
|
font-family:Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
|
||||||
|
font-size-adjust:.4;
|
||||||
|
font-size:2.0em;
|
||||||
|
font-weight:600;
|
||||||
|
font-style:normal;
|
||||||
|
text-decoration:none;
|
||||||
|
word-spacing:normal;
|
||||||
|
letter-spacing:normal;
|
||||||
|
text-transform:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2{
|
||||||
|
font-family:Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
|
||||||
|
font-size-adjust:.4;
|
||||||
|
font-size:1.75em;
|
||||||
|
font-weight:500;
|
||||||
|
font-style:normal;
|
||||||
|
text-decoration:none;
|
||||||
|
word-spacing:normal;
|
||||||
|
letter-spacing:normal;
|
||||||
|
text-transform:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3{
|
||||||
|
font-family:Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
|
||||||
|
font-size-adjust:.4;
|
||||||
|
font-size:1.58em;
|
||||||
|
font-weight:600;
|
||||||
|
font-style:italic;
|
||||||
|
text-decoration:none;
|
||||||
|
word-spacing:normal;
|
||||||
|
letter-spacing:normal;
|
||||||
|
text-transform:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4{
|
||||||
|
font-family:Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
|
||||||
|
font-size-adjust:.4;
|
||||||
|
font-size:1.33em;
|
||||||
|
font-weight:600;
|
||||||
|
font-style:normal;
|
||||||
|
text-decoration:none;
|
||||||
|
word-spacing:normal;
|
||||||
|
letter-spacing:normal;
|
||||||
|
text-transform:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5, dt{
|
||||||
|
font-family:Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
|
||||||
|
font-size-adjust:.4;
|
||||||
|
font-size:1.17em;
|
||||||
|
font-weight:600;
|
||||||
|
font-style:italic;
|
||||||
|
text-decoration:none;
|
||||||
|
word-spacing:normal;
|
||||||
|
letter-spacing:normal;
|
||||||
|
text-transform:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6{
|
||||||
|
font-family:Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
|
||||||
|
font-size-adjust:.4;
|
||||||
|
font-size:1em;
|
||||||
|
font-weight:700;
|
||||||
|
font-style:normal;
|
||||||
|
text-decoration:none;
|
||||||
|
word-spacing:normal;
|
||||||
|
letter-spacing:.1em;
|
||||||
|
font-variant:small-caps
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6, dt, th, thead, tfoot{
|
||||||
|
color:#C00;
|
||||||
|
}
|
||||||
|
|
||||||
|
body{
|
||||||
|
line-height:1.58em;
|
||||||
|
margin-top:1.58em;
|
||||||
|
margin-left:5%;
|
||||||
|
margin-right:5%;
|
||||||
|
margin-bottom:1.58em;
|
||||||
|
padding-top:0;
|
||||||
|
padding-left:0;
|
||||||
|
padding-right:0;
|
||||||
|
padding-bottom:0;
|
||||||
|
border-top:0;
|
||||||
|
border-left:0;
|
||||||
|
border-bottom:0;
|
||||||
|
border-right:0;
|
||||||
|
width:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre { line-height: 1.2em; font-size: 110%; }
|
||||||
|
tt { font-size: 110%; }
|
||||||
|
|
||||||
|
.boxed { border: 1px solid black; background-color: #eeeeee; color: blue; }
|
||||||
|
|
||||||
|
.quicklink :link, .quicklink :visited {
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: #eeeeee;
|
||||||
|
border-top: 1px dashed #222222;
|
||||||
|
border-bottom: 1px dashed #222222;
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
|
.quicklink :hover {
|
||||||
|
text-decoration: none;
|
||||||
|
border-top: 1px dashed #222222;
|
||||||
|
border-bottom: 1px dashed #222222;
|
||||||
|
background-color: #aadddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav :link, .nav :visited { text-decoration: none; }
|
||||||
|
.nav :visited { color: blue; }
|
||||||
|
.nav :hover { text-decoration: underline; color: red; }
|
||||||
|
|
||||||
|
:link { color: blue; }
|
||||||
|
:hover { color: red; }
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!--<div style="float: right; width: 16em; text-align: center; margin-left: 2em;"><span class=quicklink>
|
||||||
|
<a href="http://innounp.sourceforge.net/get-latest-innounp.php">
|
||||||
|
<span class=boxed>↓</span> Download latest version</a></span><br>
|
||||||
|
<small>if the above link does not work, please go to the
|
||||||
|
<a href="http://sourceforge.net/project/showfiles.php?group_id=102423">download page</a></small></div>-->
|
||||||
|
<p>innounp, the Inno Setup Unpacker<br>
|
||||||
|
Version 0.39<br>
|
||||||
|
Supports Inno Setup versions 2.0.8 through 5.5.3</p>
|
||||||
|
<p><a href="http://www.jrsoftware.org/isinfo.php">Inno Setup</a> is a popular program
|
||||||
|
for making software installations. Unfortunately, there is no official unpacker - the
|
||||||
|
only method of getting the files out of the self-extracting executable
|
||||||
|
is to run it. One piece of software that addresses this issue is Sergei
|
||||||
|
Wanin's <a href="http://plugring.farmanager.com/downld/files/instexpl_v0.3.rar">InstallExplorer</a>,
|
||||||
|
a plug-in for the <a href="http://farmanager.com">FAR Manager</a> that unpacks
|
||||||
|
several types of installations, including Inno Setup (IS). But since it is not updated in a
|
||||||
|
timely fashion, and so does not support the latest IS most of the time, this program was born.
|
||||||
|
The advantages over InstallExplorer are:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Innounp is open source and based on IS source. Therefore, it is more likely
|
||||||
|
to support future IS versions.</li>
|
||||||
|
<li>It recovers portions of the installation script (.iss file), including the registry
|
||||||
|
changes and the compiled Innerfuse/RemObjects Pascal Script, if available.</li>
|
||||||
|
</ul>
|
||||||
|
<p>If you want to report a bug, request a feature, or discuss anything else related
|
||||||
|
to the program, please write to the forum.</p>
|
||||||
|
<dl class="nav">
|
||||||
|
<dt>On this page:</dt>
|
||||||
|
<dd><a href="#Usage">Usage</a> |
|
||||||
|
<a href="#ReportingBugs">How to report bugs</a> |
|
||||||
|
<a href="#History">What's new/History</a> |
|
||||||
|
<a href="#MultiArc">MultiArc settings</a> |
|
||||||
|
<a href="#Copyrights">Copyrights and licensing</a></dd>
|
||||||
|
<dt>In other places:</dt>
|
||||||
|
<dd><a href="http://sourceforge.net/projects/innounp/files/">Download</a>
|
||||||
|
|
|
||||||
|
<a href="http://sourceforge.net/projects/innounp/forums/forum/353235">Forum</a>
|
||||||
|
|
|
||||||
|
<a href="http://sourceforge.net/projects/innounp/">Project summary page on SF.net</a>
|
||||||
|
|
|
||||||
|
<a href="http://innounp.sf.net">Homepage</a></dd>
|
||||||
|
</dl>
|
||||||
|
<p>Both the source and the executable packages are compressed with
|
||||||
|
<a href="http://www.rarlab.com">WinRar</a>. While the full-featured packer is shareware,
|
||||||
|
the UnRar utility that can only extract files is free. And there are lots of free
|
||||||
|
third-party programs that unpack rar just fine, e.g. <a href="http://www.7-zip.org">7-Zip</a>.</p>
|
||||||
|
<p>As a bonus, a simple unpacker for <a href="http://www.indigorose.com/sf/index.php">Setup
|
||||||
|
Factory</a> installations is available on the download page. It is ripped from
|
||||||
|
<a href="http://synce.sourceforge.net">the SynCE project</a>.</p>
|
||||||
|
<h2><a name="Usage"></a>Usage</h2>
|
||||||
|
<p>Innounp is a console application, and it uses command-line options to find out
|
||||||
|
what to do. For a more human-friendly interface utilizing FAR or Total Commander as
|
||||||
|
a front-end see the <a href="#MultiArc">MultiArc section below</a>. Windows Explorer fans:
|
||||||
|
nullz has made <a href="http://sourceforge.net/forum/forum.php?thread_id=1122068&forum_id=353235">
|
||||||
|
some .reg scripts</a> to add innounp into the right-click menu and Richard Santaella crafted a
|
||||||
|
graphical wrapper for innounp (get it on the download page).</p>
|
||||||
|
<pre>innounp [command] [options] <setup.exe or setup.0> [@filelist] [filemask ...]
|
||||||
|
Commands:
|
||||||
|
(no) display general installation info
|
||||||
|
-v verbosely list the files (with sizes and timestamps)
|
||||||
|
-x extract the files from the installation (to the current directory, also see -d)
|
||||||
|
-e extract files without paths
|
||||||
|
-t test files for integrity
|
||||||
|
Options:
|
||||||
|
-b batch (non-interactive) mode - will not prompt for password or disk changes
|
||||||
|
-q do not indicate progress while extracting
|
||||||
|
-m process internal embedded files (such as license and uninstall.exe)
|
||||||
|
-pPASS decrypt the installation with a password
|
||||||
|
-dDIR extract the files into DIR (can be absolute or relative path)
|
||||||
|
-cDIR specifies that DIR is the current directory in the installation
|
||||||
|
-n don't attempt to unpack new versions
|
||||||
|
-fFILE same as -p but reads the password from FILE
|
||||||
|
-a process all copies of duplicate files
|
||||||
|
-y assume Yes on all queries (e.g. overwrite files)
|
||||||
|
</pre>
|
||||||
|
<p>If an installation has <tt>setup.0</tt> (it is made without using SetupLdr), run
|
||||||
|
innounp on <tt>setup.0</tt> instead of <tt>setup.exe</tt>.</p>
|
||||||
|
<p>To extract all files from a specific directory, use <tt>dirname\*.*</tt>, not
|
||||||
|
just <tt>dirname</tt>.</p>
|
||||||
|
<p>By default all files are extracted to the current directory. Use <tt>-d</tt> to
|
||||||
|
override this behaviour. For example, <tt>-dUnpacked</tt> will create a directory named
|
||||||
|
<tt>Unpacked</tt> inside the current directory and put the extracted files there.</p>
|
||||||
|
<p>The <tt>-c</tt> option is a little more tricky to explain. Suppose you opened an installation
|
||||||
|
in a file manager and browsed to <tt>{app}\subdir\program.exe</tt>. Now if you copied
|
||||||
|
<tt>program.exe</tt> to another location, the entire directory tree (<tt>{app}\subdir\</tt>)
|
||||||
|
would be created and <tt>program.exe</tt> would be extracted there. <tt>-c</tt> notifies innounp
|
||||||
|
that you are only interested in paths from the current directory and below, so that your
|
||||||
|
file, <tt>program.exe</tt>, is extracted right where you intended to copy it, not several
|
||||||
|
directory levels deeper. Note that in order to avoid confusion, files must still be
|
||||||
|
specified by their full path names inside the installation.</p>
|
||||||
|
<p>Note that an installation can contain several identical files (possibly under different names). Inno Setup
|
||||||
|
stores only one copy of such files, and by default innounp will also unpack one file. If you want to have
|
||||||
|
all files that could ever be installed anywhere, regardless of how many identical files this may get you,
|
||||||
|
<tt>-a</tt> option will do it.</p>
|
||||||
|
<p>If <tt>-m</tt> is specified, the file listing includes <tt>embedded\CompiledCode.bin</tt>
|
||||||
|
which is the code made by the RemObjects Pascal Script compiler. It is possible to disassemble
|
||||||
|
it using the <tt>ifps3_disasm.rar</tt> package on the download page. The result is not very
|
||||||
|
readable though since it uses the basic 'disassembler' from IFPS3. Anyone wants to write a
|
||||||
|
decompiler?</p>
|
||||||
|
|
||||||
|
<h2><a name="ReportingBugs"></a>How to report bugs</h2>
|
||||||
|
<p>OK, I know innounp is far from being perfect, but it is my intention to make
|
||||||
|
the program usable. User feedback is a great way to achieve this. Here's what you should
|
||||||
|
do if you find a bug and want it fixed.</p>
|
||||||
|
<p>Tell me what's wrong with innounp. If you encountered incorrect behaviour,
|
||||||
|
say what you think it should do and what it actually does. If it crashed or gave
|
||||||
|
an error message, say <i>what</i> did that - innounp, Windows, FAR, etc, and include
|
||||||
|
the details.</p>
|
||||||
|
<p>Describe the exact steps necessary to reproduce the bug. Say what are the
|
||||||
|
preconditions. Is the bug specific to some system settings? To a setup file you
|
||||||
|
have? (include the problem part of the installation script or a link to the compiled
|
||||||
|
setup, if it is small enough) To an IS version? To something else? Or does the
|
||||||
|
bug occur regardless of these things?</p>
|
||||||
|
<p>Once you have the bug report ready, post it to the forum. Remember, if I can't
|
||||||
|
reproduce the bug using the description you gave, the chances that it will be
|
||||||
|
fixed fall dramatically.</p>
|
||||||
|
<p>If the above guidelines were not obvious for you, I suggest that you read the
|
||||||
|
following articles.</p>
|
||||||
|
<p><a href="http://www.catb.org/~esr/faqs/smart-questions.html"><i>How to Ask
|
||||||
|
Questions the Smart Way</i></a> by Eric Raymond<br>
|
||||||
|
<a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html"><i>How to Report
|
||||||
|
Bugs Effectively</i></a> by Simon Tatham</p>
|
||||||
|
|
||||||
|
<h2><a name="History"></a>What's new / History</h2>
|
||||||
|
<p><b>0.39</b> <small>(2013.07.12)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed CRC32 calculation during unpacking (regression bug).</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.38</b> <small>(2013.02.01)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added InstallDelete and UninstallDelete sections to reconstructed script.</li>
|
||||||
|
<li>Added some more values to Setup section of reconstructed script.</li>
|
||||||
|
<li>Several minor reconstructed script improvements.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.37</b> <small>(2012.06.02)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS 5.5.0.</li>
|
||||||
|
<li>Fixed problem with reading of large files.</li>
|
||||||
|
<li>Added some more values to reconstructed script.</li>
|
||||||
|
<li>Improved FAR MultiArc settings.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.36</b> <small>(2011.06.01)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed support for IS 5.4.2.</li>
|
||||||
|
<li>Fixed issue with '{' symbol in file names.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.35</b> <small>(2010.10.01)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS 5.2.5 (wasn't released, but such installers can be found).</li>
|
||||||
|
<li>Added command to test files for integrity.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.34</b> <small>(2010.09.16)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Less technical text in some error messages.</li>
|
||||||
|
<li>Added dump of password hash to reconstructed script.</li>
|
||||||
|
<li>Added some more values to reconstructed script.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.33</b> <small>(2010.07.05)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed encoding for custom messages in reconstructed script.</li>
|
||||||
|
<li>Fixed several parameters in [LangOptions] section.</li>
|
||||||
|
<li>Fixed language names in *.isl files for Unicode-based installers.</li>
|
||||||
|
<li>Added support for legacy IS versions 2.0.8 - 2.0.10.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.32</b> <small>(2010.06.14)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS versions 5.3.10 (both ANSI and Unicode).</li>
|
||||||
|
<li>Added support for INI section in reconstructed script.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.31</b> <small>(2010.04.19)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed issue with endless decompression loop on incompatible files.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.30</b> <small>(2010.04.12)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed issue with password processing for Unicode versions.</li>
|
||||||
|
<li>Added support for IS versions 5.3.9 (both ANSI and Unicode).</li>
|
||||||
|
<li>Added support for LZMA2 compression, introduced in 5.3.9.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.29</b> <small>(2010.02.19)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS versions 5.3.8 (both ANSI and Unicode).</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.28</b> <small>(2010.01.14)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS versions 5.3.7 (both ANSI and Unicode).</li>
|
||||||
|
<li>Added support for legacy IS versions 2.0.11 - 2.0.17.</li>
|
||||||
|
<li>Fixed renaming of duplicate files. If we do not use -a then don't append numbers to names<br>
|
||||||
|
(this switch does not affect different files with same name, only duplicates with same content).</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.27</b> <small>(2009.12.04)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Yet another tuning for file mask processing.</li>
|
||||||
|
<li>Added overwrite prompt for files extraction (and option for auto-overwrite).</li>
|
||||||
|
<li>Several tweaks to reconstructed script.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.26</b> <small>(2009.11.30)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added manifest resource to resolve Vista/Win7 UAC issue.</li>
|
||||||
|
<li>Added restored %n formatter to custom messages.</li>
|
||||||
|
<li>Added default OutputBaseFilename value if one from header is empty.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.25</b> <small>(2009.11.26)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support fro [Dirs] section in reconstructed script.</li>
|
||||||
|
<li>Moved version parameter in script to comment (since it is not original IS parameter).</li>
|
||||||
|
<li>Fixed ArchitecturesInstallIn64BitMode and ArchitecturesAllowed flags in script.</li>
|
||||||
|
<li>Fixed file mask processing in some cases.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.24</b> <small>(2009.11.20)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS versions 5.3.6 (both ANSI and Unicode).</li>
|
||||||
|
<li>Added version information resource.</li>
|
||||||
|
<li>Fixed extraction of multiple files with same name.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.23</b> <small>(2009.09.25)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS versions 5.3.5 (both ANSI and Unicode).</li>
|
||||||
|
<li>Added Inno Setup version info to reconstructed install script.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.22</b> <small>(2009.08.24)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for Unicode versions.</li>
|
||||||
|
<li>Added support for IS versions 5.3.0 - 5.3.4 (both ANSI and Unicode).</li>
|
||||||
|
<li>Fixed rare issue with double backslashes in file path.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.21</b> <small>(2009.04.24)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports legacy IS versions 2.0.18 - 2.0.19</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.20</b> <small>(2008.05.23)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to version 5.2.3</li>
|
||||||
|
<li>Several bugs fixed.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.19</b> <small>(2007.02.23)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to version 5.1.10</li>
|
||||||
|
<li>Fixed wrong representation of Unicode characters in LanguageName.</li>
|
||||||
|
<li>Another fix to the handling of duplicate file names.</li>
|
||||||
|
<li>New option <tt>-a</tt> to extract all copies of duplicate files.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.18</b> <small>(2006.11.23)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>The reconstructed script now includes the [Types], [CustomMessages], and [Languages] sections.</li>
|
||||||
|
<li>ROPS disassembler updated to support the latest build of ROPS.</li>
|
||||||
|
<li>New option <tt>-f</tt> to read the password from file. This way it can include any special characters.<br>
|
||||||
|
Be sure to save the file in the correct character encoding as no translations are applied.</li>
|
||||||
|
<li>Fixed the bug that caused the file timestamps to be inconsistently reported and applied (UTC vs. local).</li>
|
||||||
|
<li>Updated the decompression libraries: zlib to version 1.2.3, bzip2 to version 1.03, and LZMA to version 4.43
|
||||||
|
(optimized for speed).</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.17</b> <small>(2005.08.31)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to version 5.1.5.</li>
|
||||||
|
<li>Supports Martijn Laan's My Inno Setup Extensions 3.0.6.1 (by request).</li>
|
||||||
|
<li>The <tt>Types</tt> parameter is now space-separated, as required by the IS script specification.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.16</b> <small>(2005.04.30)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to 5.1.2-beta.</li>
|
||||||
|
<li>Innounp will try to unpack new versions of IS to handle the cases when the
|
||||||
|
binary format is compatible with one of the previous versions. Use <tt>-n</tt>
|
||||||
|
to disable this attempt.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.15</b> <small>(2005.03.08)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to 5.1.0-beta.</li>
|
||||||
|
<li>The old bug that prevented innounp from working properly with {reg:...} constants and
|
||||||
|
the like has got another fix.</li>
|
||||||
|
<li>Preliminary support for the 64-bit extensions that appeared in IS 5.1.0.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.14</b> <small>(2004.10.14)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to 5.0.4-beta.</li>
|
||||||
|
<li>It is now possible to specify the destination directory to extract files into using
|
||||||
|
the <tt>-d</tt> option. This directory will be created if necessary.</li>
|
||||||
|
<li>New option <tt>-c</tt> specifies the current directory inside an installation and
|
||||||
|
prevents the creation of the upper-level directories. MultiArc settings are updated
|
||||||
|
accordingly.</li>
|
||||||
|
<li>The old <tt>-c</tt> command is removed. To get the compiled Pascal script, use
|
||||||
|
<tt>-m</tt> and extract it like a normal file.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.13</b> <small>(2004.08.26)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to 5.0.3-beta.</li>
|
||||||
|
<li>Supports the Components and Tasks sections.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.12</b> <small>(2004.07.28)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS up to 5.0.0-beta.</li>
|
||||||
|
<li>Improved processing of big installations with many files.</li>
|
||||||
|
<li>Innounp now supports a certain level of user interaction - it prompts the user
|
||||||
|
for password and disk changes as necessary. To switch this functionality off (e.g. in
|
||||||
|
batch mode), use the <tt>-b</tt> option.</li>
|
||||||
|
<li>If no command is specified, innounp displays a brief summary of the specified
|
||||||
|
installation. The old <tt>-i</tt> command is removed. To get the setup script, extract it
|
||||||
|
like a normal file.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.11</b> <small>(2004.05.04)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Supports IS 4.2.2.</li>
|
||||||
|
<li>Supports ArcFour encryption. Use the <tt>-p</tt> switch to specify a password
|
||||||
|
if files are encrypted</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.10</b> <small>(2004.04.26)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed (again): filenames containing invalid characters could not be specified
|
||||||
|
on the command line or in a list file.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.09</b> <small>(2004.04.22)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Fixed (again): invalid characters in filenames (such as ':' and '|') made innounp crash.</li>
|
||||||
|
<li>Updated TC MultiArc settings.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.08</b> <small>(2004.04.14)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS versions up to 4.2.1.</li>
|
||||||
|
<li>Added MultiArc settings for Total Commander (thanks to Gnozal).</li>
|
||||||
|
<li>Fixed a bug in MultiArc settings that prevented shells from displaying file
|
||||||
|
dates and times (thanks to Maxim Ryazanov).</li>
|
||||||
|
<li>The reconstructed setup script (<tt>.iss</tt>) is now included together with the 'normal' files.
|
||||||
|
Using <tt>-m</tt> option it's possible to view/extract other internal files in the same way.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.07</b> <small>(2004.03.16)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Multiple files with the same name are not overwritten now, instead they are appended
|
||||||
|
with numbers.</li>
|
||||||
|
<li><tt>-c</tt> command extracts the compiled Innerfuse Pascal Script code to a file.
|
||||||
|
It can then be 'disassembled' with a separate tool. Get one on the download page.</li>
|
||||||
|
<li>The output of <tt>-i</tt> command now looks more like <tt>.iss</tt> script.
|
||||||
|
More data is included.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.06</b> <small>(2004.03.11)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Added support for IS versions 3.0.0 - 4.0.0.</li>
|
||||||
|
<li>Supports installations that were not packaged into a single exe using SetupLdr (these
|
||||||
|
can be identified by the presence of <tt>setup.0</tt> which is appended to
|
||||||
|
<tt>setup.exe</tt> in packaged installations).</li>
|
||||||
|
<li><tt>-i</tt> command displays registry changes made by an installation.</li>
|
||||||
|
<li>Supports (displays and reads from filelists) filenames with national
|
||||||
|
characters (single-byte character encodings only, Unicode/MBCS was not tested). The correct
|
||||||
|
code page must be set in Windows for this function to work properly.</li>
|
||||||
|
<li>[fix] File dates and times were not set during extraction.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.05</b> <small>(2004.03.09)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Improved batch processing. Now it's possible to browse and extract IS installations
|
||||||
|
in FAR using the supplied settings for the standard MultiArc plug-in.</li>
|
||||||
|
<li>Removed <tt>isbunzip.dll</tt>. Bzip2 library is linked statically.</li>
|
||||||
|
</ul>
|
||||||
|
<p><b>0.04</b> <small>(2004.02.27)</small></p>
|
||||||
|
<ul>
|
||||||
|
<li>Initial release. Supports IS versions 4.0.1 - 4.1.8.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><a name="MultiArc"></a>MultiArc settings</h2>
|
||||||
|
<p>Unless you are a die-hard fan of command line, you may like the idea of working
|
||||||
|
with IS installations like with conventional archives in a file manager. Right now
|
||||||
|
two programs support this: FAR and Total Commander. Below are the instructions
|
||||||
|
how to integrate innounp into each.</p>
|
||||||
|
<h3>FAR</h3>
|
||||||
|
<p>Copy <tt>innounp.exe</tt> to a directory in your <tt>PATH</tt> and edit your
|
||||||
|
<tt>FAR\Plugins\MultiArc\Formats\Custom.ini</tt> file. There are two alternate
|
||||||
|
settings differing in several aspects and each having its own pros and cons. Try
|
||||||
|
the recommended setting first, if it does not work well for you, try the other
|
||||||
|
setting or even combine them.</p>
|
||||||
|
<h4>Co-operation with InstallExplorer</h4>
|
||||||
|
<p>If you have InstallExplorer installed (or another plug-in that handles IS,
|
||||||
|
but you will need to adjust the settings accordingly), you might want to let it
|
||||||
|
process all the other types of installations but keep IS installations for innounp.
|
||||||
|
FAR does not provide a means of customizing the plug-in call order; however, an
|
||||||
|
empirical study has shown that it loads plug-ins and applies them to files in
|
||||||
|
lexical order. So the solution is to rename InstallExplorer's dll file from <tt>6InstExpl.dll</tt>
|
||||||
|
to e.g. <tt>zInstExpl.dll</tt> (and restart FAR).</p>
|
||||||
|
<h4>FAR: recommended setting</h4>
|
||||||
|
<pre>[InnoSetup5]
|
||||||
|
TypeName=InnoSetup5
|
||||||
|
ID=49 6E 6E 6F 20 53 65 74 75 70 20 53 65 74 75 70 20 44 61 74 61 20 28 35 2E
|
||||||
|
IDOnly=1
|
||||||
|
List=innounp -v -m
|
||||||
|
Errorlevel=1
|
||||||
|
Start="^---------"
|
||||||
|
End="^---------"
|
||||||
|
Format0="/^\s+(?P<size>\d+)\s+(?P<mYear>\d+)\.(?P<mMonth>\d+)\.(?P<mDay>\d+)\s+(?P<mHour>\d+):(?P<mMin>\d+)\s+(?P<name>.*)$/i"
|
||||||
|
Extract=innounp -x -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
ExtractWithoutPath=innounp -e -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
Test=innounp -t -m %%A
|
||||||
|
AllFilesMask="*.*"
|
||||||
|
|
||||||
|
[InnoSetup4]
|
||||||
|
TypeName=InnoSetup4
|
||||||
|
ID=49 6E 6E 6F 20 53 65 74 75 70 20 53 65 74 75 70 20 44 61 74 61 20 28 34 2E
|
||||||
|
IDOnly=1
|
||||||
|
List="innounp -v -m"
|
||||||
|
Errorlevel=1
|
||||||
|
Start="^---------"
|
||||||
|
End="^---------"
|
||||||
|
Format0="/^\s+(?P<size>\d+)\s+(?P<mYear>\d+)\.(?P<mMonth>\d+)\.(?P<mDay>\d+)\s+(?P<mHour>\d+):(?P<mMin>\d+)\s+(?P<name>.*)$/i"
|
||||||
|
Extract=innounp -x -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
ExtractWithoutPath=innounp -e -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
Test=innounp -t -m %%A
|
||||||
|
AllFilesMask="*.*"
|
||||||
|
|
||||||
|
[InnoSetup3]
|
||||||
|
TypeName=InnoSetup3
|
||||||
|
ID=49 6E 6E 6F 20 53 65 74 75 70 20 53 65 74 75 70 20 44 61 74 61 20 28 33 2E
|
||||||
|
IDOnly=1
|
||||||
|
List="innounp -v -m"
|
||||||
|
Errorlevel=1
|
||||||
|
Start="^---------"
|
||||||
|
End="^---------"
|
||||||
|
Format0="/^\s+(?P<size>\d+)\s+(?P<mYear>\d+)\.(?P<mMonth>\d+)\.(?P<mDay>\d+)\s+(?P<mHour>\d+):(?P<mMin>\d+)\s+(?P<name>.*)$/i"
|
||||||
|
Extract=innounp -x -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
ExtractWithoutPath=innounp -e -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
Test=innounp -t -m %%A
|
||||||
|
AllFilesMask="*.*"
|
||||||
|
|
||||||
|
[InnoSetup2]
|
||||||
|
TypeName=InnoSetup2
|
||||||
|
ID=49 6E 6E 6F 20 53 65 74 75 70 20 53 65 74 75 70 20 44 61 74 61 20 28 32 2E
|
||||||
|
IDOnly=1
|
||||||
|
List="innounp -v -m"
|
||||||
|
Errorlevel=1
|
||||||
|
Start="^---------"
|
||||||
|
End="^---------"
|
||||||
|
Format0="/^\s+(?P<size>\d+)\s+(?P<mYear>\d+)\.(?P<mMonth>\d+)\.(?P<mDay>\d+)\s+(?P<mHour>\d+):(?P<mMin>\d+)\s+(?P<name>.*)$/i"
|
||||||
|
Extract=innounp -x -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
ExtractWithoutPath=innounp -e -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
Test=innounp -t -m %%A
|
||||||
|
AllFilesMask="*.*"
|
||||||
|
</pre>
|
||||||
|
<h4>FAR: alternate setting</h4>
|
||||||
|
Will not work for IS 5.1.5 and up because new versions no longer have this signature.
|
||||||
|
<pre>
|
||||||
|
[InnoSetup]
|
||||||
|
TypeName=InnoSetup
|
||||||
|
ID=49 6E 6E 6F
|
||||||
|
IDPos=48
|
||||||
|
Extension=exe
|
||||||
|
List="innounp -v -m"
|
||||||
|
Errorlevel=1
|
||||||
|
Start="^---------"
|
||||||
|
End="^---------"
|
||||||
|
Format0="zzzzzzzzzz yyyy tt dd hh:mm nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
|
||||||
|
Extract=innounp -x -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
ExtractWithoutPath=innounp -e -m {-c%%R} %%A {@%%LMQ}
|
||||||
|
AllFilesMask="*.*"</pre>
|
||||||
|
<h3>Total Commander</h3>
|
||||||
|
<p>Will not work for IS 5.1.5 and up because new versions no longer have this signature. I guess the
|
||||||
|
version-specific settings from above have to be cloned.</p>
|
||||||
|
<p>Configuration made up by Gnozal and Maxwish and posted on
|
||||||
|
<a href="http://ghisler.ch/board/viewtopic.php?t=3810">TC forum</a>. Change the path below
|
||||||
|
to where you have innounp installed and add this to your <tt>MultiArc.ini</tt>. Note that
|
||||||
|
MultiArc is not included in the default TC installation, instead it is available as a
|
||||||
|
separate download from <a href="http://wcx.sourceforge.net">Siarzhuk Zharski's web site</a>.
|
||||||
|
Refer to the help file for information on any additional configuration necessary.</p>
|
||||||
|
<pre>[InnoSetup]
|
||||||
|
Description="InnoSetup"
|
||||||
|
Archiver=C:\PROGRAM FILES\WINCMD\WCXPlugin\MultiArc\innounp.exe
|
||||||
|
Extension=exe
|
||||||
|
ID=49 6E 6E 6F
|
||||||
|
IDPos=48
|
||||||
|
Start="^--------------------------------------"
|
||||||
|
End="^--------------------------------------"
|
||||||
|
Format0="zzzzzzzzzz yyyy.tt.dd hh:mm nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
|
||||||
|
List=%P -v -m %AQ
|
||||||
|
Extract=%P -e -m -c%R %AQ @%LQ
|
||||||
|
ExtractWithPath=%P -x -m -c%R %AQ @%LQ
|
||||||
|
IgnoreErrors=0
|
||||||
|
SkipEmpty=0
|
||||||
|
SkipDirsInFileList=0
|
||||||
|
SearchForUglyDirs=0
|
||||||
|
BatchUnpack=1
|
||||||
|
UnixPath=0
|
||||||
|
AskMode=0
|
||||||
|
SkipLIST=1
|
||||||
|
Debug=0</pre>
|
||||||
|
|
||||||
|
<h2><a name="Copyrights"></a>Copyrights and licensing</h2>
|
||||||
|
<p>Copyright © 2004-2013 QuickeneR, 2009-2013 Ariman<br>
|
||||||
|
This program is licensed under the terms of the <a href="http://www.gnu.org/copyleft/gpl.html">
|
||||||
|
GNU General Public License (GPL)</a>. A copy of the license is included with the source files.<br>
|
||||||
|
If you distribute innounp on the WWW, please put a link to its home page,
|
||||||
|
http://innounp.sourceforge.net</p>
|
||||||
|
<p>Over 90% of code is ripped from Inno Setup which is Copyright © 1997-2010 Jordan
|
||||||
|
Russell. All rights reserved.<br>
|
||||||
|
Portions Copyright © 2000-2006 Martijn Laan. All rights reserved.<br>
|
||||||
|
See <a href="http://www.jrsoftware.org">http://www.jrsoftware.org</a> for details.</p>
|
||||||
|
<p>Contains zlib code, Copyright © 1995-2005 Jean-loup Gailly and Mark Adler.</p>
|
||||||
|
<p>Contains bzip2 code, Copyright © 1996-2009 Julian R Seward. All rights reserved.</p>
|
||||||
|
<p>Contains LZMA code, Copyright © 1999-2009 Igor Pavlov.</p>
|
||||||
|
<hr width=20% align=left style="margin-left: 5%">
|
||||||
|
<p>Innerfuse Pascal Script is Copyright © 2000-2004 by Carlo Kok, Innerfuse.</p>
|
||||||
|
<p>StripReloc is Copyright © 1999-2005 Jordan Russell, www.jrsoftware.org</p>
|
||||||
|
<hr>
|
||||||
|
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=102423&type=1" width="88" height="31" border="0" alt="SourceForge.net"></a>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,115 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
Set $UninstallProgram$ = $InstallDir$ + "\" + $UninstallProg$
|
|
||||||
Set $IniFile$ = $InstallDir$ + "\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
if FileExists($IniFile$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " " + $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " ..."
|
|
||||||
|
|
||||||
if FileExists($IniFile$)
|
|
||||||
Set $UninstallProg$ = GetValueFromInifile($IniFile$,"X86","UninstallProg","XXXXXXXX.exe")
|
|
||||||
Set $UninstallProgramOld$ = $InstallDir$ + "\" + $UninstallProg$
|
|
||||||
if FileExists($UninstallProgramOld$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_old
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if FileExists($UninstallProgram$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall /32Bit
|
|
||||||
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /32Bit
|
|
||||||
|
|
||||||
comment "Delete program shortcuts"
|
|
||||||
LinkFolder_uninstall
|
|
||||||
|
|
||||||
[Winbatch_uninstall_old]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgramOld$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgramOld$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
|
|
||||||
[Winbatch_uninstall]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgram$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgram$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
|
|
||||||
[Files_uninstall]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
@ -1,5 +0,0 @@
|
|||||||
[X86]
|
|
||||||
|
|
||||||
[COMMON]
|
|
||||||
PN=name
|
|
||||||
VERSION=version
|
|
@ -1,231 +0,0 @@
|
|||||||
; 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.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProgram$
|
|
||||||
DefVar $UninstallProgramOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $MinimumSpace$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicenseKey$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 -
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
;$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 $MinimumSpace$ = "1 MB"
|
|
||||||
; the path were we find the product after the installation
|
|
||||||
Set $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
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" $NAME$
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub32.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub32.ins"
|
|
||||||
endif
|
|
||||||
|
|
||||||
Message "Installing " + $ProductId$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " ..."
|
|
||||||
|
|
||||||
if $LicenseRequired$ = "true"
|
|
||||||
comment "Licensing required, reserve license and get license key"
|
|
||||||
Sub_get_licensekey
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
Winbatch_install
|
|
||||||
Sub_check_exitcode
|
|
||||||
|
|
||||||
comment "Copy files"
|
|
||||||
Files_install /32Bit
|
|
||||||
|
|
||||||
comment "Patch Registry"
|
|
||||||
Registry_install /32Bit
|
|
||||||
|
|
||||||
comment "Create shortcuts"
|
|
||||||
LinkFolder_install
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
[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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /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$"
|
|
||||||
|
|
||||||
[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: <path to the program>
|
|
||||||
; 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: <path to the program>
|
|
||||||
; parameters: <some_param>
|
|
||||||
; working_dir: $InstallDir$
|
|
||||||
; icon_file: <path to icon file>
|
|
||||||
; icon_index: 2
|
|
||||||
; end_link
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,73 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
requiredWinstVersion >= "4.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProgram$
|
|
||||||
DefVar $UninstallProgramOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
comment "Show product picture"
|
|
||||||
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $NAME$
|
|
||||||
|
|
||||||
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$)
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
Don't add cahngelog entries here!
|
|
||||||
It get autogenerated by the opsi-builder.sh
|
|
@ -1,30 +0,0 @@
|
|||||||
[Package]
|
|
||||||
version: 2
|
|
||||||
depends:
|
|
||||||
incremental: False
|
|
||||||
|
|
||||||
[Product]
|
|
||||||
type: localboot
|
|
||||||
id: opsi-template
|
|
||||||
name: opsi template product
|
|
||||||
description: A template for opsi products
|
|
||||||
advice:
|
|
||||||
version: 4.0.2
|
|
||||||
priority: 0
|
|
||||||
licenseRequired: true
|
|
||||||
productClasses:
|
|
||||||
setupScript: setup32.ins
|
|
||||||
uninstallScript: uninstall32.ins
|
|
||||||
updateScript:
|
|
||||||
alwaysScript:
|
|
||||||
onceScript:
|
|
||||||
customScript:
|
|
||||||
userLoginScript:
|
|
||||||
|
|
||||||
[ProductDependency]
|
|
||||||
action: setup
|
|
||||||
requiredProduct: sereby.aio
|
|
||||||
requiredStatus: installed
|
|
||||||
requirementType: before
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,150 +0,0 @@
|
|||||||
############################
|
|
||||||
# Setup product information
|
|
||||||
############################
|
|
||||||
VENDOR="itwatch.de"
|
|
||||||
PN="itwatch"
|
|
||||||
NAME="7-Zip"
|
|
||||||
DESCRIPTION="7-Zip is a file archiver with a high compression ratio."
|
|
||||||
VERSION="4.10.19"
|
|
||||||
RELEASE="3"
|
|
||||||
PRIORITY="0"
|
|
||||||
ADVICE=""
|
|
||||||
|
|
||||||
# TYPE - defines, if the install files are public or restricted.
|
|
||||||
# Valid value: restricted | public
|
|
||||||
TYPE="public"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# 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: <not set>
|
|
||||||
# Valid values: <not set>, "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: <not set>
|
|
||||||
# Optional parameter. Default value: <not set>,
|
|
||||||
# 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: <not set>.
|
|
||||||
# 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: <empty>
|
|
||||||
# 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[3]="wget"
|
|
||||||
DL_EXTRACT_FORMAT[3]="unzip"
|
|
||||||
DL_EXTRACT_TO[3]="office"
|
|
||||||
|
|
||||||
# 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[<index>]@ : contains the WINST location of the directory, the files from DL_FILE[<index>] was extracted to.
|
|
||||||
# Sample:
|
|
||||||
# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[<index>]@\\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"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Setup required OPSI_INI variables
|
|
||||||
# which will be injected to the opsi-PN.ini files
|
|
||||||
#
|
|
||||||
# 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 UninstallProg
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# OR
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86_64"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_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 UninstallProg's
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg32"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# AND
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[1]="X86_64"
|
|
||||||
OPSI_INI_OPTION[1]="UninstallProg64"
|
|
||||||
OPSI_INI_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
@ -1,115 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
Set $UninstallProgram$ = $InstallDir$ + "\" + $UninstallProg$
|
|
||||||
Set $IniFile$ = $InstallDir$ + "\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
if FileExists($IniFile$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " " + $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " ..."
|
|
||||||
|
|
||||||
if FileExists($IniFile$)
|
|
||||||
Set $UninstallProg$ = GetValueFromInifile($IniFile$,"X86","UninstallProg","XXXXXXXX.exe")
|
|
||||||
Set $UninstallProgramOld$ = $InstallDir$ + "\" + $UninstallProg$
|
|
||||||
if FileExists($UninstallProgramOld$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_old
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if FileExists($UninstallProgram$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall /32Bit
|
|
||||||
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /32Bit
|
|
||||||
|
|
||||||
comment "Delete program shortcuts"
|
|
||||||
LinkFolder_uninstall
|
|
||||||
|
|
||||||
[Winbatch_uninstall_old]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgramOld$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgramOld$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
|
|
||||||
[Winbatch_uninstall]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgram$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgram$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
|
|
||||||
[Files_uninstall]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
@ -1,5 +0,0 @@
|
|||||||
[X86]
|
|
||||||
|
|
||||||
[COMMON]
|
|
||||||
PN=name
|
|
||||||
VERSION=version
|
|
@ -1,183 +0,0 @@
|
|||||||
; 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.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProgram$
|
|
||||||
DefVar $UninstallProgramOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $MinimumSpace$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 -
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
;$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 $MinimumSpace$ = "1 MB"
|
|
||||||
; the path were we find the product after the installation
|
|
||||||
Set $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
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" $NAME$
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub32.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub32.ins"
|
|
||||||
endif
|
|
||||||
|
|
||||||
Message "Installing " + $ProductId$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " ..."
|
|
||||||
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
Winbatch_install
|
|
||||||
Sub_check_exitcode
|
|
||||||
|
|
||||||
comment "Copy files"
|
|
||||||
Files_install /32Bit
|
|
||||||
|
|
||||||
comment "Patch Registry"
|
|
||||||
Registry_install /32Bit
|
|
||||||
|
|
||||||
comment "Create shortcuts"
|
|
||||||
LinkFolder_install
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
[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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /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$"
|
|
||||||
|
|
||||||
[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: <path to the program>
|
|
||||||
; 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: <path to the program>
|
|
||||||
; parameters: <some_param>
|
|
||||||
; working_dir: $InstallDir$
|
|
||||||
; icon_file: <path to icon file>
|
|
||||||
; icon_index: 2
|
|
||||||
; end_link
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
requiredWinstVersion >= "4.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProgram$
|
|
||||||
DefVar $UninstallProgramOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
comment "Show product picture"
|
|
||||||
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $NAME$
|
|
||||||
|
|
||||||
Message "Uninstalling " + $ProductId$ + " ..."
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub32.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub32.ins"
|
|
||||||
endif
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
Don't add cahngelog entries here!
|
|
||||||
It get autogenerated by the opsi-builder.sh
|
|
@ -1,30 +0,0 @@
|
|||||||
[Package]
|
|
||||||
version: 2
|
|
||||||
depends:
|
|
||||||
incremental: False
|
|
||||||
|
|
||||||
[Product]
|
|
||||||
type: localboot
|
|
||||||
id: opsi-template
|
|
||||||
name: opsi template product
|
|
||||||
description: A template for opsi products
|
|
||||||
advice:
|
|
||||||
version: 4.0.2
|
|
||||||
priority: 0
|
|
||||||
licenseRequired: False
|
|
||||||
productClasses:
|
|
||||||
setupScript: setup32.ins
|
|
||||||
uninstallScript: uninstall32.ins
|
|
||||||
updateScript:
|
|
||||||
alwaysScript:
|
|
||||||
onceScript:
|
|
||||||
customScript:
|
|
||||||
userLoginScript:
|
|
||||||
|
|
||||||
[ProductDependency]
|
|
||||||
action: setup
|
|
||||||
requiredProduct: sereby.aio
|
|
||||||
requiredStatus: installed
|
|
||||||
requirementType: before
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,28 +0,0 @@
|
|||||||
*** Qualitiymanagement/Testing procedure
|
|
||||||
|
|
||||||
- Product:
|
|
||||||
- Name: productname
|
|
||||||
- Version: xxx
|
|
||||||
- Release: yyyy
|
|
||||||
|
|
||||||
- Environment
|
|
||||||
- OS: Native windows XP-32Bit installation
|
|
||||||
- Preinstalled packages: None (also no aio)
|
|
||||||
- Files used while testing:
|
|
||||||
File1: http://domain.de/file.ext
|
|
||||||
|
|
||||||
- Testing process:
|
|
||||||
OPSI-action:
|
|
||||||
- Installation (without dependencies like AIO/Firefox): ??
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: ??
|
|
||||||
- Start menu entry: ??
|
|
||||||
- Starting/using program: viewer works, File1 is shown correctly: ??
|
|
||||||
|
|
||||||
OPSI-action:
|
|
||||||
- Uninstall
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: unrelated: ??
|
|
||||||
- Start menu entry: none: ??
|
|
||||||
|
|
||||||
|
|
@ -1,150 +0,0 @@
|
|||||||
############################
|
|
||||||
# Setup product information
|
|
||||||
############################
|
|
||||||
VENDOR="itwatch.de"
|
|
||||||
PN="itwatch"
|
|
||||||
NAME="7-Zip"
|
|
||||||
DESCRIPTION="7-Zip is a file archiver with a high compression ratio."
|
|
||||||
VERSION="4.10.19"
|
|
||||||
RELEASE="3"
|
|
||||||
PRIORITY="0"
|
|
||||||
ADVICE=""
|
|
||||||
|
|
||||||
# TYPE - defines, if the install files are public or restricted.
|
|
||||||
# Valid value: restricted | public
|
|
||||||
TYPE="public"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# 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: <not set>
|
|
||||||
# Valid values: <not set>, "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: <not set>
|
|
||||||
# Optional parameter. Default value: <not set>,
|
|
||||||
# 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: <not set>.
|
|
||||||
# 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: <empty>
|
|
||||||
# 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[3]="wget"
|
|
||||||
DL_EXTRACT_FORMAT[3]="unzip"
|
|
||||||
DL_EXTRACT_TO[3]="office"
|
|
||||||
|
|
||||||
# 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[<index>]@ : contains the WINST location of the directory, the files from DL_FILE[<index>] was extracted to.
|
|
||||||
# Sample:
|
|
||||||
# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[<index>]@\\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"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Setup required OPSI_INI variables
|
|
||||||
# which will be injected to the opsi-PN.ini files
|
|
||||||
#
|
|
||||||
# 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 UninstallProg
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# OR
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86_64"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_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 UninstallProg's
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg32"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# AND
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[1]="X86_64"
|
|
||||||
OPSI_INI_OPTION[1]="UninstallProg64"
|
|
||||||
OPSI_INI_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
##############################################################################
|
|
||||||
# This optional file "builder-targets-cb.sh" will be called by builder.sh
|
|
||||||
#
|
|
||||||
# The targets will be called from thde opsi-builder using the following
|
|
||||||
# order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# You can overwrite the target functions in builder-targets-cb.sh
|
|
||||||
#
|
|
||||||
# You can define callback functions. The functions are called from
|
|
||||||
# opsi-builder within processing a target
|
|
||||||
# cb_package_makeproductfile
|
|
||||||
#
|
|
||||||
# You can use every variable defined in any configuration file or by
|
|
||||||
# the defined builder script itself. Also, calling the predefined
|
|
||||||
# targets builder_<targetname> is possible.
|
|
||||||
#
|
|
||||||
# Abstract:
|
|
||||||
# target order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# callbacks: <none>
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
echo "Cleanup"
|
|
||||||
builder_cleanup
|
|
||||||
}
|
|
@ -1,95 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
Set $IniFile$ = $InstallDir$ + "\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
if FileExists($IniFile$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " " + $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " ..."
|
|
||||||
|
|
||||||
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 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_msi_old]
|
|
||||||
msiexec /x $MsiIdOld$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi]
|
|
||||||
msiexec /x $MsiId$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Files_uninstall]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
@ -1,11 +0,0 @@
|
|||||||
[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
|
|
@ -1,230 +0,0 @@
|
|||||||
; 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.11.2.6"
|
|
||||||
|
|
||||||
DefVar $MsiIdOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $MinimumSpace$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicenseKey$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 -
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
;$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 $MinimumSpace$ = "1 MB"
|
|
||||||
; the path were we find the product after the installation
|
|
||||||
Set $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
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" $NAME$
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub32.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub32.ins"
|
|
||||||
endif
|
|
||||||
|
|
||||||
Message "Installing " + $ProductId$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " ..."
|
|
||||||
|
|
||||||
if $LicenseRequired$ = "true"
|
|
||||||
comment "Licensing required, reserve license and get license key"
|
|
||||||
Sub_get_licensekey
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
Winbatch_install
|
|
||||||
Sub_check_exitcode
|
|
||||||
|
|
||||||
comment "Copy files"
|
|
||||||
Files_install /32Bit
|
|
||||||
|
|
||||||
comment "Patch Registry"
|
|
||||||
Registry_install /32Bit
|
|
||||||
|
|
||||||
comment "Create shortcuts"
|
|
||||||
LinkFolder_install
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
[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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /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$"
|
|
||||||
|
|
||||||
[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: <path to the program>
|
|
||||||
; 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: <path to the program>
|
|
||||||
; parameters: <some_param>
|
|
||||||
; working_dir: $InstallDir$
|
|
||||||
; icon_file: <path to icon file>
|
|
||||||
; icon_index: 2
|
|
||||||
; end_link
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
requiredWinstVersion >= "4.11.2.6"
|
|
||||||
|
|
||||||
DefVar $MsiIdOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
comment "Show product picture"
|
|
||||||
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $NAME$
|
|
||||||
|
|
||||||
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$)
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
Don't add cahngelog entries here!
|
|
||||||
It get autogenerated by the opsi-builder.sh
|
|
@ -1,30 +0,0 @@
|
|||||||
[Package]
|
|
||||||
version: 2
|
|
||||||
depends:
|
|
||||||
incremental: False
|
|
||||||
|
|
||||||
[Product]
|
|
||||||
type: localboot
|
|
||||||
id: opsi-template
|
|
||||||
name: opsi template product
|
|
||||||
description: A template for opsi products
|
|
||||||
advice:
|
|
||||||
version: 4.0.2
|
|
||||||
priority: 0
|
|
||||||
licenseRequired: True
|
|
||||||
productClasses:
|
|
||||||
setupScript: setup32.ins
|
|
||||||
uninstallScript: uninstall32.ins
|
|
||||||
updateScript:
|
|
||||||
alwaysScript:
|
|
||||||
onceScript:
|
|
||||||
customScript:
|
|
||||||
userLoginScript:
|
|
||||||
|
|
||||||
[ProductDependency]
|
|
||||||
action: setup
|
|
||||||
requiredProduct: sereby.aio
|
|
||||||
requiredStatus: installed
|
|
||||||
requirementType: before
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,28 +0,0 @@
|
|||||||
*** Qualitiymanagement/Testing procedure
|
|
||||||
|
|
||||||
- Product:
|
|
||||||
- Name: productname
|
|
||||||
- Version: xxx
|
|
||||||
- Release: yyyy
|
|
||||||
|
|
||||||
- Environment
|
|
||||||
- OS: Native windows XP-32Bit installation
|
|
||||||
- Preinstalled packages: None (also no aio)
|
|
||||||
- Files used while testing:
|
|
||||||
File1: http://domain.de/file.ext
|
|
||||||
|
|
||||||
- Testing process:
|
|
||||||
OPSI-action:
|
|
||||||
- Installation (without dependencies like AIO/Firefox): ??
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: ??
|
|
||||||
- Start menu entry: ??
|
|
||||||
- Starting/using program: viewer works, File1 is shown correctly: ??
|
|
||||||
|
|
||||||
OPSI-action:
|
|
||||||
- Uninstall
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: unrelated: ??
|
|
||||||
- Start menu entry: none: ??
|
|
||||||
|
|
||||||
|
|
@ -1,150 +0,0 @@
|
|||||||
############################
|
|
||||||
# Setup product information
|
|
||||||
############################
|
|
||||||
VENDOR="itwatch.de"
|
|
||||||
PN="itwatch"
|
|
||||||
NAME="7-Zip"
|
|
||||||
DESCRIPTION="7-Zip is a file archiver with a high compression ratio."
|
|
||||||
VERSION="4.10.19"
|
|
||||||
RELEASE="3"
|
|
||||||
PRIORITY="0"
|
|
||||||
ADVICE=""
|
|
||||||
|
|
||||||
# TYPE - defines, if the install files are public or restricted.
|
|
||||||
# Valid value: restricted | public
|
|
||||||
TYPE="public"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# 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: <not set>
|
|
||||||
# Valid values: <not set>, "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: <not set>
|
|
||||||
# Optional parameter. Default value: <not set>,
|
|
||||||
# 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: <not set>.
|
|
||||||
# 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: <empty>
|
|
||||||
# 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[3]="wget"
|
|
||||||
DL_EXTRACT_FORMAT[3]="unzip"
|
|
||||||
DL_EXTRACT_TO[3]="office"
|
|
||||||
|
|
||||||
# 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[<index>]@ : contains the WINST location of the directory, the files from DL_FILE[<index>] was extracted to.
|
|
||||||
# Sample:
|
|
||||||
# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[<index>]@\\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"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Setup required OPSI_INI variables
|
|
||||||
# which will be injected to the opsi-PN.ini files
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# OR
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86_64"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId"
|
|
||||||
OPSI_INI_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
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId32"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# AND
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[1]="X86_64"
|
|
||||||
OPSI_INI_OPTION[1]="MsiId64"
|
|
||||||
OPSI_INI_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
##############################################################################
|
|
||||||
# This optional file "builder-targets-cb.sh" will be called by builder.sh
|
|
||||||
#
|
|
||||||
# The targets will be called from thde opsi-builder using the following
|
|
||||||
# order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# You can overwrite the target functions in builder-targets-cb.sh
|
|
||||||
#
|
|
||||||
# You can define callback functions. The functions are called from
|
|
||||||
# opsi-builder within processing a target
|
|
||||||
# cb_package_makeproductfile
|
|
||||||
#
|
|
||||||
# You can use every variable defined in any configuration file or by
|
|
||||||
# the defined builder script itself. Also, calling the predefined
|
|
||||||
# targets builder_<targetname> is possible.
|
|
||||||
#
|
|
||||||
# Abstract:
|
|
||||||
# target order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# callbacks: <none>
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
echo "Cleanup"
|
|
||||||
builder_cleanup
|
|
||||||
}
|
|
@ -1,95 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
Set $IniFile$ = $InstallDir$ + "\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
if FileExists($IniFile$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " " + $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " ..."
|
|
||||||
|
|
||||||
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 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_msi_old]
|
|
||||||
msiexec /x $MsiIdOld$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi]
|
|
||||||
msiexec /x $MsiId$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Files_uninstall]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
@ -1,11 +0,0 @@
|
|||||||
[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
|
|
@ -1,182 +0,0 @@
|
|||||||
; 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.11.2.6"
|
|
||||||
|
|
||||||
DefVar $MsiIdOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $MinimumSpace$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 -
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
;$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 $MinimumSpace$ = "1 MB"
|
|
||||||
; the path were we find the product after the installation
|
|
||||||
Set $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
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" $NAME$
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub32.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub32.ins"
|
|
||||||
endif
|
|
||||||
|
|
||||||
Message "Installing " + $ProductId$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " ..."
|
|
||||||
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
Winbatch_install
|
|
||||||
Sub_check_exitcode
|
|
||||||
|
|
||||||
comment "Copy files"
|
|
||||||
Files_install /32Bit
|
|
||||||
|
|
||||||
comment "Patch Registry"
|
|
||||||
Registry_install /32Bit
|
|
||||||
|
|
||||||
comment "Create shortcuts"
|
|
||||||
LinkFolder_install
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
[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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /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$"
|
|
||||||
|
|
||||||
[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: <path to the program>
|
|
||||||
; 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: <path to the program>
|
|
||||||
; parameters: <some_param>
|
|
||||||
; working_dir: $InstallDir$
|
|
||||||
; icon_file: <path to icon file>
|
|
||||||
; icon_index: 2
|
|
||||||
; end_link
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
requiredWinstVersion >= "4.11.2.6"
|
|
||||||
|
|
||||||
DefVar $MsiIdOld$
|
|
||||||
DefVar $IniFile$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $InstallDir$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
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 $InstallDir$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
comment "Show product picture"
|
|
||||||
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $NAME$
|
|
||||||
|
|
||||||
Message "Uninstalling " + $ProductId$ + " ..."
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub32.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub32.ins"
|
|
||||||
endif
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
Don't add cahngelog entries here!
|
|
||||||
It get autogenerated by the opsi-builder.sh
|
|
@ -1,30 +0,0 @@
|
|||||||
[Package]
|
|
||||||
version: 2
|
|
||||||
depends:
|
|
||||||
incremental: False
|
|
||||||
|
|
||||||
[Product]
|
|
||||||
type: localboot
|
|
||||||
id: opsi-template
|
|
||||||
name: opsi template product
|
|
||||||
description: A template for opsi products
|
|
||||||
advice:
|
|
||||||
version: 4.0.2
|
|
||||||
priority: 0
|
|
||||||
licenseRequired: False
|
|
||||||
productClasses:
|
|
||||||
setupScript: setup32.ins
|
|
||||||
uninstallScript: uninstall32.ins
|
|
||||||
updateScript:
|
|
||||||
alwaysScript:
|
|
||||||
onceScript:
|
|
||||||
customScript:
|
|
||||||
userLoginScript:
|
|
||||||
|
|
||||||
[ProductDependency]
|
|
||||||
action: setup
|
|
||||||
requiredProduct: sereby.aio
|
|
||||||
requiredStatus: installed
|
|
||||||
requirementType: before
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,28 +0,0 @@
|
|||||||
*** Qualitiymanagement/Testing procedure
|
|
||||||
|
|
||||||
- Product:
|
|
||||||
- Name: productname
|
|
||||||
- Version: xxx
|
|
||||||
- Release: yyyy
|
|
||||||
|
|
||||||
- Environment
|
|
||||||
- OS: Native windows XP-32Bit installation
|
|
||||||
- Preinstalled packages: None (also no aio)
|
|
||||||
- Files used while testing:
|
|
||||||
File1: http://domain.de/file.ext
|
|
||||||
|
|
||||||
- Testing process:
|
|
||||||
OPSI-action:
|
|
||||||
- Installation (without dependencies like AIO/Firefox): ??
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: ??
|
|
||||||
- Start menu entry: ??
|
|
||||||
- Starting/using program: viewer works, File1 is shown correctly: ??
|
|
||||||
|
|
||||||
OPSI-action:
|
|
||||||
- Uninstall
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: unrelated: ??
|
|
||||||
- Start menu entry: none: ??
|
|
||||||
|
|
||||||
|
|
@ -1,150 +0,0 @@
|
|||||||
############################
|
|
||||||
# Setup product information
|
|
||||||
############################
|
|
||||||
VENDOR="itwatch.de"
|
|
||||||
PN="itwatch"
|
|
||||||
NAME="7-Zip"
|
|
||||||
DESCRIPTION="7-Zip is a file archiver with a high compression ratio."
|
|
||||||
VERSION="4.10.19"
|
|
||||||
RELEASE="3"
|
|
||||||
PRIORITY="0"
|
|
||||||
ADVICE=""
|
|
||||||
|
|
||||||
# TYPE - defines, if the install files are public or restricted.
|
|
||||||
# Valid value: restricted | public
|
|
||||||
TYPE="public"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# 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: <not set>
|
|
||||||
# Valid values: <not set>, "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: <not set>
|
|
||||||
# Optional parameter. Default value: <not set>,
|
|
||||||
# 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: <not set>.
|
|
||||||
# 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: <empty>
|
|
||||||
# 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[3]="wget"
|
|
||||||
DL_EXTRACT_FORMAT[3]="unzip"
|
|
||||||
DL_EXTRACT_TO[3]="office"
|
|
||||||
|
|
||||||
# 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[<index>]@ : contains the WINST location of the directory, the files from DL_FILE[<index>] was extracted to.
|
|
||||||
# Sample:
|
|
||||||
# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[<index>]@\\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"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Setup required OPSI_INI variables
|
|
||||||
# which will be injected to the opsi-PN.ini files
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# OR
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86_64"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId"
|
|
||||||
OPSI_INI_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
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId32"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# AND
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[1]="X86_64"
|
|
||||||
OPSI_INI_OPTION[1]="MsiId64"
|
|
||||||
OPSI_INI_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
##############################################################################
|
|
||||||
# This optional file "builder-targets-cb.sh" will be called by builder.sh
|
|
||||||
#
|
|
||||||
# The targets will be called from thde opsi-builder using the following
|
|
||||||
# order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# You can overwrite the target functions in builder-targets-cb.sh
|
|
||||||
#
|
|
||||||
# You can define callback functions. The functions are called from
|
|
||||||
# opsi-builder within processing a target
|
|
||||||
# cb_package_makeproductfile
|
|
||||||
#
|
|
||||||
# You can use every variable defined in any configuration file or by
|
|
||||||
# the defined builder script itself. Also, calling the predefined
|
|
||||||
# targets builder_<targetname> is possible.
|
|
||||||
#
|
|
||||||
# Abstract:
|
|
||||||
# target order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# callbacks: <none>
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
echo "Cleanup"
|
|
||||||
builder_cleanup
|
|
||||||
}
|
|
@ -1,179 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
Set $UninstallProgram32$ = $InstallDir32$ + "\" + $UninstallProg32$
|
|
||||||
Set $IniFile32$ = $InstallDir32$ + "\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
Set $UninstallProgram64$ = $InstallDir64$ + "\" + $UninstallProg64$
|
|
||||||
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")
|
|
||||||
if FileExists($IniFile32$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile32$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile32$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile32$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 32 Bit..."
|
|
||||||
|
|
||||||
if FileExists($IniFile32$)
|
|
||||||
Set $UninstallProg32$ = GetValueFromInifile($IniFile32$,"X86","UninstallProg32","XXXXXXXX.exe")
|
|
||||||
Set $UninstallProgramOld32$ = $InstallDir32$ + "\" + $UninstallProg32$
|
|
||||||
if FileExists($UninstallProgramOld32$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_old_32
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if FileExists($UninstallProgram32$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_32
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_32 /32Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /32Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
|
|
||||||
if FileExists($IniFile64$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile64$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile64$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile64$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 64 Bit..."
|
|
||||||
|
|
||||||
if FileExists($IniFile64$)
|
|
||||||
Set $UninstallProgr64$ = GetValueFromInifile($IniFile64$,"X86_64","UninstallProg64","XXXXXXXX.exe")
|
|
||||||
Set $UninstallProgramOld64$ = $InstallDir64$ + "\" + $UninstallProg64$
|
|
||||||
if FileExists($UninstallProgramOld64$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_old_64
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if FileExists($UninstallProgram64$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_64
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_64 /64Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /64Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete program shortcuts"
|
|
||||||
LinkFolder_uninstall
|
|
||||||
|
|
||||||
[Winbatch_uninstall_old_32]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgramOld32$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgramOld32$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Winbatch_uninstall_32]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgram32$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgram32$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Files_uninstall_32]
|
|
||||||
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
|
|
||||||
;
|
|
||||||
delete -sf "$InstallDir32$\"
|
|
||||||
|
|
||||||
[Winbatch_uninstall_old_64]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgramOld64$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgramOld64$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Winbatch_uninstall_64]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgram64$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgram64$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_old_64]
|
|
||||||
msiexec /x $MsiIdOld64$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_64]
|
|
||||||
msiexec /x $MsiId64$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Files_uninstall_64]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -sf "$InstallDir64$\"
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
@ -1,11 +0,0 @@
|
|||||||
[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
|
|
@ -1,284 +0,0 @@
|
|||||||
; 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.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProgram32$
|
|
||||||
DefVar $UninstallProgramOld32$
|
|
||||||
DefVar $IniFile32$
|
|
||||||
DefVar $UninstallProgram64$
|
|
||||||
DefVar $UninstallProgramOld64$
|
|
||||||
DefVar $IniFile64$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $MinimumSpace$
|
|
||||||
DefVar $InstallDir32$
|
|
||||||
DefVar $InstallDir64$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicenseKey$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $INST_SystemType$
|
|
||||||
DefVar $INST_architecture$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
Set $INST_SystemType$ = GetSystemType
|
|
||||||
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
|
|
||||||
|
|
||||||
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 -
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
;$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 $MinimumSpace$ = "1 MB"
|
|
||||||
; the path were we find the product after the installation
|
|
||||||
Set $InstallDir32$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $InstallDir64$ = "%ProgramFiles64Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
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" $NAME$
|
|
||||||
|
|
||||||
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 (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
|
|
||||||
Message "Installing " + $ProductId$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " 32 Bit..."
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
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$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " 64 Bit..."
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
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
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Winbatch_install_32]
|
|
||||||
; 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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES
|
|
||||||
|
|
||||||
[Files_install_32]
|
|
||||||
; copy the ini file to the InstallDir
|
|
||||||
copy "$IniCfgFile$" "$InstallDir32$"
|
|
||||||
|
|
||||||
; Example of recursively copying some files into the installation directory:
|
|
||||||
;
|
|
||||||
; copy -s "%ScriptPath%\files\*.*" "$InstallDir32$"
|
|
||||||
|
|
||||||
[Winbatch_install_64]
|
|
||||||
; 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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES
|
|
||||||
|
|
||||||
[Files_install_64]
|
|
||||||
; copy the ini file to the InstallDir
|
|
||||||
copy "$IniCfgFile$" "$InstallDir64$"
|
|
||||||
|
|
||||||
; 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: <path to the program>
|
|
||||||
; 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: <path to the program>
|
|
||||||
; parameters: <some_param>
|
|
||||||
; working_dir: $InstallDir$
|
|
||||||
; icon_file: <path to 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
|
|
||||||
|
|
@ -1,84 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
requiredWinstVersion >= "4.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProgram32$
|
|
||||||
DefVar $UninstallProgramOld32$
|
|
||||||
DefVar $IniFile32$
|
|
||||||
DefVar $UninstallProgram64$
|
|
||||||
DefVar $UninstallProgramOld64$
|
|
||||||
DefVar $IniFile64$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $InstallDir32$
|
|
||||||
DefVar $InstallDir64$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $INST_SystemType$
|
|
||||||
DefVar $INST_architecture$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
Set $INST_SystemType$ = GetSystemType
|
|
||||||
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
|
|
||||||
|
|
||||||
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 $InstallDir32$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $InstallDir64$ = "%ProgramFiles64Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
comment "Show product picture"
|
|
||||||
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $NAME$
|
|
||||||
|
|
||||||
Message "Uninstalling " + $ProductId$ + " ..."
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub3264.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub3264.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$)
|
|
||||||
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
Don't add cahngelog entries here!
|
|
||||||
It get autogenerated by the opsi-builder.sh
|
|
@ -1,39 +0,0 @@
|
|||||||
[Package]
|
|
||||||
version: 2
|
|
||||||
depends:
|
|
||||||
incremental: False
|
|
||||||
|
|
||||||
[Product]
|
|
||||||
type: localboot
|
|
||||||
id: opsi-template
|
|
||||||
name: opsi template product
|
|
||||||
description: A template for opsi products
|
|
||||||
advice:
|
|
||||||
version: 4.0.2
|
|
||||||
priority: 0
|
|
||||||
licenseRequired: True
|
|
||||||
productClasses:
|
|
||||||
setupScript: setup3264.ins
|
|
||||||
uninstallScript: uninstall3264.ins
|
|
||||||
updateScript:
|
|
||||||
alwaysScript:
|
|
||||||
onceScript:
|
|
||||||
customScript:
|
|
||||||
userLoginScript:
|
|
||||||
|
|
||||||
[ProductProperty]
|
|
||||||
type: unicode
|
|
||||||
name: install_architecture
|
|
||||||
multivalue: False
|
|
||||||
editable: False
|
|
||||||
description: which architecture (32/64 bit) has to be installed
|
|
||||||
values: ["32 only", "64 only", "both", "system specific"]
|
|
||||||
default: ["system specific"]
|
|
||||||
|
|
||||||
[ProductDependency]
|
|
||||||
action: setup
|
|
||||||
requiredProduct: sereby.aio
|
|
||||||
requiredStatus: installed
|
|
||||||
requirementType: before
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,28 +0,0 @@
|
|||||||
*** Qualitiymanagement/Testing procedure
|
|
||||||
|
|
||||||
- Product:
|
|
||||||
- Name: productname
|
|
||||||
- Version: xxx
|
|
||||||
- Release: yyyy
|
|
||||||
|
|
||||||
- Environment
|
|
||||||
- OS: Native windows XP-32Bit installation
|
|
||||||
- Preinstalled packages: None (also no aio)
|
|
||||||
- Files used while testing:
|
|
||||||
File1: http://domain.de/file.ext
|
|
||||||
|
|
||||||
- Testing process:
|
|
||||||
OPSI-action:
|
|
||||||
- Installation (without dependencies like AIO/Firefox): ??
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: ??
|
|
||||||
- Start menu entry: ??
|
|
||||||
- Starting/using program: viewer works, File1 is shown correctly: ??
|
|
||||||
|
|
||||||
OPSI-action:
|
|
||||||
- Uninstall
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: unrelated: ??
|
|
||||||
- Start menu entry: none: ??
|
|
||||||
|
|
||||||
|
|
@ -1,150 +0,0 @@
|
|||||||
############################
|
|
||||||
# Setup product information
|
|
||||||
############################
|
|
||||||
VENDOR="itwatch.de"
|
|
||||||
PN="itwatch"
|
|
||||||
NAME="7-Zip"
|
|
||||||
DESCRIPTION="7-Zip is a file archiver with a high compression ratio."
|
|
||||||
VERSION="4.10.19"
|
|
||||||
RELEASE="3"
|
|
||||||
PRIORITY="0"
|
|
||||||
ADVICE=""
|
|
||||||
|
|
||||||
# TYPE - defines, if the install files are public or restricted.
|
|
||||||
# Valid value: restricted | public
|
|
||||||
TYPE="public"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# 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: <not set>
|
|
||||||
# Valid values: <not set>, "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: <not set>
|
|
||||||
# Optional parameter. Default value: <not set>,
|
|
||||||
# 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: <not set>.
|
|
||||||
# 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: <empty>
|
|
||||||
# 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[3]="wget"
|
|
||||||
DL_EXTRACT_FORMAT[3]="unzip"
|
|
||||||
DL_EXTRACT_TO[3]="office"
|
|
||||||
|
|
||||||
# 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[<index>]@ : contains the WINST location of the directory, the files from DL_FILE[<index>] was extracted to.
|
|
||||||
# Sample:
|
|
||||||
# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[<index>]@\\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"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Setup required OPSI_INI variables
|
|
||||||
# which will be injected to the opsi-PN.ini files
|
|
||||||
#
|
|
||||||
# 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 UninstallProg
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# OR
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86_64"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_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 UninstallProg's
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg32"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# AND
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[1]="X86_64"
|
|
||||||
OPSI_INI_OPTION[1]="UninstallProg64"
|
|
||||||
OPSI_INI_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
##############################################################################
|
|
||||||
# This optional file "builder-targets-cb.sh" will be called by builder.sh
|
|
||||||
#
|
|
||||||
# The targets will be called from thde opsi-builder using the following
|
|
||||||
# order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# You can overwrite the target functions in builder-targets-cb.sh
|
|
||||||
#
|
|
||||||
# You can define callback functions. The functions are called from
|
|
||||||
# opsi-builder within processing a target
|
|
||||||
# cb_package_makeproductfile
|
|
||||||
#
|
|
||||||
# You can use every variable defined in any configuration file or by
|
|
||||||
# the defined builder script itself. Also, calling the predefined
|
|
||||||
# targets builder_<targetname> is possible.
|
|
||||||
#
|
|
||||||
# Abstract:
|
|
||||||
# target order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# callbacks: <none>
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
echo "Cleanup"
|
|
||||||
builder_cleanup
|
|
||||||
}
|
|
@ -1,173 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
Set $UninstallProgram32$ = $InstallDir32$ + "\" + $UninstallProg32$
|
|
||||||
Set $IniFile32$ = $InstallDir32$ + "\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
Set $UninstallProgram64$ = $InstallDir64$ + "\" + $UninstallProg64$
|
|
||||||
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")
|
|
||||||
if FileExists($IniFile32$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile32$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile32$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile32$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 32 Bit..."
|
|
||||||
|
|
||||||
if FileExists($IniFile32$)
|
|
||||||
Set $UninstallProg32$ = GetValueFromInifile($IniFile32$,"X86","UninstallProg32","XXXXXXXX.exe")
|
|
||||||
Set $UninstallProgramOld32$ = $InstallDir32$ + "\" + $UninstallProg32$
|
|
||||||
if FileExists($UninstallProgramOld32$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_old_32
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if FileExists($UninstallProgram32$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_32
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_32 /32Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /32Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
|
|
||||||
if FileExists($IniFile64$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile64$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile64$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile64$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 64 Bit..."
|
|
||||||
|
|
||||||
if FileExists($IniFile64$)
|
|
||||||
Set $UninstallProg64$ = GetValueFromInifile($IniFile64$,"X86_64","UninstallProg64","XXXXXXXX.exe")
|
|
||||||
Set $UninstallProgramOld64$ = $InstallDir64$ + "\" + $UninstallProg64$
|
|
||||||
if FileExists($UninstallProgramOld64$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_old_64
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if FileExists($UninstallProgram64$)
|
|
||||||
comment "Uninstall program found, starting uninstall"
|
|
||||||
Winbatch_uninstall_64
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_64 /64Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /64Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete program shortcuts"
|
|
||||||
LinkFolder_uninstall
|
|
||||||
|
|
||||||
[Winbatch_uninstall_old_32]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgramOld32$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgramOld32$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Winbatch_uninstall_32]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgram32$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgram32$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Files_uninstall_32]
|
|
||||||
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
|
|
||||||
;
|
|
||||||
delete -sf "$InstallDir32$\"
|
|
||||||
|
|
||||||
[Winbatch_uninstall_old_64]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgramOld64$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgramOld64$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Winbatch_uninstall_64]
|
|
||||||
; Choose one of the following examples as basis for program uninstall
|
|
||||||
;
|
|
||||||
; === Nullsoft Scriptable Install System ================================================================
|
|
||||||
; maby better Call as
|
|
||||||
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
|
|
||||||
; "$UninstallProgram64$" /S
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; "$UninstallProgram64$" /silent /norestart /SUPPRESSMSGBOXES /nocancel
|
|
||||||
|
|
||||||
[Files_uninstall_64]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -sf "$InstallDir64$\"
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
@ -1,11 +0,0 @@
|
|||||||
[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
|
|
@ -1,242 +0,0 @@
|
|||||||
; 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.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProgram32$
|
|
||||||
DefVar $UninstallProgramOld32$
|
|
||||||
DefVar $IniFile32$
|
|
||||||
DefVar $UninstallProgram64$
|
|
||||||
DefVar $UninstallProgramOld64$
|
|
||||||
DefVar $IniFile64$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $MinimumSpace$
|
|
||||||
DefVar $InstallDir32$
|
|
||||||
DefVar $InstallDir64$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $INST_SystemType$
|
|
||||||
DefVar $INST_architecture$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
Set $INST_SystemType$ = GetSystemType
|
|
||||||
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
|
|
||||||
|
|
||||||
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 -
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
;$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 $MinimumSpace$ = "1 MB"
|
|
||||||
; the path were we find the product after the installation
|
|
||||||
Set $InstallDir32$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $InstallDir64$ = "%ProgramFiles64Dir%\<path to the product>"
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
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" $NAME$
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub3264.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub3264.ins"
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "installing"
|
|
||||||
|
|
||||||
if (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
|
|
||||||
Message "Installing " + $ProductId$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " 32 Bit..."
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
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$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " 64 Bit..."
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
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
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Winbatch_install_32]
|
|
||||||
; 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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES
|
|
||||||
|
|
||||||
[Files_install_32]
|
|
||||||
; copy the ini file to the InstallDir
|
|
||||||
copy "$IniCfgFile$" "$InstallDir32$"
|
|
||||||
|
|
||||||
; Example of recursively copying some files into the installation directory:
|
|
||||||
;
|
|
||||||
; copy -s "%ScriptPath%\files\*.*" "$InstallDir32$"
|
|
||||||
|
|
||||||
[Winbatch_install_64]
|
|
||||||
; 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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES
|
|
||||||
|
|
||||||
[Files_install_64]
|
|
||||||
; copy the ini file to the InstallDir
|
|
||||||
copy "$IniCfgFile$" "$InstallDir64$"
|
|
||||||
|
|
||||||
; 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: <path to the program>
|
|
||||||
; 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: <path to the program>
|
|
||||||
; parameters: <some_param>
|
|
||||||
; working_dir: $InstallDir$
|
|
||||||
; icon_file: <path to icon file>
|
|
||||||
; icon_index: 2
|
|
||||||
; end_link
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
requiredWinstVersion >= "4.11.2.6"
|
|
||||||
|
|
||||||
DefVar $UninstallProg32$
|
|
||||||
DefVar $UninstallProgram32$
|
|
||||||
DefVar $UninstallProgramOld32$
|
|
||||||
DefVar $IniFile32$
|
|
||||||
DefVar $UninstallProg64$
|
|
||||||
DefVar $UninstallProgram64$
|
|
||||||
DefVar $UninstallProgramOld64$
|
|
||||||
DefVar $IniFile64$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $InstallDir32$
|
|
||||||
DefVar $InstallDir64$
|
|
||||||
DefVar $INST_SystemType$
|
|
||||||
DefVar $INST_architecture$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
Set $INST_SystemType$ = GetSystemType
|
|
||||||
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
|
|
||||||
|
|
||||||
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 $InstallDir32$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $InstallDir64$ = "%ProgramFiles64Dir%\<path to the product>"
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
comment "Show product picture"
|
|
||||||
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $NAME$
|
|
||||||
|
|
||||||
Message "Uninstalling " + $ProductId$ + " ..."
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub3264.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub3264.ins"
|
|
||||||
endif
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
Don't add cahngelog entries here!
|
|
||||||
It get autogenerated by the opsi-builder.sh
|
|
@ -1,39 +0,0 @@
|
|||||||
[Package]
|
|
||||||
version: 2
|
|
||||||
depends:
|
|
||||||
incremental: False
|
|
||||||
|
|
||||||
[Product]
|
|
||||||
type: localboot
|
|
||||||
id: opsi-template
|
|
||||||
name: opsi template product
|
|
||||||
description: A template for opsi products
|
|
||||||
advice:
|
|
||||||
version: 4.0.2
|
|
||||||
priority: 0
|
|
||||||
licenseRequired: False
|
|
||||||
productClasses:
|
|
||||||
setupScript: setup3264.ins
|
|
||||||
uninstallScript: uninstall3264.ins
|
|
||||||
updateScript:
|
|
||||||
alwaysScript:
|
|
||||||
onceScript:
|
|
||||||
customScript:
|
|
||||||
userLoginScript:
|
|
||||||
|
|
||||||
[ProductProperty]
|
|
||||||
type: unicode
|
|
||||||
name: install_architecture
|
|
||||||
multivalue: False
|
|
||||||
editable: False
|
|
||||||
description: which architecture (32/64 bit) has to be installed
|
|
||||||
values: ["32 only", "64 only", "both", "system specific"]
|
|
||||||
default: ["system specific"]
|
|
||||||
|
|
||||||
[ProductDependency]
|
|
||||||
action: setup
|
|
||||||
requiredProduct: sereby.aio
|
|
||||||
requiredStatus: installed
|
|
||||||
requirementType: before
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,28 +0,0 @@
|
|||||||
*** Qualitiymanagement/Testing procedure
|
|
||||||
|
|
||||||
- Product:
|
|
||||||
- Name: productname
|
|
||||||
- Version: xxx
|
|
||||||
- Release: yyyy
|
|
||||||
|
|
||||||
- Environment
|
|
||||||
- OS: Native windows XP-32Bit installation
|
|
||||||
- Preinstalled packages: None (also no aio)
|
|
||||||
- Files used while testing:
|
|
||||||
File1: http://domain.de/file.ext
|
|
||||||
|
|
||||||
- Testing process:
|
|
||||||
OPSI-action:
|
|
||||||
- Installation (without dependencies like AIO/Firefox): ??
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: ??
|
|
||||||
- Start menu entry: ??
|
|
||||||
- Starting/using program: viewer works, File1 is shown correctly: ??
|
|
||||||
|
|
||||||
OPSI-action:
|
|
||||||
- Uninstall
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: unrelated: ??
|
|
||||||
- Start menu entry: none: ??
|
|
||||||
|
|
||||||
|
|
@ -1,150 +0,0 @@
|
|||||||
############################
|
|
||||||
# Setup product information
|
|
||||||
############################
|
|
||||||
VENDOR="itwatch.de"
|
|
||||||
PN="itwatch"
|
|
||||||
NAME="7-Zip"
|
|
||||||
DESCRIPTION="7-Zip is a file archiver with a high compression ratio."
|
|
||||||
VERSION="4.10.19"
|
|
||||||
RELEASE="3"
|
|
||||||
PRIORITY="0"
|
|
||||||
ADVICE=""
|
|
||||||
|
|
||||||
# TYPE - defines, if the install files are public or restricted.
|
|
||||||
# Valid value: restricted | public
|
|
||||||
TYPE="public"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# 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: <not set>
|
|
||||||
# Valid values: <not set>, "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: <not set>
|
|
||||||
# Optional parameter. Default value: <not set>,
|
|
||||||
# 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: <not set>.
|
|
||||||
# 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: <empty>
|
|
||||||
# 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[3]="wget"
|
|
||||||
DL_EXTRACT_FORMAT[3]="unzip"
|
|
||||||
DL_EXTRACT_TO[3]="office"
|
|
||||||
|
|
||||||
# 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[<index>]@ : contains the WINST location of the directory, the files from DL_FILE[<index>] was extracted to.
|
|
||||||
# Sample:
|
|
||||||
# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[<index>]@\\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"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Setup required OPSI_INI variables
|
|
||||||
# which will be injected to the opsi-PN.ini files
|
|
||||||
#
|
|
||||||
# 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 UninstallProg
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# OR
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86_64"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg"
|
|
||||||
OPSI_INI_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 UninstallProg's
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="UninstallProg32"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# AND
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[1]="X86_64"
|
|
||||||
OPSI_INI_OPTION[1]="UninstallProg64"
|
|
||||||
OPSI_INI_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
##############################################################################
|
|
||||||
# This optional file "builder-targets-cb.sh" will be called by builder.sh
|
|
||||||
#
|
|
||||||
# The targets will be called from thde opsi-builder using the following
|
|
||||||
# order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# You can overwrite the target functions in builder-targets-cb.sh
|
|
||||||
#
|
|
||||||
# You can define callback functions. The functions are called from
|
|
||||||
# opsi-builder within processing a target
|
|
||||||
# cb_package_makeproductfile
|
|
||||||
#
|
|
||||||
# You can use every variable defined in any configuration file or by
|
|
||||||
# the defined builder script itself. Also, calling the predefined
|
|
||||||
# targets builder_<targetname> is possible.
|
|
||||||
#
|
|
||||||
# Abstract:
|
|
||||||
# target order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# callbacks: <none>
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
echo "Cleanup"
|
|
||||||
builder_cleanup
|
|
||||||
}
|
|
@ -1,137 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
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")
|
|
||||||
if FileExists($IniFile32$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile32$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile32$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile32$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 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 not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId32$ + "] DisplayName") = "")
|
|
||||||
comment "MSI id " + $MsiId32$ + " found in registry, starting msiexec to uninstall"
|
|
||||||
Winbatch_uninstall_msi_32
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_32 /32Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /32Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
|
|
||||||
if FileExists($IniFile64$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile64$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile64$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile64$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 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 not (GetRegistryStringValue64("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId64$ + "] DisplayName") = "")
|
|
||||||
comment "MSI id " + $MsiId64$ + " found in registry, starting msiexec to uninstall"
|
|
||||||
Winbatch_uninstall_msi_64
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_64 /64Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /64Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete program shortcuts"
|
|
||||||
LinkFolder_uninstall
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_old_32]
|
|
||||||
msiexec /x $MsiIdOld32$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_32]
|
|
||||||
msiexec /x $MsiId32$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Files_uninstall_32]
|
|
||||||
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
|
|
||||||
;
|
|
||||||
delete -sf "$InstallDir32$\"
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_old_64]
|
|
||||||
msiexec /x $MsiIdOld64$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_64]
|
|
||||||
msiexec /x $MsiId64$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Files_uninstall_64]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -sf "$InstallDir64$\"
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
@ -1,11 +0,0 @@
|
|||||||
[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
|
|
@ -1,282 +0,0 @@
|
|||||||
; 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.11.2.6"
|
|
||||||
|
|
||||||
DefVar $MsiIdOld32$
|
|
||||||
DefVar $IniFile32$
|
|
||||||
DefVar $MsiIdOld64$
|
|
||||||
DefVar $IniFile64$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $MinimumSpace$
|
|
||||||
DefVar $InstallDir32$
|
|
||||||
DefVar $InstallDir64$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicenseKey$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $INST_SystemType$
|
|
||||||
DefVar $INST_architecture$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
Set $INST_SystemType$ = GetSystemType
|
|
||||||
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
|
|
||||||
|
|
||||||
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 -
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
;$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 $MinimumSpace$ = "1 MB"
|
|
||||||
; the path were we find the product after the installation
|
|
||||||
Set $InstallDir32$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $InstallDir64$ = "%ProgramFiles64Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
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" $NAME$
|
|
||||||
|
|
||||||
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 (($INST_SystemType$ = "x86 System") and ($INST_architecture$ = "system specific")) or ($INST_architecture$ = "both") or ($INST_architecture$ = "32 only")
|
|
||||||
Message "Installing " + $ProductId$ + " "+ $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " 32 Bit..."
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
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$ + " " + $VERSION$ + "-" + $CREATOR_TAG$ + $RELEASE$ + " 64 Bit..."
|
|
||||||
comment "Start setup program"
|
|
||||||
ChangeDirectory "%SCRIPTPATH%"
|
|
||||||
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
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Winbatch_install_32]
|
|
||||||
; 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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES
|
|
||||||
|
|
||||||
[Files_install_32]
|
|
||||||
; copy the ini file to the InstallDir
|
|
||||||
copy "$IniCfgFile$" "$InstallDir32$"
|
|
||||||
|
|
||||||
; Example of recursively copying some files into the installation directory:
|
|
||||||
;
|
|
||||||
; copy -s "%ScriptPath%\files\*.*" "$InstallDir32$"
|
|
||||||
|
|
||||||
[Winbatch_install_64]
|
|
||||||
; 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 ================================================================
|
|
||||||
; "%ScriptPath%\Setup.exe" /S
|
|
||||||
;
|
|
||||||
; === MSI package =======================================================================================
|
|
||||||
; You may use the parameter PIDKEY=$Licensekey$
|
|
||||||
; msiexec /i "%ScriptPath%\some.msi" /l* "$LogDir$\$ProductId$.install_log.txt" /qb! ALLUSERS=1 REBOOT=ReallySuppress
|
|
||||||
;
|
|
||||||
; === InstallShield + MSI=====================================================================================
|
|
||||||
; Attention: The path to the log file should not contain any whitespaces
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /l* $LogDir$\$ProductId$.install_log.txt /qb! ALLUSERS=1 REBOOT=ReallySuppress"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /v" /qb! ALLUSERS=2 REBOOT=ReallySuppress"
|
|
||||||
;
|
|
||||||
; === InstallShield =====================================================================================
|
|
||||||
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
|
|
||||||
; You may use an answer file by the parameter /f1"c:\setup.iss"
|
|
||||||
; "%ScriptPath%\setup.exe" /s /sms /f2"$LogDir$\$ProductId$.install_log.txt"
|
|
||||||
;
|
|
||||||
; === Inno Setup ========================================================================================
|
|
||||||
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
|
|
||||||
; You may create setup answer file by: setup.exe /SAVEINF="filename"
|
|
||||||
; You may use an answer file by the parameter /LOADINF="filename"
|
|
||||||
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES
|
|
||||||
|
|
||||||
[Files_install_64]
|
|
||||||
; copy the ini file to the InstallDir
|
|
||||||
copy "$IniCfgFile$" "$InstallDir64$"
|
|
||||||
|
|
||||||
; 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: <path to the program>
|
|
||||||
; 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: <path to the program>
|
|
||||||
; parameters: <some_param>
|
|
||||||
; working_dir: $InstallDir$
|
|
||||||
; icon_file: <path to 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
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
requiredWinstVersion >= "4.11.2.6"
|
|
||||||
|
|
||||||
DefVar $MsiIdOld32$
|
|
||||||
DefVar $IniFile32$
|
|
||||||
DefVar $MsiIdOld64$
|
|
||||||
DefVar $IniFile64$
|
|
||||||
DefVar $IniCfgFile$
|
|
||||||
DefVar $LogDir$
|
|
||||||
DefVar $ExitCode$
|
|
||||||
DefVar $ProductId$
|
|
||||||
DefVar $InstallDir32$
|
|
||||||
DefVar $InstallDir64$
|
|
||||||
DefVar $LicenseRequired$
|
|
||||||
DefVar $LicensePool$
|
|
||||||
DefVar $INST_SystemType$
|
|
||||||
DefVar $INST_architecture$
|
|
||||||
DefVar $OLD_VERSION$
|
|
||||||
DefVar $OLD_CREATOR_TAG$
|
|
||||||
DefVar $OLD_RELEASE$
|
|
||||||
|
|
||||||
Set $INST_SystemType$ = GetSystemType
|
|
||||||
set $INST_architecture$ = GetProductProperty("install_architecture","system specific")
|
|
||||||
|
|
||||||
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 $InstallDir32$ = "%ProgramFiles32Dir%\<path to the product>"
|
|
||||||
Set $InstallDir64$ = "%ProgramFiles64Dir%\<path to the product>"
|
|
||||||
Set $LicenseRequired$ = "false"
|
|
||||||
Set $LicensePool$ = "p_" + $ProductId$
|
|
||||||
; ----------------------------------------------------------------
|
|
||||||
|
|
||||||
Set $IniCfgFile$ = "%ScriptPath%\opsi-" + $ProductId$ + ".ini"
|
|
||||||
|
|
||||||
comment "Show product picture"
|
|
||||||
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $NAME$
|
|
||||||
|
|
||||||
Message "Uninstalling " + $ProductId$ + " ..."
|
|
||||||
|
|
||||||
if FileExists("%ScriptPath%\delsub3264.ins")
|
|
||||||
comment "Start uninstall sub section"
|
|
||||||
Sub "%ScriptPath%\delsub3264.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$)
|
|
||||||
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
Don't add cahngelog entries here!
|
|
||||||
It get autogenerated by the opsi-builder.sh
|
|
@ -1,39 +0,0 @@
|
|||||||
[Package]
|
|
||||||
version: 2
|
|
||||||
depends:
|
|
||||||
incremental: False
|
|
||||||
|
|
||||||
[Product]
|
|
||||||
type: localboot
|
|
||||||
id: opsi-template
|
|
||||||
name: opsi template product
|
|
||||||
description: A template for opsi products
|
|
||||||
advice:
|
|
||||||
version: 4.0.2
|
|
||||||
priority: 0
|
|
||||||
licenseRequired: True
|
|
||||||
productClasses:
|
|
||||||
setupScript: setup3264.ins
|
|
||||||
uninstallScript: uninstall3264.ins
|
|
||||||
updateScript:
|
|
||||||
alwaysScript:
|
|
||||||
onceScript:
|
|
||||||
customScript:
|
|
||||||
userLoginScript:
|
|
||||||
|
|
||||||
[ProductProperty]
|
|
||||||
type: unicode
|
|
||||||
name: install_architecture
|
|
||||||
multivalue: False
|
|
||||||
editable: False
|
|
||||||
description: which architecture (32/64 bit) has to be installed
|
|
||||||
values: ["32 only", "64 only", "both", "system specific"]
|
|
||||||
default: ["system specific"]
|
|
||||||
|
|
||||||
[ProductDependency]
|
|
||||||
action: setup
|
|
||||||
requiredProduct: sereby.aio
|
|
||||||
requiredStatus: installed
|
|
||||||
requirementType: before
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /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
|
|
||||||
#
|
|
@ -1,28 +0,0 @@
|
|||||||
*** Qualitiymanagement/Testing procedure
|
|
||||||
|
|
||||||
- Product:
|
|
||||||
- Name: productname
|
|
||||||
- Version: xxx
|
|
||||||
- Release: yyyy
|
|
||||||
|
|
||||||
- Environment
|
|
||||||
- OS: Native windows XP-32Bit installation
|
|
||||||
- Preinstalled packages: None (also no aio)
|
|
||||||
- Files used while testing:
|
|
||||||
File1: http://domain.de/file.ext
|
|
||||||
|
|
||||||
- Testing process:
|
|
||||||
OPSI-action:
|
|
||||||
- Installation (without dependencies like AIO/Firefox): ??
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: ??
|
|
||||||
- Start menu entry: ??
|
|
||||||
- Starting/using program: viewer works, File1 is shown correctly: ??
|
|
||||||
|
|
||||||
OPSI-action:
|
|
||||||
- Uninstall
|
|
||||||
Result:
|
|
||||||
- File extensions related to program: unrelated: ??
|
|
||||||
- Start menu entry: none: ??
|
|
||||||
|
|
||||||
|
|
@ -1,150 +0,0 @@
|
|||||||
############################
|
|
||||||
# Setup product information
|
|
||||||
############################
|
|
||||||
VENDOR="itwatch.de"
|
|
||||||
PN="itwatch"
|
|
||||||
NAME="7-Zip"
|
|
||||||
DESCRIPTION="7-Zip is a file archiver with a high compression ratio."
|
|
||||||
VERSION="4.10.19"
|
|
||||||
RELEASE="3"
|
|
||||||
PRIORITY="0"
|
|
||||||
ADVICE=""
|
|
||||||
|
|
||||||
# TYPE - defines, if the install files are public or restricted.
|
|
||||||
# Valid value: restricted | public
|
|
||||||
TYPE="public"
|
|
||||||
|
|
||||||
#################
|
|
||||||
# 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: <not set>
|
|
||||||
# Valid values: <not set>, "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: <not set>
|
|
||||||
# Optional parameter. Default value: <not set>,
|
|
||||||
# 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: <not set>.
|
|
||||||
# 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: <empty>
|
|
||||||
# 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[3]="wget"
|
|
||||||
DL_EXTRACT_FORMAT[3]="unzip"
|
|
||||||
DL_EXTRACT_TO[3]="office"
|
|
||||||
|
|
||||||
# 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[<index>]@ : contains the WINST location of the directory, the files from DL_FILE[<index>] was extracted to.
|
|
||||||
# Sample:
|
|
||||||
# WINST_VALUE[1]="@DL_EXTRACT_WINST_PATH[<index>]@\\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"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Setup required OPSI_INI variables
|
|
||||||
# which will be injected to the opsi-PN.ini files
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# OR
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86_64"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId"
|
|
||||||
OPSI_INI_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
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[0]="X86"
|
|
||||||
OPSI_INI_OPTION[0]="MsiId32"
|
|
||||||
OPSI_INI_VALUE[0]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
||||||
# AND
|
|
||||||
|
|
||||||
OPSI_INI_SECTION[1]="X86_64"
|
|
||||||
OPSI_INI_OPTION[1]="MsiId64"
|
|
||||||
OPSI_INI_VALUE[1]="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
##############################################################################
|
|
||||||
# This optional file "builder-targets-cb.sh" will be called by builder.sh
|
|
||||||
#
|
|
||||||
# The targets will be called from thde opsi-builder using the following
|
|
||||||
# order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# You can overwrite the target functions in builder-targets-cb.sh
|
|
||||||
#
|
|
||||||
# You can define callback functions. The functions are called from
|
|
||||||
# opsi-builder within processing a target
|
|
||||||
# cb_package_makeproductfile
|
|
||||||
#
|
|
||||||
# You can use every variable defined in any configuration file or by
|
|
||||||
# the defined builder script itself. Also, calling the predefined
|
|
||||||
# targets builder_<targetname> is possible.
|
|
||||||
#
|
|
||||||
# Abstract:
|
|
||||||
# target order: config, prepare, retrieve, create, package, publish, commit, cleanup
|
|
||||||
# callbacks: <none>
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
echo "Cleanup"
|
|
||||||
builder_cleanup
|
|
||||||
}
|
|
@ -1,137 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
|
|
||||||
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")
|
|
||||||
if FileExists($IniFile32$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile32$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile32$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile32$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 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 not (GetRegistryStringValue32("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId32$ + "] DisplayName") = "")
|
|
||||||
comment "MSI id " + $MsiId32$ + " found in registry, starting msiexec to uninstall"
|
|
||||||
Winbatch_uninstall_msi_32
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_32 /32Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /32Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ($INST_SystemType$ = "64 Bit System") and (($INST_architecture$ = "system specific") or ($INST_architecture$ = "both") or ($INST_architecture$ = "64 only"))
|
|
||||||
if FileExists($IniFile64$)
|
|
||||||
Set $OLD_VERSION$ = GetValueFromInifile($IniFile64$,"COMMON","VERSION","")
|
|
||||||
Set $OLD_CREATOR_TAG$ = GetValueFromInifile($IniFile64$,"COMMON","CREATOR_TAG","")
|
|
||||||
Set $OLD_RELEASE$ = GetValueFromInifile($IniFile64$,"COMMON","RELEASE","")
|
|
||||||
endif
|
|
||||||
Message "Uninstalling " + $ProductId$ + " "+ $OLD_VERSION$ + "-" + $OLD_CREATOR_TAG$ + $OLD_RELEASE$ + " 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 not (GetRegistryStringValue64("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId64$ + "] DisplayName") = "")
|
|
||||||
comment "MSI id " + $MsiId64$ + " found in registry, starting msiexec to uninstall"
|
|
||||||
Winbatch_uninstall_msi_64
|
|
||||||
sub_check_exitcode
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete files"
|
|
||||||
Files_uninstall_64 /64Bit
|
|
||||||
comment "Cleanup registry"
|
|
||||||
Registry_uninstall /64Bit
|
|
||||||
endif
|
|
||||||
|
|
||||||
comment "Delete program shortcuts"
|
|
||||||
LinkFolder_uninstall
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_old_32]
|
|
||||||
msiexec /x $MsiIdOld32$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_32]
|
|
||||||
msiexec /x $MsiId32$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Files_uninstall_32]
|
|
||||||
; Example for recursively deleting the installation directory (don't forget the trailing backslash):
|
|
||||||
;
|
|
||||||
delete -sf "$InstallDir32$\"
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_old_64]
|
|
||||||
msiexec /x $MsiIdOld64$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Winbatch_uninstall_msi_64]
|
|
||||||
msiexec /x $MsiId64$ /qb! REBOOT=ReallySuppress
|
|
||||||
|
|
||||||
[Files_uninstall_64]
|
|
||||||
; Example for recursively deleting the installation directory:
|
|
||||||
;
|
|
||||||
del -sf "$InstallDir64$\"
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
; 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/en/credits/
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
Message "Profile Patch for VLC ...."
|
|
||||||
|
|
||||||
comment "Did we run this script before ? - and set version stamp in profile"
|
|
||||||
if getValue("installationstate", getProductMap) = "installed"
|
|
||||||
comment "Product is installed"
|
|
||||||
if not (scriptWasExecutedBefore)
|
|
||||||
comment "loginscript was not run yet "
|
|
||||||
Files_profile_copy
|
|
||||||
Registry_currentuser_set
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
[Files_profile_copy]
|
|
||||||
copy "%Scriptpath%\profiles\*.*" "%CurrentAppdataDir%\ACME"
|
|
||||||
|
|
||||||
[Registry_currentuser_set]
|
|
||||||
openkey [HKCU\Software\ACME]
|
|
||||||
set "show_greeting_window" = "no"
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user