-
Notifications
You must be signed in to change notification settings - Fork 0
/
1-password.sh
154 lines (135 loc) · 7.61 KB
/
1-password.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/sh
#####################################################################################################
#
# ABOUT THIS PROGRAM
#
# NAME
# 1Password Installer Updater.sh -- Installs or updates 1Password 7
#
# SYNOPSIS
# sudo 1Password Installer Updater.sh
#
####################################################################################################
#
# HISTORY
#
# Version: 1.7
#
# - 1.0 Martyn Watts, 25.06.2021 Initial Build
# - 1.1 Martyn Watts, 01.07.2021 Increased script feedback
# - 1.2 Martyn Watts, 22.09.2021 Fixed the exclusion of beta versions recently introduced into the release notes
# - 1.3 Martyn Watts, 24.09.2021 Added Check to see if dockutil is installed to make the script more resilient
# - 1.4 Martyn Watts, 28.09.2021 Added Open Console Parameter to use with TeamViewer
# - 1.5 Martyn Watts, 29.09.2021 Removed erroneous space in deplog path, moved the Open Console section to below the initial creation event
# & Created a scriptver variable that is recorded in the log files
# - 1.6 Martyn Watts, 02.12.2021 Fixed issue with version checking changed the initial grep from 'download' to '>download<'
# - 1.7 Martyn Watts, 03.12.2012 Changed the /tmp paths to /Library/Caches/com.purplecomputing.mdm/
#
####################################################################################################
# Script to download and install 1Password 7.
# Only works on Intel systems.
#
releaseNotesUrl='https://app-updates.agilebits.com/product_history/OPM7'
dnldfile='1Password.pkg'
appName='1Password 7'
forceQuit='Y'
logfile="/Library/Caches/com.purplecomputing.mdm/Logs/1Password7InstallScript.log"
deplog="/var/tmp/depnotify.log"
scriptver="1.7"
# Making Purple Cache directories for in the event that the helper script hasn't been run
mkdir -p /Library/Caches/com.purplecomputing.mdm/
mkdir -p /Library/Caches/com.purplecomputing.mdm/Logs/
mkdir -p /Library/Caches/com.purplecomputing.mdm/Apps/
/bin/echo "Status: Installing ${appName}" >> ${deplog}
/bin/echo "Status: Installing ${appName}" >> ${logfile}
if [[ $@ == "openconsole" ]]; then
open ${logfile}
open ${deplog}
fi
/bin/echo "Script Version: ${scriptver}" >> ${logfile}
# To get just the latest version number from the 1Password 7 Release Notes URL
/bin/echo "`date`: Getting latest version number" >> ${logfile}
/bin/echo "Getting latest version number"
latestver=$(curl -s ${releaseNotesUrl} | grep '>download<' | grep -vim 1 'beta' | cut -f2 -d'"' | cut -f2 -d"-" | sed -e 's/\.[^.]*$//')
# To get the latest download link from the 1Password7 Release Notes URL
url=$(curl -s ${releaseNotesUrl} | grep '>download<' | grep -vim 1 'beta' | cut -f2 -d'"')
/bin/echo "`date`: Latest version number is: ${latestver}" >> ${logfile}
/bin/echo "Latest version number is: ${latestver}"
# Get the version number of the currently-installed App, if any.
if [[ -e "/Applications/${appName}.app" ]]; then
currentinstalledver=`/usr/bin/defaults read "/Applications/${appName}.app/Contents/Info" CFBundleShortVersionString`
/bin/echo "Current installed version is: $currentinstalledver"
/bin/echo "`date`: Current installed version is: $currentinstalledver" >> ${logfile}
if [[ ${latestver} = ${currentinstalledver} ]]; then
/bin/echo "${appName} is current. Exiting"
/bin/echo "`date`: ${appName} is current. Exiting" >> ${logfile}
/bin/echo "Status: ${appName} is current. Exiting" >> ${deplog}
exit 0
fi
else
currentinstalledver="none"
/bin/echo "${appName} is not installed"
/bin/echo "`date`: ${appName} is not installed" >> ${logfile}
fi
# Compare the two versions, if they are different or the App is not present then download and install the new version.
if [[ "${currentinstalledver}" != "${latestver}" ]]; then
/bin/echo "`date`: Current ${appName} version: ${currentinstalledver}" >> ${logfile}
/bin/echo "Current ${appName} version: ${currentinstalledver}"
/bin/echo "`date`: Available ${appName} version: ${latestver}" >> ${logfile}
/bin/echo "Available ${appName} version: ${latestver}"
/bin/echo "`date`: Downloading newer version." >> ${logfile}
/bin/echo "Downloading newer version."
/usr/bin/curl -s -o /Library/Caches/com.purplecomputing.mdm/Apps/${dnldfile} ${url}
if [[ "${forceQuit}" = "Y" ]]; then
killall ${appName}
fi
########################################################################################
# Uncomment this block for dmg & .app copy #
########################################################################################
# /bin/echo "`date`: Mounting installer disk image." >> ${logfile}
# /usr/bin/hdiutil attach /Library/Caches/com.purplecomputing.mdm/Apps/${dnldfile} -nobrowse -quiet
# /bin/echo "`date`: Installing..." >> ${logfile}
# ditto -rsrc "/Volumes/AppName/AppName.app" "/Applications/AppNAme.app"
# /bin/sleep 10
# /bin/echo "`date`: Unmounting installer disk image." >> ${logfile}
# /usr/bin/hdiutil detach $(/bin/df | /usr/bin/grep AppName | awk '{print $1}') -quiet
# /bin/sleep 10
########################################################################################
########################################################################################
# Uncomment this block for .pkg install #
########################################################################################
cd /Library/Caches/com.purplecomputing.mdm/Apps/
/usr/sbin/installer -pkg ${dnldfile} -target /
########################################################################################
/bin/sleep 5
/bin/echo "`date`: Deleting the downloaded file." >> ${logfile}
/bin/rm /Library/Caches/com.purplecomputing.mdm/Apps/${dnldfile}
#double check to see if the new version got updated
newlyinstalledver=`/usr/bin/defaults read "/Applications/${appName}.app/Contents/Info" CFBundleShortVersionString`
if [[ "${latestver}" = "${newlyinstalledver}" ]]; then
/bin/echo "`date`: SUCCESS: ${appName} has been updated to version ${newlyinstalledver}" >> ${logfile}
/bin/echo "SUCCESS: ${appName} has been updated to version ${newlyinstalledver}"
if [[ -e "/usr/local/bin/dockutil" ]]; then
/bin/echo "`date`: Removing Existing Dock Icon." >> ${logfile}
/bin/echo "Removing Existing Dock Icon."
/usr/local/bin/dockutil --remove "${appName}" --allhomes >> ${logfile}
/bin/sleep 5
/bin/echo "`date`: Creating New Dock Icon." >> ${logfile}
/bin/echo "Creating New Dock Icon."
/usr/local/bin/dockutil --add "/Applications/${appName}.app" --position 1 --allhomes >> ${logfile}
/bin/sleep 3
fi
/bin/echo "--" >> ${logfile}
else
/bin/echo "`date`: ERROR: ${appName} update unsuccessful, version remains at ${currentinstalledver}." >> ${logfile}
/bin/echo "ERROR: ${appName} update unsuccessful, version remains at ${currentinstalledver}."
/bin/echo "--" >> ${logfile}
exit 1
fi
# If App is up to date already, just log it and exit.
else
/bin/echo "`date`: ${appName} is already up to date, running ${currentinstalledver}." >> ${logfile}
/bin/echo "${appName} is already up to date, running ${currentinstalledver}."
/bin/echo "--" >> ${logfile}
fi
/bin/echo "Command: DeterminateManualStep: 1" >> ${deplog}