Merge branch 'main' into Variable-for-skipping-if-app-is-not-installed

This commit is contained in:
Søren Theilgaard
2022-03-03 16:25:53 +01:00
committed by GitHub
9 changed files with 172 additions and 119 deletions

View File

@@ -1,7 +1,6 @@
## v10 ## v9.1
- Introducing variable `SKIP_UNINSTALLED` that normally will be `0` and the script will run and install the software label if other conditions align with this. Use `SKIP_UNINSTALLED=1` to have the script stop if a current installation of the app is not found. - Introducing variable `SKIP_UNINSTALLED` that normally will be `0` and the script will run and install the software label if other conditions align with this. Use `SKIP_UNINSTALLED=1` to have the script stop if a current installation of the app is not found.
-
## v9 ## v9

View File

@@ -301,8 +301,8 @@ if [[ $(/usr/bin/arch) == "arm64" ]]; then
rosetta2=no rosetta2=no
fi fi
fi fi
VERSION="9.0" VERSION="9.0.1"
VERSIONDATE="2022-02-08" VERSIONDATE="2022-02-20"
# MARK: Functions # MARK: Functions
@@ -324,8 +324,10 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level
reopenClosedProcess reopenClosedProcess
if [[ -n $2 && $1 -ne 0 ]]; then if [[ -n $2 && $1 -ne 0 ]]; then
printlog "ERROR: $2" $3 printlog "ERROR: $2" $3
else
printlog "$2" $3
fi fi
printlog "################## End Installomator, exit code $1 \n\n" REQ printlog "################## End Installomator, exit code $1 \n" REQ
# if label is wrong and we wanted name of the label, then return ################## # if label is wrong and we wanted name of the label, then return ##################
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
@@ -403,7 +405,7 @@ printlog(){
curl -s -X POST https://http-intake.logs.datadoghq.com/v1/input -H "Content-Type: text/plain" -H "DD-API-KEY: $datadogAPI" -d "${log_priority} : $mdmURL : Installomator-${label} : ${VERSIONDATE//-/} : $SESSION : ${logmessage}" > /dev/null curl -s -X POST https://http-intake.logs.datadoghq.com/v1/input -H "Content-Type: text/plain" -H "DD-API-KEY: $datadogAPI" -d "${log_priority} : $mdmURL : Installomator-${label} : ${VERSIONDATE//-/} : $SESSION : ${logmessage}" > /dev/null
done <<< "$log_message" done <<< "$log_message"
fi fi
# Extra spaces # Extra spaces
space_char="" space_char=""
if [[ ${#log_priority} -eq 3 ]]; then if [[ ${#log_priority} -eq 3 ]]; then
@@ -482,7 +484,7 @@ versionFromGit() {
appNewVersion=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') appNewVersion=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
if [ -z "$appNewVersion" ]; then if [ -z "$appNewVersion" ]; then
printlog "could not retrieve version number for $gitusername/$gitreponame" printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
appNewVersion="" appNewVersion=""
else else
echo "$appNewVersion" echo "$appNewVersion"
@@ -526,19 +528,34 @@ getAppVersion() {
fi fi
fi fi
# get app in /Applications, or /Applications/Utilities, or find using Spotlight # get app in targetDir, /Applications, or /Applications/Utilities
if [[ -d "/Applications/$appName" ]]; then if [[ -d "$targetDir/$appName" ]]; then
applist="$targetDir/$appName"
elif [[ -d "/Applications/$appName" ]]; then
applist="/Applications/$appName" applist="/Applications/$appName"
# if [[ $type =~ '^(dmg|zip|tbz|app.*)$' ]]; then
# targetDir="/Applications"
# fi
elif [[ -d "/Applications/Utilities/$appName" ]]; then elif [[ -d "/Applications/Utilities/$appName" ]]; then
applist="/Applications/Utilities/$appName" applist="/Applications/Utilities/$appName"
# if [[ $type =~ '^(dmg|zip|tbz|app.*)$' ]]; then
# targetDir="/Applications/Utilities"
# fi
else else
applist=$(mdfind "kind:application $appName" -0 ) # applist=$(mdfind "kind:application $appName" -0 )
printlog "name: $name, appName: $appName"
applist=$(mdfind "kind:application AND name:$name" -0 )
# printlog "App(s) found: ${applist}" DEBUG
# applist=$(mdfind "kind:application AND name:$appName" -0 )
fi fi
if [[ -z applist ]]; then if [[ -z applist ]]; then
printlog "No previous app found" DEBUG printlog "No previous app found" INFO
else else
printlog "App(s) found: ${applist}" DEBUG printlog "App(s) found: ${applist}" INFO
fi fi
# if [[ $type =~ '^(dmg|zip|tbz|app.*)$' ]]; then
# printlog "targetDir for installation: $targetDir" INFO
# fi
appPathArray=( ${(0)applist} ) appPathArray=( ${(0)applist} )
@@ -561,10 +578,10 @@ getAppVersion() {
fi fi
fi fi
else else
printlog "could not determine location of $appName" printlog "could not determine location of $appName" WARN
fi fi
else else
printlog "could not find $appName" printlog "could not find $appName" WARN
fi fi
} }
@@ -691,7 +708,7 @@ reopenClosedProcess() {
processuser=$(ps aux | grep -i "${appName}" | grep -vi "grep" | awk '{print $1}') processuser=$(ps aux | grep -i "${appName}" | grep -vi "grep" | awk '{print $1}')
printlog "Reopened ${appName} as $processuser" printlog "Reopened ${appName} as $processuser"
else else
printlog "App not closed, so no reopen." DEBUG printlog "App not closed, so no reopen." INFO
fi fi
} }
@@ -701,7 +718,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
# check if app exists # check if app exists
if [ ! -e "$appPath" ]; then if [ ! -e "$appPath" ]; then
cleanupAndExit 8 "could not find: $appPath" DEBUG cleanupAndExit 8 "could not find: $appPath" ERROR
fi fi
# verify with spctl # verify with spctl
@@ -733,10 +750,12 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" INFO cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
elif [[ -z $appversion ]]; then
printlog "Installing $name version $appNewVersion on versionKey $versionKey."
else else
printlog "Downloaded version of $name is $appNewVersion on versionKey $versionKey (replacing version $appversion)." printlog "Downloaded version of $name is $appNewVersion on versionKey $versionKey (replacing version $appversion)."
fi fi
@@ -752,7 +771,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "notifying" printlog "notifying"
displaynotification "$message" "Error updating $name!" displaynotification "$message" "Error updating $name!"
fi fi
cleanupAndExit 6 "Installed macOS is too old for this app." INFO cleanupAndExit 6 "Installed macOS is too old for this app." ERROR
fi fi
fi fi
@@ -793,7 +812,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "Changing owner to $currentUser" printlog "Changing owner to $currentUser"
chown -R "$currentUser" "$targetDir/$appName" chown -R "$currentUser" "$targetDir/$appName"
else else
printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel" printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel"
chown -R root:wheel "$targetDir/$appName" chown -R root:wheel "$targetDir/$appName"
fi fi
@@ -823,7 +842,7 @@ mountDMG() {
dmgmountStatus=$(echo $?) dmgmountStatus=$(echo $?)
dmgmount=$(echo $dmgmountOut | tail -n 1 | cut -c 54- ) dmgmount=$(echo $dmgmountOut | tail -n 1 | cut -c 54- )
deduplicatelogs "$dmgmountOut" deduplicatelogs "$dmgmountOut"
if [[ $dmgmountStatus -ne 0 ]] ; then if [[ $dmgmountStatus -ne 0 ]] ; then
#if ! dmgmount=$(echo 'Y'$'\n' | hdiutil attach "$tmpDir/$archiveName" -nobrowse -readonly | tail -n 1 | cut -c 54- ); then #if ! dmgmount=$(echo 'Y'$'\n' | hdiutil attach "$tmpDir/$archiveName" -nobrowse -readonly | tail -n 1 | cut -c 54- ); then
cleanupAndExit 3 "Error mounting $tmpDir/$archiveName error:\n$logoutput" ERROR cleanupAndExit 3 "Error mounting $tmpDir/$archiveName error:\n$logoutput" ERROR
@@ -832,7 +851,7 @@ mountDMG() {
cleanupAndExit 3 "Error accessing mountpoint for $tmpDir/$archiveName error:\n$logoutput" ERROR cleanupAndExit 3 "Error accessing mountpoint for $tmpDir/$archiveName error:\n$logoutput" ERROR
fi fi
printlog "Debugging enabled, dmgmount output was:\n$logoutput" DEBUG printlog "Debugging enabled, dmgmount output was:\n$logoutput" DEBUG
printlog "Mounted: $dmgmount" INFO printlog "Mounted: $dmgmount" INFO
} }
@@ -849,7 +868,7 @@ installFromPKG() {
spctlOut=$(spctl -a -vv -t install "$archiveName" 2>&1 ) spctlOut=$(spctl -a -vv -t install "$archiveName" 2>&1 )
spctlStatus=$(echo $?) spctlStatus=$(echo $?)
printlog "spctlOut is $spctlOut" DEBUG printlog "spctlOut is $spctlOut" DEBUG
teamID=$(echo $spctlOut | awk -F '(' '/origin=/ {print $2 }' | tr -d '()' ) teamID=$(echo $spctlOut | awk -F '(' '/origin=/ {print $2 }' | tr -d '()' )
# Apple signed software has no teamID, grab entire origin instead # Apple signed software has no teamID, grab entire origin instead
if [[ -z $teamID ]]; then if [[ -z $teamID ]]; then
@@ -857,7 +876,7 @@ installFromPKG() {
fi fi
deduplicatelogs "$spctlOut" deduplicatelogs "$spctlOut"
if [[ $spctlStatus -ne 0 ]] ; then if [[ $spctlStatus -ne 0 ]] ; then
#if ! spctlout=$(spctl -a -vv -t install "$archiveName" 2>&1 ); then #if ! spctlout=$(spctl -a -vv -t install "$archiveName" 2>&1 ); then
cleanupAndExit 4 "Error verifying $archiveName error:\n$logoutput" ERROR cleanupAndExit 4 "Error verifying $archiveName error:\n$logoutput" ERROR
@@ -891,7 +910,7 @@ installFromPKG() {
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" INFO cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
@@ -965,27 +984,28 @@ installPkgInDmg() {
if [[ -z $pkgName ]]; then if [[ -z $pkgName ]]; then
# find first file ending with 'pkg' # find first file ending with 'pkg'
findfiles=$(find "$dmgmount" -iname "*.pkg" -type f -maxdepth 1 ) findfiles=$(find "$dmgmount" -iname "*.pkg" -type f -maxdepth 1 )
printlog "Found pkg(s):\n$findfiles" DEBUG
filearray=( ${(f)findfiles} ) filearray=( ${(f)findfiles} )
if [[ ${#filearray} -eq 0 ]]; then if [[ ${#filearray} -eq 0 ]]; then
cleanupAndExit 20 "couldn't find pkg in dmg $archiveName" ERROR cleanupAndExit 20 "couldn't find pkg in dmg $archiveName" ERROR
fi fi
archiveName="${filearray[1]}" archiveName="${filearray[1]}"
printlog "found pkg: $archiveName"
else else
if ls "$tmpDir/$pkgName" ; then if [[ -s "$dmgmount/$pkgName" ]] ; then # was: $tmpDir
archiveName="$tmpDir/$pkgName" archiveName="$dmgmount/$pkgName"
else else
# try searching for pkg # try searching for pkg
findfiles=$(find "$tmpDir" -iname "$pkgName") findfiles=$(find "$dmgmount" -iname "$pkgName") # was: $tmpDir
printlog "Found pkg(s):\n$findfiles" DEBUG
filearray=( ${(f)findfiles} ) filearray=( ${(f)findfiles} )
if [[ ${#filearray} -eq 0 ]]; then if [[ ${#filearray} -eq 0 ]]; then
cleanupAndExit 20 "couldn't find pkg “$pkgName” in zip $archiveName" ERROR cleanupAndExit 20 "couldn't find pkg “$pkgName” in dmg $archiveName" ERROR
fi fi
# it is now safe to overwrite archiveName for installFromPKG # it is now safe to overwrite archiveName for installFromPKG
archiveName="${filearray[1]}" archiveName="${filearray[1]}"
printlog "found pkg: $archiveName"
fi fi
fi fi
printlog "found pkg: $archiveName"
# installFromPkgs # installFromPkgs
installFromPKG installFromPKG
@@ -1000,6 +1020,7 @@ installPkgInZip() {
if [[ -z $pkgName ]]; then if [[ -z $pkgName ]]; then
# find first file ending with 'pkg' # find first file ending with 'pkg'
findfiles=$(find "$tmpDir" -iname "*.pkg" -type f -maxdepth 2 ) findfiles=$(find "$tmpDir" -iname "*.pkg" -type f -maxdepth 2 )
printlog "Found pkg(s):\n$findfiles" DEBUG
filearray=( ${(f)findfiles} ) filearray=( ${(f)findfiles} )
if [[ ${#filearray} -eq 0 ]]; then if [[ ${#filearray} -eq 0 ]]; then
cleanupAndExit 20 "couldn't find pkg in zip $archiveName" ERROR cleanupAndExit 20 "couldn't find pkg in zip $archiveName" ERROR
@@ -1076,13 +1097,13 @@ runUpdateTool() {
printlog "Error running $updateTool, Procceding with normal installation. Exit Status: $updateStatus Error:\n$logoutput" WARN printlog "Error running $updateTool, Procceding with normal installation. Exit Status: $updateStatus Error:\n$logoutput" WARN
return 1 return 1
if [[ $type == updateronly ]]; then if [[ $type == updateronly ]]; then
cleanupAndExit 77 "No Download URL Set, this is an update only application and the updater failed" WARN cleanupAndExit 77 "No Download URL Set, this is an update only application and the updater failed" ERROR
fi fi
elif [[ $updateStatus -eq 0 ]]; then elif [[ $updateStatus -eq 0 ]]; then
printlog "Debugging enabled, update tool output was:\n$logoutput" DEBUG printlog "Debugging enabled, update tool output was:\n$logoutput" DEBUG
fi fi
else else
printlog "couldn't find $updateTool, continuing normally" printlog "couldn't find $updateTool, continuing normally" WARN
return 1 return 1
fi fi
return 0 return 0
@@ -1150,21 +1171,21 @@ fi
# MARK: argument parsing # MARK: argument parsing
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
if [[ -z $label ]]; then # check if label is set inside script if [[ -z $label ]]; then # check if label is set inside script
printlog "no label provided, printing labels" printlog "no label provided, printing labels" REQ
grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "$0" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "$0" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort
#grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "${labelFile}" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort #grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "${labelFile}" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort
exit 0 exit 0
fi fi
elif [[ $1 == "/" ]]; then elif [[ $1 == "/" ]]; then
# jamf uses sends '/' as the first argument # jamf uses sends '/' as the first argument
printlog "shifting arguments for Jamf" printlog "shifting arguments for Jamf" REQ
shift 3 shift 3
fi fi
while [[ -n $1 ]]; do while [[ -n $1 ]]; do
if [[ $1 =~ ".*\=.*" ]]; then if [[ $1 =~ ".*\=.*" ]]; then
# if an argument contains an = character, send it to eval # if an argument contains an = character, send it to eval
printlog "setting variable from argument $1" printlog "setting variable from argument $1" REQ
eval $1 eval $1
else else
# assume it's a label # assume it's a label
@@ -1236,31 +1257,31 @@ currentUser=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print
# MARK: check for root # MARK: check for root
if [[ "$(whoami)" != "root" && "$DEBUG" -eq 0 ]]; then if [[ "$(whoami)" != "root" && "$DEBUG" -eq 0 ]]; then
# not running as root # not running as root
cleanupAndExit 6 "not running as root, exiting" cleanupAndExit 6 "not running as root, exiting" ERROR
fi fi
# MARK: labels in case statement # MARK: labels in case statement
case $label in case $label in
longversion) longversion)
# print the script version # print the script version
printlog "Installomater: version $VERSION ($VERSIONDATE)" printlog "Installomater: version $VERSION ($VERSIONDATE)" REQ
exit 0 exit 0
;; ;;
valuesfromarguments) valuesfromarguments)
if [[ -z $name ]]; then if [[ -z $name ]]; then
printlog "need to provide 'name'" printlog "need to provide 'name'" ERROR
exit 1 exit 1
fi fi
if [[ -z $type ]]; then if [[ -z $type ]]; then
printlog "need to provide 'type'" printlog "need to provide 'type'" ERROR
exit 1 exit 1
fi fi
if [[ -z $downloadURL ]]; then if [[ -z $downloadURL ]]; then
printlog "need to provide 'downloadURL'" printlog "need to provide 'downloadURL'" ERROR
exit 1 exit 1
fi fi
if [[ -z $expectedTeamID ]]; then if [[ -z $expectedTeamID ]]; then
printlog "need to provide 'expectedTeamID'" printlog "need to provide 'expectedTeamID'" ERROR
exit 1 exit 1
fi fi
;; ;;
@@ -2795,7 +2816,11 @@ loom)
# credit: Lance Stephens (@pythoninthegrass on MacAdmins Slack) # credit: Lance Stephens (@pythoninthegrass on MacAdmins Slack)
name="Loom" name="Loom"
type="dmg" type="dmg"
downloadURL=https://cdn.loom.com/desktop-packages/$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/url/ && /dmg/ {print $3}' | head -1) if [[ $(arch) == "arm64" ]]; then
downloadURL=https://cdn.loom.com/desktop-packages/$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/url/ && /arm64/ && /dmg/ {print $3}' | head -1)
elif [[ $(arch) == "i386" ]]; then
downloadURL=https://cdn.loom.com/desktop-packages/$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/url/ && /dmg/ {print $3}' | head -1)
fi
appNewVersion=$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/version/ {print $2}' ) appNewVersion=$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/version/ {print $2}' )
expectedTeamID="QGD2ZPXZZG" expectedTeamID="QGD2ZPXZZG"
;; ;;
@@ -3494,6 +3519,15 @@ pacifist)
downloadURL="https://charlessoft.com/cgi-bin/pacifist_download.cgi?type=dmg" downloadURL="https://charlessoft.com/cgi-bin/pacifist_download.cgi?type=dmg"
expectedTeamID="HRLUCP7QP4" expectedTeamID="HRLUCP7QP4"
;; ;;
packages)
#NOTE: Packages is signed but _not_ notarized, so spctl will reject it
name="Packages"
type="pkgInDmg"
pkgName="Install Packages.pkg"
downloadURL="http://s.sudre.free.fr/Software/files/Packages.dmg"
expectedTeamID="NL5M9E394P"
;;
pandoc) pandoc)
name="Pandoc" name="Pandoc"
type="pkg" type="pkg"
@@ -4605,13 +4639,13 @@ zulujdk8)
*) *)
# unknown label # unknown label
#printlog "unknown label $label" #printlog "unknown label $label"
cleanupAndExit 1 "unknown label $label" cleanupAndExit 1 "unknown label $label" ERROR
;; ;;
esac esac
# Are we only asked to return label name # Are we only asked to return label name
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
printlog "Only returning label name." printlog "Only returning label name." REQ
printlog "$name" printlog "$name"
echo "$name" echo "$name"
exit exit
@@ -4622,7 +4656,7 @@ fi
if [[ ${INTERRUPT_DND} = "no" ]]; then if [[ ${INTERRUPT_DND} = "no" ]]; then
# Check if a fullscreen app is active # Check if a fullscreen app is active
if hasDisplaySleepAssertion; then if hasDisplaySleepAssertion; then
cleanupAndExit 1 "active display sleep assertion detected, aborting" cleanupAndExit 1 "active display sleep assertion detected, aborting" ERROR
fi fi
fi fi
@@ -4667,9 +4701,9 @@ if [[ ! -a "${LOGO}" ]]; then
LOGO="/Applications/App Store.app/Contents/Resources/AppIcon.icns" LOGO="/Applications/App Store.app/Contents/Resources/AppIcon.icns"
fi fi
fi fi
printlog "LOGO=${LOGO}" printlog "LOGO=${LOGO}" INFO
printlog "Label type: $type" printlog "Label type: $type" INFO
# MARK: extract info from data # MARK: extract info from data
if [ -z "$archiveName" ]; then if [ -z "$archiveName" ]; then
@@ -4691,7 +4725,7 @@ if [ -z "$archiveName" ]; then
;; ;;
esac esac
fi fi
printlog "archiveName: $archiveName" DEBUG printlog "archiveName: $archiveName" INFO
if [ -z "$appName" ]; then if [ -z "$appName" ]; then
# when not given derive from name # when not given derive from name
@@ -4709,14 +4743,13 @@ if [ -z "$targetDir" ]; then
updateronly) updateronly)
;; ;;
*) *)
printlog "Cannot handle type $type" cleanupAndExit 99 "Cannot handle type $type" ERROR
cleanupAndExit 99
;; ;;
esac esac
fi fi
if [[ -z $blockingProcesses ]]; then if [[ -z $blockingProcesses ]]; then
printlog "no blocking processes defined, using $name as default" printlog "no blocking processes defined, using $name as default" INFO
blockingProcesses=( $name ) blockingProcesses=( $name )
fi fi
@@ -4732,8 +4765,7 @@ fi
# MARK: change directory to temporary working directory # MARK: change directory to temporary working directory
printlog "Changing directory to $tmpDir" DEBUG printlog "Changing directory to $tmpDir" DEBUG
if ! cd "$tmpDir"; then if ! cd "$tmpDir"; then
printlog "error changing directory $tmpDir" cleanupAndExit 1 "error changing directory $tmpDir" ERROR
cleanupAndExit 1
fi fi
# MARK: get installed version # MARK: get installed version
@@ -4756,10 +4788,10 @@ if [[ -n $appNewVersion ]]; then
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No newer version." cleanupAndExit 0 "No newer version." WARN
fi fi
else else
printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." WARN
fi fi
fi fi
else else
@@ -4778,7 +4810,7 @@ if [[ (-n $appversion && -n "$updateTool") || "$type" == "updateronly" ]]; then
cleanupAndExit 0 cleanupAndExit 0
fi # otherwise continue fi # otherwise continue
else else
printlog "DEBUG mode 1 enabled, not running update tool" printlog "DEBUG mode 1 enabled, not running update tool" WARN
fi fi
fi fi
@@ -4801,14 +4833,14 @@ else
deduplicatelogs "$curlDownload" deduplicatelogs "$curlDownload"
if [[ $curlDownloadStatus -ne 0 ]]; then if [[ $curlDownloadStatus -ne 0 ]]; then
#if ! curl --location --fail --silent "$downloadURL" -o "$archiveName"; then #if ! curl --location --fail --silent "$downloadURL" -o "$archiveName"; then
printlog "error downloading $downloadURL" printlog "error downloading $downloadURL" ERROR
message="$name update/installation failed. This will be logged, so IT can follow up." message="$name update/installation failed. This will be logged, so IT can follow up."
if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then
printlog "notifying" printlog "notifying"
if [[ $updateDetected == "YES" ]]; then if [[ $updateDetected == "YES" ]]; then
displaynotification "$message" "Error updating $name" ERROR displaynotification "$message" "Error updating $name"
else else
displaynotification "$message" "Error installing $name" ERROR displaynotification "$message" "Error installing $name"
fi fi
fi fi
printlog "File list: $(ls -lh "$archiveName")" ERROR printlog "File list: $(ls -lh "$archiveName")" ERROR
@@ -4873,8 +4905,7 @@ case $type in
installAppInDmgInZip installAppInDmgInZip
;; ;;
*) *)
printlog "Cannot handle type $type" cleanupAndExit 99 "Cannot handle type $type" ERROR
cleanupAndExit 99
;; ;;
esac esac

