updating the recovery partition macos sonoma 14.4 using script problem

42 Views Asked by At

"Is anyone familiar with the Sonoma 14.4 update file? I asked LLM to help me write a script to update the recovery partition. It keeps suggesting files that were in the old InstallAssistant.pkg, but Sonoma is different. Is anyone familiar with the Sonoma setup and its file structure?

Is there a way to update the recovery partition with the latest OS? Because when I restore my computer back to factory reset, it always restores the macOS which came with the Mac.

I have a Mac mini M2.

Below is the script I used:

#!/bin/bash

# Function to display an error message and exit
function display_error {
    echo "Error: $1"
    exit 1
}

# Path to the directory containing InstallAssistant.pkg
pkg_directory="/Users/colinp/Downloads"

# Check if InstallAssistant.pkg exists in the specified directory
if [ ! -f "$pkg_directory/InstallAssistant.pkg" ]; then
    display_error "InstallAssistant.pkg not found in $pkg_directory."
fi

echo "InstallAssistant.pkg found in $pkg_directory."

# Prompt user to continue
read -p "Do you want to continue? (y/n): " continue_response
if [ "$continue_response" != "y" ]; then
    echo "Operation aborted by user."
    exit 0
fi

# Mount the InstallAssistant disk image
echo "Mounting InstallAssistant disk image..."
if ! hdiutil attach "$pkg_directory/InstallAssistant.pkg" -noverify -mountpoint /Volumes/InstallAssistant; then
    display_error "Failed to mount InstallAssistant disk image."
fi

# Prompt user to continue
read -p "Do you want to continue? (y/n): " continue_response
if [ "$continue_response" != "y" ]; then
    echo "Operation aborted by user."
    hdiutil detach /Volumes/InstallAssistant >/dev/null 2>&1
    exit 0
fi

# Find the BaseSystem.dmg within the InstallAssistant disk image
basesystem_dmg=$(find /Volumes/InstallAssistant -name "BaseSystem.dmg" -print -quit)

# Check if BaseSystem.dmg is found
if [ -z "$basesystem_dmg" ]; then
    display_error "BaseSystem.dmg not found within InstallAssistant.pkg."
fi

echo "BaseSystem.dmg found."

# Prompt user to continue
read -p "Do you want to continue? (y/n): " continue_response
if [ "$continue_response" != "y" ]; then
    echo "Operation aborted by user."
    hdiutil detach /Volumes/InstallAssistant >/dev/null 2>&1
    exit 0
fi

# Determine the device identifier of the target disk
recovery_partition=$(diskutil list | grep "Recovery HD" | awk '{print $NF}')
if [ -z "$recovery_partition" ]; then
    display_error "Recovery partition not found."
fi

echo "Recovery partition found: $recovery_partition"

# Prompt user to continue
read -p "Do you want to continue? (y/n): " continue_response
if [ "$continue_response" != "y" ]; then
    echo "Operation aborted by user."
    hdiutil detach /Volumes/InstallAssistant >/dev/null 2>&1
    exit 0
fi

# Unmount the recovery partition
echo "Unmounting the recovery partition..."
if ! diskutil unmountDisk "$recovery_partition"; then
    display_error "Failed to unmount the recovery partition."
fi

# Prompt user to continue
read -p "Do you want to continue? (y/n): " continue_response
if [ "$continue_response" != "y" ]; then
    echo "Operation aborted by user."
    hdiutil detach /Volumes/InstallAssistant >/dev/null 2>&1
    exit 0
fi

# Restore BaseSystem.dmg to the recovery partition
echo "Updating the recovery partition. This may take a while..."
if ! sudo asr restore --source "$basesystem_dmg" --target "$recovery_partition" --erase; then
    display_error "Failed to update the recovery partition."
fi

# Detach the InstallAssistant disk image
echo "Detaching InstallAssistant disk image..."
if ! hdiutil detach /Volumes/InstallAssistant >/dev/null 2>&1; then
    display_error "Failed to detach InstallAssistant disk image."
fi

echo "Recovery partition update complete."

any help is appreciated. Thanks in advance.

I ran it and it couldn't find the file it suggested as mentioned above

0

There are 0 best solutions below