You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.8 KiB
127 lines
3.8 KiB
#!/bin/bash
|
|
echo 'Unpatcher starting. If this fails, try recreating the installer USB using'
|
|
echo 'createinstallmedia.'
|
|
echo
|
|
|
|
# Check for --no-sync option
|
|
if [ "x$1" = "x--no-sync" ]
|
|
then
|
|
SKIP_SYNC="YES"
|
|
shift
|
|
fi
|
|
|
|
# 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 for unpatching."
|
|
echo "If all else fails, try specifying the path to the USB stick"
|
|
echo "as a command line parameter to this script."
|
|
echo
|
|
echo "Unpatcher 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 unpatching."
|
|
echo "Make sure you specified the correct volume. You may also try"
|
|
echo "not specifying a volume and allowing the unpatcher to find"
|
|
echo "the volume itself."
|
|
echo
|
|
echo "Unpatcher cannot continue and will now exit."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ ! -e "$VOLUME/Patch-Version.txt" ]
|
|
then
|
|
echo 'Patch not detected on USB stick, but proceeding with unpatch anyway.'
|
|
echo 'This should do no harm. Any subsequent error messages are,'
|
|
echo 'in all likelihood, harmless.'
|
|
echo
|
|
fi
|
|
|
|
# Undo the boot-time compatibility check patch, if present
|
|
echo 'Checking for boot-time compatibility check patch (v0.0.1/v0.0.2).'
|
|
if [ -e "$VOLUME/System/Library/CoreServices/PlatformSupport.plist.inactive" ]
|
|
then
|
|
echo 'Removing boot-time compatibility check patch.'
|
|
mv "$VOLUME/System/Library/CoreServices/PlatformSupport.plist.inactive" \
|
|
"$VOLUME/System/Library/CoreServices/PlatformSupport.plist"
|
|
else
|
|
echo 'Boot-time compatibility check patch not present; continuing.'
|
|
fi
|
|
|
|
echo
|
|
|
|
# Undo the com.apple.Boot.plist patch, if present
|
|
echo 'Checking for com.apple.Boot.plist patch (v0.0.3+).'
|
|
if [ -e "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist.original" ]
|
|
then
|
|
echo 'Removing com.apple.Boot.plist patch.'
|
|
cat "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist.original" > "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist"
|
|
rm "$VOLUME/Library/Preferences/SystemConfiguration/com.apple.Boot.plist.original"
|
|
else
|
|
echo 'com.apple.Boot.plist patch not present; continuing.'
|
|
fi
|
|
|
|
echo
|
|
if [ -d "$APPPATH/Contents/MacOS/InstallAssistant.app" ]
|
|
then
|
|
echo 'Removing trampoline.'
|
|
TEMPAPP="$VOLUME/tmp.app"
|
|
mv -f "$APPPATH/Contents/MacOS/InstallAssistant.app" "$TEMPAPP"
|
|
rm -rf "$APPPATH"
|
|
mv -f "$TEMPAPP" "$APPPATH"
|
|
else
|
|
echo 'Looked for trampoline (v0.2.0+) but trampoline is not present. Continuing...'
|
|
fi
|
|
|
|
echo 'Removing kexts, shell scripts, patcher version info, etc.'
|
|
# For v0.0.9 and earlier
|
|
rm -rf "$VOLUME"/*.kext
|
|
rm -f "$VOLUME"/*.kext.zip
|
|
# For v0.0.10 and later
|
|
rm -rf "$VOLUME"/kexts
|
|
# For v0.3.3 and later
|
|
rm -f "$VOLUME"/kmutil*
|
|
# For v0.4.2 and later
|
|
rm -f "$VOLUME"/bless*
|
|
# For v0.4.5pre
|
|
rm -f "$VOLUME"/patch.*
|
|
# For v0.5.0 and later
|
|
rm -rf "$VOLUME"/bin
|
|
# For all versions
|
|
rm -f "$VOLUME"/*.sh "$VOLUME/Patch-Version.txt"
|
|
|
|
echo 'Remvoing Hax dylibs...'
|
|
rm -f "$VOLUME"/Hax*.dylib
|
|
rm -rf "$VOLUME"/Hax*.app
|
|
|
|
if [ "x$SKIP_SYNC" != "xYES" ]
|
|
then
|
|
echo
|
|
echo 'Syncing.'
|
|
sync
|
|
fi
|
|
|
|
echo
|
|
echo 'Unpatcher finished.'
|