View File

@@ -255,6 +255,7 @@ opera
ottomatic ottomatic
overflow overflow
pacifist pacifist
packages
pandoc pandoc
paretosecurity paretosecurity
parsec parsec

View File

@@ -10,21 +10,21 @@ fi
# MARK: argument parsing # MARK: argument parsing
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
if [[ -z $label ]]; then # check if label is set inside script if [[ -z $label ]]; then # check if label is set inside script
printlog "no label provided, printing labels" printlog "no label provided, printing labels" REQ
grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "$0" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "$0" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort
#grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "${labelFile}" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort #grep -E '^[a-z0-9\_-]*(\)|\|\\)$' "${labelFile}" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort
exit 0 exit 0
fi fi
elif [[ $1 == "/" ]]; then elif [[ $1 == "/" ]]; then
# jamf uses sends '/' as the first argument # jamf uses sends '/' as the first argument
printlog "shifting arguments for Jamf" printlog "shifting arguments for Jamf" REQ
shift 3 shift 3
fi fi
while [[ -n $1 ]]; do while [[ -n $1 ]]; do
if [[ $1 =~ ".*\=.*" ]]; then if [[ $1 =~ ".*\=.*" ]]; then
# if an argument contains an = character, send it to eval # if an argument contains an = character, send it to eval
printlog "setting variable from argument $1" printlog "setting variable from argument $1" REQ
eval $1 eval $1
else else
# assume it's a label # assume it's a label
@@ -96,31 +96,31 @@ currentUser=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print
# MARK: check for root # MARK: check for root
if [[ "$(whoami)" != "root" && "$DEBUG" -eq 0 ]]; then if [[ "$(whoami)" != "root" && "$DEBUG" -eq 0 ]]; then
# not running as root # not running as root
cleanupAndExit 6 "not running as root, exiting" cleanupAndExit 6 "not running as root, exiting" ERROR
fi fi
# MARK: labels in case statement # MARK: labels in case statement
case $label in case $label in
longversion) longversion)
# print the script version # print the script version
printlog "Installomater: version $VERSION ($VERSIONDATE)" printlog "Installomater: version $VERSION ($VERSIONDATE)" REQ
exit 0 exit 0
;; ;;
valuesfromarguments) valuesfromarguments)
if [[ -z $name ]]; then if [[ -z $name ]]; then
printlog "need to provide 'name'" printlog "need to provide 'name'" ERROR
exit 1 exit 1
fi fi
if [[ -z $type ]]; then if [[ -z $type ]]; then
printlog "need to provide 'type'" printlog "need to provide 'type'" ERROR
exit 1 exit 1
fi fi
if [[ -z $downloadURL ]]; then if [[ -z $downloadURL ]]; then
printlog "need to provide 'downloadURL'" printlog "need to provide 'downloadURL'" ERROR
exit 1 exit 1
fi fi
if [[ -z $expectedTeamID ]]; then if [[ -z $expectedTeamID ]]; then
printlog "need to provide 'expectedTeamID'" printlog "need to provide 'expectedTeamID'" ERROR
exit 1 exit 1
fi fi
;; ;;

