Skip to content

Instantly share code, notes, and snippets.

@magnusviri
Forked from brndnblck/recovery.sh
Last active March 23, 2022 08:23
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save magnusviri/3848c9612240cfce4776d01841521a96 to your computer and use it in GitHub Desktop.
Save magnusviri/3848c9612240cfce4776d01841521a96 to your computer and use it in GitHub Desktop.
Create or update macOS Mojave Recovery Partition Without Reinstalling
#!/bin/sh
# Set the macOS installer path as a variable
MACOS_INSTALLER="/Applications/$(ls /Applications | grep "Install macOS")"
MOUNT_POINT="$MACOS_INSTALLER/Contents/SharedSupport"
# Find the latest pkg at https://swscan.apple.com/content/catalogs/others/index-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz
DOWNLOAD_URL="http://swcdn.apple.com/content/downloads/24/46/061-41421-A_M34O0XGXUZ/vpexpha4aju1y04pz8ylxfm3mn1f543z94/macOSUpd10.14.6.RecoveryHDUpdate.pkg"
PACKAGE_NAME="macOSUpd10.14.6.RecoveryHDUpdate.pkg"
echo "macOS installer is \"$MACOS_INSTALLER\""
# Set the target disk as a variable
TARGET=$(diskutil info "$(bless --info --getBoot)" | awk -F':' '/Volume Name/ { print $2 }' | sed -e 's/^[[:space:]]*//')
echo "Target disk is \"$TARGET\""
# Set the target disk filesystem
FS_TYPE=$(diskutil info "$TARGET" | awk '$1 == "Type" { print $NF }')
echo "Target filesystem is \"${FS_TYPE}\""
# Download the APFS-compatible Recovery into /private/tmp
echo "Downloading $PACKAGE_NAME into /private/tmp"
curl "$DOWNLOAD_URL" --progress-bar -L -o "/private/tmp/$PACKAGE_NAME"
pkgutil --expand "/private/tmp/$PACKAGE_NAME" /private/tmp/recoveryupdate
if [[ "${FS_TYPE}" == "apfs" ]]; then
echo "Running ensureRecoveryBooter for APFS target volume: $TARGET"
/private/tmp/recoveryupdate/Scripts/Tools/dm ensureRecoveryBooter "$TARGET" -base "$MOUNT_POINT/BaseSystem.dmg" "$MOUNT_POINT/BaseSystem.chunklist" -diag "$MOUNT_POINT/AppleDiagnostics.dmg" "$MOUNT_POINT/AppleDiagnostics.chunklist" -diagmachineblacklist 0 -installbootfromtarget 0 -slurpappleboot 0 -delappleboot 0 -addkernelcoredump 0
else
echo "Running ensureRecoveryPartition for Non-APFS target volume: $TARGET"
/private/tmp/recoveryupdate/Scripts/Tools/dm ensureRecoveryPartition "$TARGET" "$MOUNT_POINT/BaseSystem.dmg" "$MOUNT_POINT/BaseSystem.chunklist" "$MOUNT_POINT/AppleDiagnostics.dmg" "$MOUNT_POINT/AppleDiagnostics.chunklist" 0 0 0
fi
echo "Finished creating Recovery HD"
@magnusviri
Copy link
Author

Moved download url to a variable and listed where to get the new updates from. I can not get this script to work with 10.14.6 though because /private/tmp/recoveryupdate/Scripts/Tools/dm does not exist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment