aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsickcodes <[email protected]>2021-02-24 09:46:18 +0000
committersickcodes <[email protected]>2021-02-24 09:46:18 +0000
commit246fd12c1842da1ef03d2b6241c15e7e60731609 (patch)
tree4422742ee82db8b9730d94a338c5978d6e930811
parentAdd config.plist and OpenCore boot disk generator to the script. (diff)
downloaddocker-osx-246fd12c1842da1ef03d2b6241c15e7e60731609.tar.xz
docker-osx-246fd12c1842da1ef03d2b6241c15e7e60731609.zip
TSV output, for easier scripting
-rwxr-xr-xcustom/generate-unique-machine-values.sh69
1 files changed, 54 insertions, 15 deletions
diff --git a/custom/generate-unique-machine-values.sh b/custom/generate-unique-machine-values.sh
index a93aab6..d754d04 100755
--- a/custom/generate-unique-machine-values.sh
+++ b/custom/generate-unique-machine-values.sh
@@ -13,26 +13,37 @@
help_text="Usage: generate-unique-machine-values.sh
-Example:
- ./generate-unique-machine-values.sh --count 1 --model="iMacPro1,1"
-
General options:
--count, -n, -c <count> Number of serials to generate
- --model, -m <model> Device model, e.g. "iMacPro1,1"
+ --model, -m <model> Device model, e.g. 'iMacPro1,1'
--csv <filename> Optionally change the CSV output filename.
+ --tsv <filename> Optionally change the TSV output filename.
--output-dir <directory> Optionally change the script output location.
--help, -h, help Display this help and exit
--plists Create corresponding config.plists for each serial set.
--qcows [SLOW] Create corresponding boot disk images for each serial set.
+Example:
+ ./generate-unique-machine-values.sh --count 1 --model='iMacPro1,1' --plists --qcows
+
+ The above example will generate a
+ - serial
+ - board serial
+ - uuid
+ - MAC address
+ - ROM value based on lowercase MAC address
+ - Boot disk qcow image.
+ - config.plist
+
Notes:
- - Default is 1 serial for "iMacPro1,1" in the current working directory.
+ - Default is 1 serial for 'iMacPro1,1' in the current working directory.
+ - Default output is CSV, whereas setting the TSV option will output as tab-separated.
- CSV is double quoted.
- If you do not set a CSV filename, the output will be sent to the output-dir.
- If you do not set an output-dir, the current directory will be the output directory.
- - Sourcable environment variable shell files will be written to a folder, "envs".
- - config.plist files will be written to a folder, "plists".
+ - Sourcable environment variable shell files will be written to a folder, 'envs'.
+ - config.plist files will be written to a folder, 'plists'.
Author: Sick.Codes https://sick.codes/
Project: https://github.com/sickcodes/Docker-OSX/
@@ -69,6 +80,16 @@ while (( "$#" )); do
shift
;;
+ --tsv=* )
+ export TSV_OUTPUT_FILENAME="${1#*=}"
+ shift
+ ;;
+ --tsv* )
+ export TSV_OUTPUT_FILENAME="${2}"
+ shift
+ shift
+ ;;
+
--output-dir=* )
export OUTPUT_DIRECTORY="${1#*=}"
shift
@@ -127,15 +148,13 @@ download_vendor_mac_addresses () {
}
download_qcow_efi_folder () {
- git clone https://github.com/kholia/OSX-KVM.git
+ 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 https://github.com/acidanthera/OcBinaryData.git
-
+ git clone --depth 1 https://github.com/acidanthera/OcBinaryData.git
# copy said drivers into EFI/OC/Resources
cp -a ./OcBinaryData/Resources/* ./EFI/OC/Resources
-
# EFI Shell commands
touch startup.nsh && echo 'fs0:\EFI\BOOT\BOOTx64.efi' > startup.nsh
}
@@ -147,8 +166,9 @@ generate_serial_sets () {
export DEVICE_MODEL="${DEVICE_MODEL:=iMacPro1,1}"
export VENDOR_REGEX="${VENDOR_REGEX:=Apple, Inc.}"
- if [[ "${CSV_OUTPUT_FILENAME}" ]]; then
- export SERIAL_SETS_FILE="${CSV_OUTPUT_FILENAME}"
+ if [[ "${CSV_OUTPUT_FILENAME}" ]] || [[ "${TSV_OUTPUT_FILENAME}" ]]; then
+ [[ ${CSV_OUTPUT_FILENAME} ]] && export CSV_SERIAL_SETS_FILE="${CSV_OUTPUT_FILENAME}"
+ [[ ${TSV_OUTPUT_FILENAME} ]] && export TSV_SERIAL_SETS_FILE="${TSV_OUTPUT_FILENAME}"
else
export SERIAL_SETS_FILE="${OUTPUT_DIRECTORY}/serial_sets-${DATE_NOW}.csv"
fi
@@ -169,7 +189,16 @@ generate_serial_sets () {
RANDOM_MAC_PREFIX="$(cut -d$'\t' -f1 <<< "${RANDOM_MAC_PREFIX}")"
MacAddress="$(printf "${RANDOM_MAC_PREFIX}:%02X:%02X:%02X" $[RANDOM%256] $[RANDOM%256] $[RANDOM%256])"
- echo "\"${DEVICE_MODEL}\",\"${Serial}\",\"${BoardSerial}\",\"${SmUUID}\",\"${MacAddress}\"" >> "${SERIAL_SETS_FILE}"
+ # append to csv file
+ if [[ "${CSV_SERIAL_SETS_FILE}" ]]; then
+ echo "\"${DEVICE_MODEL}\",\"${Serial}\",\"${BoardSerial}\",\"${SmUUID}\",\"${MacAddress}\"" >> "${CSV_SERIAL_SETS_FILE}"
+ fi
+
+ # append to tsv file
+ if [[ "${TSV_SERIAL_SETS_FILE}" ]]; then
+ printf "${DEVICE_MODEL}\t${Serial}\t${BoardSerial}\t${SmUUID}\t${MacAddress}\n" >> "${TSV_SERIAL_SETS_FILE}"
+ fi
+
touch "${OUTPUT_DIRECTORY}/envs/${Serial}.env.sh"
cat <<EOF > "${OUTPUT_DIRECTORY}/envs/${Serial}.env.sh"
export Type=${DEVICE_MODEL}
@@ -179,8 +208,12 @@ export SmUUID=${SmUUID}
export MacAddress=${MacAddress}
EOF
+ # plist required for qcows, so create anyway.
if [[ "${CREATE_PLISTS}" ]] || [[ "${CREATE_QCOWS}" ]]; then
mkdir -p "${OUTPUT_DIRECTORY}/plists"
+ source "${OUTPUT_DIRECTORY}/envs/${Serial}.env.sh"
+ ROM_VALUE="${MacAddress//\:/}"
+ ROM_VALUE="${ROM_VALUE,,}"
sed -e s/{{DEVICE_MODEL}}/"${Type}"/g \
-e s/{{SERIAL_OLD}}/"${Serial}"/g \
-e s/{{BOARD_SERIAL_OLD}}/"${BoardSerial}"/g \
@@ -198,7 +231,13 @@ EOF
done
- cat <(echo "Type,Serial,BoardSerial,SmUUID,MacAddress") "${SERIAL_SETS_FILE}"
+ [[ -e "${CSV_SERIAL_SETS_FILE}" ]] && \
+ cat <(echo "Type,Serial,BoardSerial,SmUUID,MacAddress") "${CSV_SERIAL_SETS_FILE}"
+
+
+ [[ -e "${TSV_SERIAL_SETS_FILE}" ]] && \
+ cat <(printf "Type\tSerial\tBoardSerial\tSmUUID\tMacAddress\n") "${TSV_SERIAL_SETS_FILE}"
+
}
main () {