From 0432eb62d3581bf43f4d3dbfdd164d627f3bb2e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Tue, 8 Feb 2022 12:36:16 +0100 Subject: [PATCH 1/5] Improved logging levels Also fixes #340 --- CHANGELOG.md | 1 + fragments/arguments.sh | 18 +++++++++--------- fragments/functions.sh | 26 ++++++++++++++------------ fragments/main.sh | 35 ++++++++++++++++------------------- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fd54d4..681e39c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## v10 +- Changed and improved logging levels on many messages throughout the script. Should be more polished. - ## v9 diff --git a/fragments/arguments.sh b/fragments/arguments.sh index 45a933c..c669ee1 100644 --- a/fragments/arguments.sh +++ b/fragments/arguments.sh @@ -10,21 +10,21 @@ fi # MARK: argument parsing if [[ $# -eq 0 ]]; then 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\_-]*(\)|\|\\)$' "${labelFile}" | tr -d ')|\' | grep -v -E '^(broken.*|longversion|version|valuesfromarguments)$' | sort exit 0 fi elif [[ $1 == "/" ]]; then # jamf uses sends '/' as the first argument - printlog "shifting arguments for Jamf" + printlog "shifting arguments for Jamf" REQ shift 3 fi while [[ -n $1 ]]; do if [[ $1 =~ ".*\=.*" ]]; then # 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 else # assume it's a label @@ -96,31 +96,31 @@ currentUser=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print # MARK: check for root if [[ "$(whoami)" != "root" && "$DEBUG" -eq 0 ]]; then # not running as root - cleanupAndExit 6 "not running as root, exiting" + cleanupAndExit 6 "not running as root, exiting" ERROR fi # MARK: labels in case statement case $label in longversion) # print the script version - printlog "Installomater: version $VERSION ($VERSIONDATE)" + printlog "Installomater: version $VERSION ($VERSIONDATE)" REQ exit 0 ;; valuesfromarguments) if [[ -z $name ]]; then - printlog "need to provide 'name'" + printlog "need to provide 'name'" ERROR exit 1 fi if [[ -z $type ]]; then - printlog "need to provide 'type'" + printlog "need to provide 'type'" ERROR exit 1 fi if [[ -z $downloadURL ]]; then - printlog "need to provide 'downloadURL'" + printlog "need to provide 'downloadURL'" ERROR exit 1 fi if [[ -z $expectedTeamID ]]; then - printlog "need to provide 'expectedTeamID'" + printlog "need to provide 'expectedTeamID'" ERROR exit 1 fi ;; diff --git a/fragments/functions.sh b/fragments/functions.sh index a851077..7e542ea 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -176,7 +176,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') if [ -z "$appNewVersion" ]; then - printlog "could not retrieve version number for $gitusername/$gitreponame" + printlog "could not retrieve version number for $gitusername/$gitreponame" WARN appNewVersion="" else echo "$appNewVersion" @@ -229,9 +229,9 @@ getAppVersion() { applist=$(mdfind "kind:application $appName" -0 ) fi if [[ -z applist ]]; then - printlog "No previous app found" DEBUG + printlog "No previous app found" INFO else - printlog "App(s) found: ${applist}" DEBUG + printlog "App(s) found: ${applist}" INFO fi appPathArray=( ${(0)applist} ) @@ -255,10 +255,10 @@ getAppVersion() { fi fi else - printlog "could not determine location of $appName" + printlog "could not determine location of $appName" WARN fi else - printlog "could not find $appName" + printlog "could not find $appName" WARN fi } @@ -385,7 +385,7 @@ reopenClosedProcess() { processuser=$(ps aux | grep -i "${appName}" | grep -vi "grep" | awk '{print $1}') printlog "Reopened ${appName} as $processuser" else - printlog "App not closed, so no reopen." DEBUG + printlog "App not closed, so no reopen." INFO fi } @@ -395,7 +395,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir # check if app exists if [ ! -e "$appPath" ]; then - cleanupAndExit 8 "could not find: $appPath" DEBUG + cleanupAndExit 8 "could not find: $appPath" ERROR fi # verify with spctl @@ -427,10 +427,12 @@ installAppWithPath() { # $1: path to app to install in $targetDir printlog "notifying" displaynotification "$message" "No update for $name!" fi - cleanupAndExit 0 "No new version to install" INFO + cleanupAndExit 0 "No new version to install" WARN else printlog "Using force to install anyway." fi + elif [[ -z $appversion ]]; then + printlog "Installing $name version $appNewVersion on versionKey $versionKey." else printlog "Downloaded version of $name is $appNewVersion on versionKey $versionKey (replacing version $appversion)." fi @@ -446,7 +448,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir printlog "notifying" displaynotification "$message" "Error updating $name!" 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 @@ -585,7 +587,7 @@ installFromPKG() { printlog "notifying" displaynotification "$message" "No update for $name!" fi - cleanupAndExit 0 "No new version to install" INFO + cleanupAndExit 0 "No new version to install" WARN else printlog "Using force to install anyway." fi @@ -770,13 +772,13 @@ runUpdateTool() { printlog "Error running $updateTool, Procceding with normal installation. Exit Status: $updateStatus Error:\n$logoutput" WARN return 1 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 elif [[ $updateStatus -eq 0 ]]; then printlog "Debugging enabled, update tool output was:\n$logoutput" DEBUG fi else - printlog "couldn't find $updateTool, continuing normally" + printlog "couldn't find $updateTool, continuing normally" WARN return 1 fi return 0 diff --git a/fragments/main.sh b/fragments/main.sh index 1de095f..a508d52 100644 --- a/fragments/main.sh +++ b/fragments/main.sh @@ -1,13 +1,13 @@ *) # unknown label #printlog "unknown label $label" - cleanupAndExit 1 "unknown label $label" + cleanupAndExit 1 "unknown label $label" ERROR ;; esac # Are we only asked to return label name if [[ $RETURN_LABEL_NAME -eq 1 ]]; then - printlog "Only returning label name." + printlog "Only returning label name." REQ printlog "$name" echo "$name" exit @@ -18,7 +18,7 @@ fi if [[ ${INTERRUPT_DND} = "no" ]]; then # Check if a fullscreen app is active if hasDisplaySleepAssertion; then - cleanupAndExit 1 "active display sleep assertion detected, aborting" + cleanupAndExit 1 "active display sleep assertion detected, aborting" ERROR fi fi @@ -63,9 +63,9 @@ if [[ ! -a "${LOGO}" ]]; then LOGO="/Applications/App Store.app/Contents/Resources/AppIcon.icns" fi fi -printlog "LOGO=${LOGO}" +printlog "LOGO=${LOGO}" INFO -printlog "Label type: $type" +printlog "Label type: $type" INFO # MARK: extract info from data if [ -z "$archiveName" ]; then @@ -87,7 +87,7 @@ if [ -z "$archiveName" ]; then ;; esac fi -printlog "archiveName: $archiveName" DEBUG +printlog "archiveName: $archiveName" INFO if [ -z "$appName" ]; then # when not given derive from name @@ -105,14 +105,13 @@ if [ -z "$targetDir" ]; then updateronly) ;; *) - printlog "Cannot handle type $type" - cleanupAndExit 99 + cleanupAndExit 99 "Cannot handle type $type" ERROR ;; esac fi 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 ) fi @@ -128,8 +127,7 @@ fi # MARK: change directory to temporary working directory printlog "Changing directory to $tmpDir" DEBUG if ! cd "$tmpDir"; then - printlog "error changing directory $tmpDir" - cleanupAndExit 1 + cleanupAndExit 1 "error changing directory $tmpDir" ERROR fi # MARK: get installed version @@ -152,10 +150,10 @@ if [[ -n $appNewVersion ]]; then printlog "notifying" displaynotification "$message" "No update for $name!" fi - cleanupAndExit 0 "No newer version." + cleanupAndExit 0 "No newer version." WARN fi 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 else @@ -174,7 +172,7 @@ if [[ (-n $appversion && -n "$updateTool") || "$type" == "updateronly" ]]; then cleanupAndExit 0 fi # otherwise continue else - printlog "DEBUG mode 1 enabled, not running update tool" + printlog "DEBUG mode 1 enabled, not running update tool" WARN fi fi @@ -197,14 +195,14 @@ else deduplicatelogs "$curlDownload" if [[ $curlDownloadStatus -ne 0 ]]; 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." if [[ $currentUser != "loginwindow" && $NOTIFY == "all" ]]; then printlog "notifying" if [[ $updateDetected == "YES" ]]; then - displaynotification "$message" "Error updating $name" ERROR + displaynotification "$message" "Error updating $name" else - displaynotification "$message" "Error installing $name" ERROR + displaynotification "$message" "Error installing $name" fi fi printlog "File list: $(ls -lh "$archiveName")" ERROR @@ -269,8 +267,7 @@ case $type in installAppInDmgInZip ;; *) - printlog "Cannot handle type $type" - cleanupAndExit 99 + cleanupAndExit 99 "Cannot handle type $type" ERROR ;; esac From 557d63a4f39fe4af46c819b804a9f783e6a92fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Tue, 8 Feb 2022 13:48:33 +0100 Subject: [PATCH 2/5] If we exit a `0` we should still get the exit message --- fragments/functions.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fragments/functions.sh b/fragments/functions.sh index 7e542ea..26acf46 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -18,6 +18,8 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level reopenClosedProcess if [[ -n $2 && $1 -ne 0 ]]; then printlog "ERROR: $2" $3 + else + printlog "$2" $3 fi printlog "################## End Installomator, exit code $1 \n\n" REQ From 1da37a13cac1f3834893cabcd41c5a483083fa64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Wed, 9 Feb 2022 14:10:01 +0100 Subject: [PATCH 3/5] Another `ls` that could return an error --- fragments/functions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fragments/functions.sh b/fragments/functions.sh index 26acf46..9e897b2 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -670,7 +670,7 @@ installPkgInDmg() { archiveName="${filearray[1]}" printlog "found pkg: $archiveName" else - if ls "$tmpDir/$pkgName" ; then + if [[ -s "$tmpDir/$pkgName" ]] ; then archiveName="$tmpDir/$pkgName" else # try searching for pkg From bf740d1ffe99b1e94377a3360623970a9706069a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Wed, 9 Feb 2022 14:23:32 +0100 Subject: [PATCH 4/5] Update functions.sh --- fragments/functions.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/fragments/functions.sh b/fragments/functions.sh index 9e897b2..4423463 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -668,23 +668,22 @@ installPkgInDmg() { cleanupAndExit 20 "couldn't find pkg in dmg $archiveName" ERROR fi archiveName="${filearray[1]}" - printlog "found pkg: $archiveName" else if [[ -s "$tmpDir/$pkgName" ]] ; then archiveName="$tmpDir/$pkgName" else # try searching for pkg - findfiles=$(find "$tmpDir" -iname "$pkgName") + findfiles=$(find "$dmgmount" -iname "$pkgName") # was: $tmpDir filearray=( ${(f)findfiles} ) 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 # it is now safe to overwrite archiveName for installFromPKG archiveName="${filearray[1]}" - printlog "found pkg: $archiveName" fi fi - + printlog "found pkg: $archiveName" + # installFromPkgs installFromPKG } From ff8a9c2c3a6365984c35b2d894ed444b76609982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Wed, 9 Feb 2022 14:38:58 +0100 Subject: [PATCH 5/5] Few more DEBUG loggings --- fragments/functions.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fragments/functions.sh b/fragments/functions.sh index 4423463..3b0df4a 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -663,17 +663,19 @@ installPkgInDmg() { if [[ -z $pkgName ]]; then # find first file ending with 'pkg' findfiles=$(find "$dmgmount" -iname "*.pkg" -type f -maxdepth 1 ) + printlog "Found pkg(s):\n$findfiles" DEBUG filearray=( ${(f)findfiles} ) if [[ ${#filearray} -eq 0 ]]; then cleanupAndExit 20 "couldn't find pkg in dmg $archiveName" ERROR fi archiveName="${filearray[1]}" else - if [[ -s "$tmpDir/$pkgName" ]] ; then + if [[ -s "$dmgmount/$pkgName" ]] ; then # was: $tmpDir archiveName="$tmpDir/$pkgName" else # try searching for pkg findfiles=$(find "$dmgmount" -iname "$pkgName") # was: $tmpDir + printlog "Found pkg(s):\n$findfiles" DEBUG filearray=( ${(f)findfiles} ) if [[ ${#filearray} -eq 0 ]]; then cleanupAndExit 20 "couldn't find pkg “$pkgName” in dmg $archiveName" ERROR @@ -697,6 +699,7 @@ installPkgInZip() { if [[ -z $pkgName ]]; then # find first file ending with 'pkg' findfiles=$(find "$tmpDir" -iname "*.pkg" -type f -maxdepth 2 ) + printlog "Found pkg(s):\n$findfiles" DEBUG filearray=( ${(f)findfiles} ) if [[ ${#filearray} -eq 0 ]]; then cleanupAndExit 20 "couldn't find pkg in zip $archiveName" ERROR