View File

@@ -18,8 +18,10 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level
reopenClosedProcess reopenClosedProcess
if [[ -n $2 && $1 -ne 0 ]]; then if [[ -n $2 && $1 -ne 0 ]]; then
printlog "ERROR: $2" $3 printlog "ERROR: $2" $3
else
printlog "$2" $3
fi fi
printlog "################## End Installomator, exit code $1 \n\n" REQ printlog "################## End Installomator, exit code $1 \n" REQ
# if label is wrong and we wanted name of the label, then return ################## # if label is wrong and we wanted name of the label, then return ##################
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
@@ -97,7 +99,7 @@ printlog(){
curl -s -X POST https://http-intake.logs.datadoghq.com/v1/input -H "Content-Type: text/plain" -H "DD-API-KEY: $datadogAPI" -d "${log_priority} : $mdmURL : Installomator-${label} : ${VERSIONDATE//-/} : $SESSION : ${logmessage}" > /dev/null curl -s -X POST https://http-intake.logs.datadoghq.com/v1/input -H "Content-Type: text/plain" -H "DD-API-KEY: $datadogAPI" -d "${log_priority} : $mdmURL : Installomator-${label} : ${VERSIONDATE//-/} : $SESSION : ${logmessage}" > /dev/null
done <<< "$log_message" done <<< "$log_message"
fi fi
# Extra spaces # Extra spaces
space_char="" space_char=""
if [[ ${#log_priority} -eq 3 ]]; then if [[ ${#log_priority} -eq 3 ]]; then
@@ -176,7 +178,7 @@ versionFromGit() {
appNewVersion=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') appNewVersion=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
if [ -z "$appNewVersion" ]; then if [ -z "$appNewVersion" ]; then
printlog "could not retrieve version number for $gitusername/$gitreponame" printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
appNewVersion="" appNewVersion=""
else else
echo "$appNewVersion" echo "$appNewVersion"
@@ -220,23 +222,38 @@ getAppVersion() {
fi fi
fi fi
# get app in /Applications, or /Applications/Utilities, or find using Spotlight # get app in targetDir, /Applications, or /Applications/Utilities
if [[ -d "/Applications/$appName" ]]; then if [[ -d "$targetDir/$appName" ]]; then
applist="$targetDir/$appName"
elif [[ -d "/Applications/$appName" ]]; then
applist="/Applications/$appName" applist="/Applications/$appName"
# if [[ $type =~ '^(dmg|zip|tbz|app.*)$' ]]; then
# targetDir="/Applications"
# fi
elif [[ -d "/Applications/Utilities/$appName" ]]; then elif [[ -d "/Applications/Utilities/$appName" ]]; then
applist="/Applications/Utilities/$appName" applist="/Applications/Utilities/$appName"
# if [[ $type =~ '^(dmg|zip|tbz|app.*)$' ]]; then
# targetDir="/Applications/Utilities"
# fi
else else
applist=$(mdfind "kind:application $appName" -0 ) # applist=$(mdfind "kind:application $appName" -0 )
printlog "name: $name, appName: $appName"
applist=$(mdfind "kind:application AND name:$name" -0 )
# printlog "App(s) found: ${applist}" DEBUG
# applist=$(mdfind "kind:application AND name:$appName" -0 )
fi fi
if [[ -z $applist ]]; then if [[ -z $applist ]]; then
if [[ $SKIP_UNINSTALLED -eq 1 ]]; then if [[ $SKIP_UNINSTALLED -eq 1 ]]; then
cleanupAndExit 0 "No previous app found, and SKIP_UNINSTALLED=1." REQ cleanupAndExit 0 "No previous app found, and SKIP_UNINSTALLED=1." REQ
else else
printlog "No previous app found" DEBUG printlog "No previous app found" DEBUG
fi fi
else else
printlog "App(s) found: ${applist}" DEBUG printlog "App(s) found: ${applist}" INFO
fi fi
# if [[ $type =~ '^(dmg|zip|tbz|app.*)$' ]]; then
# printlog "targetDir for installation: $targetDir" INFO
# fi
appPathArray=( ${(0)applist} ) appPathArray=( ${(0)applist} )
@@ -259,10 +276,10 @@ getAppVersion() {
fi fi
fi fi
else else
printlog "could not determine location of $appName" printlog "could not determine location of $appName" WARN
fi fi
else else
printlog "could not find $appName" printlog "could not find $appName" WARN
fi fi
} }
@@ -389,7 +406,7 @@ reopenClosedProcess() {
processuser=$(ps aux | grep -i "${appName}" | grep -vi "grep" | awk '{print $1}') processuser=$(ps aux | grep -i "${appName}" | grep -vi "grep" | awk '{print $1}')
printlog "Reopened ${appName} as $processuser" printlog "Reopened ${appName} as $processuser"
else else
printlog "App not closed, so no reopen." DEBUG printlog "App not closed, so no reopen." INFO
fi fi
} }
@@ -399,7 +416,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
# check if app exists # check if app exists
if [ ! -e "$appPath" ]; then if [ ! -e "$appPath" ]; then
cleanupAndExit 8 "could not find: $appPath" DEBUG cleanupAndExit 8 "could not find: $appPath" ERROR
fi fi
# verify with spctl # verify with spctl
@@ -431,10 +448,12 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" INFO cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
elif [[ -z $appversion ]]; then
printlog "Installing $name version $appNewVersion on versionKey $versionKey."
else else
printlog "Downloaded version of $name is $appNewVersion on versionKey $versionKey (replacing version $appversion)." printlog "Downloaded version of $name is $appNewVersion on versionKey $versionKey (replacing version $appversion)."
fi fi
@@ -450,7 +469,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "notifying" printlog "notifying"
displaynotification "$message" "Error updating $name!" displaynotification "$message" "Error updating $name!"
fi fi
cleanupAndExit 6 "Installed macOS is too old for this app." INFO cleanupAndExit 6 "Installed macOS is too old for this app." ERROR
fi fi
fi fi
@@ -491,7 +510,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "Changing owner to $currentUser" printlog "Changing owner to $currentUser"
chown -R "$currentUser" "$targetDir/$appName" chown -R "$currentUser" "$targetDir/$appName"
else else
printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel" printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel"
chown -R root:wheel "$targetDir/$appName" chown -R root:wheel "$targetDir/$appName"
fi fi
@@ -521,7 +540,7 @@ mountDMG() {
dmgmountStatus=$(echo $?) dmgmountStatus=$(echo $?)
dmgmount=$(echo $dmgmountOut | tail -n 1 | cut -c 54- ) dmgmount=$(echo $dmgmountOut | tail -n 1 | cut -c 54- )
deduplicatelogs "$dmgmountOut" deduplicatelogs "$dmgmountOut"
if [[ $dmgmountStatus -ne 0 ]] ; then if [[ $dmgmountStatus -ne 0 ]] ; then
#if ! dmgmount=$(echo 'Y'$'\n' | hdiutil attach "$tmpDir/$archiveName" -nobrowse -readonly | tail -n 1 | cut -c 54- ); then #if ! dmgmount=$(echo 'Y'$'\n' | hdiutil attach "$tmpDir/$archiveName" -nobrowse -readonly | tail -n 1 | cut -c 54- ); then
cleanupAndExit 3 "Error mounting $tmpDir/$archiveName error:\n$logoutput" ERROR cleanupAndExit 3 "Error mounting $tmpDir/$archiveName error:\n$logoutput" ERROR
@@ -530,7 +549,7 @@ mountDMG() {
cleanupAndExit 3 "Error accessing mountpoint for $tmpDir/$archiveName error:\n$logoutput" ERROR cleanupAndExit 3 "Error accessing mountpoint for $tmpDir/$archiveName error:\n$logoutput" ERROR
fi fi
printlog "Debugging enabled, dmgmount output was:\n$logoutput" DEBUG printlog "Debugging enabled, dmgmount output was:\n$logoutput" DEBUG
printlog "Mounted: $dmgmount" INFO printlog "Mounted: $dmgmount" INFO
} }
@@ -547,7 +566,7 @@ installFromPKG() {
spctlOut=$(spctl -a -vv -t install "$archiveName" 2>&1 ) spctlOut=$(spctl -a -vv -t install "$archiveName" 2>&1 )
spctlStatus=$(echo $?) spctlStatus=$(echo $?)
printlog "spctlOut is $spctlOut" DEBUG printlog "spctlOut is $spctlOut" DEBUG
teamID=$(echo $spctlOut | awk -F '(' '/origin=/ {print $2 }' | tr -d '()' ) teamID=$(echo $spctlOut | awk -F '(' '/origin=/ {print $2 }' | tr -d '()' )
# Apple signed software has no teamID, grab entire origin instead # Apple signed software has no teamID, grab entire origin instead
if [[ -z $teamID ]]; then if [[ -z $teamID ]]; then
@@ -555,7 +574,7 @@ installFromPKG() {
fi fi
deduplicatelogs "$spctlOut" deduplicatelogs "$spctlOut"
if [[ $spctlStatus -ne 0 ]] ; then if [[ $spctlStatus -ne 0 ]] ; then
#if ! spctlout=$(spctl -a -vv -t install "$archiveName" 2>&1 ); then #if ! spctlout=$(spctl -a -vv -t install "$archiveName" 2>&1 ); then
cleanupAndExit 4 "Error verifying $archiveName error:\n$logoutput" ERROR cleanupAndExit 4 "Error verifying $archiveName error:\n$logoutput" ERROR
@@ -589,7 +608,7 @@ installFromPKG() {
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" INFO cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
@@ -663,27 +682,28 @@ installPkgInDmg() {
if [[ -z $pkgName ]]; then if [[ -z $pkgName ]]; then
# find first file ending with 'pkg' # find first file ending with 'pkg'
findfiles=$(find "$dmgmount" -iname "*.pkg" -type f -maxdepth 1 ) findfiles=$(find "$dmgmount" -iname "*.pkg" -type f -maxdepth 1 )
printlog "Found pkg(s):\n$findfiles" DEBUG
filearray=( ${(f)findfiles} ) filearray=( ${(f)findfiles} )
if [[ ${#filearray} -eq 0 ]]; then if [[ ${#filearray} -eq 0 ]]; then
cleanupAndExit 20 "couldn't find pkg in dmg $archiveName" ERROR cleanupAndExit 20 "couldn't find pkg in dmg $archiveName" ERROR
fi fi
archiveName="${filearray[1]}" archiveName="${filearray[1]}"
printlog "found pkg: $archiveName"
else else
if ls "$tmpDir/$pkgName" ; then if [[ -s "$dmgmount/$pkgName" ]] ; then # was: $tmpDir
archiveName="$tmpDir/$pkgName" archiveName="$dmgmount/$pkgName"
else else
# try searching for pkg # try searching for pkg
findfiles=$(find "$tmpDir" -iname "$pkgName") findfiles=$(find "$dmgmount" -iname "$pkgName") # was: $tmpDir
printlog "Found pkg(s):\n$findfiles" DEBUG
filearray=( ${(f)findfiles} ) filearray=( ${(f)findfiles} )
if [[ ${#filearray} -eq 0 ]]; then if [[ ${#filearray} -eq 0 ]]; then
cleanupAndExit 20 "couldn't find pkg “$pkgName” in zip $archiveName" ERROR cleanupAndExit 20 "couldn't find pkg “$pkgName” in dmg $archiveName" ERROR
fi fi
# it is now safe to overwrite archiveName for installFromPKG # it is now safe to overwrite archiveName for installFromPKG
archiveName="${filearray[1]}" archiveName="${filearray[1]}"
printlog "found pkg: $archiveName"
fi fi
fi fi
printlog "found pkg: $archiveName"
# installFromPkgs # installFromPkgs
installFromPKG installFromPKG
@@ -698,6 +718,7 @@ installPkgInZip() {
if [[ -z $pkgName ]]; then if [[ -z $pkgName ]]; then
# find first file ending with 'pkg' # find first file ending with 'pkg'
findfiles=$(find "$tmpDir" -iname "*.pkg" -type f -maxdepth 2 ) findfiles=$(find "$tmpDir" -iname "*.pkg" -type f -maxdepth 2 )
printlog "Found pkg(s):\n$findfiles" DEBUG
filearray=( ${(f)findfiles} ) filearray=( ${(f)findfiles} )
if [[ ${#filearray} -eq 0 ]]; then if [[ ${#filearray} -eq 0 ]]; then
cleanupAndExit 20 "couldn't find pkg in zip $archiveName" ERROR cleanupAndExit 20 "couldn't find pkg in zip $archiveName" ERROR
@@ -774,13 +795,13 @@ runUpdateTool() {
printlog "Error running $updateTool, Procceding with normal installation. Exit Status: $updateStatus Error:\n$logoutput" WARN printlog "Error running $updateTool, Procceding with normal installation. Exit Status: $updateStatus Error:\n$logoutput" WARN
return 1 return 1
if [[ $type == updateronly ]]; then if [[ $type == updateronly ]]; then
cleanupAndExit 77 "No Download URL Set, this is an update only application and the updater failed" WARN cleanupAndExit 77 "No Download URL Set, this is an update only application and the updater failed" ERROR
fi fi
elif [[ $updateStatus -eq 0 ]]; then elif [[ $updateStatus -eq 0 ]]; then
printlog "Debugging enabled, update tool output was:\n$logoutput" DEBUG printlog "Debugging enabled, update tool output was:\n$logoutput" DEBUG
fi fi
else else
printlog "couldn't find $updateTool, continuing normally" printlog "couldn't find $updateTool, continuing normally" WARN
return 1 return 1
fi fi
return 0 return 0

View File

@@ -2,7 +2,11 @@ loom)
# credit: Lance Stephens (@pythoninthegrass on MacAdmins Slack) # credit: Lance Stephens (@pythoninthegrass on MacAdmins Slack)
name="Loom" name="Loom"
type="dmg" type="dmg"
downloadURL=https://cdn.loom.com/desktop-packages/$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/url/ && /dmg/ {print $3}' | head -1) if [[ $(arch) == "arm64" ]]; then
downloadURL=https://cdn.loom.com/desktop-packages/$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/url/ && /arm64/ && /dmg/ {print $3}' | head -1)
elif [[ $(arch) == "i386" ]]; then
downloadURL=https://cdn.loom.com/desktop-packages/$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/url/ && /dmg/ {print $3}' | head -1)
fi
appNewVersion=$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/version/ {print $2}' ) appNewVersion=$(curl -fs https://s3-us-west-2.amazonaws.com/loom.desktop.packages/loom-inc-production/desktop-packages/latest-mac.yml | awk '/version/ {print $2}' )
expectedTeamID="QGD2ZPXZZG" expectedTeamID="QGD2ZPXZZG"
;; ;;

View File

@@ -1,13 +1,13 @@
*) *)
# unknown label # unknown label
#printlog "unknown label $label" #printlog "unknown label $label"
cleanupAndExit 1 "unknown label $label" cleanupAndExit 1 "unknown label $label" ERROR
;; ;;
esac esac
# Are we only asked to return label name # Are we only asked to return label name
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
printlog "Only returning label name." printlog "Only returning label name." REQ
printlog "$name" printlog "$name"
echo "$name" echo "$name"
exit exit
@@ -18,7 +18,7 @@ fi
if [[ ${INTERRUPT_DND} = "no" ]]; then if [[ ${INTERRUPT_DND} = "no" ]]; then
# Check if a fullscreen app is active # Check if a fullscreen app is active
if hasDisplaySleepAssertion; then if hasDisplaySleepAssertion; then
cleanupAndExit 1 "active display sleep assertion detected, aborting" cleanupAndExit 1 "active display sleep assertion detected, aborting" ERROR
fi fi
fi fi
@@ -63,9 +63,9 @@ if [[ ! -a "${LOGO}" ]]; then
LOGO="/Applications/App Store.app/Contents/Resources/AppIcon.icns" LOGO="/Applications/App Store.app/Contents/Resources/AppIcon.icns"
fi fi
fi fi
printlog "LOGO=${LOGO}" printlog "LOGO=${LOGO}" INFO
printlog "Label type: $type" printlog "Label type: $type" INFO
# MARK: extract info from data # MARK: extract info from data
if [ -z "$archiveName" ]; then if [ -z "$archiveName" ]; then
@@ -87,7 +87,7 @@ if [ -z "$archiveName" ]; then
;; ;;
esac esac
fi fi
printlog "archiveName: $archiveName" DEBUG printlog "archiveName: $archiveName" INFO
if [ -z "$appName" ]; then if [ -z "$appName" ]; then
# when not given derive from name # when not given derive from name
@@ -106,14 +106,13 @@ if [ -z "$targetDir" ]; then
updateronly) updateronly)
;; ;;
*) *)
printlog "Cannot handle type $type" cleanupAndExit 99 "Cannot handle type $type" ERROR
cleanupAndExit 99
;; ;;
esac esac
fi fi
if [[ -z $blockingProcesses ]]; then if [[ -z $blockingProcesses ]]; then
printlog "no blocking processes defined, using $name as default" printlog "no blocking processes defined, using $name as default" INFO
blockingProcesses=( $name ) blockingProcesses=( $name )
fi fi
@@ -129,8 +128,7 @@ fi
# MARK: change directory to temporary working directory # MARK: change directory to temporary working directory
printlog "Changing directory to $tmpDir" DEBUG printlog "Changing directory to $tmpDir" DEBUG
if ! cd "$tmpDir"; then if ! cd "$tmpDir"; then
printlog "error changing directory $tmpDir" cleanupAndExit 1 "error changing directory $tmpDir" ERROR
cleanupAndExit 1
fi fi
# MARK: get installed version # MARK: get installed version
@@ -153,10 +151,10 @@ if [[ -n $appNewVersion ]]; then
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No newer version." cleanupAndExit 0 "No newer version." WARN
fi fi
else else
printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." WARN
fi fi
fi fi
else else
@@ -175,7 +173,7 @@ if [[ (-n $appversion && -n "$updateTool") || "$type" == "updateronly" ]]; then
cleanupAndExit 0 cleanupAndExit 0
fi # otherwise continue fi # otherwise continue
else else
printlog "DEBUG mode 1 enabled, not running update tool" printlog "DEBUG mode 1 enabled, not running update tool" WARN
fi fi
fi fi
@@ -198,14 +196,14 @@ else
deduplicatelogs "$curlDownload" deduplicatelogs "$curlDownload"
if [[ $curlDownloadStatus -ne 0 ]]; then if [[ $curlDownloadStatus -ne 0 ]]; then
#if ! curl --location --fail --silent "$downloadURL" -o "$archiveName"; then #if ! curl --location --fail --silent "$downloadURL" -o "$archiveName"; then
printlog "error downloading $downloadURL" printlog "error downloading $downloadURL" ERROR
message="$name update/installation failed. This will be logged, so IT can follow up." message="$name update/installation failed. This will be logged, so IT can follow up."
if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then
printlog "notifying" printlog "notifying"
if [[ $updateDetected == "YES" ]]; then if [[ $updateDetected == "YES" ]]; then
displaynotification "$message" "Error updating $name" ERROR displaynotification "$message" "Error updating $name"
else else
displaynotification "$message" "Error installing $name" ERROR displaynotification "$message" "Error installing $name"
fi fi
fi fi
printlog "File list: $(ls -lh "$archiveName")" ERROR printlog "File list: $(ls -lh "$archiveName")" ERROR
@@ -270,8 +268,7 @@ case $type in
installAppInDmgInZip installAppInDmgInZip
;; ;;
*) *)
printlog "Cannot handle type $type" cleanupAndExit 99 "Cannot handle type $type" ERROR
cleanupAndExit 99
;; ;;
esac esac

View File

@@ -1 +1 @@
10.0dev 9.1beta