Spaces:
Runtime error
Runtime error
| set -Eeuo pipefail | |
| # Docker environment variables | |
| : "${SN:=""}" # Device serial | |
| : "${MLB:=""}" # Board serial | |
| : "${MAC:=""}" # MAC address | |
| : "${UUID:=""}" # Unique ID | |
| : "${WIDTH:="1920"}" # Horizontal | |
| : "${HEIGHT:="1080"}" # Vertical | |
| : "${VERSION:="13"}" # OSX Version | |
| : "${MODEL:="iMacPro1,1"}" # Device model | |
| TMP="$STORAGE/tmp" | |
| BASE_IMG_ID="InstallMedia" | |
| BASE_IMG="$STORAGE/base.dmg" | |
| BASE_VERSION="$STORAGE/$PROCESS.version" | |
| downloadImage() { | |
| local board | |
| local version="$1" | |
| local file="BaseSystem" | |
| local path="$TMP/$file.dmg" | |
| case "${version,,}" in | |
| "sequoia" | "15"* ) | |
| board="Mac-937A206F2EE63C01" ;; | |
| "sonoma" | "14"* ) | |
| board="Mac-827FAC58A8FDFA22" ;; | |
| "ventura" | "13"* ) | |
| board="Mac-4B682C642B45593E" ;; | |
| "monterey" | "12"* ) | |
| board="Mac-B809C3757DA9BB8D" ;; | |
| "bigsur" | "big-sur" | "11"* ) | |
| board="Mac-2BD1B31983FE1663" ;; | |
| "catalina" | "10"* ) | |
| board="Mac-00BE6ED71E35EB86" ;; | |
| *) | |
| error "Unknown VERSION specified, value \"${version}\" is not recognized!" | |
| return 1 ;; | |
| esac | |
| local msg="Downloading macOS ${version^}" | |
| info "$msg recovery image..." && html "$msg..." | |
| rm -rf "$TMP" | |
| mkdir -p "$TMP" | |
| /run/progress.sh "$path" "" "$msg ([P])..." & | |
| if ! /run/fetch.py -b "$board" -n "$file" -os latest -o "$TMP" download; then | |
| error "Failed to fetch macOS \"${version^}\" recovery image with board id \"$board\"!" | |
| fKill "progress.sh" | |
| return 1 | |
| fi | |
| fKill "progress.sh" | |
| if [ ! -f "$path" ] || [ ! -s "$path" ]; then | |
| error "Failed to find file \"$path\" !" | |
| return 1 | |
| fi | |
| mv -f "$path" "$BASE_IMG" | |
| rm -rf "$TMP" | |
| echo "$version" > "$BASE_VERSION" | |
| return 0 | |
| } | |
| generateID() { | |
| local file="$STORAGE/$PROCESS.id" | |
| [ -n "$UUID" ] && return 0 | |
| [ -s "$file" ] && UUID=$(<"$file") | |
| [ -n "$UUID" ] && return 0 | |
| UUID=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random) | |
| UUID="${UUID^^}" | |
| echo "$UUID" > "$file" | |
| return 0 | |
| } | |
| generateAddress() { | |
| local file="$STORAGE/$PROCESS.mac" | |
| [ -n "$MAC" ] && return 0 | |
| [ -s "$file" ] && MAC=$(<"$file") | |
| [ -n "$MAC" ] && return 0 | |
| # Generate Apple MAC address based on Docker container ID in hostname | |
| MAC=$(echo "$HOST" | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/00:16:cb:\3:\4:\5/') | |
| MAC="${MAC^^}" | |
| echo "$MAC" > "$file" | |
| return 0 | |
| } | |
| generateSerial() { | |
| local file="$STORAGE/$PROCESS.sn" | |
| local file2="$STORAGE/$PROCESS.mlb" | |
| [ -n "$SN" ] && [ -n "$MLB" ] && return 0 | |
| [ -s "$file" ] && SN=$(<"$file") | |
| [ -s "$file2" ] && MLB=$(<"$file2") | |
| [ -n "$SN" ] && [ -n "$MLB" ] && return 0 | |
| # Generate unique serial numbers for machine | |
| SN=$(/usr/local/bin/macserial --num 1 --model "${MODEL}" 2>/dev/null) | |
| SN="${SN##*$'\n'}" | |
| [[ "$SN" != *" | "* ]] && error "$SN" && return 1 | |
| MLB=${SN#*|} | |
| MLB="${MLB#"${MLB%%[![:space:]]*}"}" | |
| SN="${SN%%|*}" | |
| SN="${SN%"${SN##*[![:space:]]}"}" | |
| echo "$SN" > "$file" | |
| echo "$MLB" > "$file2" | |
| return 0 | |
| } | |
| if [ ! -f "$BASE_IMG" ] || [ ! -s "$BASE_IMG" ]; then | |
| if ! downloadImage "$VERSION"; then | |
| rm -rf "$TMP" | |
| exit 34 | |
| fi | |
| fi | |
| STORED_VERSION="" | |
| if [ -f "$BASE_VERSION" ]; then | |
| STORED_VERSION=$(<"$BASE_VERSION") | |
| fi | |
| if [ "$VERSION" != "$STORED_VERSION" ]; then | |
| info "Different version detected, switching base image from \"$STORED_VERSION\" to \"$VERSION\"" | |
| if ! downloadImage "$VERSION"; then | |
| rm -rf "$TMP" | |
| exit 34 | |
| fi | |
| fi | |
| if ! generateID; then | |
| error "Failed to generate UUID!" && exit 35 | |
| fi | |
| if ! generateSerial; then | |
| error "Failed to generate serialnumber!" && exit 36 | |
| fi | |
| if ! generateAddress; then | |
| error "Failed to generate MAC address!" && exit 37 | |
| fi | |
| DISK_OPTS="-device virtio-blk-pci,drive=${BASE_IMG_ID},bus=pcie.0,addr=0x6" | |
| DISK_OPTS+=" -drive file=$BASE_IMG,id=$BASE_IMG_ID,format=dmg,cache=unsafe,readonly=on,if=none" | |
| return 0 | |