Skip to content

Instantly share code, notes, and snippets.

@niw
Last active October 23, 2024 03:20
Show Gist options
  • Save niw/1bac63d716f71555fa6bbda43ddfc504 to your computer and use it in GitHub Desktop.
Save niw/1bac63d716f71555fa6bbda43ddfc504 to your computer and use it in GitHub Desktop.
A script to download macOS install image and create an install disk image
#!/usr/bin/env bash
set -e
VOLUME_PATH=/Volumes/installer
while getopts ":d:h" opts; do
case $opts in
d)
VOLUME_PATH=$OPTARG
;;
h)
echo "Usage: $0 [-h] [-d disk] name"
echo "name is either mojave, mojave_beta, catalina, or catalina_beta"
echo " -h Show this help message"
echo " -d /Volumes path to where it makes a bootable disk."
echo " If it doesn't exist, it will create a disk image."
exit 0
;;
esac
done
readonly VOLUME_PATH
shift $((OPTIND - 1))
readonly NAME=$1
if [[ $(dirname "$VOLUME_PATH") != "/Volumes" ]]; then
echo "Invalid volume path '$VOLUME_PATH'" >&2
exit 1
fi
case $NAME in
mojave)
INSTALL_APP_PATH="/Applications/Install macOS Mojave.app"
MAC_APP_STORE_ID="id1398502828"
;;
mojave_beta)
INSTALL_APP_PATH="/Applications/Install macOS Mojave Beta.app"
MAC_APP_STORE_ID="id1354523149"
REQUIRE_ENROLL=1
;;
catalina)
INSTALL_APP_PATH="/Applications/Install macOS Catalina.app"
MAC_APP_STORE_ID="id1466841314"
;;
catalina_beta)
INSTALL_APP_PATH="/Applications/Install macOS Catalina Beta.app"
MAC_APP_STORE_ID="id1455661060"
REQUIRE_ENROLL=1
;;
*)
echo "Unknown name '$NAME'. See usage by give -h." >&2
exit 1
;;
esac
readonly INSTALL_APP_PATH
readonly MAC_APP_STORE_ID
readonly REQUIRE_ENROLL
if [[ -r "$INSTALL_APP_PATH/Contents/SharedSupport/InstallESD.dmg" ]]; then
echo "Found the install app, create an install disk."
if [[ ! -e $VOLUME_PATH ]]; then
readonly DISK_IMAGE_NAME=$(basename "$VOLUME_PATH")
echo "Creating a disk image '$DISK_IMAGE_NAME'"
# Mojave, Catalina install disk image requires about 7GB space.
hdiutil create -o "$DISK_IMAGE_NAME.dmg" -volname "$DISK_IMAGE_NAME" -size 7G -layout SPUD -fs HFS+J && \
hdiutil attach "$DISK_IMAGE_NAME.dmg"
fi
# Create an install disk.
sudo "$INSTALL_APP_PATH/Contents/Resources/createinstallmedia" \
--volume "$VOLUME_PATH" \
--downloadassets
else
if ((REQUIRE_ENROLL)); then
echo "Enroll developer seed and open Mac App Store."
echo "You can unenroll after downloading the install app by next command:"
echo "sudo /System/Library/PrivateFrameworks/Seeding.framework/Versions/A/Resources/seedutil unenroll"
# Tell Mac App Store that we've enrolled `DeveloperSeed`.
# Actual `enroll` is needed to download a complete install image from Mac App Store.
sudo /System/Library/PrivateFrameworks/Seeding.framework/Versions/A/Resources/seedutil enroll DeveloperSeed
/usr/libexec/PlistBuddy -c "clear dict" -c "add :SeedProgram string DeveloperSeed" /Users/Shared/.SeedEnrollment.plist
fi
# Open Mac App Store to download macOS installer app.
/usr/bin/open "macappstores://itunes.apple.com/app/$MAC_APP_STORE_ID"
echo "Click Get on Mac App Store to download installer app, then run this script again to create an install disk image."
fi
@norio-nomura
Copy link

norio-nomura commented Jun 14, 2019

Thank you for publishing this script!
It was necessary to add the option -volname $DISK_IMAGE_NAME to hdiutil create when using under conditions where the volume does not exist.

@niw
Copy link
Author

niw commented Jun 15, 2019

Ah, actually it's default to untitled but if not, it should given. Let me change it.

@mschultz-pro
Copy link

not sure if this will be useful to you but after the journey i went on to find them i wanted to share them with someone. here are the Bundle IDs for some MacOS non beta versions

com.apple.InstallAssistant.Catalina
com.apple.InstallAssistant.macOSVentura
com.apple.InstallAssistant.macOSBigSur
com.apple.InstallAssistant.macOSMonterey

i was able to find these based on what i read here https://pspdfkit.com/guides/ios/faq/finding-the-app-bundle-id/

@niw
Copy link
Author

niw commented Jun 10, 2023

On any recent new macOS, likely using softwareupdate command would be better solution to download installer. For example,

$ softwareupdate --list-full-installers
$ softwareupdate --fetch-full-installer --full-installer-version 14.0

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