Skip to content

Commit

Permalink
Merge pull request #83 from cipaterson/add_catalina
Browse files Browse the repository at this point in the history
Added changes to fix issue #73 and added support for Catalina
  • Loading branch information
geerlingguy authored Aug 19, 2021
2 parents 2ce33c3 + 84b77cd commit ee97b8c
Showing 1 changed file with 49 additions and 21 deletions.
70 changes: 49 additions & 21 deletions prepare-iso.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# - Sierra (10.12)
# - High Sierra (10.13)
# - Mojave (10.14)
# - Catalina (10.15)

set -e

Expand Down Expand Up @@ -51,8 +52,11 @@ function createISO()
echo
echo Create ${isoName} blank ISO image with a Single Partition - Apple Partition Map
echo --------------------------------------------------------------------------
echo $ hdiutil create -o /tmp/${isoName} -size 8g -layout SPUD -fs HFS+J -type SPARSE
hdiutil create -o /tmp/${isoName} -size 8g -layout SPUD -fs HFS+J -type SPARSE
# Just in case - delete any previous sparseimage
[ -e /tmp/${isoName}.sparseimage ] && rm -f /tmp/${isoName}.sparseimage
# increased size to 16G - 8G is too small for Catalina
echo $ hdiutil create -o /tmp/${isoName} -size 16g -layout SPUD -fs HFS+J -type SPARSE
hdiutil create -o /tmp/${isoName} -size 16g -layout SPUD -fs HFS+J -type SPARSE

echo
echo Mount the sparse bundle for package addition
Expand All @@ -63,9 +67,15 @@ function createISO()
echo
echo Restore the Base System into the ${isoName} ISO image
echo --------------------------------------------------------------------------
if [ "${isoName}" == "HighSierra" ] || [ "${isoName}" == "Mojave" ] ; then
if [ "${isoName}" == "HighSierra" ] || [ "${isoName}" == "Mojave" ] || [ "${isoName}" == "Catalina" ] ; then
echo $ asr restore -source "${installerAppName}"/Contents/SharedSupport/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase
asr restore -source "${installerAppName}"/Contents/SharedSupport/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase
#following asr command returns an error and prints:
#"Personalization succeeded"
#"asr: Couldn't personalize volume /Volumes/macOS Base System - Operation not permitted"
#I disabled SIP and the error still occurs.
#This was reported in Issue #73 for Mojave
#I added ||true for now to prevent the script from exiting as the steps that follow still seem to work fine for Catalina
asr restore -source "${installerAppName}"/Contents/SharedSupport/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase ||true
else
echo $ asr restore -source /Volumes/install_app/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase
asr restore -source /Volumes/install_app/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase
Expand All @@ -74,7 +84,10 @@ function createISO()
echo
echo Remove Package link and replace with actual files
echo --------------------------------------------------------------------------
if [ "${isoName}" == "HighSierra" ] || [ "${isoName}" == "Mojave" ] ; then
if [ "${isoName}" == "Mojave" ] || [ "${isoName}" == "Catalina" ] ; then
echo $ ditto -V /Volumes/install_app/Packages /Volumes/macOS\ Base\ System/System/Installation/
ditto -V /Volumes/install_app/Packages /Volumes/macOS\ Base\ System/System/Installation/
elif [ "${isoName}" == "HighSierra" ] ; then
echo $ ditto -V /Volumes/install_app/Packages /Volumes/OS\ X\ Base\ System/System/Installation/
ditto -V /Volumes/install_app/Packages /Volumes/OS\ X\ Base\ System/System/Installation/
else
Expand All @@ -87,7 +100,12 @@ function createISO()
echo
echo Copy macOS ${isoName} installer dependencies
echo --------------------------------------------------------------------------
if [ "${isoName}" == "HighSierra" ] || [ "${isoName}" == "Mojave" ] ; then
if [ "${isoName}" == "Mojave" ] || [ "${isoName}" == "Catalina" ] ; then
echo $ ditto -V "${installerAppName}"/Contents/SharedSupport/BaseSystem.chunklist /Volumes/macOS\ Base\ System/BaseSystem.chunklist
ditto -V "${installerAppName}"/Contents/SharedSupport/BaseSystem.chunklist /Volumes/macOS\ Base\ System/BaseSystem.chunklist
echo $ ditto -V "${installerAppName}"/Contents/SharedSupport/BaseSystem.dmg /Volumes/macOS\ Base\ System/BaseSystem.dmg
ditto -V "${installerAppName}"/Contents/SharedSupport/BaseSystem.dmg /Volumes/macOS\ Base\ System/BaseSystem.dmg
elif [ "${isoName}" == "HighSierra" ] ; then
echo $ ditto -V "${installerAppName}"/Contents/SharedSupport/BaseSystem.chunklist /Volumes/OS\ X\ Base\ System/BaseSystem.chunklist
ditto -V "${installerAppName}"/Contents/SharedSupport/BaseSystem.chunklist /Volumes/OS\ X\ Base\ System/BaseSystem.chunklist
echo $ ditto -V "${installerAppName}"/Contents/SharedSupport/BaseSystem.dmg /Volumes/OS\ X\ Base\ System/BaseSystem.dmg
Expand All @@ -108,9 +126,13 @@ function createISO()
echo
echo Unmount the sparse bundle
echo --------------------------------------------------------------------------
echo $ hdiutil detach /Volumes/OS\ X\ Base\ System/
hdiutil detach /Volumes/OS\ X\ Base\ System/

