mirror of
https://github.com/mtan93/Installomator.git
synced 2026-03-08 05:31:53 +00:00
129 lines
4.0 KiB
Bash
129 lines
4.0 KiB
Bash
# MARK: check minimal macOS requirement
|
|
autoload is-at-least
|
|
|
|
installedOSversion=$(sw_vers -productVersion)
|
|
if ! is-at-least 10.14 $installedOSversion; then
|
|
printlog "Installomator requires at least macOS 10.14 Mojave."
|
|
exit 98
|
|
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" 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" 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" REQ
|
|
eval $1
|
|
else
|
|
# assume it's a label
|
|
label=$1
|
|
fi
|
|
# shift to next argument
|
|
shift 1
|
|
done
|
|
|
|
# lowercase the label
|
|
label=${label:l}
|
|
|
|
# separate check for 'version' in order to print plain version number without any other information
|
|
if [[ $label == "version" ]]; then
|
|
echo "$VERSION"
|
|
exit 0
|
|
fi
|
|
|
|
# MARK: Logging
|
|
log_location="/private/var/log/Installomator.log"
|
|
|
|
# Check if we're in debug mode, if so then set logging to DEBUG, otherwise default to INFO
|
|
# if no log level is specified.
|
|
if [[ $DEBUG -ne 0 ]]; then
|
|
LOGGING=DEBUG
|
|
elif [[ -z $LOGGING ]]; then
|
|
LOGGING=INFO
|
|
datadogLoggingLevel=INFO
|
|
fi
|
|
|
|
# Associate logging levels with a numerical value so that we are able to identify what
|
|
# should be removed. For example if the LOGGING=ERROR only printlog statements with the
|
|
# level REQ and ERROR will be displayed. LOGGING=DEBUG will show all printlog statements.
|
|
# If a printlog statement has no level set it's automatically assigned INFO.
|
|
|
|
declare -A levels=(DEBUG 0 INFO 1 WARN 2 ERROR 3 REQ 4)
|
|
|
|
# If we are able to detect an MDM URL (Jamf Pro) or another identifier for a customer/instance we grab it here, this is useful if we're centrally logging multiple MDM instances.
|
|
if [[ -f /Library/Preferences/com.jamfsoftware.jamf.plist ]]; then
|
|
mdmURL=$(defaults read /Library/Preferences/com.jamfsoftware.jamf.plist jss_url)
|
|
elif [[ -n "$MDMProfileName" ]]; then
|
|
mdmURL=$(sudo profiles show | grep -A3 "$MDMProfileName" | sed -n -e 's/^.*organization: //p')
|
|
else
|
|
mdmURL="Unknown"
|
|
fi
|
|
|
|
# Generate a session key for this run, this is useful to idenify streams when we're centrally logging.
|
|
SESSION=$RANDOM
|
|
|
|
# Mark: START
|
|
printlog "################## Start Installomator v. $VERSION, date $VERSIONDATE" REQ
|
|
printlog "################## Version: $VERSION" INFO
|
|
printlog "################## Date: $VERSIONDATE" INFO
|
|
printlog "################## $label" INFO
|
|
|
|
# Check for DEBUG mode
|
|
if [[ $DEBUG -gt 0 ]]; then
|
|
printlog "DEBUG mode $DEBUG enabled." DEBUG
|
|
fi
|
|
|
|
# How we get version number from app
|
|
if [[ -z $versionKey ]]; then
|
|
versionKey="CFBundleShortVersionString"
|
|
fi
|
|
|
|
# get current user
|
|
currentUser=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
|
|
|
|
# MARK: check for root
|
|
if [[ "$(whoami)" != "root" && "$DEBUG" -eq 0 ]]; then
|
|
# not running as root
|
|
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)" REQ
|
|
exit 0
|
|
;;
|
|
valuesfromarguments)
|
|
if [[ -z $name ]]; then
|
|
printlog "need to provide 'name'" ERROR
|
|
exit 1
|
|
fi
|
|
if [[ -z $type ]]; then
|
|
printlog "need to provide 'type'" ERROR
|
|
exit 1
|
|
fi
|
|
if [[ -z $downloadURL ]]; then
|
|
printlog "need to provide 'downloadURL'" ERROR
|
|
exit 1
|
|
fi
|
|
if [[ -z $expectedTeamID ]]; then
|
|
printlog "need to provide 'expectedTeamID'" ERROR
|
|
exit 1
|
|
fi
|
|
;;
|
|
|
|
# label descriptions start here
|