macos macos mojave: http://oscdn.apple.com/content/downloads/04/36/041-94410/ge73si0bd3fdsdkfibykjgrlcfuzy1q9yx/RecoveryImage/BaseSystem.dmg macos catalina: http://oscdn.apple.com/content/downloads/59/10/001-43312/oifium3yx72dhc4po3r65zfwblslmce191/RecoveryImage/BaseSystem.dmg macos big-sur: http://oscdn.apple.com/content/downloads/41/28/071-71279/5djpevqmc2w0ti2c4n1m8mkz7fm791t1ic/RecoveryImage/BaseSystem.dmg macos monterey: http://oscdn.apple.com/content/downloads/59/11/012-51692/z29q5x5plswit63bvyxmubthavua9gbxic/RecoveryImage/BaseSystem.dmg macos ventura: http://oscdn.apple.com/content/downloads/60/43/042-01871/sbembiob0hs1o92jfofalts02ux0x8rsra/RecoveryImage/BaseSystem.dmg macos sonoma: http://oscdn.apple.com/content/downloads/04/11/082-33203/orvwro1v8xhjrakr7tvl5hu1s1ew3epxne/RecoveryImage/BaseSystem.dmg # Template file for 'macos' OSNAME="macos" PRETTY="MacOS" BASEDOF="-" DESCRIPTION="Work and play on your Mac are even more powerful. Elevate your presence on video calls. Access information in all-new ways. Boost gaming performance." HOMEPAGE="https://www.apple.com/macos" CREDENTIALS="-" GUEST="macos" IMAGE_TYPE="img" RELEASES="ventura sonoma monterey mojave catalina big-sur" function get_() { local appleSession="" local info="" local downloadLink="" local downloadSession="" local chunkListLink="" local chunkListSession="" local BOARD_ID="" local CWD="" local CHECK="" local CHUNKCHECK="" local MLB="00000000000000000" local OS_TYPE="default" case ${RELEASE} in lion|10.7) BOARD_ID="Mac-2E6FAB96566FE58C" MLB="00000000000F25Y00";; mountainlion|10.8) BOARD_ID="Mac-7DF2A3B5E5D671ED" MLB="00000000000F65100";; mavericks|10.9) BOARD_ID="Mac-F60DEB81FF30ACF6" MLB="00000000000FNN100";; yosemite|10.10) BOARD_ID="Mac-E43C1C25D4880AD6" MLB="00000000000GDVW00";; elcapitan|10.11) BOARD_ID="Mac-FFE5EF870D7BA81A" MLB="00000000000GQRX00";; sierra|10.12) BOARD_ID="Mac-77F17D7DA9285301" MLB="00000000000J0DX00";; high-sierra|10.13) BOARD_ID="Mac-BE088AF8C5EB4FA2" MLB="00000000000J80300";; mojave|10.14) BOARD_ID="Mac-7BA5B2DFE22DDD8C" MLB="00000000000KXPG00";; catalina|10.15) BOARD_ID="Mac-00BE6ED71E35EB86";; big-sur|11) BOARD_ID="Mac-42FD25EABCABB274";; monterey|12) BOARD_ID="Mac-E43C1C25D4880AD6";; ventura|13) BOARD_ID="Mac-BE088AF8C5EB4FA2";; sonoma|14) BOARD_ID="Mac-53FDB3D8DB8CA971";; *) echo "ERROR! Unknown release: ${RELEASE}" releases_macos exit 1;; esac CWD="$(dirname "${0}")" if [ -x "${CWD}/chunkcheck" ]; then CHUNKCHECK="${CWD}/chunkcheck" elif [ -x "$(command -v chunkcheck)" ]; then CHUNKCHECK="$(command -v chunkcheck)" fi appleSession=$(curl --disable -v -H "Host: osrecovery.apple.com" \ -H "Connection: close" \ -A "InternetRecovery/1.0" https://osrecovery.apple.com/ 2>&1 | tr ';' '\n' | awk -F'session=|;' '{print $2}' | grep 1) info=$(curl --disable -s -X POST -H "Host: osrecovery.apple.com" \ -H "Connection: close" \ -A "InternetRecovery/1.0" \ -b "session=\"${appleSession}\"" \ -H "Content-Type: text/plain" \ -d $'cid='"$(generate_id 16)"$'\nsn='${MLB}$'\nbid='${BOARD_ID}$'\nk='"$(generate_id 64)"$'\nfg='"$(generate_id 64)"$'\nos='${OS_TYPE} \ https://osrecovery.apple.com/InstallationPayload/RecoveryImage | tr ' ' '\n') downloadLink=$(echo "$info" | grep 'oscdn' | grep 'dmg') downloadSession=$(echo "$info" | grep 'expires' | grep 'dmg') chunkListLink=$(echo "$info" | grep 'oscdn' | grep 'chunklist') chunkListSession=$(echo "$info" | grep 'expires' | grep 'chunklist') if [ "${OPERATION}" == "show" ]; then test_result "${OS}" "${RELEASE}" "" "${downloadLink}" | tee -a "public/tmp_${OS}" exit 0 elif [ "${OPERATION}" == "test" ]; then CHECK=$(web_check "${downloadLink}" --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${downloadSession}" && echo "PASS" || echo "FAIL") test_result "${OS}" "${RELEASE}" "" "${downloadLink}" "${CHECK}" | tee -a "public/tmp_${OS}" exit 0 elif [ "${OPERATION}" == "download" ]; then echo "Downloading macOS (${RELEASE^}) RecoveryImage" echo " - URL: ${downloadLink}" web_get "${downloadLink}" "${VM_PATH}" RecoveryImage.dmg --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${downloadSession}" web_get "${chunkListLink}" "${VM_PATH}" RecoveryImage.chunklist --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${chunkListSession}" VM_PATH="$(pwd)" else if [ ! -e "${VM_PATH}/RecoveryImage.chunklist" ]; then echo "Downloading macOS (${RELEASE^}) RecoveryImage" echo " - URL: ${downloadLink}" web_get "${downloadLink}" "${VM_PATH}" RecoveryImage.dmg --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${downloadSession}" web_get "${chunkListLink}" "${VM_PATH}" RecoveryImage.chunklist --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${chunkListSession}" if ! "${CHUNKCHECK}" "${VM_PATH}" 2> /dev/null; then echo " - WARNING! Verification failed, continuing anyway" else echo " - Verification passed" fi if [ -e "${VM_PATH}/RecoveryImage.dmg" ] && [ ! -e "${VM_PATH}/RecoveryImage.img" ]; then echo " - Converting RecoveryImage.dmg" ${QEMU_IMG} convert "${VM_PATH}/RecoveryImage.dmg" -O raw "${VM_PATH}/RecoveryImage.img" 2>/dev/null fi rm "${VM_PATH}/RecoveryImage.dmg" "${VM_PATH}/RecoveryImage.chunklist" echo " - RecoveryImage.img is ready." fi echo "Downloading OpenCore & UEFI firmware" web_get "https://github.com/kholia/OSX-KVM/raw/master/OpenCore/OpenCore.qcow2" "${VM_PATH}" web_get "https://github.com/kholia/OSX-KVM/raw/master/OVMF_CODE.fd" "${VM_PATH}" if [ ! -e "${VM_PATH}/OVMF_VARS-1920x1080.fd" ]; then web_get "https://github.com/kholia/OSX-KVM/raw/master/OVMF_VARS-1920x1080.fd" "${VM_PATH}" fi fi make_vm_config RecoveryImage.img } function specific_tweaks() { echo "disk_size=\"128G\"" >> "${CONF_FILE}" echo "macos_release=\"${RELEASE}\"" >> "${CONF_FILE}" # https://github.com/quickemu-project/quickemu/issues/438 if [ "${RELEASE}" == "monterey" ]; then echo "cpu_cores=2" >> "${CONF_FILE}" fi }