if [ "${isoName}" == "Mojave" ] || [ "${isoName}" == "Catalina" ] ; then
echo $ hdiutil detach /Volumes/macOS\ Base\ System/
hdiutil detach /Volumes/macOS\ Base\ System/
else
echo $ hdiutil detach /Volumes/OS\ X\ Base\ System/
hdiutil detach /Volumes/OS\ X\ Base\ System/
fi
echo
echo Resize the partition in the sparse bundle to remove any free space
echo --------------------------------------------------------------------------
Expand Down Expand Up @@ -158,31 +180,37 @@ function installerExists()
# Main script code
#
# Eject installer disk in case it was opened after download from App Store
for disk in $(hdiutil info | grep /dev/disk | grep partition | cut -f 1); do
# grep "partition_scheme" because "partition" finds too many lines
for disk in $(hdiutil info | grep /dev/disk | grep partition_scheme | cut -f 1); do
hdiutil detach -force ${disk}
done

# See if we can find an eligible installer.
# If successful, then create the iso file from the installer.

if installerExists "Install macOS Big Sur.app" ; then
createISO "Install macOS Big Sur.app" "BigSur"
else
if installerExists "Install macOS Mojave.app" ; then
createISO "Install macOS Mojave.app" "Mojave"
if installerExists "Install macOS Catalina.app" ; then
createISO "Install macOS Catalina.app" "Catalina"
else
if installerExists "Install macOS High Sierra.app" ; then
createISO "Install macOS High Sierra.app" "HighSierra"
if installerExists "Install macOS Mojave.app" ; then
createISO "Install macOS Mojave.app" "Mojave"
else
if installerExists "Install macOS Sierra.app" ; then
createISO "Install macOS Sierra.app" "Sierra"
if installerExists "Install macOS High Sierra.app" ; then
createISO "Install macOS High Sierra.app" "HighSierra"
else
if installerExists "Install OS X El Capitan.app" ; then
createISO "Install OS X El Capitan.app" "ElCapitan"
if installerExists "Install macOS Sierra.app" ; then
createISO "Install macOS Sierra.app" "Sierra"
else
if installerExists "Install OS X Yosemite.app" ; then
createISO "Install OS X Yosemite.app" "Yosemite"
if installerExists "Install OS X El Capitan.app" ; then
createISO "Install OS X El Capitan.app" "ElCapitan"
else
echo "Could not find installer for Yosemite (10.10), El Capitan (10.11), Sierra (10.12), High Sierra (10.13), Mojave (10.14) or Big Sur (11.0)."
if installerExists "Install OS X Yosemite.app" ; then
createISO "Install OS X Yosemite.app" "Yosemite"
else
echo "Could not find installer for Yosemite (10.10), El Capitan (10.11), Sierra (10.12), High Sierra (10.13), Mojave (10.14), Catalina (10.15) or Big Sur (11.0)."
fi
fi
fi
fi
Expand Down

0 comments on commit ee97b8c

Please sign in to comment.