mirror of
https://github.com/mtan93/Installomator.git
synced 2026-03-16 13:21:02 +00:00
Currently (before this patch) a label like `microsoftonedrive` that was installed from App Store, and that we want to replace with the “ordinary” version, Installomator would use updateTool, even though `IGNORE_APP_STORE_APPS=yes`. So we would have to have `INSTALL=force` in order to have the app replaced, as `updateTool` would be used. With this patch, if `IGNORE_APP_STORE_APPS=yes` then `updateTool` will be not set, and the App Store app would be replaced. But if the installed software was not from App Store, then `updateTool` would not be used, and it would be a kind of a forced install (except if the version is the same). I have this output: ``` ➜ Downloads sudo Installomator/utils/assemble.sh microsoftonedrive DEBUG=0 2021-11-30 10:12:11 microsoftonedrive setting variable from argument DEBUG=0 2021-11-30 10:12:11 microsoftonedrive ################## Start Installomator v. 9.0dev 2021-11-30 10:12:11 microsoftonedrive ################## microsoftonedrive 2021-11-30 10:12:13 microsoftonedrive Running msupdate --list Checking for updates... Update Assistant is available. Update Assistant is checking for updates. Update Assistant is available. No updates available 2021-11-30 10:12:27 microsoftonedrive BLOCKING_PROCESS_ACTION=tell_user 2021-11-30 10:12:27 microsoftonedrive NOTIFY=success 2021-11-30 10:12:27 microsoftonedrive LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2021-11-30 10:12:27 microsoftonedrive no blocking processes defined, using OneDrive as default 2021-11-30 10:12:27 microsoftonedrive Changing directory to /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.5kJ1YWMy 2021-11-30 10:12:27 microsoftonedrive App(s) found: /Applications/OneDrive.app 2021-11-30 10:12:27 microsoftonedrive found app at /Applications/OneDrive.app, version 21.220.1024 2021-11-30 10:12:27 microsoftonedrive Installed OneDrive.app is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace. 2021-11-30 10:12:27 microsoftonedrive ERROR: App previously installed from App Store, and we respect that 2021-11-30 10:12:27 microsoftonedrive Deleting /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.5kJ1YWMy 2021-11-30 10:12:27 microsoftonedrive App not closed, so no reopen. 2021-11-30 10:12:27 microsoftonedrive ################## End Installomator, exit code 1 ➜ Downloads sudo Installomator/utils/assemble.sh microsoftonedrive DEBUG=0 IGNORE_APP_STORE_APPS=yes 2021-11-30 10:12:50 microsoftonedrive setting variable from argument DEBUG=0 2021-11-30 10:12:50 microsoftonedrive setting variable from argument IGNORE_APP_STORE_APPS=yes 2021-11-30 10:12:50 microsoftonedrive ################## Start Installomator v. 9.0dev 2021-11-30 10:12:50 microsoftonedrive ################## microsoftonedrive 2021-11-30 10:12:51 microsoftonedrive Running msupdate --list Checking for updates... Update Assistant is available. Update Assistant is checking for updates. Update Assistant is available. No updates available 2021-11-30 10:13:06 microsoftonedrive BLOCKING_PROCESS_ACTION=tell_user 2021-11-30 10:13:06 microsoftonedrive NOTIFY=success 2021-11-30 10:13:06 microsoftonedrive LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2021-11-30 10:13:06 microsoftonedrive no blocking processes defined, using OneDrive as default 2021-11-30 10:13:06 microsoftonedrive Changing directory to /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.OXbBLX0y 2021-11-30 10:13:06 microsoftonedrive App(s) found: /Applications/OneDrive.app 2021-11-30 10:13:06 microsoftonedrive found app at /Applications/OneDrive.app, version 21.220.1024 2021-11-30 10:13:06 microsoftonedrive Installed OneDrive.app is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace. 2021-11-30 10:13:06 microsoftonedrive Replacing App Store apps, no matter the version 2021-11-30 10:13:06 microsoftonedrive appversion: 0 2021-11-30 10:13:06 microsoftonedrive Label is not of type “updateronly”, and it’s set to use force to install or ignoring app store apps, so not using updateTool. 2021-11-30 10:13:06 microsoftonedrive Latest version of OneDrive is 21.205.1003 2021-11-30 10:13:06 microsoftonedrive Downloading https://go.microsoft.com/fwlink/?linkid=823060 to OneDrive.pkg 2021-11-30 10:15:01 microsoftonedrive no more blocking processes, continue with update 2021-11-30 10:15:01 microsoftonedrive Installing OneDrive 2021-11-30 10:15:01 microsoftonedrive Verifying: OneDrive.pkg 2021-11-30 10:15:02 microsoftonedrive Team ID: UBF8T346G9 (expected: UBF8T346G9 ) 2021-11-30 10:15:02 microsoftonedrive Installing OneDrive.pkg to / installer: Package name is Microsoft OneDrive installer: Upgrading at base path / installer: The upgrade was successful. 2021-11-30 10:15:08 microsoftonedrive Finishing... 2021-11-30 10:15:18 microsoftonedrive App(s) found: /Applications/OneDrive.app 2021-11-30 10:15:18 microsoftonedrive found app at /Applications/OneDrive.app, version 21.220.1024 2021-11-30 10:15:18 microsoftonedrive Installed OneDrive.app is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace. 2021-11-30 10:15:18 microsoftonedrive Replacing App Store apps, no matter the version 2021-11-30 10:15:18 microsoftonedrive Installed OneDrive, version 0 2021-11-30 10:15:18 microsoftonedrive notifying 2021-11-30 10:15:18 microsoftonedrive Deleting /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.OXbBLX0y 2021-11-30 10:15:18 microsoftonedrive App not closed, so no reopen. 2021-11-30 10:15:18 microsoftonedrive ################## End Installomator, exit code 0 ```
252 lines
7.2 KiB
Bash
252 lines
7.2 KiB
Bash
*)
|
||
# unknown label
|
||
#printlog "unknown label $label"
|
||
cleanupAndExit 1 "unknown label $label"
|
||
;;
|
||
esac
|
||
|
||
|
||
# MARK: application download and installation starts here
|
||
|
||
printlog "BLOCKING_PROCESS_ACTION=${BLOCKING_PROCESS_ACTION}"
|
||
printlog "NOTIFY=${NOTIFY}"
|
||
|
||
# Finding LOGO to use in dialogs
|
||
case $LOGO in
|
||
appstore)
|
||
# Apple App Store on Mac
|
||
if [[ $(sw_vers -buildVersion) > "19" ]]; then
|
||
LOGO="/System/Applications/App Store.app/Contents/Resources/AppIcon.icns"
|
||
else
|
||
LOGO="/Applications/App Store.app/Contents/Resources/AppIcon.icns"
|
||
fi
|
||
;;
|
||
jamf)
|
||
# Jamf Pro
|
||
LOGO="/Library/Application Support/JAMF/Jamf.app/Contents/Resources/AppIcon.icns"
|
||
;;
|
||
mosyleb)
|
||
# Mosyle Business
|
||
LOGO="/Applications/Self-Service.app/Contents/Resources/AppIcon.icns"
|
||
;;
|
||
mosylem)
|
||
# Mosyle Manager (education)
|
||
LOGO="/Applications/Manager.app/Contents/Resources/AppIcon.icns"
|
||
;;
|
||
addigy)
|
||
# Addigy
|
||
LOGO="/Library/Addigy/macmanage/MacManage.app/Contents/Resources/atom.icns"
|
||
;;
|
||
esac
|
||
if [[ ! -a "${LOGO}" ]]; then
|
||
if [[ $(sw_vers -buildVersion) > "19" ]]; then
|
||
LOGO="/System/Applications/App Store.app/Contents/Resources/AppIcon.icns"
|
||
else
|
||
LOGO="/Applications/App Store.app/Contents/Resources/AppIcon.icns"
|
||
fi
|
||
fi
|
||
printlog "LOGO=${LOGO}"
|
||
|
||
# MARK: extract info from data
|
||
if [ -z "$archiveName" ]; then
|
||
case $type in
|
||
dmg|pkg|zip|tbz)
|
||
archiveName="${name}.$type"
|
||
;;
|
||
pkgInDmg)
|
||
archiveName="${name}.dmg"
|
||
;;
|
||
*InZip)
|
||
archiveName="${name}.zip"
|
||
;;
|
||
updateronly)
|
||
;;
|
||
*)
|
||
printlog "Cannot handle type $type"
|
||
cleanupAndExit 99
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
if [ -z "$appName" ]; then
|
||
# when not given derive from name
|
||
appName="$name.app"
|
||
fi
|
||
|
||
if [ -z "$targetDir" ]; then
|
||
case $type in
|
||
dmg|zip|tbz|app*)
|
||
targetDir="/Applications"
|
||
;;
|
||
pkg*)
|
||
targetDir="/"
|
||
;;
|
||
updateronly)
|
||
;;
|
||
*)
|
||
printlog "Cannot handle type $type"
|
||
cleanupAndExit 99
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
if [[ -z $blockingProcesses ]]; then
|
||
printlog "no blocking processes defined, using $name as default"
|
||
blockingProcesses=( $name )
|
||
fi
|
||
|
||
# MARK: determine tmp dir
|
||
if [ "$DEBUG" -eq 1 ]; then
|
||
# for debugging use script dir as working directory
|
||
tmpDir=$(dirname "$0")
|
||
else
|
||
# create temporary working directory
|
||
tmpDir=$(mktemp -d )
|
||
fi
|
||
|
||
# MARK: change directory to temporary working directory
|
||
printlog "Changing directory to $tmpDir"
|
||
if ! cd "$tmpDir"; then
|
||
printlog "error changing directory $tmpDir"
|
||
cleanupAndExit 1
|
||
fi
|
||
|
||
# MARK: get installed version
|
||
getAppVersion
|
||
printlog "appversion: $appversion"
|
||
|
||
# MARK: Exit if new version is the same as installed version (appNewVersion specified)
|
||
if [[ "$type" != "updateronly" && ($INSTALL == "force" || $IGNORE_APP_STORE_APPS == "yes") ]]; then
|
||
printlog "Label is not of type “updateronly”, and it’s set to use force to install or ignoring app store apps, so not using updateTool."
|
||
updateTool=""
|
||
fi
|
||
if [[ -n $appNewVersion ]]; then
|
||
printlog "Latest version of $name is $appNewVersion"
|
||
if [[ $appversion == $appNewVersion ]]; then
|
||
if [[ $DEBUG -ne 1 ]]; then
|
||
printlog "There is no newer version available."
|
||
if [[ $INSTALL != "force" ]]; then
|
||
message="$name, version $appNewVersion, is the latest version."
|
||
if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then
|
||
printlog "notifying"
|
||
displaynotification "$message" "No update for $name!"
|
||
fi
|
||
cleanupAndExit 0 "No newer version."
|
||
fi
|
||
else
|
||
printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app."
|
||
fi
|
||
fi
|
||
else
|
||
printlog "Latest version not specified."
|
||
fi
|
||
|
||
# MARK: check if this is an Update and we can use updateTool
|
||
if [[ (-n $appversion && -n "$updateTool") || "$type" == "updateronly" ]]; then
|
||
printlog "appversion & updateTool"
|
||
if [[ $DEBUG -ne 1 ]]; then
|
||
if runUpdateTool; then
|
||
finishing
|
||
cleanupAndExit 0
|
||
elif [[ $type == "updateronly" ]];then
|
||
printlog "type is $type so we end here."
|
||
cleanupAndExit 0
|
||
fi # otherwise continue
|
||
else
|
||
printlog "DEBUG mode 1 enabled, not running update tool"
|
||
fi
|
||
fi
|
||
|
||
# MARK: download the archive
|
||
if [ -f "$archiveName" ] && [ "$DEBUG" -eq 1 ]; then
|
||
printlog "$archiveName exists and DEBUG mode 1 enabled, skipping download"
|
||
else
|
||
# download the dmg
|
||
printlog "Downloading $downloadURL to $archiveName"
|
||
if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then
|
||
printlog "notifying"
|
||
if [[ $updateDetected == "YES" ]]; then
|
||
displaynotification "Downloading $name update" "Download in progress …"
|
||
else
|
||
displaynotification "Downloading new $name" "Download in progress …"
|
||
fi
|
||
fi
|
||
if ! curl --location --fail --silent "$downloadURL" -o "$archiveName"; then
|
||
printlog "error downloading $downloadURL"
|
||
message="$name update/installation failed. This will be logged, so IT can follow up."
|
||
if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then
|
||
printlog "notifying"
|
||
if [[ $updateDetected == "YES" ]]; then
|
||
displaynotification "$message" "Error updating $name"
|
||
else
|
||
displaynotification "$message" "Error installing $name"
|
||
fi
|
||
fi
|
||
cleanupAndExit 2
|
||
fi
|
||
fi
|
||
|
||
# MARK: when user is logged in, and app is running, prompt user to quit app
|
||
if [[ $BLOCKING_PROCESS_ACTION == "ignore" ]]; then
|
||
printlog "ignoring blocking processes"
|
||
else
|
||
if [[ $currentUser != "loginwindow" ]]; then
|
||
if [[ ${#blockingProcesses} -gt 0 ]]; then
|
||
if [[ ${blockingProcesses[1]} != "NONE" ]]; then
|
||
checkRunningProcesses
|
||
fi
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
# MARK: install the download
|
||
printlog "Installing $name"
|
||
if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then
|
||
printlog "notifying"
|
||
if [[ $updateDetected == "YES" ]]; then
|
||
displaynotification "Updating $name" "Installation in progress …"
|
||
else
|
||
displaynotification "Installing $name" "Installation in progress …"
|
||
fi
|
||
fi
|
||
|
||
if [ -n "$installerTool" ]; then
|
||
# installerTool defined, and we use that for installation
|
||
printlog "installerTool used: $installerTool"
|
||
appName="$installerTool"
|
||
fi
|
||
|
||
case $type in
|
||
dmg)
|
||
installFromDMG
|
||
;;
|
||
pkg)
|
||
installFromPKG
|
||
;;
|
||
zip)
|
||
installFromZIP
|
||
;;
|
||
tbz)
|
||
installFromTBZ
|
||
;;
|
||
pkgInDmg)
|
||
installPkgInDmg
|
||
;;
|
||
pkgInZip)
|
||
installPkgInZip
|
||
;;
|
||
appInDmgInZip)
|
||
installAppInDmgInZip
|
||
;;
|
||
*)
|
||
printlog "Cannot handle type $type"
|
||
cleanupAndExit 99
|
||
;;
|
||
esac
|
||
|
||
# MARK: Finishing — print installed application location and version
|
||
finishing
|
||
|
||
# all done!
|
||
cleanupAndExit 0
|