diff options
| author | sickcodes <[email protected]> | 2021-03-09 08:44:58 +0000 |
|---|---|---|
| committer | sickcodes <[email protected]> | 2021-03-09 08:44:58 +0000 |
| commit | ab9761adb743713646c537f464514b3e0eba46de (patch) | |
| tree | bfdb38979871a49a5c1413643efdfe190168a6d2 /custom/generate-unique-machine-values.sh | |
| parent | Merge pull request #169 from sickcodes/nopicker-bug (diff) | |
| download | docker-osx-ab9761adb743713646c537f464514b3e0eba46de.tar.xz docker-osx-ab9761adb743713646c537f464514b3e0eba46de.zip | |
Add https://github.com/sickcodes/osx-serial-generator.git as a submodule to replace ./custom
Diffstat (limited to 'custom/generate-unique-machine-values.sh')
| -rwxr-xr-x | custom/generate-unique-machine-values.sh | 376 |
1 files changed, 0 insertions, 376 deletions
diff --git a/custom/generate-unique-machine-values.sh b/custom/generate-unique-machine-values.sh deleted file mode 100755 index 0c006ba..0000000 --- a/custom/generate-unique-machine-values.sh +++ /dev/null @@ -1,376 +0,0 @@ -#!/bin/bash -# ____ __ ____ ______ __ -# / __ \____ _____/ /_____ _____/ __ \/ ___/ |/ / -# / / / / __ \/ ___/ //_/ _ \/ ___/ / / /\__ \| / -# / /_/ / /_/ / /__/ ,< / __/ / / /_/ /___/ / | -# /_____/\____/\___/_/|_|\___/_/ \____//____/_/|_| SERIALIZER -# -# Repo: https://github.com/sickcodes/Docker-OSX/ -# Title: Mac on Docker (Docker-OSX) -# Author: Sick.Codes https://sick.codes/ -# Version: 3.1 -# License: GPLv3+ - -help_text="Usage: ./generate-unique-machine-values.sh - -General options: - --count, -n, -c <count> Number of serials to generate - --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 - --width <string> Resolution x axis length in px, default 1920 - --height <string> Resolution y axis length in px, default 1080 - --master-plist-url <url> Specify an alternative master plist, via URL - --master-plist <filename> Optionally change the input plist - --custom-plist <filename> Same as --master-plist - --output-bootdisk <filename> Optionally change the bootdisk filename - --envs Create all corresponding sourcable envs - --plists Create all corresponding config.plists - --bootdisks Create all corresponding bootdisks [SLOW] - --help, -h, help Display this help and exit - -Additional options only if you are creating only ONE serial set: - --output-bootdisk <filename> Optionally change the bootdisk filename - --output-env <filename> Optionally change the serials env filename - -Custom plist placeholders: - {{DEVICE_MODEL}}, {{SERIAL}}, {{BOARD_SERIAL}}, - {{UUID}}, {{ROM}}, {{WIDTH}}, {{HEIGHT}} - -Example: - ./generate-unique-machine-values.sh --count 1 --plists --bootdisks --envs - -Defaults: - - One serial, for 'iMacPro1,1', in the current working directory - - CSV and TSV output - - plists in ./plists/ & bootdisks in ./bootdisks/ & envs in ./envs - - if you set --bootdisk name, --bootdisks is assumed - - if you set --custom-plist, --plists is assumed - - if you set --output-env, --envs is assumed - -Author: Sick.Codes https://sick.codes/ -Project: https://github.com/sickcodes/Docker-OSX/ -" - -MACINFOPKG_VERSION=2.1.2 -OPENCORE_IMAGE_MAKER_URL='https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/opencore-image-ng.sh' - -# gather arguments -while (( "$#" )); do - case "${1}" in - - --help | -h | h | help ) - echo "${help_text}" && exit 0 - ;; - - --count=* | -c=* | -n=* ) - export SERIAL_SET_COUNT="${1#*=}" - shift - ;; - --count* | -c* | -n* ) - export SERIAL_SET_COUNT="${2}" - shift - shift - ;; - - --csv=* ) - export CSV_OUTPUT_FILENAME="${1#*=}" - shift - ;; - --csv* ) - export CSV_OUTPUT_FILENAME="${2}" - shift - shift - ;; - - --tsv=* ) - export TSV_OUTPUT_FILENAME="${1#*=}" - shift - ;; - --tsv* ) - export TSV_OUTPUT_FILENAME="${2}" - shift - shift - ;; - - --output-dir=* ) - export OUTPUT_DIRECTORY="${1#*=}" - shift - ;; - --output-dir* ) - export OUTPUT_DIRECTORY="${2}" - shift - shift - ;; - - --output-bootdisk=* ) - export OUTPUT_BOOTDISK="${1#*=}" - shift - ;; - --output-bootdisk* ) - export OUTPUT_QCOW="${2}" - shift - shift - ;; - - --output-env=* ) - export OUTPUT_ENV="${1#*=}" - shift - ;; - --output-env* ) - export OUTPUT_ENV="${2}" - shift - shift - ;; - - --model=* | -m=* ) - export DEVICE_MODEL="${1#*=}" - shift - ;; - --model* | -m* ) - export DEVICE_MODEL="${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 - ;; - - --master-plist-url=* ) - export MASTER_PLIST_URL="${1#*=}" - shift - ;; - - --master-plist-url* ) - export MASTER_PLIST_URL="${2}" - shift - shift - ;; - - --master-plist=* ) - export MASTER_PLIST="${1#*=}" - shift - ;; - - --master-plist* ) - export MASTER_PLIST="${2}" - shift - shift - ;; - - --custom-plist=* ) - export MASTER_PLIST="${1#*=}" - shift - ;; - - --custom-plist* ) - export MASTER_PLIST="${2}" - shift - shift - ;; - - --plists ) - export CREATE_PLISTS=1 - shift - ;; - --bootdisks ) - export CREATE_BOOTDISKS=1 - shift - ;; - --envs ) - export CREATE_ENVS=1 - shift - ;; - - *) - echo "Invalid option. Running with default values..." - shift - ;; - esac -done - - -build_mac_serial () { - export MACINFOPKG_VERSION="${MACINFOPKG_VERSION:=2.1.2}" - wget -O "${TARBALL:=./MacInfoPkg.tar.gz}" \ - "https://github.com/acidanthera/MacInfoPkg/archive/${MACINFOPKG_VERSION}.tar.gz" - tar -xzvf "${TARBALL}" - cd "./MacInfoPkg-${MACINFOPKG_VERSION}/macserial" \ - && ./build.tool \ - && cd - - mv "./MacInfoPkg-${MACINFOPKG_VERSION}/macserial/bin/macserial" . - rm -f "${TARBALL}" - rm -rf "./MacInfoPkg-${MACINFOPKG_VERSION}/" - chmod +x ./macserial - stat ./macserial -} - -download_vendor_mac_addresses () { - # download the MAC Address vendor list - [[ -e "${MAC_ADDRESSES_FILE:=vendor_macs.tsv}" ]] || wget -O "${MAC_ADDRESSES_FILE}" https://gitlab.com/wireshark/wireshark/-/raw/master/manuf -} - -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 - # EFI Shell commands - touch startup.nsh && echo 'fs0:\EFI\BOOT\BOOTx64.efi' > startup.nsh -} - - -generate_serial_sets () { - - - - if [[ "${CSV_OUTPUT_FILENAME}" ]]; then - [[ ${CSV_OUTPUT_FILENAME} ]] && export CSV_SERIAL_SETS_FILE="${CSV_OUTPUT_FILENAME}" - elif [[ "${TSV_OUTPUT_FILENAME}" ]]; then - [[ ${TSV_OUTPUT_FILENAME} ]] && export TSV_SERIAL_SETS_FILE="${TSV_OUTPUT_FILENAME}" - else - export CSV_SERIAL_SETS_FILE="${OUTPUT_DIRECTORY}/serial_sets-${DATE_NOW}.csv" - export TSV_SERIAL_SETS_FILE="${OUTPUT_DIRECTORY}/serial_sets-${DATE_NOW}.tsv" - fi - - ./macserial \ - --num "${SERIAL_SET_COUNT}" \ - --model "${DEVICE_MODEL}" \ - | while IFS='\ \|\ ' read -r SERIAL BOARD_SERIAL; do - # make a uuid... - UUID="$(uuidgen)" - UUID="${UUID^^}" - - # get a random vendor specific MAC address. - RANDOM_MAC_PREFIX="$(grep -e "${VENDOR_REGEX}" < "${MAC_ADDRESSES_FILE:=vendor_macs.tsv}" | sort --random-sort | head -n1)" - RANDOM_MAC_PREFIX="$(cut -d$'\t' -f1 <<< "${RANDOM_MAC_PREFIX}")" - MAC_ADDRESS="$(printf "${RANDOM_MAC_PREFIX}:%02X:%02X:%02X" $[RANDOM%256] $[RANDOM%256] $[RANDOM%256])" - - [[ -z "${WIDTH}" ]] && WIDTH=1920 - [[ -z "${HEIGHT}" ]] && HEIGHT=1080 - - # append to csv file - cat <<EOF >> "${CSV_SERIAL_SETS_FILE}" -"${DEVICE_MODEL}","${SERIAL}","${BOARD_SERIAL}","${UUID}","${MAC_ADDRESS}","${WIDTH}","${HEIGHT}" -EOF - - # append to tsv file - T=$'\t' - cat <<EOF >> "${TSV_SERIAL_SETS_FILE}" -${DEVICE_MODEL}${T}${SERIAL}${T}${BOARD_SERIAL}${T}${UUID}${T}${MAC_ADDRESS}${T}${WIDTH}${T}${HEIGHT} -EOF - - # make envs if --envs, but also if you set the env filename it will switch on by itself - if [[ "${CREATE_ENVS}" ]] || [[ "${OUTPUT_ENV}" ]]; then - mkdir -p "${OUTPUT_DIRECTORY}/envs" - OUTPUT_ENV_FILE="${OUTPUT_ENV:-"${OUTPUT_DIRECTORY}/envs/${SERIAL}.env.sh"}" - touch "${OUTPUT_ENV_FILE}" - cat <<EOF > "${OUTPUT_ENV_FILE}" -export DEVICE_MODEL="${DEVICE_MODEL}" -export SERIAL="${SERIAL}" -export BOARD_SERIAL="${BOARD_SERIAL}" -export UUID="${UUID}" -export MAC_ADDRESS="${MAC_ADDRESS}" -export WIDTH="${WIDTH}" -export HEIGHT="${HEIGHT}" -EOF - - fi - - # plist required for bootdisks, so create anyway. - if [[ "${CREATE_PLISTS}" ]] || [[ "${CREATE_BOOTDISKS}" ]]; then - - # 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 AND a custom plist URL. Only use one of those options.' - elif [[ "${MASTER_PLIST_URL}" ]]; then - wget -O "${MASTER_PLIST:=./config-custom.plist}" "${MASTER_PLIST_URL}" \ - || { echo "Could not download ${MASTER_PLIST_URL}" && exit 1 ; } - else - MASTER_PLIST_URL='https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist' - wget -O "${MASTER_PLIST:=./config-nopicker-custom.plist}" "${MASTER_PLIST_URL}" \ - || { echo "Could not download ${MASTER_PLIST_URL}" && exit 1 ; } - fi - - mkdir -p "${OUTPUT_DIRECTORY}/plists" - source "${OUTPUT_ENV_FILE}" - ROM_VALUE="${MAC_ADDRESS//\:/}" - ROM_VALUE="${ROM_VALUE,,}" - 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}"/g \ - -e s/{{HEIGHT}}/"${HEIGHT}"/g \ - "${MASTER_PLIST}" > "${OUTPUT_DIRECTORY}/plists/${SERIAL}.config.plist" || exit 1 - fi - - # make bootdisk qcow2 format if --bootdisks, but also if you set the bootdisk filename - if [[ "${CREATE_BOOTDISKS}" ]] || [[ "${OUTPUT_BOOTDISK}" ]]; then - [[ -e ./opencore-image-ng.sh ]] \ - || { wget "${OPENCORE_IMAGE_MAKER_URL}" \ - && chmod +x opencore-image-ng.sh ; } - mkdir -p "${OUTPUT_DIRECTORY}/bootdisks" - ./opencore-image-ng.sh \ - --cfg "${OUTPUT_DIRECTORY}/plists/${SERIAL}.config.plist" \ - --img "${OUTPUT_BOOTDISK:-${OUTPUT_DIRECTORY}/bootdisks/${SERIAL}.OpenCore-nopicker.qcow2}" || exit 1 - fi - - done - - [[ -e "${CSV_SERIAL_SETS_FILE}" ]] && \ - cat <(echo "DEVICE_MODEL,SERIAL,BOARD_SERIAL,UUID,MAC_ADDRESS") "${CSV_SERIAL_SETS_FILE}" - - - [[ -e "${TSV_SERIAL_SETS_FILE}" ]] && \ - cat <(printf "DEVICE_MODEL\tSERIAL\tBOARD_SERIAL\tUUID\tMAC_ADDRESS\n") "${TSV_SERIAL_SETS_FILE}" - -} - -main () { - # setting default variables if there are no options - export DATE_NOW="$(date +%F-%T)" - export DEVICE_MODEL="${DEVICE_MODEL:=iMacPro1,1}" - export VENDOR_REGEX="${VENDOR_REGEX:=Apple, Inc.}" - export SERIAL_SET_COUNT="${SERIAL_SET_COUNT:=1}" - export OUTPUT_DIRECTORY="${OUTPUT_DIRECTORY:=.}" - cat <<EOF -DEVICE_MODEL: ${DEVICE_MODEL} -SERIAL_SET_COUNT: ${SERIAL_SET_COUNT} -OUTPUT_DIRECTORY: ${OUTPUT_DIRECTORY} -EOF - [[ -d "${OUTPUT_DIRECTORY}" ]] || mkdir -p "${OUTPUT_DIRECTORY}" - [[ -e ./macserial ]] || build_mac_serial - download_vendor_mac_addresses - download_qcow_efi_folder - generate_serial_sets - echo "${SERIAL_SETS_FILE}" -} - -main - |