aboutsummaryrefslogtreecommitdiff
path: root/custom/generate-specific-bootdisk.sh
diff options
context:
space:
mode:
Diffstat (limited to 'custom/generate-specific-bootdisk.sh')
-rwxr-xr-xcustom/generate-specific-bootdisk.sh205
1 files changed, 153 insertions, 52 deletions
diff --git a/custom/generate-specific-bootdisk.sh b/custom/generate-specific-bootdisk.sh
index 76aff0c..386c13b 100755
--- a/custom/generate-specific-bootdisk.sh
+++ b/custom/generate-specific-bootdisk.sh
@@ -1,43 +1,58 @@
#!/bin/bash
-# ____ __ ____ ______ __
-# / __ \____ _____/ /_____ _____/ __ \/ ___/ |/ /
-# / / / / __ \/ ___/ //_/ _ \/ ___/ / / /\__ \| /
-# / /_/ / /_/ / /__/ ,< / __/ / / /_/ /___/ / |
-# /_____/\____/\___/_/|_|\___/_/ \____//____/_/|_| GEN BOOT DISK
+# ___ _____ __ ___ _ _ ___ _
+# / _ \/ __\ \/ / / __| ___ _ _(_)__ _| | / __|___ _ _ ___ _ _ __ _| |_ ___ _ _
+# | (_) \__ \> < \__ \/ -_) '_| / _` | | | (_ / -_) ' \/ -_) '_/ _` | _/ _ \ '_|
+# \___/|___/_/\_\ |___/\___|_| |_\__,_|_| \___\___|_||_\___|_| \__,_|\__\___/_|
#
-# Repo: https://github.com/sickcodes/Docker-OSX/
-# Title: Mac on Docker (Docker-OSX)
+# Repo: https://github.com/sickcodes/osx-serial-generator/
+# Title: OSX Serial Generator
# Author: Sick.Codes https://sick.codes/
# Version: 3.1
# License: GPLv3+
-help_text="Usage: generate-specific-bootdisk.sh
+set -e
-General options:
+help_text="Usage: ./generate-specific-bootdisk.sh
+
+Required options:
--model <string> Device model, e.g. 'iMacPro1,1'
- --serial <filename> Device Serial number.
- --board-serial <filename> Board Serial number.
- --uuid <filename> SmUUID.
- --mac-address <string> Used to set the ROM value; lowercased and without a colon.
- --output-bootdisk <filename> Optionally change the bootdisk output filename.
+ --serial <string> Device Serial number
+ --board-serial <string> Main Logic Board Serial number (MLB)
+ --uuid <string> SMBIOS UUID (SmUUID)
+ --mac-address <string> Used for both the MAC address and to set ROM
+ ROM is lowercased sans any colons
+Optional options:
+ --width <integer> Resolution x axis length in px, default 1920
+ --height <integer> Resolution y axis length in px, default 1080
+ --input-plist-url <url> Specify an alternative master plist, via URL
+ --master-plist-url <url> Same as above.
--custom-plist <filename> Optionally change the input plist.
-
+ --master-plist <filename> Same as above.
+ --output-bootdisk <filename> Optionally change the bootdisk filename
+ --output-plist <filename> Optionally change the output plist filename
--help, -h, help Display this help and exit
+Placeholders: {{DEVICE_MODEL}}, {{SERIAL}}, {{BOARD_SERIAL}}, {{UUID}},
+ {{ROM}}, {{WIDTH}}, {{HEIGHT}}
+
Example:
- ./generate-specific-bootdisk.sh \
- --model iMacPro1,1 \
- --serial C02TW0WAHX87 \
- --board-serial C027251024NJG36UE \
- --uuid 5CCB366D-9118-4C61-A00A-E5BAF3BED451 \
- --mac-address A8:5C:2C:9A:46:2F \
- --output-bootdisk OpenCore-nopicker.qcow2
+ ./generate-specific-bootdisk.sh \\
+ --model iMacPro1,1 \\
+ --serial C02TW0WAHX87 \\
+ --board-serial C027251024NJG36UE \\
+ --uuid 5CCB366D-9118-4C61-A00A-E5BAF3BED451 \\
+ --mac-address A8:5C:2C:9A:46:2F \\
+ --output-bootdisk ./OpenCore-nopicker.qcow2 \\
+ --width 1920 \\
+ --height 1080
Author: Sick.Codes https://sick.codes/
-Project: https://github.com/sickcodes/Docker-OSX/
+Project: https://github.com/sickcodes/osx-serial-generator/
+License: GPLv3+
"
-PLIST_MASTER=config-nopicker-custom.plist
+OPENCORE_IMAGE_MAKER_URL='https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/opencore-image-ng.sh'
+MASTER_PLIST_URL='https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-nopicker-custom.plist'
# gather arguments
while (( "$#" )); do
@@ -51,6 +66,7 @@ while (( "$#" )); do
export DEVICE_MODEL="${1#*=}"
shift
;;
+
--model* | -m* )
export DEVICE_MODEL="${2}"
shift
@@ -61,6 +77,7 @@ while (( "$#" )); do
export SERIAL="${1#*=}"
shift
;;
+
--serial* )
export SERIAL="${2}"
shift
@@ -71,6 +88,7 @@ while (( "$#" )); do
export BOARD_SERIAL="${1#*=}"
shift
;;
+
--board-serial* )
export BOARD_SERIAL="${2}"
shift
@@ -81,6 +99,7 @@ while (( "$#" )); do
export UUID="${1#*=}"
shift
;;
+
--uuid* )
export UUID="${2}"
shift
@@ -91,34 +110,81 @@ while (( "$#" )); do
export MAC_ADDRESS="${1#*=}"
shift
;;
+
--mac-address* )
export MAC_ADDRESS="${2}"
shift
shift
;;
+ --width=* )
+ export WIDTH="${1#*=}"
+ shift
+ ;;
+
+ --width* )
+ export WIDTH="${2}"
+ shift
+ shift
+ ;;
+
+ --height=* )
+ export HEIGHT="${1#*=}"
+ shift
+ ;;
+
+ --height* )
+ export HEIGHT="${2}"
+ shift
+ shift
+ ;;
+
--output-bootdisk=* )
export OUTPUT_QCOW="${1#*=}"
shift
;;
+
--output-bootdisk* )
export OUTPUT_QCOW="${2}"
shift
shift
;;
- --custom-plist=* )
- export INPUT_PLIST="${1#*=}"
+ --output-plist=* )
+ export OUTPUT_PLIST="${1#*=}"
+ shift
+ ;;
+
+ --output-plist* )
+ export OUTPUT_PLIST="${2}"
+ shift
+ shift
+ ;;
+
+ --master-plist-url=* | --input-plist-url=* | --custom-plist-url=* )
+ export MASTER_PLIST_URL="${1#*=}"
shift
;;
- --custom-plist* )
- export INPUT_PLIST="${2}"
+
+ --master-plist-url* | --input-plist-url* | --custom-plist-url* )
+ export MASTER_PLIST_URL="${2}"
+ shift
+ shift
+ ;;
+
+ --master-plist=* | --input-plist=* | --custom-plist=* )
+ export MASTER_PLIST="${1#*=}"
+ shift
+ ;;
+
+ --master-plist* | --input-plist* | --custom-plist* )
+ export MASTER_PLIST="${2}"
shift
shift
;;
*)
- echo "Invalid option. Running with default values..."
+ echo "Invalid option ${1}. Running with default values..."
shift
;;
esac
@@ -126,36 +192,69 @@ done
download_qcow_efi_folder () {
- git clone --depth 1 https://github.com/kholia/OSX-KVM.git
- cp -ra ./OSX-KVM/OpenCore-Catalina/EFI .
- mkdir -p ./EFI/OC/Resources
- # clone some Apple drivers
- git clone --depth 1 https://github.com/acidanthera/OcBinaryData.git
- # copy said drivers into EFI/OC/Resources
- cp -a ./OcBinaryData/Resources/* ./EFI/OC/Resources
+
+ export EFI_FOLDER=./OpenCore-Catalina/EFI
+ export RESOURCES_FOLDER=./resources/OcBinaryData/Resources
+
+ # check if we are inside OSX-KVM already
+ # if not, download OSX-KVM locally
+ [ -d ./OpenCore-Catalina/EFI/ ] || {
+ [ -d ./OSX-KVM/ ] || git clone --recurse-submodules --depth 1 https://github.com/kholia/OSX-KVM.git
+ export EFI_FOLDER="./OSX-KVM/${EFI_FOLDER}"
+ }
+
+ [ -d ./resources/OcBinaryData/Resources/ ] || {
+ export RESOURCES_FOLDER="./OSX-KVM/${RESOURCES_FOLDER}"
+ }
+
# EFI Shell commands
touch startup.nsh && echo 'fs0:\EFI\BOOT\BOOTx64.efi' > startup.nsh
+
+ cp -a "${EFI_FOLDER}" .
+
+ mkdir -p ./EFI/OC/Resources
+
+ # copy Apple drivers into EFI/OC/Resources
+ cp -a "${RESOURCES_FOLDER}"/* ./EFI/OC/Resources
}
generate_bootdisk () {
- [[ -e ./config-nopicker-custom.plist ]] || wget https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
- [[ -e ./opencore-image-ng.sh ]] || wget https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/opencore-image-ng.sh && chmod +x opencore-image-ng.sh
+
+ # need a config.plist
+ if [ "${MASTER_PLIST}" ]; then
+ [ -e "${MASTER_PLIST}" ] || echo "Could not find: ${MASTER_PLIST}"
+ elif [ "${MASTER_PLIST}" ] && [ "${MASTER_PLIST_URL}" ]; then
+ echo 'You specified both a custom plist FILE & custom plist URL.'
+ echo 'Use only one of those options.'
+ elif [ "${MASTER_PLIST_URL}" ]; then
+ wget -O "${MASTER_PLIST:=./config-custom.plist}" "${MASTER_PLIST_URL}"
+ else
+ # default is config-nopicker-custom.plist from OSX-KVM with placeholders used in Docker-OSX
+ wget -O "${MASTER_PLIST:=./config-nopicker-custom.plist}" "${MASTER_PLIST_URL}"
+ fi
+
+ [ -e ./opencore-image-ng.sh ] \
+ || { wget "${OPENCORE_IMAGE_MAKER_URL}" \
+ && chmod +x opencore-image-ng.sh ; }
+
# plist required for bootdisks, so create anyway.
- if [[ "${DEVICE_MODEL}" ]] \
- && [[ "${SERIAL}" ]] \
- && [[ "${BOARD_SERIAL}" ]] \
- && [[ "${UUID}" ]] \
- && [[ "${MAC_ADDRESS}" ]]; then
+ if [ "${DEVICE_MODEL}" ] \
+ && [ "${SERIAL}" ] \
+ && [ "${BOARD_SERIAL}" ] \
+ && [ "${UUID}" ] \
+ && [ "${MAC_ADDRESS}" ]; then
ROM="${MAC_ADDRESS//\:/}"
ROM="${ROM,,}"
- sed -e s/{{DEVICE_MODEL}}/"${DEVICE_MODEL}"/g \
- -e s/{{SERIAL}}/"${SERIAL}"/g \
- -e s/{{BOARD_SERIAL}}/"${BOARD_SERIAL}"/g \
- -e s/{{UUID}}/"${UUID}"/g \
- -e s/{{ROM}}/"${ROM}"/g \
- "${PLIST_MASTER}" > ./tmp.config.plist || exit 1
+ sed -e s/\{\{DEVICE_MODEL\}\}/"${DEVICE_MODEL}"/g \
+ -e s/\{\{SERIAL\}\}/"${SERIAL}"/g \
+ -e s/\{\{BOARD_SERIAL\}\}/"${BOARD_SERIAL}"/g \
+ -e s/\{\{UUID\}\}/"${UUID}"/g \
+ -e s/\{\{ROM\}\}/"${ROM}"/g \
+ -e s/\{\{WIDTH\}\}/"${WIDTH:-1920}"/g \
+ -e s/\{\{HEIGHT\}\}/"${HEIGHT:-1080}"/g \
+ "${MASTER_PLIST}" > ./tmp.config.plist || exit 1
else
- cat <<EOF
+ cat <<EOF && exit 1
Error: one of the following values is missing:
--model "${DEVICE_MODEL:-MISSING}"
@@ -164,12 +263,14 @@ Error: one of the following values is missing:
--uuid "${UUID:-MISSING}"
--mac-address "${MAC_ADDRESS:-MISSING}"
+--width "${WIDTH:-1920}"
+--height "${HEIGHT:-1080}"
+
EOF
- exit 1
fi
./opencore-image-ng.sh \
- --cfg "${INPUT_PLIST:-./tmp.config.plist}" \
+ --cfg "./tmp.config.plist" \
--img "${OUTPUT_QCOW:-./${SERIAL}.OpenCore-nopicker.qcow2}" || exit 1
rm ./tmp.config.plist