mirror of
https://github.com/mtan93/Installomator.git
synced 2026-03-17 05:10:57 +00:00
Compare commits
1 Commits
v9.2
...
cleanupAnd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b42bd7e408 |
108
CHANGELOG.md
108
CHANGELOG.md
@@ -1,109 +1,7 @@
|
|||||||
## v9.2
|
## v10
|
||||||
|
|
||||||
**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using `googlechromepkg` and `firefoxpkg` labels instead.
|
- Now we trap the script, so if it is cancelled, we will run cleanupAndExit anyway, and have mounted diskimages unmounted and temporary files and folders removed.
|
||||||
|
-
|
||||||
- bug fix (#434)
|
|
||||||
- documentation updates (#485, #494)
|
|
||||||
- new labels:
|
|
||||||
- 1password8 (#514)
|
|
||||||
- ultimakercura
|
|
||||||
- androidstudio (#547)
|
|
||||||
- atextlegacy (#464)
|
|
||||||
- camtasia2019, camtasia2020 (#499)
|
|
||||||
- clue, cluefull (#481)
|
|
||||||
- craftmanagerforsketch
|
|
||||||
- displaylinkmanager (#448)
|
|
||||||
- drawio (#480)
|
|
||||||
- duckduckgo
|
|
||||||
- egnytewebedit (#512)
|
|
||||||
- filezilla (#522)
|
|
||||||
- firefoxpkg_intl
|
|
||||||
- flycut (#501)
|
|
||||||
- fontexplorer (#523)
|
|
||||||
- hype (#524)
|
|
||||||
- idrive (#507), idrivethin (#509)
|
|
||||||
- imageoptim (#525)
|
|
||||||
- linear (#519)
|
|
||||||
- macoslaps (#502)
|
|
||||||
- mightymike
|
|
||||||
- mindmanager (#479)
|
|
||||||
- pika (#526)
|
|
||||||
- propresenter7 (#394)
|
|
||||||
- qgis-pr
|
|
||||||
- shottr (#516)
|
|
||||||
- slab (#487)
|
|
||||||
- snagit2019, snagit2020, snagit2021 (#498)
|
|
||||||
- sonobus (#490)
|
|
||||||
- talkdeskcxcloud (#452)
|
|
||||||
- thunderbird_intl (#497)
|
|
||||||
- unnaturalscrollwheels (#503)
|
|
||||||
- wechat (#510)
|
|
||||||
- xeroxworkcentre7800 (#527)
|
|
||||||
- zohoworkdrivegenie
|
|
||||||
- updated labels
|
|
||||||
- adobereaderdc-update, adobereaderdc (#503)
|
|
||||||
- amazoncorretto8jdk (#461)
|
|
||||||
- camtasia (#499)
|
|
||||||
- citrixworkspace (#508)
|
|
||||||
- dbeaverce (#450)
|
|
||||||
- dropbox
|
|
||||||
- firefox, firefox_da, firefox_intl (#495), firefoxesr_intl (#496), firefoxpkg
|
|
||||||
- googlechrome, googlechromepkg (#484)
|
|
||||||
- gpgsuite (#465)
|
|
||||||
- grammarly (#515)
|
|
||||||
- logitechoptions (#478)
|
|
||||||
- onlyofficedesktop (#454)
|
|
||||||
- postman (#458)
|
|
||||||
- rancherdesktop (#463)
|
|
||||||
- remotedesktopmanagerenterprise
|
|
||||||
- remotedesktopmanagerfree
|
|
||||||
- ringcentralapp (#492)
|
|
||||||
- sketch
|
|
||||||
- snagit (#498)
|
|
||||||
- talkdeskcallbar (#453)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## v9.1
|
|
||||||
|
|
||||||
|
|
||||||
- added option for Microsoft Endpoint Manager (Intune) to `LOGO` (#446)
|
|
||||||
- minor fixes (#427, #434, #436)
|
|
||||||
- the `googlechrome` label now always downloads the universal version (#430)
|
|
||||||
- new labels:
|
|
||||||
- 1passwordcli (#429)
|
|
||||||
- amazoncorretto8jdk (#423)
|
|
||||||
- autodeskfusion360admininstall (#447)
|
|
||||||
- axurerp10 (#439)
|
|
||||||
- calcservice (#426)
|
|
||||||
- clipy (#412)
|
|
||||||
- dockutil (#432)
|
|
||||||
- easyfind (#426)
|
|
||||||
- grammarly (#444)
|
|
||||||
- houdahspot (#426)
|
|
||||||
- macadminspython (#431)
|
|
||||||
- microsoftazuredatastudio (#438)
|
|
||||||
- nanosaur (#426)
|
|
||||||
- tembo (#426)
|
|
||||||
- wordservice (#426)
|
|
||||||
- xmenu (#426)
|
|
||||||
- updated labels:
|
|
||||||
- appcleaner (#428)
|
|
||||||
- dialog (#435, #437)
|
|
||||||
- googlechrome (#430)
|
|
||||||
- microsoftdefender (#440)
|
|
||||||
- supportapp (#426)
|
|
||||||
- zoom and zoomgov (#426, #433)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## v9.0.1
|
|
||||||
|
|
||||||
- improved logging levels throughout the script #408
|
|
||||||
- fixed a bug for `pkgindmg` style labels #408
|
|
||||||
- changed the criteria used to locate an app in the case the it cannot be found in the default locations, this should help with some apps with similar name (Virtual Box and Box Drive, #401) #413
|
|
||||||
- new label: WhiteBox Packages (`packages`) #415
|
|
||||||
- modified label: `loom` (added Apple silicon download) #417
|
|
||||||
|
|
||||||
## v9
|
## v9
|
||||||
|
|
||||||
|
|||||||
893
Installomator.sh
893
Installomator.sh
File diff suppressed because it is too large
Load Diff
60
Labels.txt
60
Labels.txt
@@ -1,6 +1,4 @@
|
|||||||
1password7
|
1password7
|
||||||
1password8
|
|
||||||
1passwordcli
|
|
||||||
4kvideodownloader
|
4kvideodownloader
|
||||||
8x8
|
8x8
|
||||||
abstract
|
abstract
|
||||||
@@ -18,10 +16,8 @@ alephone
|
|||||||
alfred
|
alfred
|
||||||
alttab
|
alttab
|
||||||
amazonchime
|
amazonchime
|
||||||
amazoncorretto8jdk
|
|
||||||
amazonworkspaces
|
amazonworkspaces
|
||||||
androidfiletransfer
|
androidfiletransfer
|
||||||
androidstudio
|
|
||||||
anydesk
|
anydesk
|
||||||
apparency
|
apparency
|
||||||
appcleaner
|
appcleaner
|
||||||
@@ -35,18 +31,14 @@ aquaskk
|
|||||||
arq7
|
arq7
|
||||||
asana
|
asana
|
||||||
atext
|
atext
|
||||||
atextlegacy
|
|
||||||
atom
|
atom
|
||||||
audacity
|
audacity
|
||||||
authydesktop
|
authydesktop
|
||||||
autodeskfusion360admininstall
|
|
||||||
autodmg
|
autodmg
|
||||||
autopkgr
|
autopkgr
|
||||||
aviatrix
|
aviatrix
|
||||||
awscli2
|
awscli2
|
||||||
awsvpnclient
|
awsvpnclient
|
||||||
axurerp10
|
|
||||||
azuredatastudio
|
|
||||||
balenaetcher
|
balenaetcher
|
||||||
balsamiqwireframes
|
balsamiqwireframes
|
||||||
bartender
|
bartender
|
||||||
@@ -63,29 +55,22 @@ brave
|
|||||||
bugdom
|
bugdom
|
||||||
caffeine
|
caffeine
|
||||||
cakebrew
|
cakebrew
|
||||||
calcservice
|
|
||||||
calibre
|
calibre
|
||||||
camostudio
|
camostudio
|
||||||
camtasia
|
camtasia
|
||||||
camtasia2019
|
|
||||||
camtasia2021
|
|
||||||
canva
|
canva
|
||||||
chatwork
|
chatwork
|
||||||
cisdem-documentreader
|
cisdem-documentreader
|
||||||
citrixworkspace
|
citrixworkspace
|
||||||
clevershare2
|
clevershare2
|
||||||
clickshare
|
clickshare
|
||||||
clipy
|
|
||||||
closeio
|
closeio
|
||||||
cloudya
|
cloudya
|
||||||
clue
|
|
||||||
cluefull
|
|
||||||
code42
|
code42
|
||||||
coderunner
|
coderunner
|
||||||
colourcontrastanalyser
|
colourcontrastanalyser
|
||||||
cormorant
|
cormorant
|
||||||
craftmanager
|
craftmanager
|
||||||
craftmanagerforsketch
|
|
||||||
cryptomator
|
cryptomator
|
||||||
cyberduck
|
cyberduck
|
||||||
daisydisk
|
daisydisk
|
||||||
@@ -102,17 +87,11 @@ dialog
|
|||||||
dialpad
|
dialpad
|
||||||
discord
|
discord
|
||||||
diskspace
|
diskspace
|
||||||
displaylinkmanager
|
|
||||||
docker
|
docker
|
||||||
dockutil
|
|
||||||
drawio
|
|
||||||
drift
|
drift
|
||||||
dropbox
|
dropbox
|
||||||
duckduckgo
|
|
||||||
easeusdatarecoverywizard
|
easeusdatarecoverywizard
|
||||||
easyfind
|
|
||||||
egnyte
|
egnyte
|
||||||
egnytewebedit
|
|
||||||
element
|
element
|
||||||
eraseinstall
|
eraseinstall
|
||||||
eshareosx
|
eshareosx
|
||||||
@@ -125,7 +104,6 @@ fastscripts
|
|||||||
favro
|
favro
|
||||||
ferdi
|
ferdi
|
||||||
figma
|
figma
|
||||||
filezilla
|
|
||||||
findanyfile
|
findanyfile
|
||||||
firefox
|
firefox
|
||||||
firefox_da
|
firefox_da
|
||||||
@@ -134,11 +112,8 @@ firefoxesr
|
|||||||
firefoxesr_intl
|
firefoxesr_intl
|
||||||
firefoxesrpkg
|
firefoxesrpkg
|
||||||
firefoxpkg
|
firefoxpkg
|
||||||
firefoxpkg_intl
|
|
||||||
flowjo
|
flowjo
|
||||||
flux
|
flux
|
||||||
flycut
|
|
||||||
fontexplorer
|
|
||||||
front
|
front
|
||||||
fsmonitor
|
fsmonitor
|
||||||
gimp
|
gimp
|
||||||
@@ -155,7 +130,6 @@ googlesoftwareupdate
|
|||||||
gotomeeting
|
gotomeeting
|
||||||
gpgsuite
|
gpgsuite
|
||||||
gpgsync
|
gpgsync
|
||||||
grammarly
|
|
||||||
grandperspective
|
grandperspective
|
||||||
grasshopper
|
grasshopper
|
||||||
gyazo
|
gyazo
|
||||||
@@ -163,17 +137,12 @@ gyazogif
|
|||||||
hancock
|
hancock
|
||||||
handbrake
|
handbrake
|
||||||
hazel
|
hazel
|
||||||
houdahspot
|
|
||||||
hpeasyadmin
|
hpeasyadmin
|
||||||
hpeasystart
|
hpeasystart
|
||||||
hype
|
|
||||||
hyper
|
hyper
|
||||||
ibarcoder
|
ibarcoder
|
||||||
icons
|
icons
|
||||||
idrive
|
|
||||||
idrivethin
|
|
||||||
iina
|
iina
|
||||||
imageoptim
|
|
||||||
imazingprofileeditor
|
imazingprofileeditor
|
||||||
inkscape
|
inkscape
|
||||||
insomnia
|
insomnia
|
||||||
@@ -212,18 +181,14 @@ lastpass
|
|||||||
launchbar
|
launchbar
|
||||||
lexarrecoverytool
|
lexarrecoverytool
|
||||||
libreoffice
|
libreoffice
|
||||||
linear
|
|
||||||
logioptions
|
|
||||||
logitechoptions
|
logitechoptions
|
||||||
logseq
|
logseq
|
||||||
loom
|
loom
|
||||||
lowprofile
|
lowprofile
|
||||||
lucifer
|
lucifer
|
||||||
lulu
|
lulu
|
||||||
macadminspython
|
|
||||||
maccyapp
|
maccyapp
|
||||||
macfuse
|
macfuse
|
||||||
macoslaps
|
|
||||||
macports
|
macports
|
||||||
malwarebytes
|
malwarebytes
|
||||||
marathon
|
marathon
|
||||||
@@ -232,10 +197,8 @@ marathoninfinity
|
|||||||
mattermost
|
mattermost
|
||||||
menumeters
|
menumeters
|
||||||
microsoftautoupdate
|
microsoftautoupdate
|
||||||
microsoftazuredatastudio
|
|
||||||
microsoftazurestorageexplorer
|
microsoftazurestorageexplorer
|
||||||
microsoftcompanyportal
|
microsoftcompanyportal
|
||||||
microsoftdefender
|
|
||||||
microsoftdefenderatp
|
microsoftdefenderatp
|
||||||
microsoftedge
|
microsoftedge
|
||||||
microsoftedgeconsumerstable
|
microsoftedgeconsumerstable
|
||||||
@@ -255,8 +218,6 @@ microsoftteams
|
|||||||
microsoftvisualstudiocode
|
microsoftvisualstudiocode
|
||||||
microsoftword
|
microsoftword
|
||||||
microsoftyammer
|
microsoftyammer
|
||||||
mightymike
|
|
||||||
mindmanager
|
|
||||||
miro
|
miro
|
||||||
mobikinassistantforandroid
|
mobikinassistantforandroid
|
||||||
mochakeyboard
|
mochakeyboard
|
||||||
@@ -268,7 +229,6 @@ montereyblocker
|
|||||||
mowgliiitsycal
|
mowgliiitsycal
|
||||||
musescore
|
musescore
|
||||||
muzzle
|
muzzle
|
||||||
nanosaur
|
|
||||||
netnewswire
|
netnewswire
|
||||||
nextcloud
|
nextcloud
|
||||||
nomad
|
nomad
|
||||||
@@ -295,13 +255,11 @@ opera
|
|||||||
ottomatic
|
ottomatic
|
||||||
overflow
|
overflow
|
||||||
pacifist
|
pacifist
|
||||||
packages
|
|
||||||
pandoc
|
pandoc
|
||||||
paretosecurity
|
paretosecurity
|
||||||
parsec
|
parsec
|
||||||
pdfsam
|
pdfsam
|
||||||
perimeter81
|
perimeter81
|
||||||
pika
|
|
||||||
pitch
|
pitch
|
||||||
plantronicshub
|
plantronicshub
|
||||||
platypus
|
platypus
|
||||||
@@ -313,12 +271,10 @@ privileges
|
|||||||
proctortrack
|
proctortrack
|
||||||
promiseutility
|
promiseutility
|
||||||
promiseutilityr
|
promiseutilityr
|
||||||
propresenter7
|
|
||||||
protonvpn
|
protonvpn
|
||||||
proxyman
|
proxyman
|
||||||
pycharmce
|
pycharmce
|
||||||
pymol
|
pymol
|
||||||
qgis-pr
|
|
||||||
r
|
r
|
||||||
ramboxce
|
ramboxce
|
||||||
rancherdesktop
|
rancherdesktop
|
||||||
@@ -350,7 +306,6 @@ secretive
|
|||||||
sequelpro
|
sequelpro
|
||||||
sfsymbols
|
sfsymbols
|
||||||
shield
|
shield
|
||||||
shottr
|
|
||||||
sidekick
|
sidekick
|
||||||
signal
|
signal
|
||||||
silnite
|
silnite
|
||||||
@@ -359,16 +314,12 @@ sizeup
|
|||||||
sketch
|
sketch
|
||||||
sketchupviewer
|
sketchupviewer
|
||||||
skype
|
skype
|
||||||
slab
|
|
||||||
slack
|
slack
|
||||||
smartgit
|
smartgit
|
||||||
snagit
|
snagit
|
||||||
snagit2019
|
|
||||||
snagit2020
|
snagit2020
|
||||||
snagit2021
|
snagit2021
|
||||||
snagit2022
|
|
||||||
snapgeneviewer
|
snapgeneviewer
|
||||||
sonobus
|
|
||||||
sonos
|
sonos
|
||||||
sonoss1
|
sonoss1
|
||||||
sonoss2
|
sonoss2
|
||||||
@@ -383,7 +334,6 @@ sublimetext
|
|||||||
superhuman
|
superhuman
|
||||||
supportapp
|
supportapp
|
||||||
suspiciouspackage
|
suspiciouspackage
|
||||||
swiftdialog
|
|
||||||
swiftruntimeforcommandlinetools
|
swiftruntimeforcommandlinetools
|
||||||
sync
|
sync
|
||||||
tableaudesktop
|
tableaudesktop
|
||||||
@@ -391,20 +341,17 @@ tableaupublic
|
|||||||
tableaureader
|
tableaureader
|
||||||
tageditor
|
tageditor
|
||||||
talkdeskcallbar
|
talkdeskcallbar
|
||||||
talkdeskcxcloud
|
|
||||||
taskpaper
|
taskpaper
|
||||||
teamviewer
|
teamviewer
|
||||||
teamviewerhost
|
teamviewerhost
|
||||||
teamviewerqs
|
teamviewerqs
|
||||||
techsmithcapture
|
techsmithcapture
|
||||||
telegram
|
telegram
|
||||||
tembo
|
|
||||||
textexpander
|
textexpander
|
||||||
textmate
|
textmate
|
||||||
theunarchiver
|
theunarchiver
|
||||||
things
|
things
|
||||||
thunderbird
|
thunderbird
|
||||||
thunderbird_intl
|
|
||||||
tidal
|
tidal
|
||||||
toggltrack
|
toggltrack
|
||||||
tom4aconverter
|
tom4aconverter
|
||||||
@@ -413,11 +360,9 @@ trex
|
|||||||
tunnelbear
|
tunnelbear
|
||||||
tunnelblick
|
tunnelblick
|
||||||
typora
|
typora
|
||||||
ultimakercura
|
|
||||||
umbrellaroamingclient
|
umbrellaroamingclient
|
||||||
uniconverter
|
uniconverter
|
||||||
universaltypeclient
|
universaltypeclient
|
||||||
unnaturalscrollwheels
|
|
||||||
utm
|
utm
|
||||||
vagrant
|
vagrant
|
||||||
vanilla
|
vanilla
|
||||||
@@ -435,24 +380,19 @@ wallyezflash
|
|||||||
webex
|
webex
|
||||||
webexmeetings
|
webexmeetings
|
||||||
webexteams
|
webexteams
|
||||||
wechat
|
|
||||||
whatsapp
|
whatsapp
|
||||||
wickrme
|
wickrme
|
||||||
wickrpro
|
wickrpro
|
||||||
wireshark
|
wireshark
|
||||||
wordservice
|
|
||||||
wwdc
|
wwdc
|
||||||
xeroxphaser7800
|
xeroxphaser7800
|
||||||
xeroxworkcentre7800
|
|
||||||
xink
|
xink
|
||||||
xmenu
|
|
||||||
xquartz
|
xquartz
|
||||||
yed
|
yed
|
||||||
yubikeymanagerqt
|
yubikeymanagerqt
|
||||||
zappy
|
zappy
|
||||||
zeplin
|
zeplin
|
||||||
zohoworkdrive
|
zohoworkdrive
|
||||||
zohoworkdrivegenie
|
|
||||||
zohoworkdrivetruesync
|
zohoworkdrivetruesync
|
||||||
zoom
|
zoom
|
||||||
zoomclient
|
zoomclient
|
||||||
|
|||||||
@@ -5,28 +5,8 @@ what="brave" # enter the software to install
|
|||||||
# To be used as a script sent out from a MDM.
|
# To be used as a script sent out from a MDM.
|
||||||
# Fill the variable "what" above with a label.
|
# Fill the variable "what" above with a label.
|
||||||
# Script will run this label.
|
# Script will run this label.
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
|
||||||
######################################################################
|
|
||||||
# Parameters for reinstall/initial install (owner root:wheel):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1"
|
|
||||||
# Parameters for Self Service installed app:
|
|
||||||
# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all"
|
|
||||||
# Parameters for security important apps, like browsers (run automaticaly every day):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=tell_user_then_kill"
|
|
||||||
# Update of service apps (run automatically):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent"
|
|
||||||
parameters="BLOCKING_PROCESS_ACTION=tell_user_then_kill NOTIFY=all"
|
|
||||||
###############################################
|
###############################################
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
caffeinatepid=$!
|
caffeinatepid=$!
|
||||||
@@ -36,14 +16,18 @@ caffexit () {
|
|||||||
exit $1
|
exit $1
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO $parameters LOGGING=WARN || true)"
|
# Verify that Installomator has been installed
|
||||||
# Check result
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
if [ ! -e "${destFile}" ]; then
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
echo "Installomator not found here:"
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}"
|
echo "${destFile}"
|
||||||
#echo "$cmdOutput"
|
echo "Exiting."
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
caffexit 99
|
||||||
echo "$errorOutput"
|
fi
|
||||||
|
|
||||||
|
${destFile} ${what} LOGO=mosyleb BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=all #INSTALL=force
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
echo "Error installing ${what}. Exit code $?"
|
echo "Error installing ${what}. Exit code $?"
|
||||||
caffexit $?
|
caffexit $?
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,31 +1,11 @@
|
|||||||
#!/bin/zsh
|
#!/bin/zsh
|
||||||
# Installation using Installomator
|
# Installation using Installomator
|
||||||
whatList="microsoftteams microsoftyammer firefox bravebrowser cyberduck vlc signal" # enter the software to install separated with spaces
|
what="microsoftteams microsoftyammer firefox bravebrowser cyberduck vlc signal" # enter the software to install separated with spaces
|
||||||
|
|
||||||
# To be used as a script sent out from a MDM.
|
# To be used as a script sent out from a MDM.
|
||||||
# Fill the variable "whatList" above with labels separated by space " ".
|
# Fill the variable "what" above with labels separated by space " ".
|
||||||
# Script will loop through these labels.
|
# Script will loop through these labels.
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Parameters for reinstall/initial install (owner root:wheel):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1"
|
|
||||||
# Parameters for Self Service installed app:
|
|
||||||
# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all"
|
|
||||||
# Parameters for security important apps, like browsers (run automaticaly every day):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=tell_user_then_kill"
|
|
||||||
# Update of service apps (run automatically):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent"
|
|
||||||
parameters="BLOCKING_PROCESS_ACTION=tell_user NOTIFY=all"
|
|
||||||
######################################################################
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -39,17 +19,21 @@ caffexit () {
|
|||||||
# Count errors
|
# Count errors
|
||||||
errorCount=0
|
errorCount=0
|
||||||
|
|
||||||
for what in $whatList; do
|
# Verify that Installomator has been installed
|
||||||
#echo $what
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
# Install software using Installomator
|
if [ ! -e "${destFile}" ]; then
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO $parameters LOGGING=WARN || true)"
|
echo "Installomator not found here:"
|
||||||
# Check result
|
echo "${destFile}"
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
echo "Exiting."
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
caffexit 99
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}"
|
fi
|
||||||
#echo "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
for item in $what; do
|
||||||
echo "$errorOutput"
|
#echo $item
|
||||||
|
${destFile} ${item} LOGO=mosyleb BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=all #INSTALL=force
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
|
echo "[$(DATE)] Error installing ${item}. Exit code $?"
|
||||||
let errorCount++
|
let errorCount++
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1,18 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Updating Installomator
|
# Updating Installomator
|
||||||
# Usefull to push out after deployment if earlier version was deployed in DEP profile
|
# Usefull to push out after deployment if earlier version was deployed in DEP profile
|
||||||
|
# Currently script uses valuesfromarguments as a label is not included before next release, so this can be used to install to version 0.7
|
||||||
|
|
||||||
what="installomator" # enter the software to install
|
what="installomator" # enter the software to install
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -23,19 +14,30 @@ caffexit () {
|
|||||||
exit $1
|
exit $1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Install software using Installomator
|
# Verify that Installomator has been installed
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent LOGGING=req || true)"
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
|
if [ ! -e "${destFile}" ]; then
|
||||||
|
echo "Installomator not found here:"
|
||||||
|
echo "${destFile}"
|
||||||
|
echo "Exiting."
|
||||||
|
caffexit 99
|
||||||
|
fi
|
||||||
|
|
||||||
# Check result
|
${destFile} valuesfromarguments\
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
name=Installomator \
|
||||||
if [[ ${exitStatus} -eq 0 ]] ; then
|
type=pkg \
|
||||||
echo -e "${what} succesfully installed.\n"
|
packageID=com.scriptingosx.Installomator \
|
||||||
else
|
downloadURL=https://github.com/Installomator/Installomator/releases/download/v0.7release/Installomator-0.7.0.pkg \
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}\n"
|
appNewVersion=0.7 \
|
||||||
#echo "$cmdOutput"
|
expectedTeamID=JME5BW3F3R \
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
BLOCKING_PROCESS_ACTION=ignore \
|
||||||
echo "$errorOutput"
|
NOTIFY=silent
|
||||||
caffexit $exitStatus
|
|
||||||
|
# ${destFile} ${what} BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
|
echo "Error installing ${what}. Exit code $?"
|
||||||
|
caffexit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "[$(DATE)][LOG-END]"
|
echo "[$(DATE)][LOG-END]"
|
||||||
|
|||||||
@@ -5,34 +5,15 @@
|
|||||||
|
|
||||||
# Mark: Installation script
|
# Mark: Installation script
|
||||||
# Just click “Add” to autogenerate the installer script line by clicking the “Add”-button next to the Installer PKG, replace with first line below
|
# Just click “Add” to autogenerate the installer script line by clicking the “Add”-button next to the Installer PKG, replace with first line below
|
||||||
/usr/sbin/installer -pkg "/Library/Addigy/ansible/packages/Installomator (9.1.0)/Installomator-9.1.pkg" -target /
|
/usr/sbin/installer -pkg "/Library/Addigy/ansible/packages/Installomator (0.7.0)/Installomator-0.7.0.pkg" -target /
|
||||||
|
|
||||||
# Installation using Installomator
|
# Installation using Installomator
|
||||||
whatList="supportapp xink textmate microsoftedge wwdc keka vlc " # enter the software to installed separated with spaces
|
what="supportapp xink textmate microsoftedge wwdc keka vlc " # enter the software to installed separated with spaces
|
||||||
|
|
||||||
# To be used as a script sent out from a MDM.
|
# To be used as a script sent out from a MDM.
|
||||||
# Fill the variable "whatList" above with labels separated by space " ".
|
# Fill the variable "what" above with labels separated by space " ".
|
||||||
# Script will loop through these labels and exit with number of errors.
|
# Script will loop through these labels and exit with number of errors.
|
||||||
######################################################################
|
######################################################################
|
||||||
# Parameters for reinstall/initial install (owner root:wheel):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1"
|
|
||||||
# Parameters for Self Service installed app:
|
|
||||||
# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all"
|
|
||||||
# Parameters for security important apps, like browsers (run automaticaly every day):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=tell_user_then_kill"
|
|
||||||
# Update of service apps (run automatically):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent"
|
|
||||||
parameters="BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes"
|
|
||||||
######################################################################
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -46,17 +27,21 @@ caffexit () {
|
|||||||
# Count errors
|
# Count errors
|
||||||
errorCount=0
|
errorCount=0
|
||||||
|
|
||||||
for what in $whatList; do
|
# Verify that Installomator has been installed
|
||||||
#echo $what
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
# Install software using Installomator
|
if [ ! -e "${destFile}" ]; then
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=addigy $parameters || true)"
|
echo "Installomator not found here:"
|
||||||
# Check result
|
echo "${destFile}"
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
echo "Exiting."
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
caffexit 99
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}"
|
fi
|
||||||
#echo "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
for item in $what; do
|
||||||
echo "$errorOutput"
|
#echo $item
|
||||||
|
${destFile} ${item} LOGO=addigy NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill #INSTALL=force
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# Error handling
|
||||||
|
echo "[$(DATE)] Error installing ${item}. Exit code $?"
|
||||||
let errorCount++
|
let errorCount++
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -71,7 +56,7 @@ caffexit $errorCount
|
|||||||
# Install on success
|
# Install on success
|
||||||
# Remember to fill out the correct “TARGET_VERSION” and “PKG_ID”, and click "Install on succes".
|
# Remember to fill out the correct “TARGET_VERSION” and “PKG_ID”, and click "Install on succes".
|
||||||
PKG_ID="com.scriptingosx.Installomator"
|
PKG_ID="com.scriptingosx.Installomator"
|
||||||
TARGET_VERSION="9.1"
|
TARGET_VERSION="8.0"
|
||||||
|
|
||||||
vercomp () {
|
vercomp () {
|
||||||
if [[ $1 == $2 ]]; then
|
if [[ $1 == $2 ]]; then
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
PKG_ID="com.scriptingosx.Installomator"
|
PKG_ID="com.scriptingosx.Installomator"
|
||||||
TARGET_VERSION="9.1"
|
TARGET_VERSION="8.0"
|
||||||
URLDOWNLOAD="%MosyleCDNFile:blah-blah-blah%"
|
URLDOWNLOAD="%MosyleCDNFile:blah-blah-blah%"
|
||||||
######################################################################
|
######################################################################
|
||||||
# Installation using Installomator (enter the software to install separated with spaces in the "whatList"-variable)
|
# Installation using Installomator (enter the software to install separated with spaces in the "what"-variable)
|
||||||
whatList="handbrake theunarchiver microsoftoffice365"
|
what="handbrake theunarchiver microsoftoffice365"
|
||||||
# Covered by Mosyle Catalog: "brave firefox googlechrome microsoftedge microsoftteams signal sublimetext vlc webex zoom" among others
|
# Covered by Mosyle Catalog: "brave firefox googlechrome microsoftedge microsoftteams signal sublimetext vlc webex zoom" among others
|
||||||
LOGO="mosyleb" # or "mosylem"
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
## Mark: Code here
|
## Mark: Code here
|
||||||
@@ -57,17 +56,12 @@ if [ ! -e "${destFile}" ]; then
|
|||||||
caffexit 99
|
caffexit 99
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for what in $whatList; do
|
for item in $what; do
|
||||||
#echo $item
|
#echo $item
|
||||||
# Install software using Installomator
|
${destFile} ${item} LOGO=mosyle NOTIFY=all BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill #INSTALL=force
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO NOTIFY=all BLOCKING_PROCESS_ACTION=tell_user || true)" # NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force
|
if [ $? != 0 ]; then
|
||||||
# Check result
|
# Error handling
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
echo "[$(DATE)] Error installing ${item}. Exit code $?"
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
|
||||||
echo "Error installing ${what}. Exit code ${exitStatus}"
|
|
||||||
#echo "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
|
||||||
echo "$errorOutput"
|
|
||||||
let errorCount++
|
let errorCount++
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1,20 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Software
|
|
||||||
|
|
||||||
# Installation using Installomator
|
# Installation using Installomator
|
||||||
# Example of installing software using valuesfromarguments to install a custom software
|
# Example of installing software using valuesfromarguments to install a custom software
|
||||||
|
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
what="valuesfromarguments" # enter the software to install
|
||||||
###############################################
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -25,31 +13,29 @@ caffexit () {
|
|||||||
exit $1
|
exit $1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variables to calculate
|
# Verify that Installomator has been installed
|
||||||
downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip"
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
appNewVersion=$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath -e '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f2)
|
if [ ! -e "${destFile}" ]; then
|
||||||
|
echo "Installomator not found here:"
|
||||||
|
echo "${destFile}"
|
||||||
|
echo "Exiting."
|
||||||
|
caffexit 99
|
||||||
|
fi
|
||||||
|
|
||||||
# Install software using Installomator
|
${destFile} valuesfromarguments \
|
||||||
cmdOutput="$(${destFile} valuesfromarguments LOGO=$LOGO \
|
name=\"Zoho\ WorkDrive\" \
|
||||||
name=CraftManager \
|
type=dmg \
|
||||||
type=zip \
|
downloadURL=https://files-accl.zohopublic.com/public/wdbin/download/46f971e4fc4a32b68ad5d7dade38a7d2 \
|
||||||
downloadURL=$downloadURL \
|
appNewVersion=2.6.25 \
|
||||||
appNewVersion=$appNewVersion \
|
expectedTeamID=TZ824L8Y37 \
|
||||||
expectedTeamID=VRXQSNCL5W \
|
BLOCKING_PROCESS_ACTION=quit \
|
||||||
BLOCKING_PROCESS_ACTION=prompt_user \
|
NOTIFY=all
|
||||||
LOGGING=REQ \
|
|
||||||
NOTIFY=all || true)"
|
|
||||||
|
|
||||||
# Check result
|
# ${destFile} ${what} BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
if [ $? != 0 ]; then
|
||||||
if [[ ${exitStatus} -eq 0 ]] ; then
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
echo -e "${what} succesfully installed.\n"
|
echo "Error installing ${what}. Exit code $?"
|
||||||
else
|
caffexit $?
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}\n"
|
|
||||||
#printlog "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
|
||||||
echo "$errorOutput"
|
|
||||||
caffexit $exitStatus
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "[$(DATE)][LOG-END]"
|
echo "[$(DATE)][LOG-END]"
|
||||||
|
|||||||
14
README.md
14
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
_The one installer script to rule them all._
|
_The one installer script to rule them all._
|
||||||
|
|
||||||
   
|
   
|
||||||
|
|
||||||
This script is in the “we find it useful, it is working for us” stage.
|
This script is in the “we find it useful, it is working for us” stage.
|
||||||
|
|
||||||
@@ -12,13 +12,13 @@ We have put a lot of work into making it stable and safe, but we cannot - of cou
|
|||||||
|
|
||||||
## Authors
|
## Authors
|
||||||
|
|
||||||
Intallomator was originally inspired by the download scripts from William Smith and Sander Schram, and created by:
|
Intallomator was original inspired by the download scripts from William Smith and Sander Schram, and created by:
|
||||||
- [Armin Briegel - @scriptingosx](https://github.com/scriptingosx)
|
Armin Briegel - @scriptingosx
|
||||||
|
|
||||||
Later on a few more members came on the project:
|
Later on a few more contributers came on the project:
|
||||||
- Isaac Ordonez - @issacatmann
|
Isaac Ordonez - @issacatmann
|
||||||
- [Søren Theilgaard - @Theile](https://github.com/Theile)
|
Søren Theilgaard - @Theile
|
||||||
- [Adam Codega - @acodega](https://github.com/acodega)
|
Adam Codega - @acodega
|
||||||
|
|
||||||
And with numerous contributions from many others.
|
And with numerous contributions from many others.
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +1,35 @@
|
|||||||
# MARK: check minimal macOS requirement
|
# MARK: 3 Arguments
|
||||||
|
|
||||||
|
# Start trapping the script
|
||||||
|
trap_with_arg func_trap SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM SIGTSTP
|
||||||
|
|
||||||
|
# check minimal macOS requirement
|
||||||
autoload is-at-least
|
autoload is-at-least
|
||||||
|
|
||||||
installedOSversion=$(sw_vers -productVersion)
|
installedOSversion=$(sw_vers -productVersion)
|
||||||
if ! is-at-least 10.14 $installedOSversion; then
|
if ! is-at-least 10.14 $installedOSversion; then
|
||||||
printlog "Installomator requires at least macOS 10.14 Mojave." ERROR
|
printlog "Installomator requires at least macOS 10.14 Mojave."
|
||||||
exit 98
|
exit 98
|
||||||
fi
|
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" REQ
|
printlog "no label provided, printing labels"
|
||||||
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" REQ
|
printlog "shifting arguments for Jamf"
|
||||||
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" WARN
|
printlog "setting variable from argument $1"
|
||||||
eval $1
|
eval $1
|
||||||
else
|
else
|
||||||
# assume it's a label
|
# assume it's a label
|
||||||
@@ -96,33 +101,33 @@ 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" ERROR
|
cleanupAndExit 6 "not running as root, exiting"
|
||||||
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)" REQ
|
printlog "Installomater: version $VERSION ($VERSIONDATE)"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
valuesfromarguments)
|
valuesfromarguments)
|
||||||
if [[ -z $name ]]; then
|
if [[ -z $name ]]; then
|
||||||
printlog "need to provide 'name'" ERROR
|
printlog "need to provide 'name'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [[ -z $type ]]; then
|
if [[ -z $type ]]; then
|
||||||
printlog "need to provide 'type'" ERROR
|
printlog "need to provide 'type'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [[ -z $downloadURL ]]; then
|
if [[ -z $downloadURL ]]; then
|
||||||
printlog "need to provide 'downloadURL'" ERROR
|
printlog "need to provide 'downloadURL'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [[ -z $expectedTeamID ]]; then
|
if [[ -z $expectedTeamID ]]; then
|
||||||
printlog "need to provide 'expectedTeamID'" ERROR
|
printlog "need to provide 'expectedTeamID'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
# label descriptions start here
|
# Mark: label descriptions start here
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# MARK: Functions
|
# MARK: 2 Functions
|
||||||
|
|
||||||
cleanupAndExit() { # $1 = exit code, $2 message, $3 level
|
cleanupAndExit() { # $1 = exit code, $2 message, $3 level
|
||||||
if [ -n "$dmgmount" ]; then
|
if [ -n "$dmgmount" ]; then
|
||||||
@@ -18,10 +18,8 @@ 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" REQ
|
printlog "################## End Installomator, exit code $1 \n\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
|
||||||
@@ -31,6 +29,17 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level
|
|||||||
exit "$1"
|
exit "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Two functions to trap the script
|
||||||
|
trap_with_arg() {
|
||||||
|
func="$1" ; shift
|
||||||
|
for sig ; do
|
||||||
|
trap "$func $sig" "$sig"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
func_trap() {
|
||||||
|
cleanupAndExit 255 "Installomator has been terminated with: $1" ERROR
|
||||||
|
}
|
||||||
|
|
||||||
runAsUser() {
|
runAsUser() {
|
||||||
if [[ $currentUser != "loginwindow" ]]; then
|
if [[ $currentUser != "loginwindow" ]]; then
|
||||||
uid=$(id -u "$currentUser")
|
uid=$(id -u "$currentUser")
|
||||||
@@ -99,7 +108,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
|
||||||
@@ -156,10 +165,10 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$archiveName" ]; then
|
if [ -n "$archiveName" ]; then
|
||||||
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
downloadURL=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||||
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
||||||
else
|
else
|
||||||
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
downloadURL=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||||
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
||||||
fi
|
fi
|
||||||
if [ -z "$downloadURL" ]; then
|
if [ -z "$downloadURL" ]; then
|
||||||
@@ -176,9 +185,9 @@ versionFromGit() {
|
|||||||
gitusername=${1?:"no git user name"}
|
gitusername=${1?:"no git user name"}
|
||||||
gitreponame=${2?:"no git repo name"}
|
gitreponame=${2?:"no git repo name"}
|
||||||
|
|
||||||
appNewVersion=$(curl -L --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" WARN
|
printlog "could not retrieve version number for $gitusername/$gitreponame"
|
||||||
appNewVersion=""
|
appNewVersion=""
|
||||||
else
|
else
|
||||||
echo "$appNewVersion"
|
echo "$appNewVersion"
|
||||||
@@ -222,34 +231,19 @@ getAppVersion() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# get app in targetDir, /Applications, or /Applications/Utilities
|
# get app in /Applications, or /Applications/Utilities, or find using Spotlight
|
||||||
if [[ -d "$targetDir/$appName" ]]; then
|
if [[ -d "/Applications/$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" WARN
|
printlog "No previous app found" DEBUG
|
||||||
else
|
else
|
||||||
printlog "App(s) found: ${applist}" INFO
|
printlog "App(s) found: ${applist}" DEBUG
|
||||||
fi
|
fi
|
||||||
# if [[ $type =~ '^(dmg|zip|tbz|app.*)$' ]]; then
|
|
||||||
# printlog "targetDir for installation: $targetDir" INFO
|
|
||||||
# fi
|
|
||||||
|
|
||||||
appPathArray=( ${(0)applist} )
|
appPathArray=( ${(0)applist} )
|
||||||
|
|
||||||
@@ -265,17 +259,17 @@ getAppVersion() {
|
|||||||
if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then
|
if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then
|
||||||
printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace."
|
printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace."
|
||||||
if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then
|
if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then
|
||||||
printlog "Replacing App Store apps, no matter the version" WARN
|
printlog "Replacing App Store apps, no matter the version"
|
||||||
appversion=0
|
appversion=0
|
||||||
else
|
else
|
||||||
cleanupAndExit 1 "App previously installed from App Store, and we respect that" ERROR
|
cleanupAndExit 1 "App previously installed from App Store, and we respect that" ERROR
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
printlog "could not determine location of $appName" WARN
|
printlog "could not determine location of $appName"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
printlog "could not find $appName" WARN
|
printlog "could not find $appName"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,7 +396,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." INFO
|
printlog "App not closed, so no reopen." DEBUG
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +406,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" ERROR
|
cleanupAndExit 8 "could not find: $appPath" DEBUG
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# verify with spctl
|
# verify with spctl
|
||||||
@@ -444,12 +438,10 @@ 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" REG
|
cleanupAndExit 0 "No new version to install" INFO
|
||||||
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
|
||||||
@@ -465,7 +457,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." ERROR
|
cleanupAndExit 6 "Installed macOS is too old for this app." INFO
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -486,7 +478,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
|
|||||||
|
|
||||||
# remove existing application
|
# remove existing application
|
||||||
if [ -e "$targetDir/$appName" ]; then
|
if [ -e "$targetDir/$appName" ]; then
|
||||||
printlog "Removing existing $targetDir/$appName" WARN
|
printlog "Removing existing $targetDir/$appName" DEBUG
|
||||||
deleteAppOut=$(rm -Rfv "$targetDir/$appName" 2>&1)
|
deleteAppOut=$(rm -Rfv "$targetDir/$appName" 2>&1)
|
||||||
tempName="$targetDir/$appName"
|
tempName="$targetDir/$appName"
|
||||||
tempNameLength=$((${#tempName} + 10))
|
tempNameLength=$((${#tempName} + 10))
|
||||||
@@ -497,21 +489,16 @@ installAppWithPath() { # $1: path to app to install in $targetDir
|
|||||||
|
|
||||||
# copy app to /Applications
|
# copy app to /Applications
|
||||||
printlog "Copy $appPath to $targetDir"
|
printlog "Copy $appPath to $targetDir"
|
||||||
copyAppOut=$(ditto -v "$appPath" "$targetDir/$appName" 2>&1)
|
if ! ditto "$appPath" "$targetDir/$appName"; then
|
||||||
copyAppStatus=$(echo $?)
|
cleanupAndExit 7 "Error while copying" ERROR
|
||||||
deduplicatelogs "$copyAppOut"
|
|
||||||
printlog "Debugging enabled, App copy output was:\n$logoutput" DEBUG
|
|
||||||
if [[ $copyAppStatus -ne 0 ]] ; then
|
|
||||||
#if ! ditto "$appPath" "$targetDir/$appName"; then
|
|
||||||
cleanupAndExit 7 "Error while copying:\n$logoutput" ERROR
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set ownership to current user
|
# set ownership to current user
|
||||||
if [[ "$currentUser" != "loginwindow" && $SYSTEMOWNER -ne 1 ]]; then
|
if [[ "$currentUser" != "loginwindow" && $SYSTEMOWNER -ne 1 ]]; then
|
||||||
printlog "Changing owner to $currentUser" WARN
|
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" WARN
|
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
|
||||||
|
|
||||||
@@ -541,7 +528,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
|
||||||
@@ -550,7 +537,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
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -567,7 +554,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
|
||||||
@@ -575,7 +562,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
|
||||||
@@ -609,7 +596,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" REQ
|
cleanupAndExit 0 "No new version to install" INFO
|
||||||
else
|
else
|
||||||
printlog "Using force to install anyway."
|
printlog "Using force to install anyway."
|
||||||
fi
|
fi
|
||||||
@@ -683,28 +670,27 @@ 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 [[ -s "$dmgmount/$pkgName" ]] ; then # was: $tmpDir
|
if ls "$tmpDir/$pkgName" ; then
|
||||||
archiveName="$dmgmount/$pkgName"
|
archiveName="$tmpDir/$pkgName"
|
||||||
else
|
else
|
||||||
# try searching for pkg
|
# try searching for pkg
|
||||||
findfiles=$(find "$dmgmount" -iname "$pkgName") # was: $tmpDir
|
findfiles=$(find "$tmpDir" -iname "$pkgName")
|
||||||
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 dmg $archiveName" ERROR
|
cleanupAndExit 20 "couldn't find pkg “$pkgName” in zip $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
|
||||||
@@ -719,7 +705,6 @@ 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
|
||||||
@@ -796,13 +781,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" ERROR
|
cleanupAndExit 77 "No Download URL Set, this is an update only application and the updater failed" WARN
|
||||||
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" WARN
|
printlog "couldn't find $updateTool, continuing normally"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
@@ -819,7 +804,7 @@ finishing() {
|
|||||||
message="Installed $name, version $appversion"
|
message="Installed $name, version $appversion"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printlog "$message" REQ
|
printlog "$message"
|
||||||
|
|
||||||
if [[ $currentUser != "loginwindow" && ( $NOTIFY == "success" || $NOTIFY == "all" ) ]]; then
|
if [[ $currentUser != "loginwindow" && ( $NOTIFY == "success" || $NOTIFY == "all" ) ]]; then
|
||||||
printlog "notifying"
|
printlog "notifying"
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ LOGO=appstore
|
|||||||
# - mosyleb Mosyle Business
|
# - mosyleb Mosyle Business
|
||||||
# - mosylem Mosyle Manager (Education)
|
# - mosylem Mosyle Manager (Education)
|
||||||
# - addigy Addigy
|
# - addigy Addigy
|
||||||
# - microsoft Microsoft Endpoint Manager (Intune)
|
|
||||||
# path can also be set in the command call, and if file exists, it will be used.
|
# path can also be set in the command call, and if file exists, it will be used.
|
||||||
# Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
|
# Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
|
||||||
# (spaces have to be escaped).
|
# (spaces have to be escaped).
|
||||||
@@ -238,7 +237,7 @@ IGNORE_DND_APPS=""
|
|||||||
# - updateToolArguments:
|
# - updateToolArguments:
|
||||||
# When Installomator detects an existing installation of the application,
|
# When Installomator detects an existing installation of the application,
|
||||||
# and the updateTool variable is set
|
# and the updateTool variable is set
|
||||||
# $updateTool $updateArguments
|
# $updateTool $updateArguments
|
||||||
# Will be run instead of of downloading and installing a complete new version.
|
# Will be run instead of of downloading and installing a complete new version.
|
||||||
# Use this when the updateTool does differential and optimized downloads.
|
# Use this when the updateTool does differential and optimized downloads.
|
||||||
# e.g. msupdate on various Microsoft labels
|
# e.g. msupdate on various Microsoft labels
|
||||||
@@ -253,7 +252,7 @@ IGNORE_DND_APPS=""
|
|||||||
# We need to define `name` for the installed app (to be version checked), as well as
|
# We need to define `name` for the installed app (to be version checked), as well as
|
||||||
# `installerTool` for the installer app (if named differently than `name`. Installomator
|
# `installerTool` for the installer app (if named differently than `name`. Installomator
|
||||||
# will add the path to the folder/disk image with the binary, and it will be called like this:
|
# will add the path to the folder/disk image with the binary, and it will be called like this:
|
||||||
# $CLIInstaller $CLIArguments
|
`$CLIInstaller $CLIArguments`
|
||||||
# For most installations `CLIInstaller` should contain the `installerTool` for the CLI call
|
# For most installations `CLIInstaller` should contain the `installerTool` for the CLI call
|
||||||
# (if it’s the same).
|
# (if it’s the same).
|
||||||
# We can support a whole range of other software titles by implementing this.
|
# We can support a whole range of other software titles by implementing this.
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
1password8)
|
|
||||||
name="1Password 8"
|
|
||||||
appName="1Password.app"
|
|
||||||
type="zip"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
archiveName="1Password-latest-aarch64.zip"
|
|
||||||
downloadURL="https://downloads.1password.com/mac/1Password-latest-aarch64.zip"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
archiveName="1Password-latest-x86_64.zip"
|
|
||||||
downloadURL="https://downloads.1password.com/mac/1Password-latest-x86_64.zip"
|
|
||||||
fi
|
|
||||||
expectedTeamID="2BUA8C4S2C"
|
|
||||||
blockingProcesses=( "1Password Extension Helper" "1Password 7" "1Password" "1Password (Safari)" "1PasswordNativeMessageHost" "1PasswordSafariAppExtension" )
|
|
||||||
#forcefulQuit=YES
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
1passwordcli)
|
|
||||||
name="1Password CLI"
|
|
||||||
type="pkg"
|
|
||||||
#packageID="com.1password.op"
|
|
||||||
downloadURL=$(curl -fs https://app-updates.agilebits.com/product_history/CLI | grep -m 1 -i op_apple_universal | cut -d'"' -f 2)
|
|
||||||
appNewVersion=$(echo $downloadURL | sed -E 's/.*\/[a-zA-Z_]*([0-9.]*)\..*/\1/g')
|
|
||||||
appCustomVersion(){ /usr/local/bin/op -v }
|
|
||||||
expectedTeamID="2BUA8C4S2C"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
adobereaderdc-update)
|
adobereaderdc-update)
|
||||||
name="Adobe Acrobat Reader DC"
|
name="Adobe Acrobat Reader DC"
|
||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg)
|
downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo http://ardownload.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDCUpd"$adobecurrent"_MUI.dmg)
|
||||||
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
||||||
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
||||||
expectedTeamID="JQ525L2MZD"
|
expectedTeamID="JQ525L2MZD"
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ adobereaderdc-install)
|
|||||||
name="Adobe Acrobat Reader DC"
|
name="Adobe Acrobat Reader DC"
|
||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
packageID="com.adobe.acrobat.DC.reader.app.pkg.MUI"
|
packageID="com.adobe.acrobat.DC.reader.app.pkg.MUI"
|
||||||
#downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4)
|
downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4)
|
||||||
downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg)
|
|
||||||
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
||||||
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
||||||
expectedTeamID="JQ525L2MZD"
|
expectedTeamID="JQ525L2MZD"
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
amazoncorretto8jdk)
|
|
||||||
name="Amazon Corretto 8 JDK"
|
|
||||||
type="pkg"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-aarch64-macos-jdk.pkg"
|
|
||||||
appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}')
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg"
|
|
||||||
appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}')
|
|
||||||
fi
|
|
||||||
expectedTeamID="94KV3E626L"
|
|
||||||
;;
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
androidstudio)
|
|
||||||
name="Android Studio"
|
|
||||||
type="dmg"
|
|
||||||
if [[ $(arch) == arm64 ]]; then
|
|
||||||
downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i arm.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1)
|
|
||||||
appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' )
|
|
||||||
elif [[ $(arch) == i386 ]]; then
|
|
||||||
downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i mac.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1)
|
|
||||||
appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' )
|
|
||||||
fi
|
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
|
||||||
blockingProcesses=( androidstudio )
|
|
||||||
;;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
appcleaner)
|
appcleaner)
|
||||||
|
# credit: Tadayuki Onishi (@kenchan0130)
|
||||||
name="AppCleaner"
|
name="AppCleaner"
|
||||||
type="zip"
|
type="zip"
|
||||||
downloadURL=$(curl -fs https://freemacsoft.net/appcleaner/Updates.xml | xpath '//rss/channel/item[last()]/enclosure/@url' 2>/dev/null | tr " " "\n" | sort | tail -1 | cut -d '"' -f 2)
|
downloadURL=$(curl -fs https://freemacsoft.net/appcleaner/Updates.xml | xpath '//rss/channel/*/enclosure/@url' 2>/dev/null | tr " " "\n" | sort | tail -1 | cut -d '"' -f 2)
|
||||||
appNewVersion=$(curl -fsL "https://freemacsoft.net/appcleaner/Updates.xml" | xpath '//rss/channel/item[last()]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2)
|
|
||||||
expectedTeamID="X85ZX835W9"
|
expectedTeamID="X85ZX835W9"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
atextlegacy)
|
|
||||||
# credit: Gabe Marchan (gabemarchan.com - @darklink87)
|
|
||||||
name="aText"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://trankynam.com/atext/downloads/aTextLegacy.dmg"
|
|
||||||
expectedTeamID="KHEMQ2FD9E"
|
|
||||||
;;
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
autodeskfusion360admininstall)
|
|
||||||
name="Autodesk Fusion 360 Admin Install"
|
|
||||||
type="pkg"
|
|
||||||
packageID="com.autodesk.edu.fusion360"
|
|
||||||
downloadURL="https://dl.appstreaming.autodesk.com/production/installers/Autodesk%20Fusion%20360%20Admin%20Install.pkg"
|
|
||||||
appNewVersion=$(curl -fs "https://dl.appstreaming.autodesk.com/production/97e6dd95735340d6ad6e222a520454db/73e72ada57b7480280f7a6f4a289729f/full.json" | sed -E 's/.*build-version":"([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+).*/\1/g')
|
|
||||||
expectedTeamID="XXKJ396S2Y"
|
|
||||||
appName="Autodesk Fusion 360.app"
|
|
||||||
blockingProcesses=( "Autodesk Fusion 360" "Fusion 360" )
|
|
||||||
;;
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
axurerp10)
|
|
||||||
name="Axure RP 10"
|
|
||||||
type="dmg"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
downloadURL="https://d3uii9pxdigrx1.cloudfront.net/AxureRP-Setup-arm64.dmg"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://d3uii9pxdigrx1.cloudfront.net/AxureRP-Setup.dmg"
|
|
||||||
fi
|
|
||||||
appNewVersion=$( curl -sL https://www.axure.com/release-history | grep -Eo '[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}' -m 1 )
|
|
||||||
expectedTeamID="HUMW6UU796"
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
appName="Axure RP 10.app"
|
|
||||||
blockingProcesses=( "Axure RP 10" )
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
calcservice)
|
|
||||||
name="CalcService"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" "https://www.devontechnologies.com/support/download" | tr '"' "\n" | grep -o "http.*download.*.zip" | grep -i calcservice | head -1)"
|
|
||||||
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
|
|
||||||
expectedTeamID="679S2QUWR8"
|
|
||||||
;;
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
camtasia|\
|
camtasia)
|
||||||
camtasia2021)
|
name="Camtasia 2020"
|
||||||
name="Camtasia 2021"
|
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2021" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
downloadURL=https://download.techsmith.com/camtasiamac/releases/Camtasia.dmg
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2021" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
expectedTeamID="7TQL462TU8"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
camtasia2019)
|
|
||||||
name="Camtasia 2019"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2019" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
camtasia2020)
|
|
||||||
name="Camtasia 2020"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2020" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
|
||||||
;;
|
|
||||||
@@ -3,6 +3,6 @@ citrixworkspace)
|
|||||||
name="Citrix Workspace"
|
name="Citrix Workspace"
|
||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
downloadURL="https:"$(curl -s -L "https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html#ctx-dl-eula-external" | grep "dmg?" | sed "s/.*rel=.\(.*\)..id=.*/\1/") # http://downloads.citrix.com/18823/CitrixWorkspaceApp.dmg?__gda__=1605791892_edc6786a90eb5197fb226861a8e27aa8
|
downloadURL="https:"$(curl -s -L "https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html#ctx-dl-eula-external" | grep "dmg?" | sed "s/.*rel=.\(.*\)..id=.*/\1/") # http://downloads.citrix.com/18823/CitrixWorkspaceApp.dmg?__gda__=1605791892_edc6786a90eb5197fb226861a8e27aa8
|
||||||
appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "<p>Version" | head -1 | awk '{print $2}' | cut -d "." -f 1-3)
|
appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "<p>Version" | head -1 | cut -d " " -f1 | cut -d ";" -f2 | cut -d "." -f 1-3)
|
||||||
expectedTeamID="S272Y5R93J"
|
expectedTeamID="S272Y5R93J"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
clipy)
|
|
||||||
name="Clipy"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(downloadURLFromGit Clipy Clipy)
|
|
||||||
appNewVersion=$(versionFromGit Clipy Clipy)
|
|
||||||
expectedTeamID="BBCHAJ584H"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
clue)
|
|
||||||
#For personal use and students
|
|
||||||
name="Clue"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -fsL https://clue.no/en/download | grep "For personal use and students:" | sed 's/.*href="//' | sed 's/".*//')
|
|
||||||
appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\..*/\1/g')"
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="3NX6B9TB2F"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
cluefull)
|
|
||||||
#For companies and schools
|
|
||||||
name="Clue"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -fsL https://clue.no/en/download | grep "For companies and schools:" | sed 's/.*href="//' | sed 's/".*//')
|
|
||||||
appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\F.*/\1/g')"
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="3NX6B9TB2F"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
craftmanagerforsketch)
|
|
||||||
name="CraftManager"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip"
|
|
||||||
appNewVersion=$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
expectedTeamID="VRXQSNCL5W"
|
|
||||||
;;
|
|
||||||
@@ -1,13 +1,7 @@
|
|||||||
dbeaverce)
|
dbeaverce)
|
||||||
name="DBeaver"
|
name="DBeaver"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos.dmg"
|
||||||
downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos-aarch64.dmg"
|
|
||||||
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' | head -1)"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos.dmg"
|
|
||||||
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' | head -1)"
|
|
||||||
fi
|
|
||||||
expectedTeamID="42B6MDKMW8"
|
expectedTeamID="42B6MDKMW8"
|
||||||
blockingProcesses=( dbeaver )
|
blockingProcesses=( dbeaver )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
dialog|\
|
dialog)
|
||||||
swiftdialog)
|
|
||||||
name="Dialog"
|
name="Dialog"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
packageID="au.csiro.dialogcli"
|
packageID="au.csiro.dialogcli"
|
||||||
downloadURL="$(downloadURLFromGit bartreardon swiftDialog)"
|
downloadURL="$(downloadURLFromGit bartreardon Dialog)"
|
||||||
appNewVersion="$(versionFromGit bartreardon swiftDialog)"
|
appNewVersion="$(versionFromGit bartreardon Dialog)"
|
||||||
expectedTeamID="PWA5E9TQ59"
|
expectedTeamID="PWA5E9TQ59"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
displaylinkmanager)
|
|
||||||
name="DisplayLink Manager"
|
|
||||||
type="pkg"
|
|
||||||
#packageID="com.displaylink.displaylinkmanagerapp"
|
|
||||||
downloadURL=https://www.synaptics.com$(redirect=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep 'class="download-link">Download' | head -n 1 | sed 's/.*href="//' | sed 's/".*//') && curl -sfL "https://www.synaptics.com$redirect" | grep Accept | head -n 1 | sed 's/.*href="//' | sed 's/".*//')
|
|
||||||
appNewVersion=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep "Release:" | head -n 1 | cut -d ' ' -f2)
|
|
||||||
expectedTeamID="73YQY62QM3"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
dockutil)
|
|
||||||
name="dockutil"
|
|
||||||
type="pkg"
|
|
||||||
packageID="dockutil.cli.tool"
|
|
||||||
downloadURL=$(downloadURLFromGit "kcrawford" "dockutil")
|
|
||||||
appNewVersion=$(versionFromGit "kcrawford" "dockutil")
|
|
||||||
expectedTeamID="Z5J8CJBUWC"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
drawio)
|
|
||||||
name="draw.io"
|
|
||||||
type="dmg"
|
|
||||||
archiveName="draw.io-universal-[0-9.]*.dmg"
|
|
||||||
downloadURL="$(downloadURLFromGit jgraph drawio-desktop)"
|
|
||||||
appNewVersion="$(versionFromGit jgraph drawio-desktop)"
|
|
||||||
expectedTeamID="UZEUFB4N53"
|
|
||||||
blockingProcesses=( draw.io )
|
|
||||||
;;
|
|
||||||
@@ -2,6 +2,5 @@ dropbox)
|
|||||||
name="Dropbox"
|
name="Dropbox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL="https://www.dropbox.com/download?plat=mac&full=1"
|
downloadURL="https://www.dropbox.com/download?plat=mac&full=1"
|
||||||
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | sed -E 's/.*%20([0-9.]*)\.dmg/\1/g')
|
|
||||||
expectedTeamID="G7HH3F8CAK"
|
expectedTeamID="G7HH3F8CAK"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
duckduckgo)
|
|
||||||
name="DuckDuckGo"
|
|
||||||
type="dmg"
|
|
||||||
#downloadURL="https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo.dmg"
|
|
||||||
#downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[last()]' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
#appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:version)[last()]' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/sparkle:shortVersionString)[1]' 2>/dev/null | cut -d ">" -f2 | cut -d "<" -f1)
|
|
||||||
expectedTeamID="HKE973VLUW"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
easyfind)
|
|
||||||
name="EasyFind"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="$(curl -fs "https://www.devontechnologies.com/apps/freeware" | grep -o "http.*download.*.zip" | grep -i easyfind)"
|
|
||||||
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
|
|
||||||
expectedTeamID="679S2QUWR8"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
egnytewebedit)
|
|
||||||
name="EgnyteWebEdit"
|
|
||||||
type="pkg"
|
|
||||||
downloadURL="https://egnyte-cdn.egnyte.com/webedit/mac/en-us/latest/EgnyteWebEdit.pkg"
|
|
||||||
expectedTeamID="FELUD555VC"
|
|
||||||
appName="Egnyte WebEdit.app"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
filezilla)
|
|
||||||
name="FileZilla"
|
|
||||||
type="tbz"
|
|
||||||
packageID="org.filezilla-project.filezilla"
|
|
||||||
downloadURL=$(curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '"' '{print $2}' )
|
|
||||||
appNewVersion=$( curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '_' '{print $2}' )
|
|
||||||
expectedTeamID="5VPGKXL75N"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -5,5 +5,4 @@ firefox)
|
|||||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -5,5 +5,4 @@ firefox_da)
|
|||||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox, firefox_da and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,26 +1,23 @@
|
|||||||
firefox_intl)
|
firefox_intl)
|
||||||
# This label will try to figure out the selected language of the user,
|
# This label will try to figure out the selected language of the user,
|
||||||
# and install corrosponding version of Firefox
|
# and install corrosponding version of Firefox
|
||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale | tr '_' '-')
|
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale)
|
||||||
printlog "Found language $userLanguage to be used for $name."
|
printlog "Found language $userLanguage to be used for Firefox."
|
||||||
releaseURL="https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt"
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep -o "=$userLanguage"; then
|
||||||
until curl -fs $releaseURL | grep -q "=$userLanguage"; do
|
userLanguage=$(echo $userLanguage | cut -c 1-2)
|
||||||
if [ ${#userLanguage} -eq 2 ]; then
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep "=$userLanguage"; then
|
||||||
break
|
userLanguage="en_US"
|
||||||
fi
|
fi
|
||||||
printlog "No locale matching '$userLanguage', trying '${userLanguage:0:2}'"
|
|
||||||
userLanguage=${userLanguage:0:2}
|
|
||||||
done
|
|
||||||
printlog "Using language '$userLanguage' for download."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx&lang=$userLanguage"
|
|
||||||
if ! curl -sfL --output /dev/null -r 0-0 $downloadURL; then
|
|
||||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx"
|
|
||||||
fi
|
fi
|
||||||
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}')
|
printlog "Using language $userLanguage for download."
|
||||||
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=$userLanguage"
|
||||||
|
if ! curl -sfL --output /dev/null -r 0-0 "$downloadURL" ; then
|
||||||
|
printlog "Download not found for that language. Using en-US"
|
||||||
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
||||||
|
fi
|
||||||
|
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
firefoxesr_intl)
|
firefoxesr_intl)
|
||||||
# This label will try to figure out the selected language of the user,
|
# This label will try to figure out the selected language of the user,
|
||||||
# and install corrosponding version of Firefox ESR
|
# and install corrosponding version of Firefox ESR
|
||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale | tr '_' '-')
|
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale)
|
||||||
printlog "Found language $userLanguage to be used for $name."
|
printlog "Found language $userLanguage to be used for Firefox."
|
||||||
releaseURL="https://ftp.mozilla.org/pub/firefox/releases/latest-esr/README.txt"
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest-esr/README.txt" | grep -o "=$userLanguage"; then
|
||||||
until curl -fs $releaseURL | grep -q "=$userLanguage"; do
|
userLanguage=$(echo $userLanguage | cut -c 1-2)
|
||||||
if [ ${#userLanguage} -eq 2 ]; then
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest-esr/README.txt" | grep "=$userLanguage"; then
|
||||||
break
|
userLanguage="en_US"
|
||||||
fi
|
fi
|
||||||
printlog "No locale matching '$userLanguage', trying '${userLanguage:0:2}'"
|
|
||||||
userLanguage=${userLanguage:0:2}
|
|
||||||
done
|
|
||||||
printlog "Using language '$userLanguage' for download."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx&lang=$userLanguage"
|
|
||||||
if ! curl -sfL --output /dev/null -r 0-0 $downloadURL; then
|
|
||||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx"
|
|
||||||
fi
|
fi
|
||||||
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"esr/"); print a[1]}')
|
printlog "Using language $userLanguage for download."
|
||||||
|
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx&lang=$userLanguage"
|
||||||
|
# https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx&lang=en-US
|
||||||
|
if ! curl -sfL --output /dev/null -r 0-0 "$downloadURL" ; then
|
||||||
|
printlog "Download not found for that language. Using en-US"
|
||||||
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
||||||
|
fi
|
||||||
|
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*releases\/([0-9.]*)esr.*/\1/g')
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ firefoxpkg)
|
|||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
||||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
firefoxpkg_intl)
|
|
||||||
# This label will try to figure out the selected language of the user,
|
|
||||||
# and install corrosponding version of Firefox ESR
|
|
||||||
name="Firefox"
|
|
||||||
type="pkg"
|
|
||||||
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale)
|
|
||||||
printlog "Found language $userLanguage to be used for Firefox." WARN
|
|
||||||
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep -o "=$userLanguage"; then
|
|
||||||
userLanguage=$(echo $userLanguage | cut -c 1-2)
|
|
||||||
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep "=$userLanguage"; then
|
|
||||||
userLanguage="en_US"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
printlog "Using language $userLanguage for download." WARN
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=$userLanguage"
|
|
||||||
# https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US
|
|
||||||
if ! curl -sfL --output /dev/null -r 0-0 "$downloadURL" ; then
|
|
||||||
printlog "Download not found for that language. Using en-US" WARN
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
|
||||||
fi
|
|
||||||
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i location | cut -d "/" -f7)
|
|
||||||
expectedTeamID="43AQ936H96"
|
|
||||||
blockingProcesses=( firefox )
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
flycut)
|
|
||||||
name="Flycut"
|
|
||||||
type="zip"
|
|
||||||
archiveName="Flycut.[0-9.]*.zip"
|
|
||||||
downloadURL="$(downloadURLFromGit TermiT Flycut)"
|
|
||||||
appNewVersion=$(versionFromGit TermiT Flycut )
|
|
||||||
expectedTeamID="S8JLSG5ES7"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
fontexplorer)
|
|
||||||
name="FontExplorer X Pro"
|
|
||||||
type="dmg"
|
|
||||||
packageID="com.linotype.FontExplorerX"
|
|
||||||
downloadURL="http://www.fontexplorerx.com/download/free-trial/Mac/"
|
|
||||||
appNewVersion=$( curl -fsL http://fex.linotype.com/update/client/mac/pro/version.plist | grep string | tail -n 1 | sed 's/[^0-9.]//g' )
|
|
||||||
expectedTeamID="2V7G2B7WG4"
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,8 +1,14 @@
|
|||||||
googlechrome)
|
googlechrome)
|
||||||
name="Google Chrome"
|
name="Google Chrome"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg"
|
if [[ $(arch) != "i386" ]]; then
|
||||||
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
printlog "Architecture: arm64 (not i386)"
|
||||||
|
downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg"
|
||||||
|
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
||||||
|
else
|
||||||
|
printlog "Architecture: i386"
|
||||||
|
downloadURL="https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg"
|
||||||
|
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac,stable/{print $3; exit}')
|
||||||
|
fi
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
expectedTeamID="EQHXZ8M8AV"
|
||||||
printlog "WARNING for ERROR: Label googlechrome should not be used. Instead use googlechromepkg as per recommendations from Google. It's not fully certain that the app actually gets updated here. googlechromepkg will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ googlechromepkg)
|
|||||||
# https://support.google.com/chrome/a/answer/9915669
|
# https://support.google.com/chrome/a/answer/9915669
|
||||||
#
|
#
|
||||||
downloadURL="https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg"
|
downloadURL="https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg"
|
||||||
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
expectedTeamID="EQHXZ8M8AV"
|
||||||
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
|
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
|
||||||
updateToolArguments=( -runMode oneshot -userInitiated YES )
|
updateToolArguments=( -runMode oneshot -userInitiated YES )
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ gpgsuite)
|
|||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
pkgName="Install.pkg"
|
pkgName="Install.pkg"
|
||||||
downloadURL=$(curl -s https://gpgtools.org/ | grep https://releases.gpgtools.org/GPG_Suite- | grep Download | cut -d'"' -f4)
|
downloadURL=$(curl -s https://gpgtools.org/ | grep https://releases.gpgtools.org/GPG_Suite- | grep Download | cut -d'"' -f4)
|
||||||
appNewVersion=$(echo $downloadURL | cut -d "-" -f 2 | cut -d "." -f 1-2)
|
|
||||||
expectedTeamID="PKV8ZPD836"
|
expectedTeamID="PKV8ZPD836"
|
||||||
blockingProcesses=( "GPG Keychain" )
|
blockingProcesses=( "GPG Keychain" )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
grammarly)
|
|
||||||
name="Grammarly Desktop"
|
|
||||||
type="dmg"
|
|
||||||
packageID="com.grammarly.ProjectLlama"
|
|
||||||
downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
|
|
||||||
expectedTeamID="W8F64X92K3"
|
|
||||||
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
|
|
||||||
# appName="Grammarly Installer.app"
|
|
||||||
installerTool="Grammarly Installer.app"
|
|
||||||
CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
houdahspot)
|
|
||||||
name="HoudahSpot"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="$(curl -fs https://www.houdah.com/houdahSpot/updates/cast6.php | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
|
|
||||||
appNewVersion="$(curl -fs https://www.houdah.com/houdahSpot/updates/cast6.php | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
|
|
||||||
expectedTeamID="DKGQD8H8ZY"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
hype)
|
|
||||||
name="Hype4"
|
|
||||||
type="dmg"
|
|
||||||
packageID="com.tumult.Hype4"
|
|
||||||
downloadURL="https://static.tumult.com/hype/download/Hype.dmg"
|
|
||||||
appNewVersion=$( curl -fsL https://tumult.com/hype/download/all/ | grep Ongoing | awk -F '<' '{print $4}' | sed 's/[^0-9.]//g' )
|
|
||||||
expectedTeamID="8J356DM772"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
idrive)
|
|
||||||
name="IDrive"
|
|
||||||
type="pkgInDmg"
|
|
||||||
pkgName="IDrive.pkg"
|
|
||||||
downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*(https.*dmg).*/\1/g')
|
|
||||||
appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*mac_vernum\=\"Version\ ([0-9.]*).*/\1/g')
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="JWDCNYZ922"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
idrivethin)
|
|
||||||
name="IDrive"
|
|
||||||
type="pkgInDmg"
|
|
||||||
pkgName="IDriveThin.pkg"
|
|
||||||
downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thinclient-mac([^;]*).*/\1/g' | sed -E 's/.*(https.*dmg).*/\1/g')
|
|
||||||
appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thin\_mac\_ver\=\"Version\ ([0-9.]*).*/\1/g')
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="JWDCNYZ922"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
imageoptim)
|
|
||||||
name="imageoptim"
|
|
||||||
type="tbz"
|
|
||||||
packageID="net.pornel.ImageOptim"
|
|
||||||
downloadURL="https://imageoptim.com/ImageOptim.tbz2"
|
|
||||||
appNewVersion=$( curl -fsL https://imageoptim.com/appcast.xml | grep "title" | tail -n 1 | sed 's/[^0-9.]//g' )
|
|
||||||
expectedTeamID="59KZTZA4XR"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
linear)
|
|
||||||
name="Linear"
|
|
||||||
type="dmg"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
downloadURL="https://desktop.linear.app/mac/dmg/arm64"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://desktop.linear.app/mac/dmg"
|
|
||||||
fi
|
|
||||||
appNewVersion=$(curl -sIkL $downloadURL | sed -r '/filename=/!d;s/.*filename=(.*)$/\1/' | awk '{print $2}')
|
|
||||||
expectedTeamID="7VZ2S3V9RV"
|
|
||||||
versionKey="CFBundleShortVersionString"
|
|
||||||
appName="Linear.app"
|
|
||||||
blockingProcesses=( "Linear" )
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
logioptions|\
|
|
||||||
logitechoptions)
|
logitechoptions)
|
||||||
name="Logi Options"
|
name="Logitech Options"
|
||||||
type="pkgInZip"
|
type="pkgInZip"
|
||||||
#downloadURL=$(curl -fs "https://support.logi.com/api/v2/help_center/en-us/articles.json?label_names=webcontent=productdownload,webos=mac-macos-x-11.0" | tr "," "\n" | grep -A 10 "macOS" | grep -oie "https.*/.*/options/.*\.zip" | head -1)
|
#downloadURL=$(curl -fs "https://support.logi.com/api/v2/help_center/en-us/articles.json?label_names=webcontent=productdownload,webos=mac-macos-x-11.0" | tr "," "\n" | grep -A 10 "macOS" | grep -oie "https.*/.*/options/.*\.zip" | head -1)
|
||||||
downloadURL="https://download01.logi.com/web/ftp/pub/techsupport/options/options_installer.zip"
|
downloadURL="https://download01.logi.com/web/ftp/pub/techsupport/options/options_installer.zip"
|
||||||
|
|||||||
@@ -2,11 +2,7 @@ loom)
|
|||||||
# credit: Lance Stephens (@pythoninthegrass on MacAdmins Slack)
|
# credit: Lance Stephens (@pythoninthegrass on MacAdmins Slack)
|
||||||
name="Loom"
|
name="Loom"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
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/ && /dmg/ {print $3}' | head -1)
|
||||||
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"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
macadminspython)
|
|
||||||
name="MacAdmins Python"
|
|
||||||
type="pkg"
|
|
||||||
packageID="org.macadmins.python.recommended"
|
|
||||||
downloadURL=$(curl --silent --fail "https://api.github.com/repos/macadmins/python/releases/latest" | awk -F '"' "/browser_download_url/ && /python_recommended_signed/ { print \$4; exit }")
|
|
||||||
appNewVersion=$(grep -o -E '\d+\.\d+\.\d+\.\d+' <<< $downloadURL | head -n 1)
|
|
||||||
expectedTeamID="9GQZ7KUFR6"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
macoslaps)
|
|
||||||
name="macOSLAPS"
|
|
||||||
type="pkg"
|
|
||||||
packageID="edu.psu.macOSLAPS"
|
|
||||||
downloadURL="$(downloadURLFromGit joshua-d-miller macOSLAPS)"
|
|
||||||
appNewVersion="$(versionFromGit joshua-d-miller macOSLAPS)"
|
|
||||||
expectedTeamID="9UYK4F9BSM"
|
|
||||||
;;
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
microsoftazuredatastudio|\
|
|
||||||
azuredatastudio)
|
|
||||||
name="Azure Data Studio"
|
|
||||||
type="zip"
|
|
||||||
downloadURL=$( curl -sL https://github.com/microsoft/azuredatastudio/releases/latest | grep 'macOS ZIP' | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" )
|
|
||||||
appNewVersion=$(versionFromGit microsoft azuredatastudio )
|
|
||||||
expectedTeamID="UBF8T346G9"
|
|
||||||
appName="Azure Data Studio.app"
|
|
||||||
blockingProcesses=( "Azure Data Studio" )
|
|
||||||
;;
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
microsoftdefender|\
|
|
||||||
microsoftdefenderatp)
|
microsoftdefenderatp)
|
||||||
name="Microsoft Defender"
|
name="Microsoft Defender ATP"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
downloadURL="https://go.microsoft.com/fwlink/?linkid=2097502"
|
downloadURL="https://go.microsoft.com/fwlink/?linkid=2097502"
|
||||||
appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.defender.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')
|
appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.defender.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
mindmanager)
|
|
||||||
name="MindManager"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://www.mindmanager.com/mm-mac-dmg"
|
|
||||||
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*_Mac_*([0-9.]*)\..*/\1/g')"
|
|
||||||
expectedTeamID="ZF6ZZ779N5"
|
|
||||||
;;
|
|
||||||
@@ -1,11 +1,6 @@
|
|||||||
onlyofficedesktop)
|
onlyofficedesktop)
|
||||||
name="ONLYOFFICE"
|
name="ONLYOFFICE"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/distrib/onlyoffice/ONLYOFFICE.dmg"
|
||||||
downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/arm/distrib/ONLYOFFICE.dmg"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/x86_64/distrib/ONLYOFFICE.dmg"
|
|
||||||
fi
|
|
||||||
appNewVersion=$(versionFromGit ONLYOFFICE DesktopEditors)
|
|
||||||
expectedTeamID="2WH24U26GJ"
|
expectedTeamID="2WH24U26GJ"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
pika)
|
|
||||||
name="Pika"
|
|
||||||
type="dmg"
|
|
||||||
packageID="com.superhighfives.Pika"
|
|
||||||
downloadURL=$(downloadURLFromGit "superhighfives" "pika")
|
|
||||||
appNewVersion=$(versionFromGit "superhighfives" "pika")
|
|
||||||
expectedTeamID="TGHU37N6EX"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,12 +1,8 @@
|
|||||||
postman)
|
postman)
|
||||||
|
# credit: Mischa van der Bent
|
||||||
name="Postman"
|
name="Postman"
|
||||||
type="zip"
|
type="zip"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
downloadURL="https://dl.pstmn.io/download/latest/osx"
|
||||||
downloadURL="https://dl.pstmn.io/download/latest/osx_arm64"
|
appNewVersion=$(curl -Ifs https://dl.pstmn.io/download/latest/osx | grep "content-disposition:" | sed -n -e 's/^.*Postman-osx-//p' | sed 's/\.zip//' | sed $'s/[^[:print:]\t]//g' )
|
||||||
appNewVersion=$(curl -fsL --head "${downloadURL}" | grep "content-disposition:" | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://dl.pstmn.io/download/latest/osx_64"
|
|
||||||
appNewVersion=$(curl -fsL --head "${downloadURL}" | grep "content-disposition:" | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/')
|
|
||||||
fi
|
|
||||||
expectedTeamID="H7H8Q7M5CK"
|
expectedTeamID="H7H8Q7M5CK"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
propresenter7)
|
|
||||||
name="ProPresenter 7"
|
|
||||||
appName="ProPresenter.app"
|
|
||||||
type="zip"
|
|
||||||
blockingProcesses="ProPresenter"
|
|
||||||
downloadURL=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"downloadUrl":.*?[^\]",' | head -n 1 | cut -d \" -f 4 | sed -e 's/\\//g')
|
|
||||||
appNewVersion=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"version":.*?[^\]",' | head -n 1 | cut -d \" -f 4)
|
|
||||||
expectedTeamID="97GAAZ6CPX"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
qgis-pr)
|
|
||||||
name="QGIS"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://download.qgis.org/downloads/macos/qgis-macos-pr.dmg"
|
|
||||||
appNewVersion="$(curl -fs "https://www.qgis.org/da/_static/documentation_options.js" | grep -i version | cut -d "'" -f2)"
|
|
||||||
expectedTeamID="4F7N4UDA22"
|
|
||||||
;;
|
|
||||||
@@ -1,13 +1,8 @@
|
|||||||
rancherdesktop)
|
rancherdesktop)
|
||||||
name="Rancher Desktop"
|
name="Rancher.Desktop-1.0.0-mac"
|
||||||
type="zip"
|
type="zip"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
archiveName="Rancher.Desktop-[0-9.]*-mac.zip"
|
||||||
archiveName="Rancher.Desktop-[0-9.]*-mac.aarch64.zip"
|
downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)"
|
||||||
downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
archiveName="Rancher.Desktop-[0-9.]*-mac.x86_64.zip"
|
|
||||||
downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)"
|
|
||||||
fi
|
|
||||||
appNewVersion="$(versionFromGit rancher-sandbox rancher-desktop)"
|
appNewVersion="$(versionFromGit rancher-sandbox rancher-desktop)"
|
||||||
expectedTeamID="2Q6FHJR3H3"
|
expectedTeamID="2Q6FHJR3H3"
|
||||||
appName="Rancher Desktop.app"
|
appName="Rancher Desktop.app"
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
remotedesktopmanagerenterprise)
|
remotedesktopmanagerenterprise)
|
||||||
name="Remote Desktop Manager"
|
name="Remote Desktop Manager"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL=$(curl -fs https://devolutions.net/remote-desktop-manager/home/thankyou/rdmmacbin | grep -oe "http.*\.dmg" | head -1)
|
downloadURL=$(curl -fs https://remotedesktopmanager.com/home/thankyou/rdmmacbin | grep -oe "http.*\.dmg" | head -1)
|
||||||
appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g')
|
appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g')
|
||||||
expectedTeamID="N592S9ASDB"
|
expectedTeamID="N592S9ASDB"
|
||||||
blockingProcesses=( "$name" )
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
remotedesktopmanagerfree)
|
remotedesktopmanagerfree)
|
||||||
name="Remote Desktop Manager Free"
|
name="Remote Desktop Manager Free"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL=$(curl -fs https://devolutions.net/remote-desktop-manager/home/thankyou/rdmmacfreebin | grep -oe "http.*\.dmg" | head -1)
|
downloadURL=$(curl -fs https://remotedesktopmanager.com/home/thankyou/rdmmacfreebin | grep -oe "http.*\.dmg" | head -1)
|
||||||
appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g')
|
appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g')
|
||||||
expectedTeamID="N592S9ASDB"
|
expectedTeamID="N592S9ASDB"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
ringcentralapp)
|
ringcentralapp)
|
||||||
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
||||||
name="Ringcentral"
|
name="Glip"
|
||||||
type="pkg"
|
type="dmg"
|
||||||
if [[ $(arch) != "i386" ]]; then
|
downloadURL="https://downloads.ringcentral.com/glip/rc/GlipForMac"
|
||||||
downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg"
|
|
||||||
else
|
|
||||||
downloadURL="https://app.ringcentral.com/download/RingCentral.pkg"
|
|
||||||
fi
|
|
||||||
expectedTeamID="M932RC5J66"
|
expectedTeamID="M932RC5J66"
|
||||||
blockingProcesses=( "Ringcentral" )
|
blockingProcesses=( "Glip" )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
shottr)
|
|
||||||
name="Shottr"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://shottr.cc/dl/Shottr-1.5.3.dmg"
|
|
||||||
appNewVersion=$( echo ${downloadURL} | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' )
|
|
||||||
expectedTeamID="2Y683PRQWN"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
sketch)
|
sketch)
|
||||||
name="Sketch"
|
name="Sketch"
|
||||||
type="zip"
|
type="zip"
|
||||||
downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | tr '"' "\n" | grep -E "https.*.zip")
|
downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | sed -E 's/.*href=\"(.*)\".?/\1/g')
|
||||||
appNewVersion=$(curl -fs https://www.sketch.com/updates/ | grep "Sketch Version" | head -1 | sed -E 's/.*Version ([0-9.]*)<.*/\1/g') # version from update page
|
appNewVersion=$(curl -fs https://www.sketch.com/updates/ | grep "Sketch Version" | head -1 | sed -E 's/.*Version ([0-9.]*)<.*/\1/g') # version from update page
|
||||||
expectedTeamID="WUGMZZ5K46"
|
expectedTeamID="WUGMZZ5K46"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
slab)
|
|
||||||
name="Slab"
|
|
||||||
type="dmg"
|
|
||||||
if [[ $(arch) == i386 ]]; then
|
|
||||||
archiveName="Slab-[0-9.]*-darwin-x64.dmg"
|
|
||||||
elif [[ $(arch) == arm64 ]]; then
|
|
||||||
archiveName="Slab-[0-9.]*-darwin-arm64.dmg"
|
|
||||||
fi
|
|
||||||
downloadURL=$(downloadURLFromGit slab desktop-releases)
|
|
||||||
appNewVersion=$(versionFromGit slab desktop-releases)
|
|
||||||
expectedTeamID="Q67SW996Z5"
|
|
||||||
;;
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
snagit|\
|
snagit|\
|
||||||
snagit2022)
|
snagit2021|\
|
||||||
name="Snagit 2022"
|
snagit2020)
|
||||||
|
name="Snagit 2021"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2022" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
downloadURL="https://download.techsmith.com/snagitmac/releases/Snagit.dmg"
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2022" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
expectedTeamID="7TQL462TU8"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
snagit2019)
|
|
||||||
name="Snagit 2019"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2019" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2019" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
snagit2020)
|
|
||||||
name="Snagit 2020"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2020" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
snagit2021)
|
|
||||||
name="Snagit 2021"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2021" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2021" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
sonobus)
|
|
||||||
name="Sonobus"
|
|
||||||
type="pkgInDmg"
|
|
||||||
html_page_source="$(curl -fs 'https://www.sonobus.net')"
|
|
||||||
downloadFile="$(echo "${html_page_source}" | xmllint --html --xpath "string(//a[contains(@href, 'mac.dmg')]/@href)" - 2> /dev/null)"
|
|
||||||
downloadURL="https://www.sonobus.net/$downloadFile"
|
|
||||||
appNewVersion="$(echo "${downloadFile}" | sed 's/releases\/sonobus-//' | sed 's/\-mac.dmg//' )"
|
|
||||||
expectedTeamID="XCS435894D"
|
|
||||||
;;
|
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
supportapp)
|
supportapp)
|
||||||
|
# credit: Søren Theilgaard (@theilgaard)
|
||||||
name="Support"
|
name="Support"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
packageID="nl.root3.support"
|
packageID="nl.root3.support"
|
||||||
downloadURL=$(downloadURLFromGit root3nl SupportApp)
|
downloadURL=$(downloadURLFromGit root3nl SupportApp)
|
||||||
appNewVersion=$(versionFromGit root3nl SupportApp)
|
appNewVersion=$(versionFromGit root3nl SupportApp)
|
||||||
expectedTeamID="98LJ4XBGYK"
|
expectedTeamID="98LJ4XBGYK"
|
||||||
uid=$(id -u "$currentUser")
|
|
||||||
launchctl bootout gui/${uid} "/Library/LaunchAgents/nl.root3.support.plist"
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
talkdeskcallbar)
|
talkdeskcallbar)
|
||||||
name="Callbar"
|
name="Callbar"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p')
|
downloadURL=https://downloadcallbar.talkdesk.com/Callbar-$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version":"\([^"]*\)".*$/\1/p').dmg
|
||||||
downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg
|
appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version":"\([^"]*\)".*$/\1/p')
|
||||||
expectedTeamID="YGGJX44TB8"
|
expectedTeamID="YGGJX44TB8"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
talkdeskcxcloud)
|
|
||||||
name="Talkdesk"
|
|
||||||
type="dmg"
|
|
||||||
appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1)
|
|
||||||
downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg"
|
|
||||||
expectedTeamID="YGGJX44TB8"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
tembo)
|
|
||||||
name="Tembo"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="$(curl -fs https://www.houdah.com/tembo/updates/cast2.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
|
|
||||||
appNewVersion="$(curl -fs https://www.houdah.com/tembo/updates/cast2.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
|
|
||||||
expectedTeamID="DKGQD8H8ZY"
|
|
||||||
;;
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
thunderbird_intl)
|
|
||||||
# This label will try to figure out the selected language of the user,
|
|
||||||
# and install corrosponding version of Thunderbird
|
|
||||||
name="Thunderbird"
|
|
||||||
type="dmg"
|
|
||||||
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale | tr '_' '-')
|
|
||||||
printlog "Found language $userLanguage to be used for $name."
|
|
||||||
releaseURL="https://ftp.mozilla.org/pub/thunderbird/releases/latest/README.txt"
|
|
||||||
until curl -fs $releaseURL | grep -q "=$userLanguage"; do
|
|
||||||
if [ ${#userLanguage} -eq 2 ]; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
printlog "No locale matching '$userLanguage', trying '${userLanguage:0:2}'"
|
|
||||||
userLanguage=${userLanguage:0:2}
|
|
||||||
done
|
|
||||||
printlog "Using language '$userLanguage' for download."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=thunderbird-latest&os=osx&lang=$userLanguage"
|
|
||||||
if ! curl -sfL --output /dev/null -r 0-0 $downloadURL; then
|
|
||||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=thunderbird-latest&os=osx"
|
|
||||||
fi
|
|
||||||
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}')
|
|
||||||
expectedTeamID="43AQ936H96"
|
|
||||||
blockingProcesses=( thunderbird )
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
ultimakercura)
|
|
||||||
name="Ultimaker Cura"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="$(downloadURLFromGit Ultimaker Cura)"
|
|
||||||
archiveName="Ultimaker_Cura-[0-9].*-Darwin.dmg"
|
|
||||||
appNewVersion=$(versionFromGit Ultimaker Cura )
|
|
||||||
expectedTeamID="V4B3JXRRQS"
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
unnaturalscrollwheels)
|
|
||||||
name="UnnaturalScrollWheels"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="$(downloadURLFromGit ther0n UnnaturalScrollWheels)"
|
|
||||||
appNewVersion="$(versionFromGit ther0n UnnaturalScrollWheels)"
|
|
||||||
expectedTeamID="D6H5W2T379"
|
|
||||||
blockingProcesses=( UnnaturalScrollWheels )
|
|
||||||
;;
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
wechat)
|
|
||||||
name="WeChat"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://dldir1.qq.com/weixin/mac/WeChatMac.dmg"
|
|
||||||
expectedTeamID="5A4RE8SF68"
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
wordservice)
|
|
||||||
name="WordService"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" "https://www.devontechnologies.com/support/download" | tr '"' "\n" | grep -o "http.*download.*.zip" | grep -i wordservice | head -1)"
|
|
||||||
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
|
|
||||||
appNewVersion=""
|
|
||||||
expectedTeamID="679S2QUWR8"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
xeroxworkcentre7800)
|
|
||||||
name="XeroxWorkCentre"
|
|
||||||
type="pkgInDmg"
|
|
||||||
appCustomVersion(){ lpinfo -m | grep 783 | tail -n 1 | awk -F ', ' '{print $2}' }
|
|
||||||
appNewVersion=$( curl -fsL "https://www.support.xerox.com/nl-nl/product/workcentre-7800-series/downloads?platform=macOSx11" | grep .dmg | head -n 1 | awk -F '_' '{print $2}' )
|
|
||||||
downloadURL=$( curl -fsL "https://www.support.xerox.com/nl-nl/product/workcentre-7800-series/downloads?platform=macOSx11" | xmllint --html --format - 2>/dev/null | grep -o "https://.*XeroxDrivers.*.dmg" )
|
|
||||||
expectedTeamID="G59Y3XFNFR"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
xmenu)
|
|
||||||
name="XMenu"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="$(curl -fs "https://www.devontechnologies.com/apps/freeware" | grep -o "http.*download.*.zip" | grep -i xmenu)"
|
|
||||||
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
|
|
||||||
expectedTeamID="679S2QUWR8"
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
zohoworkdrivegenie)
|
|
||||||
name="Zoho WorkDrive Genie"
|
|
||||||
type="dmg"
|
|
||||||
# https://www.zoho.com/workdrive/genie.html
|
|
||||||
downloadURL="https://www.zoho.com/workdrive/downloads/edit-tool/Zoho_WorkDrive_Genie.dmg"
|
|
||||||
CLIInstaller="Zoho WorkDrive Genie.app/Contents/MacOS/Zoho WorkDrive Genie"
|
|
||||||
expectedTeamID="TZ824L8Y37"
|
|
||||||
;;
|
|
||||||
@@ -4,5 +4,4 @@ zoom)
|
|||||||
downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.pkg"
|
downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.pkg"
|
||||||
appNewVersion="$(curl -fsIL ${downloadURL} | grep -i ^location | cut -d "/" -f5)"
|
appNewVersion="$(curl -fsIL ${downloadURL} | grep -i ^location | cut -d "/" -f5)"
|
||||||
expectedTeamID="BJ4HAAB9B3"
|
expectedTeamID="BJ4HAAB9B3"
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user