Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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, catalina_beta, bigsur, bigsur_beta, or monterey_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
highsierra)
INSTALL_APP_PATH="/Applications/Install macOS High Sierra.app"
MAC_APP_STORE_ID="id1246284741"
DISK_IMAGE_SIZE="8G"
;;
mojave)
INSTALL_APP_PATH="/Applications/Install macOS Mojave.app"
MAC_APP_STORE_ID="id1398502828"
DISK_IMAGE_SIZE="8G"
DOWNLOAD_ASSETS=1
;;
mojave_beta)
INSTALL_APP_PATH="/Applications/Install macOS Mojave Beta.app"
MAC_APP_STORE_ID="id1354523149"
DISK_IMAGE_SIZE="8G"
REQUIRE_ENROLL=1
DOWNLOAD_ASSETS=1
;;
catalina)
INSTALL_APP_PATH="/Applications/Install macOS Catalina.app"
MAC_APP_STORE_ID="id1466841314"
DISK_IMAGE_SIZE="10G"
DOWNLOAD_ASSETS=1
;;
catalina_beta)
INSTALL_APP_PATH="/Applications/Install macOS Catalina Beta.app"
MAC_APP_STORE_ID="id1455661060"
DISK_IMAGE_SIZE="10G"
REQUIRE_ENROLL=1
DOWNLOAD_ASSETS=1
;;
bigsur)
INSTALL_APP_PATH="/Applications/Install macOS Big Sur.app"
MAC_APP_STORE_ID="id1526878132"
DISK_IMAGE_SIZE="10G"
DOWNLOAD_ASSETS=1
;;
bigsur_beta)
INSTALL_APP_PATH="/Applications/Install macOS Big Sur Beta.app"
BUNDLE_ID="com.apple.InstallAssistant.Seed.macOS1016Seed1"
DISK_IMAGE_SIZE="10G"
REQUIRE_ENROLL=1
DOWNLOAD_ASSETS=1
;;
monterey_beta)
INSTALL_APP_PATH="/Applications/Install macOS 12 Beta.app"
MAC_APP_STORE_ID="id1556159220"
BUNDLE_ID="com.apple.InstallAssistant.Seed.macOS12Seed1"
DISK_IMAGE_SIZE="14G"
REQUIRE_ENROLL=1
DOWNLOAD_ASSETS=1
;;
*)
echo "Unknown name '$NAME'. See usage by give -h." >&2
exit 1
;;
esac
readonly INSTALL_APP_PATH
readonly MAC_APP_STORE_ID
readonly BUNDLE_ID
readonly DISK_IMAGE_SIZE
readonly REQUIRE_ENROLL
readonly DOWNLOAD_ASSETS
if [[ -r "$INSTALL_APP_PATH/Contents/SharedSupport/InstallESD.dmg" || \
-r "$INSTALL_APP_PATH/Contents/SharedSupport/SharedSupport.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' size $DISK_IMAGE_SIZE"
hdiutil create -o "$DISK_IMAGE_NAME.dmg" -volname "$DISK_IMAGE_NAME" -size $DISK_IMAGE_SIZE -layout SPUD -fs HFS+J && \
hdiutil attach "$DISK_IMAGE_NAME.dmg"
fi
ARGS=(--volume ${VOLUME_PATH})
if ((DOWNLOAD_ASSETS)); then
ARGS=("${ARGS[@]}" --downloadassets)
fi
readonly ARGS
# Create an install disk.
sudo "$INSTALL_APP_PATH/Contents/Resources/createinstallmedia" "${ARGS[@]}"
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
if [[ ! -z $BUNDLE_ID ]]; then
# Open Preferences to download macOS installer app.
/usr/bin/open "x-apple.systempreferences:com.apple.preferences.softwareupdate?client=bau&installMajorOSBundle=$BUNDLE_ID"
echo "Click Download to download installer app, then run this script again to create an install disk image."
elif [[ ! -z $MAC_APP_STORE_ID ]]; then
# 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."
else
echo "Mising both Bundle ID and Mac App Store ID." >&2
exit 1
fi
fi
@norio-nomura

This comment has been minimized.

Copy link

@norio-nomura 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

This comment has been minimized.

Copy link
Owner Author

@niw niw commented Jun 15, 2019

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

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