This repository has been archived by the owner on Nov 18, 2022. It is now read-only.
forked from barrykn/big-sur-micropatcher
-
Notifications
You must be signed in to change notification settings - Fork 2
/
install-opencore.sh
executable file
·203 lines (176 loc) · 6.32 KB
/
install-opencore.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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#!/bin/bash
### begin function definitions ###
# Check that we can access the directory that ocntains this script, as well
# as the root directory of the installer USB. Access to both of these
# directories is vital, and Catalina's TCC controls for Terminal are
# capable of blocking both. Therefore we must check access to both
# directories before proceeding.
checkDirAccess() {
# List the two directories, but direct both stdout and stderr to
# /dev/null. We are only interested in the return code.
ls "$VOLUME" . &> /dev/null
}
### end function definitions ###
# Make sure there isn't already an "EFI" volume mounted.
if [ -d "/Volumes/EFI" ]
then
echo 'An "EFI" volume is already mounted. Please unmount it then try again.'
echo "If you don't know what this means, then restart your Mac and try again."
echo
echo "install-opencore cannot continue."
exit 1
fi
# For this script, root permissions are vital.
[ $UID = 0 ] || exec sudo "$0" "$@"
while [[ $1 = -* ]]
do
case $1 in
-v | --verbose)
VERBOSEBOOT="YES"
#echo 'Verbose boot option enabled.'
;;
*)
echo "Unknown command line option: $1"
exit 1
;;
esac
shift
done
# Allow the user to drag-and-drop the USB stick in Terminal, to specify the
# path to the USB stick in question. (Otherwise it will try hardcoded paths
# for a presumed Big Sur Golden Master/public release, beta 2-or-later,
# and beta 1, in that order.)
if [ -z "$1" ]
then
for x in "Install macOS Big Sur" "Install macOS Big Sur Beta" "Install macOS Beta"
do
if [ -d "/Volumes/$x/$x.app" ]
then
VOLUME="/Volumes/$x"
APPPATH="$VOLUME/$x.app"
break
fi
done
if [ ! -d "$APPPATH" ]
then
echo "Failed to locate Big Sur recovery USB stick."
echo "Remember to create it using createinstallmedia, and do not rename it."
echo "If all else fails, try specifying the path to the USB stick"
echo "as a command line parameter to this script."
echo
echo "install-opencore cannot continue and will now exit."
exit 1
fi
else
VOLUME="$1"
# The use of `echo` here is to force globbing.
APPPATH=`echo -n "$VOLUME"/Install\ macOS*.app`
if [ ! -d "$APPPATH" ]
then
echo "Failed to locate Big Sur recovery USB stick for patching."
echo "Make sure you specified the correct volume. You may also try"
echo "not specifying a volume and allowing the patcher to find"
echo "the volume itself."
echo
echo "install-opencore cannot continue and will now exit."
exit 1
fi
fi
# Check if the opencore directory is inside the current directory. If not,
# it's probably inside the same directory as this script, so find that
# directory.
if [ ! -d opencore ]
then
BASEDIR="`echo $0|sed -E 's@/[^/]*$@@'`"
[ -z "$BASEDIR" ] || cd "$BASEDIR"
fi
# Check again in case we changed directory after the first check
if [ ! -d opencore ]
then
echo '"opencore" folder was not found.'
echo
echo "install-opencore cannot continue and will now exit."
exit 1
fi
# Check to make sure we can access both our own directory and the root
# directory of the USB stick. Terminal's TCC permissions in Catalina can
# prevent access to either of those two directories. However, only do this
# check on Catalina or higher. (I can add an "else" block later to handle
# Mojave and earlier, but Catalina is responsible for every single bug
# report I've received due to this script lacking necessary read permissions.)
if [ `uname -r | sed -e 's@\..*@@'` -ge 19 ]
then
echo 'Checking read access to necessary directories...'
if ! checkDirAccess
then
echo 'Access check failed.'
tccutil reset All com.apple.Terminal
echo 'Retrying access check...'
if ! checkDirAccess
then
echo
echo 'Access check failed again. Giving up.'
echo 'Next time, please give Terminal permission to access removable drives,'
echo 'as well as the location where this patcher is stored (for example, Downloads).'
exit 1
else
echo 'Access check succeeded on second attempt.'
echo
fi
else
echo 'Access check succeeded.'
echo
fi
fi
MOUNTEDPARTITION=`mount | fgrep "$VOLUME" | awk '{print $1}'`
if [ -z "$MOUNTEDPARTITION" ]
then
echo Failed to find the partition that
echo "$VOLUME"
echo is mounted from. install-opencore cannot proceed.
exit 1
fi
DEVICE=`echo -n $MOUNTEDPARTITION | sed -e 's/s[0-9]*$//'`
PARTITION=`echo -n $MOUNTEDPARTITION | sed -e 's/^.*disk[0-9]*s//'`
echo "$VOLUME found on device $MOUNTEDPARTITION"
if [ "x$PARTITION" = "x1" ]
then
echo "The volume $VOLUME"
echo "appears to be on partition 1 of the USB stick, therefore the stick is"
echo "incorrectly partitioned (possibly MBR instead of GPT?)."
echo
echo 'Please use Disk Utility to erase the USB stick as "Mac OS Extended'
echo '(Journaled)" format on "GUID Partition Map" scheme and start over with'
echo '"createinstallmedia". Or for other methods, please refer to the micropatcher'
echo "README for more information."
echo
echo "install-opencore cannot continue."
exit 1
fi
diskutil mount ${DEVICE}s1
if [ ! -d "/Volumes/EFI" ]
then
echo "Partition 1 of the USB stick does not appear to be an EFI partition, or"
echo "mounting of the partition somehow failed."
echo
echo 'Please use Disk Utility to erase the USB stick as "Mac OS Extended'
echo '(Journaled)" format on "GUID Partition Map" scheme and start over with'
echo '"createinstallmedia". Or for other methods, please refer to the micropatcher'
echo "README for more information."
echo
echo "install-opencore cannot continue."
exit 1
fi
# Now do the actual installation
echo "removing old opencore EFI utility."
rm -rf /Volumes/EFI/EFI/OC
rm -rf /Volumes/EFI/EFI/BOOT
echo "Installing opencore EFI utility."
cp -r opencore/EFI /Volumes/EFI
echo "Installing Big Sur Installation config.plist."
cp -f opencore/CONFIG/config_INSTALL_BigSur.plist /Volumes/EFI/EFI/OC/config.plist
echo "Unmounting EFI volume (if this fails, just eject in Finder afterward)."
umount /Volumes/EFI || diskutil unmount /Volumes/EFI
echo
echo 'install-opencore finished.'
exit 0