diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..66e60a1 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "osx-serial-generator"] + path = osx-serial-generator + url = https://github.com/sickcodes/osx-serial-generator.git diff --git a/Dockerfile b/Dockerfile index 72f249e..57f81f8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -126,7 +126,7 @@ RUN tee -a sshd_config <<< 'AllowTcpForwarding yes' \ USER arch # download OSX-KVM -RUN git clone --depth 1 https://github.com/kholia/OSX-KVM.git /home/arch/OSX-KVM +RUN git clone --recurse-submodules --depth 1 https://github.com/kholia/OSX-KVM.git /home/arch/OSX-KVM # enable ssh # docker exec .... ./enable-ssh.sh @@ -201,7 +201,7 @@ RUN if [[ "${LINUX}" == true ]]; then \ # optional --build-arg to change branches for testing ARG BRANCH=master ARG REPO='https://github.com/sickcodes/Docker-OSX.git' -RUN git clone --branch "${BRANCH}" "${REPO}" +RUN git clone --recurse-submodules --depth 1 --branch "${BRANCH}" "${REPO}" # env -e ADDITIONAL_PORTS with a comma # for example, -e ADDITIONAL_PORTS=hostfwd=tcp::23-:23, @@ -302,7 +302,7 @@ CMD sudo chown -R $(id -u):$(id -g) /dev/kvm /dev/snd "${IMAGE_PATH}" "${BOOTDIS ; } \ || export BOOTDISK="${BOOTDISK:=/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \ ; [[ "${GENERATE_UNIQUE}" == true ]] && { \ - ./Docker-OSX/custom/generate-unique-machine-values.sh \ + ./Docker-OSX/osx-serial-generator/generate-unique-machine-values.sh \ --master-plist-url="${MASTER_PLIST_URL}" \ --count 1 \ --tsv ./serial.tsv \ @@ -314,7 +314,7 @@ CMD sudo chown -R $(id -u):$(id -g) /dev/kvm /dev/snd "${IMAGE_PATH}" "${BOOTDIS ; } \ ; [[ "${GENERATE_SPECIFIC}" == true ]] && { \ source "${ENV:=/env}" 2>/dev/null \ - ; ./Docker-OSX/custom/generate-specific-bootdisk.sh \ + ; ./Docker-OSX/osx-serial-generator/generate-specific-bootdisk.sh \ --master-plist-url="${MASTER_PLIST_URL}" \ --model "${DEVICE_MODEL}" \ --serial "${SERIAL}" \ diff --git a/Dockerfile.auto b/Dockerfile.auto index a9cb6a5..65efef8 100644 --- a/Dockerfile.auto +++ b/Dockerfile.auto @@ -79,7 +79,7 @@ RUN patched_glibc=glibc-linux4-2.33-4-x86_64.pkg.tar.zst \ RUN pacman -Syu xorg-server-xvfb wget xterm xorg-xhost xorg-xrandr sshpass --noconfirm \ && if [[ "${SCROT}" ]]; then \ pacman -Syu scrot base-devel --noconfirm \ - && git clone https://github.com/stolk/imcat.git \ + && git clone --recurse-submodules --depth 1 https://github.com/stolk/imcat.git \ && cd imcat \ && make \ && sudo cp imcat /usr/bin/imcat \ @@ -155,7 +155,7 @@ CMD echo "${BOILERPLATE}" \ ; } \ || export BOOTDISK="${BOOTDISK:=/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \ ; [[ "${GENERATE_UNIQUE}" == true ]] && { \ - ./Docker-OSX/custom/generate-unique-machine-values.sh \ + ./Docker-OSX/osx-serial-generator/generate-unique-machine-values.sh \ --master-plist-url="${MASTER_PLIST_URL}" \ --count 1 \ --tsv ./serial.tsv \ @@ -167,7 +167,7 @@ CMD echo "${BOILERPLATE}" \ ; } \ ; [[ "${GENERATE_SPECIFIC}" == true ]] && { \ source "${ENV:=/env}" 2>/dev/null \ - ; ./Docker-OSX/custom/generate-specific-bootdisk.sh \ + ; ./Docker-OSX/osx-serial-generator/generate-specific-bootdisk.sh \ --master-plist-url="${MASTER_PLIST_URL}" \ --model "${DEVICE_MODEL}" \ --serial "${SERIAL}" \ diff --git a/Dockerfile.naked b/Dockerfile.naked index 44fa0e4..bf006d7 100644 --- a/Dockerfile.naked +++ b/Dockerfile.naked @@ -68,7 +68,7 @@ ARG SCROT RUN pacman -Syu xorg-server-xvfb wget xterm xorg-xhost xorg-xrandr sshpass --noconfirm \ && if [[ "${SCROT}" ]]; then \ pacman -Syu scrot base-devel --noconfirm \ - && git clone https://github.com/stolk/imcat.git \ + && git clone --recurse-submodules --depth 1 https://github.com/stolk/imcat.git \ && cd imcat \ && make \ && sudo cp imcat /usr/bin/imcat \ @@ -125,7 +125,7 @@ CMD sudo chown -R $(id -u):$(id -g) /dev/kvm /dev/snd "${IMAGE_PATH}" "${BOOTDIS ; } \ || export BOOTDISK="${BOOTDISK:=/home/arch/OSX-KVM/OpenCore-Catalina/OpenCore.qcow2}" \ ; [[ "${GENERATE_UNIQUE}" == true ]] && { \ - ./Docker-OSX/custom/generate-unique-machine-values.sh \ + ./Docker-OSX/osx-serial-generator/generate-unique-machine-values.sh \ --master-plist-url="${MASTER_PLIST_URL}" \ --count 1 \ --tsv ./serial.tsv \ @@ -137,7 +137,7 @@ CMD sudo chown -R $(id -u):$(id -g) /dev/kvm /dev/snd "${IMAGE_PATH}" "${BOOTDIS ; } \ ; [[ "${GENERATE_SPECIFIC}" == true ]] && { \ source "${ENV:=/env}" 2>/dev/null \ - ; ./Docker-OSX/custom/generate-specific-bootdisk.sh \ + ; ./Docker-OSX/osx-serial-generator/generate-specific-bootdisk.sh \ --master-plist-url="${MASTER_PLIST_URL}" \ --model "${DEVICE_MODEL}" \ --serial "${SERIAL}" \ diff --git a/README.md b/README.md index 9a2c07c..6b328d5 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,32 @@ Thank you to @cephasara for this major contribution. #### Follow [@sickcodes on Twitter](https://twitter.com/sickcodes) for updates or feature requests! +# Basic Quick Start Docker-OSX + +```bash + +docker pull sickcodes/docker-osx:latest + +# Catalina +docker run -it \ + --device /dev/kvm \ + -p 50922:10022 \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e "DISPLAY=${DISPLAY:-:0.0}" \ + sickcodes/docker-osx:latest + +# Big Sur +docker run -it \ + --device /dev/kvm \ + -p 50922:10022 \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -e "DISPLAY=${DISPLAY:-:0.0}" \ + sickcodes/docker-osx:big-sur + +# Wait 2-3 minutes until you see the logo. + +``` + # How to use ### There are 3 images: **latest**, **auto** and **naked**. @@ -80,32 +106,6 @@ Use `docker commit`, copy the ID, and then `docker start ID` [Pull out the .img file](https://github.com/sickcodes/Docker-OSX#backup-the-disk-wheres-my-disk), and then use that [.img file with :naked](https://github.com/sickcodes/Docker-OSX#quick-start-own-image-naked-container-image) -# Basic Quick Start Docker-OSX - -```bash - -docker pull sickcodes/docker-osx:latest - -# catalina -docker run -it \ - --device /dev/kvm \ - -p 50922:10022 \ - -v /tmp/.X11-unix:/tmp/.X11-unix \ - -e "DISPLAY=${DISPLAY:-:0.0}" \ - sickcodes/docker-osx:latest - -# big sur -docker run -it \ - --device /dev/kvm \ - -p 50922:10022 \ - -v /tmp/.X11-unix:/tmp/.X11-unix \ - -e "DISPLAY=${DISPLAY:-:0.0}" \ - sickcodes/docker-osx:big-sur - -# Wait 2-3 minutes until you see the logo. - -``` - # Quick Start Large Pre-Made Image Current large image size: 17.5GB diff --git a/custom b/custom new file mode 120000 index 0000000..07ee287 --- /dev/null +++ b/custom @@ -0,0 +1 @@ +osx-serial-generator/ \ No newline at end of file diff --git a/custom/config-nopicker-custom.plist b/custom/config-nopicker-custom.plist deleted file mode 100644 index aa60a39..0000000 --- a/custom/config-nopicker-custom.plist +++ /dev/null @@ -1,885 +0,0 @@ - - - - - - - ACPI - - Add - - - Comment - add DTGP method - Enabled - - Path - SSDT-DTGP.aml - - - Comment - Fake EC and USBX Power - Enabled - - Path - SSDT-EC.aml - - - Comment - USB 2.0 Injection - Enabled - - Path - SSDT-EHCI.aml - - - Comment - CPU AGPM Plugin=1 - Enabled - - Path - SSDT-PLUG.aml - - - Delete - - - All - - Comment - Delete CpuPm - Enabled - - OemTableId - Q3B1UG0AAAA= - TableLength - 0 - TableSignature - U1NEVA== - - - All - - Comment - Delete Cpu0Ist - Enabled - - OemTableId - Q3B1MElzdAA= - TableLength - 0 - TableSignature - U1NEVA== - - - Patch - - - Comment - _Q11 to XQ11 - Count - 1 - Enabled - - Find - X1ExMQ== - Limit - 0 - Mask - - OemTableId - - Replace - WFExMQ== - ReplaceMask - - Skip - 0 - TableLength - 0 - TableSignature - - - - Comment - _Q12 to XQ12 - Count - 1 - Enabled - - Find - X1ExMg== - Limit - 0 - Mask - - OemTableId - - Replace - WFExMg== - ReplaceMask - - Skip - 0 - TableLength - 0 - TableSignature - - - - Quirks - - FadtEnableReset - - NormalizeHeaders - - RebaseRegions - - ResetHwSig - - ResetLogoStatus - - - - Booter - - MmioWhitelist - - Quirks - - AvoidRuntimeDefrag - - DevirtualiseMmio - - DisableSingleUser - - DisableVariableWrite - - DiscardHibernateMap - - EnableSafeModeSlide - - EnableWriteUnprotector - - ForceExitBootServices - - ProtectMemoryRegions - - ProtectSecureBoot - - ProtectUefiServices - - ProvideCustomSlide - - ProvideMaxSlide - 0 - RebuildAppleMemoryMap - - SetupVirtualMap - - SignalAppleOS - - SyncRuntimePermissions - - - - DeviceProperties - - Add - - PciRoot(0x1)/Pci(0x1F,0x0) - - compatible - pci8086,2916 - device-id - - FikA - - name - pci8086,2916 - - - Delete - - PciRoot(0x0)/Pci(0x1b,0x0) - - MaximumBootBeepVolume - - - - Kernel - - Add - - - Arch - Any - BundlePath - VoodooHDA.kext - Comment - - Enabled - - ExecutablePath - Contents/MacOS/VoodooHDA - MaxKernel - - MinKernel - - PlistPath - Contents/Info.plist - - - Arch - x86_64 - BundlePath - Lilu.kext - Comment - Patch engine - Enabled - - ExecutablePath - Contents/MacOS/Lilu - MaxKernel - - MinKernel - 12.0.0 - PlistPath - Contents/Info.plist - - - Arch - x86_64 - BundlePath - VirtualSMC.kext - Comment - SMC emulator - Enabled - - ExecutablePath - Contents/MacOS/VirtualSMC - MaxKernel - - MinKernel - 12.0.0 - PlistPath - Contents/Info.plist - - - Arch - x86_64 - BundlePath - WhateverGreen.kext - Comment - Video patches - Enabled - - ExecutablePath - Contents/MacOS/WhateverGreen - MaxKernel - - MinKernel - 12.0.0 - PlistPath - Contents/Info.plist - - - BundlePath - AGPMInjector.kext - Comment - - Enabled - - ExecutablePath - - MaxKernel - - MinKernel - - PlistPath - Contents/Info.plist - - - BundlePath - USBPorts.kext - Comment - - Enabled - - ExecutablePath - - MaxKernel - - MinKernel - - PlistPath - Contents/Info.plist - - - Arch - x86_64 - BundlePath - MCEReporterDisabler.kext - Comment - AppleMCEReporter disabler - Enabled - - ExecutablePath - - MaxKernel - - MinKernel - 19.0.0 - PlistPath - Contents/Info.plist - - - Block - - - Arch - Any - Comment - - Enabled - - Identifier - com.apple.driver.AppleTyMCEDriver - MaxKernel - - MinKernel - - - - Emulate - - Cpuid1Data - - VAYFAAAAAAAAAAAAAAAAAA== - - Cpuid1Mask - - ////AAAAAAAAAAAAAAAAAA== - - - Force - - - Arch - Any - BundlePath - System/Library/Extensions/IONetworkingFamily.kext - Comment - Patch engine - Enabled - - Identifier - com.apple.iokit.IONetworkingFamily - ExecutablePath - Contents/MacOS/IONetworkingFamily - MaxKernel - 13.99.99 - MinKernel - - PlistPath - Contents/Info.plist - - - Patch - - - Base - _cpu_topology_sort - Comment - algrey - cpu_topology_sort -disable _x86_validate_topology - Count - 1 - Enabled - - Find - - 6AAA//8= - - Identifier - kernel - Limit - 0 - Mask - - /wAA//8= - - MaxKernel - 20.99.99 - MinKernel - 17.0.0 - Replace - - Dx9EAAA= - - ReplaceMask - - - Skip - 0 - - - Base - - Comment - algrey - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN - Count - 1 - Enabled - - Find - - MduAPQAAAAAGdQA= - - Identifier - kernel - Limit - 0 - Mask - - /////wAAAP///wA= - - MaxKernel - 20.99.99 - MinKernel - 17.0.0 - Replace - - u7xP6njpXQAAAJA= - - ReplaceMask - - - Skip - 0 - - - Quirks - - AppleCpuPmCfgLock - - AppleXcpmCfgLock - - AppleXcpmExtraMsrs - - AppleXcpmForceBoost - - CustomSMBIOSGuid - - DisableIoMapper - - DisableLinkeditJettison - - DisableRtcChecksum - - DummyPowerManagement - - ExternalDiskIcons - - IncreasePciBarSize - - LapicKernelPanic - - PanicNoKextDump - - PowerTimeoutKernelPanic - - ThirdPartyDrives - - XhciPortLimit - - - Scheme - - FuzzyMatch - - KernelArch - x86_64 - KernelCache - Auto - - - Misc - - BlessOverride - - Boot - - ConsoleAttributes - 0 - HibernateMode - Auto - HideAuxiliary - - PickerAttributes - 1 - PickerAudioAssist - - PickerMode - External - PollAppleHotKeys - - ShowPicker - - TakeoffDelay - 0 - Timeout - 0 - - Debug - - AppleDebug - - ApplePanic - - DisableWatchDog - - DisplayDelay - 0 - DisplayLevel - 2147483650 - SerialInit - - SysReport - - Target - 3 - - Entries - - Security - - AllowNvramReset - - AllowSetDefault - - ApECID - 0 - AuthRestart - - BootProtect - None - DmgLoading - Signed - EnablePassword - - ExposeSensitiveData - 6 - HaltLevel - 2147483648 - PasswordHash - - PasswordSalt - - ScanPolicy - 0 - SecureBootModel - Disabled - Vault - Optional - - Tools - - - Arguments - - Auxiliary - - Comment - Not signed for security reasons - Enabled - - Name - UEFI Shell - Path - OpenShell.efi - - - Arguments - Shutdown - Auxiliary - - Comment - Perform shutdown - Enabled - - Name - Shutdown - Path - ResetSystem.efi - - - - NVRAM - - Add - - 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 - - DefaultBackgroundColor - AAAAAA== - UIScale - AQ== - - 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 - - rtc-blacklist - - - 7C436110-AB2A-4BBB-A880-FE41995C9F82 - - SystemAudioVolume - Rg== - boot-args - -v keepsyms=1 tlbto_us=0 vti=9 - run-efi-updater - No - csr-active-config - ZwAAAA== - prev-lang:kbd - ZW4tVVM6MA== - - - Delete - - 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 - - UIScale - DefaultBackgroundColor - - 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 - - rtc-blacklist - - 7C436110-AB2A-4BBB-A880-FE41995C9F82 - - boot-args - - - LegacyEnable - - LegacyOverwrite - - LegacySchema - - 7C436110-AB2A-4BBB-A880-FE41995C9F82 - - EFILoginHiDPI - EFIBluetoothDelay - LocationServicesEnabled - SystemAudioVolume - SystemAudioVolumeDB - SystemAudioVolumeSaved - bluetoothActiveControllerInfo - bluetoothInternalControllerInfo - flagstate - fmm-computer-name - nvda_drv - prev-lang:kbd - - 8BE4DF61-93CA-11D2-AA0D-00E098032B8C - - Boot0080 - Boot0081 - Boot0082 - BootNext - BootOrder - - - WriteFlash - - - PlatformInfo - - Automatic - - Generic - - AdviseWindows - - MLB - {{BOARD_SERIAL}} - ROM - - {{ROM}} - - SpoofVendor - - SystemProductName - {{DEVICE_MODEL}} - SystemSerialNumber - {{SERIAL}} - SystemUUID - {{UUID}} - - UpdateDataHub - - UpdateNVRAM - - UpdateSMBIOS - - UpdateSMBIOSMode - Create - - UEFI - - APFS - - EnableJumpstart - - GlobalConnect - - HideVerbose - - JumpstartHotPlug - - MinDate - 0 - MinVersion - 0 - - Audio - - AudioCodec - 0 - AudioDevice - PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x1) - AudioOut - 0 - AudioSupport - - MinimumVolume - 20 - PlayChime - - VolumeAmplifier - 0 - - ConnectDrivers - - Drivers - - VBoxHfs.efi - OpenRuntime.efi - OpenCanopy.efi - #AudioDxe.efi - #OpenUsbKbDxe.efi - #UsbMouseDxe.efi - #Ps2KeyboardDxe.efi - #Ps2MouseDxe.efi - #HiiDatabase.efi - #NvmExpressDxe.efi - #XhciDxe.efi - #ExFatDxe.efi - #PartitionDxe.efi - #CrScreenshotDxe.efi - - Input - - KeyFiltering - - KeyForgetThreshold - 5 - KeyMergeThreshold - 2 - KeySupport - - KeySupportMode - Auto - KeySwap - - PointerSupport - - PointerSupportMode - ASUS - TimerResolution - 50000 - - Output - - ClearScreenOnModeSwitch - - ConsoleMode - - DirectGopRendering - - IgnoreTextInGraphics - - ProvideConsoleGop - - ReconnectOnResChange - - ReplaceTabWithSpace - - Resolution - {{WIDTH}}x{{HEIGHT}}@32 - SanitiseClearScreen - - TextRenderer - BuiltinGraphics - UgaPassThrough - - - ProtocolOverrides - - AppleAudio - - AppleBootPolicy - - AppleDebugLog - - AppleEvent - - AppleFramebufferInfo - - AppleImageConversion - - AppleImg4Verification - - AppleKeyMap - - AppleRtcRam - - AppleSecureBoot - - AppleSmcIo - - AppleUserInterfaceTheme - - DataHub - - DeviceProperties - - FirmwareVolume - - HashServices - - OSInfo - - UnicodeCollation - - - Quirks - - ExitBootServicesDelay - 0 - IgnoreInvalidFlexRatio - - ReleaseUsbOwnership - - RequestBootVarRouting - - TscSyncTimeout - 0 - UnblockFsConnect - - ConnectDrivers - - - - - diff --git a/custom/generate-specific-bootdisk.sh b/custom/generate-specific-bootdisk.sh deleted file mode 100755 index b847a50..0000000 --- a/custom/generate-specific-bootdisk.sh +++ /dev/null @@ -1,254 +0,0 @@ -#!/bin/bash -# ____ __ ____ ______ __ -# / __ \____ _____/ /_____ _____/ __ \/ ___/ |/ / -# / / / / __ \/ ___/ //_/ _ \/ ___/ / / /\__ \| / -# / /_/ / /_/ / /__/ ,< / __/ / / /_/ /___/ / | -# /_____/\____/\___/_/|_|\___/_/ \____//____/_/|_| GEN BOOT DISK -# -# 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-specific-bootdisk.sh - -General options: - --model Device model, e.g. 'iMacPro1,1' - --serial Device Serial number - --board-serial Board Serial number - --uuid SmUUID - --mac-address Used to set the ROM value; lowercased and without a colon - --width Resolution x axis length in pixels (default 1920) - --height Resolution y axis length in pixels (default 1080 - --output-bootdisk Optionally change the bootdisk output filename - - --master-plist-url Specify an alternative master plist, via URL. - --custom-plist | --master-plist - Optionally change the input plist. Placeholders: - {{DEVICE_MODEL}}, {{SERIAL}}, {{BOARD_SERIAL}}, - {{UUID}}, {{ROM}}, {{WIDTH}}, {{HEIGHT}} - - --help, -h, help Display this help and exit - -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 \ - --widht 1920 \ - --height 1080 - -Author: Sick.Codes https://sick.codes/ -Project: https://github.com/sickcodes/Docker-OSX/ -" - -PLIST_MASTER=config-nopicker-custom.plist - -# gather arguments -while (( "$#" )); do - case "${1}" in - - --help | -h | h | help ) - echo "${help_text}" && exit 0 - ;; - - --model=* | -m=* ) - export DEVICE_MODEL="${1#*=}" - shift - ;; - --model* | -m* ) - export DEVICE_MODEL="${2}" - shift - shift - ;; - - --serial=* ) - export SERIAL="${1#*=}" - shift - ;; - --serial* ) - export SERIAL="${2}" - shift - shift - ;; - - --board-serial=* ) - export BOARD_SERIAL="${1#*=}" - shift - ;; - --board-serial* ) - export BOARD_SERIAL="${2}" - shift - shift - ;; - - --uuid=* ) - export UUID="${1#*=}" - shift - ;; - --uuid* ) - export UUID="${2}" - shift - shift - ;; - - --mac-address=* ) - 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 - ;; - - --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 - ;; - - *) - echo "Invalid option. Running with default values..." - shift - ;; - esac -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 - # EFI Shell commands - touch startup.nsh && echo 'fs0:\EFI\BOOT\BOOTx64.efi' > startup.nsh -} - -generate_bootdisk () { - - 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. Use one or the other.' - 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 - - - [[ -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 - - # plist required for bootdisks, so create anyway. - 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 \ - -e s/{{WIDTH}}/"${WIDTH:-1920}"/g \ - -e s/{{HEIGHT}}/"${HEIGHT:-1080}"/g \ - "${MASTER_PLIST}" > ./tmp.config.plist || exit 1 - else - cat < 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 <> "${CSV_SERIAL_SETS_FILE}" -"${DEVICE_MODEL}","${SERIAL}","${BOARD_SERIAL}","${UUID}","${MAC_ADDRESS}","${WIDTH}","${HEIGHT}" -EOF - - # append to tsv file - T=$'\t' - cat <> "${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 < "${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 </dev/null 2>&1 || true - fi - sudo rm -rf "$WORK" -} - -WORK="${TMPDIR-/var/tmp}/${0##*/}-$$" -mkdir "$WORK" || exit 1 -trap 'do_cleanup' EXIT - -BASE="$(dirname $0)" - -###################################################################### -# parse args - -function print_help() { -cat < - --img - --cfg -EOF -} - -while test "$1" != ""; do - case "$1" in - --iso) - iso="$2" - shift; shift - ;; - --img) - img="$2" - shift; shift - ;; - --cfg) - cfg="$2" - shift; shift - ;; - esac -done - -###################################################################### -# guestfish script helpers - -function fish() { - echo "#" "$@" - guestfish --remote -- "$@" || exit 1 -} - -function fish_init() { - local format - - case "$img" in - *.raw) format="raw" ;; - *) format="qcow2";; - esac - - msg "creating and adding disk image" - fish disk-create $img $format 384M - fish add $img - fish run -} - -function fish_fini() { - fish umount-all -} - -# disabled by sick.codes to allow unattended image overwrites -###################################################################### -# sanity checks - -# if test ! -f "$cfg"; then -# echo "ERROR: cfg not found: $cfg" -# exit 1 -# fi -# if test -f "$img"; then -# if test "$allow_override" = "yes"; then -# rm -f "$img" -# else -# echo "ERROR: image exists: $img" -# exit 1 -# fi -# fi - -###################################################################### -# go! - -msg "copy files from local folder" -BASE="$(dirname $0)" -cp -a $BASE/EFI $WORK -find "$WORK" - -#msg "[debug] list drivers in EFI/OC" -#(cd $WORK/EFI/OC; find driver* -print) - -export LIBGUESTFS_BACKEND=direct -eval $(guestfish --listen) -if test "$GUESTFISH_PID" = ""; then - echo "ERROR: starting guestfish failed" - exit 1 -fi - -fish_init - -msg "partition disk image" -fish part-init /dev/sda gpt -fish part-add /dev/sda p 2048 300000 -fish part-add /dev/sda p 302048 -2048 -fish part-set-gpt-type /dev/sda 1 C12A7328-F81F-11D2-BA4B-00A0C93EC93B -fish part-set-bootable /dev/sda 1 true -fish mkfs vfat /dev/sda1 label:EFI -fish mkfs vfat /dev/sda2 label:OpenCoreBoo -fish mount /dev/sda2 / -fish mkdir /ESP -fish mount /dev/sda1 /ESP - -msg "copy files to disk image" -cp -v "$cfg" $WORK/config.plist -fish mkdir /ESP/EFI -fish mkdir /ESP/EFI/OC -fish mkdir /ESP/EFI/OC/Kexts -fish mkdir /ESP/EFI/OC/ACPI -fish mkdir /ESP/EFI/OC/Resources -fish mkdir /ESP/EFI/OC/Tools -fish copy-in $WORK/EFI/BOOT /ESP/EFI -fish copy-in $WORK/EFI/OC/OpenCore.efi /ESP/EFI/OC -fish copy-in $WORK/EFI/OC/Drivers /ESP/EFI/OC/ -fish copy-in $WORK/EFI/OC/Kexts /ESP/EFI/OC/ -fish copy-in $WORK/EFI/OC/ACPI /ESP/EFI/OC/ -fish copy-in $WORK/EFI/OC/Resources /ESP/EFI/OC/ -fish copy-in $WORK/EFI/OC/Tools /ESP/EFI/OC/ - -# Note -fish copy-in startup.nsh / - -BASE="$(dirname $0)" -fish copy-in "$WORK/config.plist" /ESP/EFI/OC/ - -fish find /ESP/ -fish_fini diff --git a/osx-serial-generator b/osx-serial-generator new file mode 160000 index 0000000..0149015 --- /dev/null +++ b/osx-serial-generator @@ -0,0 +1 @@ +Subproject commit 0149015547a26b991fc6035972dae75357dc68aa