OSX-PROXMOX/setup

2026 lines
74 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#
# Script: setup
#
# Author: Gabriel Luchina
# https://luchina.com.br
#
# COPYRIGHT - 2021, 2022
#
# All rights reserved - You may not copy, reproduce, distribute, publish, display, perform, modify,
# create derivative works, transmit, or in any way exploit any such content, nor may you distribute
# any part of this content over any network, including a local area network, sell or offer it for
# sale, or use such content to construct any kind of database.
#
# You may not alter or remove any copyright or other notice from copies of the content on any scripts
# in the solution of 'OSX-PROXMOX Solution - GABRIEL LUCHINA'.
#
# Copying or storing any content except as provided above is expressly prohibited without prior
# written permission of copyright holder identified in the individual contents copyright notice.
#
# For permission to use the content 'OSX-PROXMOX Solution - GABRIEL LUCHINA',
# please contact legal@luchina.com.br
#
# FOR DEV/STUDENT ONLY PURPOSES - NOT COMERCIAL
#
# Credits:
# https://github.com/acidanthera/OpenCorePkg
# https://github.com/corpnewt/MountEFI
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
clear
if [ `pveversion | grep "pve-manager/[7,8]" | wc -l` -ne 1 ]
then
echo "This version of Proxmox Virtual Environment are not supported"
echo "Please, utilize version: 7.XX or 8.2"
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
SCRIPT_DIR=/root/OSX-PROXMOX
LOGDIR=${SCRIPT_DIR}/logs
TMPDIR=${SCRIPT_DIR}/tmp
ISODIR=/var/lib/vz/template/iso/
HACKPXVERSION="20241025T1034"
OCVERSION="1.0.2"
DEFAULT_VM_PREFIX="HACK-"
DEFAULT_RAM_SIZE=4096
if [ `lscpu | grep "Vendor ID" | grep -i amd | wc -l` -eq 1 ]; then OSX_PLATFORM="AMD"; else OSX_PLATFORM="INTEL"; fi
if [ ! -e ${TMPDIR} ]; then mkdir ${TMPDIR}; fi;
if [ ! -e ${LOGDIR} ]; then mkdir ${LOGDIR}; fi;
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
if [ ! -e /etc/pve/qemu-server/.osx-proxmox ]
then
mkdir -p ${LOGDIR}
LOGFILE=${LOGDIR}/prerequisites-setup.log
echo " "
echo "OSX-PROXMOX (Version ${HACKPXVERSION}) - GABRIEL LUCHINA - https://osx-proxmox.com"
echo " "
echo "Prerequisites have not yet been installed and configured on this HOST."
echo " "
echo "Running the prerequisites and at the end your HOST will be rebooted ..."
echo " "
echo " "
cp ${SCRIPT_DIR}/EFI/*.iso /var/lib/vz/template/iso
echo "alias osx-setup='${SCRIPT_DIR}/setup'" >> /root/.bashrc
echo -e "LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8" > /etc/environment
echo "set mouse-=a" > ~/.vimrc
if [ -e /etc/apt/sources.list.d/pve-enterprise.list ]; then rm -rf /etc/apt/sources.list.d/pve-enterprise.list; fi;
apt-get update > ${LOGFILE} 2>> ${LOGFILE}
if [ $? -ne 0 ]
then
echo "Error with 'apt-get update' ..."
echo "Trying to change /etc/apt/sources.list"
sed -i 's/ftp.br.debian.org/ftp.debian.org/g' /etc/apt/sources.list
echo "Retrying 'apt-get update'"
apt-get update >> ${LOGFILE} 2>> ${LOGFILE}
if [ $? -ne 0 ]; then echo "Error with `apt-get update ...`"; exit; fi
fi
apt install vim unzip zip sysstat parted wget iptraf git htop -y >> ${LOGFILE} 2>> ${LOGFILE}
if [ $? -ne 0 ]; then echo "Error with `apt-get install ...`"; exit; fi
sed -i 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=0/g' /etc/default/grub
if [ ${OSX_PLATFORM} == "AMD" ]
then
if [ `pveversion | grep -i '7.2\|7.3\|7.4\|8.0\|8.1\|8.2' | wc -l` -eq 1 ]
then
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off initcall_blacklist=sysfb_init"/g' /etc/default/grub
else
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off"/g' /etc/default/grub
fi
echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf
fi
if [ ${OSX_PLATFORM} == "INTEL" ]
then
if [ `pveversion | grep -i '7.2\|7.3\|7.4\|8.0\|8.1\|8.2' | wc -l` -eq 1 ]
then
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=vesafb:off video=efifb:off initcall_blacklist=sysfb_init"/g' /etc/default/grub
else
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=vesafb:off video=efifb:off"/g' /etc/default/grub
fi
echo "options kvm-intel nested=Y" > /etc/modprobe.d/kvm-intel.conf
fi
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd\n" >> /etc/modules
echo -e "blacklist nouveau\nblacklist nvidia\nblacklist snd_hda_codec_hdmi\nblacklist snd_hda_intel\nblacklist snd_hda_codec\nblacklist snd_hda_core\nblacklist radeon\nblacklist amdgpu\n" >> /etc/modprobe.d/pve-blacklist.conf
echo "options kvm ignore_msrs=Y report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
sed -i.backup -z "s/res === null || res === undefined || \!res || res\n\t\t\t.data.status.toLowerCase() \!== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
touch /etc/pve/qemu-server/.osx-proxmox
update-grub >> ${LOGFILE} 2>> ${LOGFILE}
echo " "
echo " "
echo "... Successfully completed prerequisite process, your HOST will restart within 15s."
echo " "
echo "After rebooting, RUN: osx-setup"
echo " "
echo " "
sleep 15s && reboot
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
while [ true ]
do
NEXTID=`pvesh get /cluster/nextid`
clear
echo "#######################################################"
echo "################ O S X - P R O X M O X ################"
echo "############### https://osx-proxmox.com ###############"
echo "################ version: ${HACKPXVERSION} ################"
echo "#######################################################"
echo " "
echo " Enter the macOS version to be installed:"
echo " "
echo " 1 - macOS High Sierra - 10.13 (please use ISO for install)"
echo " 2 - macOS Mojave - 10.14"
echo " 3 - macOS Catalina - 10.15"
echo " 4 - macOS Big Sur - 11"
echo " 5 - macOS Monterey - 12"
echo " 6 - macOS Ventura - 13"
echo " 7 - macOS Sonoma - 14"
echo " 8 - macOS Sequoia - 15"
echo " "
echo " Next VM ID: ${NEXTID}"
echo " Opencore version: ${OCVERSION}"
echo " "
echo " 200 - Add Promox VE NO Subscription repository"
echo " 201 - Update Opencore ISO"
echo " 202 - Clear ALL macOS Recovery Images"
echo " 203 - Remove Proxmox Subscription Notice"
echo " 204 - Enable macOS in Cloud (VultR Provider)"
echo " 205 - Customize Opencore config.plist"
echo " "
echo " 0 - Quit (or press ENTER only)"
echo " "
echo -n " Option: "
read OPT
if [ -z $OPT ]
then
exit
fi
## Regular Expression for check integer number in size disk
re='^[0-9]+$'
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS High Sierra - 10.13
if [ ${OPT} -eq 1 ]
then
clear
echo " "
echo "macOS High Sierra"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-HIGHSIERRA]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}HIGHSIERRA"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-highsierra.log
if [ ! -e ${ISODIR}/recovery-highsierra.iso ]
then
fallocate -l 800M ${TMPDIR}/recovery-highsierra.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-highsierra.iso -n HIGHSIERRA >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-highsierra.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-BE088AF8C5EB4FA2 -m 00000000000J80300 download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-highsierra.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS High Sierra already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - High Sierra ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-highsierra.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+bmi1,+bmi2,+xsave,+xsaveopt,check' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;sata0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - High Sierra' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--sata0 ${STORAGECRTVM}:${SIZEDISK},cache=none,ssd=1,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-highsierra.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+bmi2,+xsave,+xsaveopt,check/+bmi2,+xsave,+xsaveopt,check -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-highsierra.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;sata0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - High Sierra' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--sata0 ${STORAGECRTVM}:${SIZEDISK},cache=none,ssd=1,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-highsierra.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS Mojave - 10.14
if [ ${OPT} -eq 2 ]
then
clear
echo " "
echo "macOS Mojave"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-MOJAVE]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}MOJAVE"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [or ENTER for Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-mojave.log
if [ ! -e ${ISODIR}/recovery-mojave.iso ]
then
fallocate -l 800M ${TMPDIR}/recovery-mojave.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-mojave.iso -n MOJAVE >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-mojave.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-7BA5B2DFE22DDD8C -m 00000000000KXPG00 download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-mojave.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS Mojave already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - Mojave ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-mojave.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+bmi1,+bmi2,+xsave,+xsaveopt,check' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;sata0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Mojave' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--sata0 ${STORAGECRTVM}:${SIZEDISK},cache=none,ssd=1,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-mojave.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+bmi2,+xsave,+xsaveopt,check/+bmi2,+xsave,+xsaveopt,check -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-mojave.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;sata0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Mojave' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--sata0 ${STORAGECRTVM}:${SIZEDISK},cache=none,ssd=1,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-mojave.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS Catalina - 10.15
if [ ${OPT} -eq 3 ]
then
clear
echo " "
echo "macOS Catalina"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-CATALINA]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}CATALINA"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [or ENTER for Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-catalina.log
if [ ! -e ${ISODIR}/recovery-catalina.iso ]
then
fallocate -l 800M ${TMPDIR}/recovery-catalina.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-catalina.iso -n CATALINA >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-catalina.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-00BE6ED71E35EB86 -m 00000000000000000 download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-catalina.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS Catalina already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - Catalina ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-catalina.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+bmi1,+bmi2,+xsave,+xsaveopt,check' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Catalina' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-catalina.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+bmi2,+xsave,+xsaveopt,check/+bmi2,+xsave,+xsaveopt,check -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-catalina.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Catalina' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-catalina.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS Big Sur - 11
if [ ${OPT} -eq 4 ]
then
clear
echo " "
echo "macOS Big Sur"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-BIGSUR]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}BIG-SUR"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-bigsur.log
if [ ! -e ${ISODIR}/recovery-bigsur.iso ]
then
fallocate -l 800M ${TMPDIR}/recovery-bigsur.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-bigsur.iso -n BIGSUR >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-bigsur.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-42FD25EABCABB274 -m 00000000000000000 download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-bigsur.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS Big Sur already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - Big Sur ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-bigsur.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+bmi1,+bmi2,+xsave,+xsaveopt,check' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Big Sur' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-bigsur.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+bmi2,+xsave,+xsaveopt,check/+bmi2,+xsave,+xsaveopt,check -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-bigsur.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Big Sur' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-bigsur.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS Monterey - 12
if [ ${OPT} -eq 5 ]
then
clear
echo " "
echo "macOS Monterey"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-MONTEREY]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}MONTEREY"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [or ENTER for Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-monterey.log
if [ ! -e ${ISODIR}/recovery-monterey.iso ]
then
fallocate -l 800M ${TMPDIR}/recovery-monterey.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-monterey.iso -n MONTEREY >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-monterey.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-E43C1C25D4880AD6 -m 00000000000000000 download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-monterey.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS Monterey already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - Monterey ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-monterey.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+bmi1,+bmi2,+xsave,+xsaveopt,check' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Monterey' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-monterey.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+bmi2,+xsave,+xsaveopt,check/+bmi2,+xsave,+xsaveopt,check -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-monterey.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Monterey' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-monterey.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS Ventura - 13
if [ ${OPT} -eq 6 ]
then
clear
echo " "
echo "macOS Ventura"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-VENTURA]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}VENTURA"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [or ENTER for Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-ventura.log
if [ ! -e ${ISODIR}/recovery-ventura.iso ]
then
fallocate -l 800M ${TMPDIR}/recovery-ventura.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-ventura.iso -n VENTURA >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-ventura.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-B4831CEBD52A0C4C -m 00000000000000000 download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-ventura.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS Ventura already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - Ventura ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-ventura.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu Cascadelake-Server,vendor=GenuineIntel,+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Ventura' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-ventura.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on/+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-ventura.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -device usb-mouse,bus=ehci.0,port=3 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Ventura' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-ventura.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS Sonoma - 14
if [ ${OPT} -eq 7 ]
then
clear
echo " "
echo "macOS Sonoma"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-SONOMA]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}SONOMA"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [or ENTER for Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-sonoma.log
if [ ! -e ${ISODIR}/recovery-sonoma.iso ]
then
fallocate -l 1450M ${TMPDIR}/recovery-sonoma.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-sonoma.iso -n SONOMA >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-sonoma.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-A61BADE1FDAD7B05 -m 00000000000000000 download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-sonoma.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS Sonoma already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - Sonoma ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-sonoma.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device qemu-xhci -device usb-kbd -device usb-tablet -global nec-usb-xhci.msi=off -cpu Cascadelake-Server,vendor=GenuineIntel,+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Sonoma' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-sonoma.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on/+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-sonoma.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device qemu-xhci -device usb-kbd -device usb-tablet -global nec-usb-xhci.msi=off -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Sonoma' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-sonoma.iso,cache=unsafe,size=800M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## macOS Sequoia - 15
if [ ${OPT} -eq 8 ]
then
clear
echo " "
echo "macOS Sequoia"
echo " "
echo -n "Enter the VM ID [or ENTER to automatically generate (${NEXTID})]: "
read VM_ID
if [ -z $VM_ID ]; then VM_ID=$NEXTID; fi;
echo " "
echo -n "Enter VM Name [or ENTER for Default: HACK-SEQUOIA]: "
read VM_NAME
if [ -z $VM_NAME ]; then VM_NAME="${DEFAULT_VM_PREFIX}SEQUOIA"; fi;
echo " "
echo -n "Enter a disk size [INTEGER] [or ENTER for Default: 64 Gb]: "
read SIZEDISK
if [ -z $SIZEDISK ]; then SIZEDISK=64; fi;
if ! [[ $SIZEDISK =~ $re ]] ; then echo "ERROR! SIZEDISK MUST HAVE INTEGER NUMBER!"; exit; fi;
echo " "
echo "Storages available:"
echo " "
for stg in `pvesh get storage --noborder --noheader`
do
echo " - ${stg}"
done
echo " "
echo -n "Enter which storage to create the VM [or ENTER for Default: local-lvm]: "
read STORAGECRTVM
if [ -z $STORAGECRTVM ]; then STORAGECRTVM="local-lvm"; fi;
echo " "
echo -n "Allocate CPU cores [Need Power of 2] [or ENTER for Default: 4]: "
read PROC_COUNT
if [ -z $PROC_COUNT ]; then PROC_COUNT=4; fi;
echo " "
echo -n "Allocate RAM [MiB] [or ENTER for Default: 4096]: "
read RAM_SIZE
if [ -z $RAM_SIZE ]; then RAM_SIZE=$DEFAULT_RAM_SIZE; fi;
echo " "
echo -n "Do you want to download and create the recovery image? [Y/N] [or ENTER for Default: Y]: "
read CRTRECODISK
if [ -z $CRTRECODISK ]; then CRTRECODISK="Y"; fi;
if [ "${CRTRECODISK}" == "Y" ] || [ "${CRTRECODISK}" == "y" ]
then
echo " "
echo "Downloading and creating the recovery image for installation ..."
LOGFILE=${LOGDIR}/crt-recovery-sequoia.log
if [ ! -e ${ISODIR}/recovery-sequoia.iso ]
then
fallocate -l 1450M ${TMPDIR}/recovery-sequoia.iso > ${LOGFILE} 2>> ${LOGFILE}
mkfs.msdos -F 32 ${TMPDIR}/recovery-sequoia.iso -n SEQUOIA >> ${LOGFILE} 2>> ${LOGFILE}
LOOPDEV=`losetup -f --show ${TMPDIR}/recovery-sequoia.iso 2>> ${LOGFILE}`
mkdir -p /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV} /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
cd /mnt/APPLE/ >> ${LOGFILE} 2>> ${LOGFILE}
python3 ${SCRIPT_DIR}/tools/macrecovery/macrecovery.py -b Mac-7BA5B2D9E42DDD94 -m 00000000000000000 -os latest download >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
umount /mnt/APPLE >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/APPLE
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
mv ${TMPDIR}/recovery-sequoia.iso ${ISODIR}
rm -rf ${TMPDIR}
echo "Download and recovery created successfully."
else
echo "Recovery image of macOS Sequoia already exists."
fi
else
echo " "
echo "Skipping download and creating recovery image ..."
fi
echo " "
echo "Creating virtual machine with macOS - Sequoia ..."
if [ ${OSX_PLATFORM} == 'AMD' ]
then
LOGFILE=${LOGDIR}/crt-vm-amd-sequoia.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device qemu-xhci -device usb-kbd -device usb-tablet -global nec-usb-xhci.msi=off -cpu Cascadelake-Server,vendor=GenuineIntel,+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Sequoia' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-sequoia.iso,cache=unsafe,size=1450M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on/+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
if [ ${OSX_PLATFORM} == 'INTEL' ]
then
LOGFILE=${LOGDIR}/crt-vm-intel-sequoia.log
qm create ${VM_ID} \
--agent 1 \
--args '-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device qemu-xhci -device usb-kbd -device usb-tablet -global nec-usb-xhci.msi=off -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc' \
--autostart 0 \
--balloon 0 \
--bios ovmf \
--boot 'order=ide0;virtio0' \
--cores ${PROC_COUNT} \
--description ' Hackintosh VM - Sequoia' \
--efidisk0 ${STORAGECRTVM}:4 \
--machine q35 \
--memory ${RAM_SIZE} \
--name ${VM_NAME} \
--net0 vmxnet3,bridge=vmbr0 \
--numa 0 \
--onboot 0 \
--ostype other \
--sockets 1 \
--start 0 \
--tablet 1 \
--vga vmware \
--vmgenid 1 \
--scsihw virtio-scsi-pci \
--virtio0 ${STORAGECRTVM}:${SIZEDISK},cache=none,discard=on \
--ide0 local:iso/opencore-osx-proxmox-vm.iso,cache=unsafe,size=80M \
--ide2 local:iso/recovery-sequoia.iso,cache=unsafe,size=1450M > ${LOGFILE} 2>> ${LOGFILE}
## Fix for QEMU 6.1 for PCI Passthrough
if [ `qemu-system-x86_64 --version | grep -e "6.1" -e "6.2" -e "7.1" -e "7.2" -e "8.0" -e "8.1" -e "9.0.2" | wc -l` -eq 1 ]
then
sed -i 's/+kvm_pv_eoi,+hypervisor,+invtsc/+kvm_pv_eoi,+hypervisor,+invtsc -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off/g' /etc/pve/qemu-server/${VM_ID}.conf
fi
fi
echo "Virtual machine (${VM_NAME}) created successfully."
echo " "
echo "Access the Proxmox Web Panel to continue with the installation ..."
echo "https://`ip address show vmbr0 | grep -w "inet" | awk -F " " '{ print $2 }' | awk -F "/" '{ print $1 }'`:8006"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## Add Promox VE NO Subscription repository
if [ ${OPT} -eq 200 ]
then
clear
LOGFILE=${LOGDIR}/add-repo-pve-no-subscription.log
echo " "
echo "Adding 'Promox VE NO Subscription repository' ..."
echo " "
echo "Please wait ..."
echo " "
if [ `pveversion | grep "pve-manager/[7]" | wc -l` -ne 1 ]
then
echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pxve-no-sub.list
apt update -y >> ${LOGFILE} 2>> ${LOGFILE}
if [ $? -ne 0 ]; then echo "apt update error - check log file ${LOGFILE}"; exit; fi;
echo "Promox VE NO Subscription repository has been successfully added."
exit
fi
if [ `pveversion | grep "pve-manager/[8]" | wc -l` -ne 1 ]
then
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pxve-no-sub.list
apt update -y >> ${LOGFILE} 2>> ${LOGFILE}
if [ $? -ne 0 ]; then echo "apt update error - check log file ${LOGFILE}"; exit; fi;
echo "Promox VE NO Subscription repository has been successfully added."
exit
fi
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## Update Opencore ISO
if [ ${OPT} -eq 201 ]
then
clear
LOGFILE=${LOGDIR}/update-opencore-iso.log
echo " "
echo "Copying 'opencore-osx-proxmox-vm.iso' to '/var/lib/vz/template/iso'"
echo " "
cd /var/lib/vz/template/iso/ > ${LOGFILE} 2>> ${LOGFILE}
rm -f opencore-osx-proxmox-vm.iso >> ${LOGFILE} 2>> ${LOGFILE}
wget https://github.com/luchina-gabriel/OSX-PROXMOX/raw/main/EFI/opencore-osx-proxmox-vm.iso >> ${LOGFILE} 2>> ${LOGFILE}
cd ~
echo "Please wait ..."
echo "Copy of 'opencore-osx-proxmox-vm.iso' completed!"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## Clear ALL macOS Recovery Images
if [ ${OPT} -eq 202 ]
then
clear
echo " "
echo "Clearing all macOS Recovery Images in '/var/lib/vz/template/iso'"
echo " "
rm -f /var/lib/vz/template/iso/recovery-*.iso
rm -f ${LOGDIR}/crt-recovery-*.log
echo "Please wait ..."
echo "Clear of ALL macOS Recovery Images completed!"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## Remove Proxmox Subscription Notice
if [ ${OPT} -eq 203 ]
then
clear
echo " "
echo "Removing Proxmox Subscription Notice..."
echo " "
sed -i.backup -z "s/res === null || res === undefined || \!res || res\n\t\t\t.data.status.toLowerCase() \!== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service
echo "Please wait ..."
echo "Remove of Proxmox Subscription Notice completed!"
echo " "
exit
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## Enable macOS in Cloud (VultR Provider)
if [ ${OPT} -eq 204 ]
then
clear
LOGFILE=${LOGDIR}/activate-macOS-in-cloud-vultr.log
echo " "
echo "Enabling macOS in Cloud (VultR Provider)"
echo " "
echo "Please wait ..."
echo " "
echo -e "\n## Interface for VMs \nauto vmbr1
iface vmbr1 inet static
address 192.168.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
\n
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE" >> /etc/network/interfaces
ifup vmbr1 >> ${LOGFILE} 2>> ${LOGFILE}
apt -y update >> ${LOGFILE} 2>> ${LOGFILE}
apt -y install sysstat net-tools isc-dhcp-server >> ${LOGFILE} 2>> ${LOGFILE}
sed -i 's/INTERFACESv4=""/INTERFACESv4="vmbr1"/g' /etc/default/isc-dhcp-server
cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup
echo 'subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
option domain-name-servers 8.8.8.8,8.8.4.4;
option domain-name "local";
}' > /etc/dhcp/dhcpd.conf
echo " "
echo "Enable of macOS in Cloud (VultR Provider) completed!"
echo " "
echo "Your server are reboot in 5s"
sleep 5s && reboot
fi
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## Customize Opencore config.plist
if [ ${OPT} -eq 205 ]
then
clear
LOGFILE=${LOGDIR}/custom-oc-config.plist.log
echo " "
echo "Customize Opencore config.plist"
echo " "
LOOPDEV=`losetup -f --show -P ${ISODIR}/opencore-osx-proxmox-vm.iso 2>> ${LOGFILE}`
mkdir -p /mnt/opencore > ${LOGFILE} 2>> ${LOGFILE}
mount ${LOOPDEV}p1 /mnt/opencore >> ${LOGFILE} 2>> ${LOGFILE}
if [ ! -e /mnt/opencore/EFI/OC/config.plist.backup ]
then
cp -v /mnt/opencore/EFI/OC/config.plist /mnt/opencore/EFI/OC/config.plist.backup >> ${LOGFILE} 2>> ${LOGFILE}
fi
PREV_LANG=`grep -E '..-..:0' /mnt/opencore/EFI/OC/config.plist | sed -e 's/.*\(..-..\).*/\1/'`
BOOT_ARGS=`grep '<key>boot-args' /mnt/opencore/EFI/OC/config.plist -A1 | tail -n1 | sed -e 's/.*>\(.*\)<.*/\1/'`
TIMEOUT=`grep -A1 '>Timeout<' /mnt/opencore/EFI/OC/config.plist | tail -n1 | sed -e 's/.*>\(.*\)<.*/\1/'`
echo " "
echo -n "Enter language-country code [or ENTER to keep the current one (${PREV_LANG})]: "
read NEW_PREV_LANG
if [ -z ${NEW_PREV_LANG} ]; then NEW_PREV_LANG=${PREV_LANG}; fi;
sed -i -e "s/..-..:0/${NEW_PREV_LANG}:0/" /mnt/opencore/EFI/OC/config.plist >> ${LOGFILE} 2>> ${LOGFILE}
echo " "
echo -n "Enter boot-args [or ENTER to keep the current one (${BOOT_ARGS})]: "
read NEW_BOOT_ARGS
if [ -z "${NEW_BOOT_ARGS}" ]; then NEW_BOOT_ARGS=${BOOT_ARGS}; fi;
sed -i -e "s/${BOOT_ARGS}/${NEW_BOOT_ARGS}/" /mnt/opencore/EFI/OC/config.plist >> ${LOGFILE} 2>> ${LOGFILE}
echo " "
echo -n "Remove csr-active-config (unlock SIP configuration) [Y/N] [or ENTER for Default: N]: "
read RM_CSR_LOCK
if [ -z ${RM_CSR_LOCK} ]; then RM_CSR_LOCK="N"; fi;
if [ "${RM_CSR_LOCK}" == "Y" ] || [ "${RM_CSR_LOCK}" == "y" ]
then
echo "--- a/mnt/opencore/EFI/OC/config.plist 2023-01-25 22:43:16.000000000 +0100
+++ b/mnt/opencore/EFI/OC/config.plist 2023-01-25 22:45:24.000000000 +0100
@@ -450,2 +450,0 @@
- <key>csr-active-config</key>
- <data>AAAAAA==</data>
" > ${TMPDIR}/rm-csr-lock.patch
cd /
patch -p1 < /root/OSX-PROXMOX/tmp/rm-csr-lock.patch >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
rm -f ${TMPDIR}/rm-csr-lock.patch
echo "Now you can use \`csrutil disable\` and \`csrutil authenticated-root disable\` in Recovery OS to disable SIP!"
fi
echo " "
echo -n "Enter timeout [or ENTER to keep the current one (${TIMEOUT} seconds)]: "
read NEW_TIMEOUT
if [ -z ${NEW_TIMEOUT} ]; then NEW_TIMEOUT=${TIMEOUT}; fi;
if [ ${NEW_TIMEOUT} -ne ${TIMEOUT} ]
then
echo "--- a/mnt/opencore/EFI/OC/config.plist 2023-01-25 22:43:16.000000000 +0100
+++ b/mnt/opencore/EFI/OC/config.plist 2023-01-25 22:45:24.000000000 +0100
@@ -363,7 +363,7 @@
<key>TakeoffDelay</key>
<integer>0</integer>
<key>Timeout</key>
- <integer>${TIMEOUT}</integer>
+ <integer>${NEW_TIMEOUT}</integer>
</dict>
<key>Debug</key>
<dict>
" > ${TMPDIR}/timeout.patch
cd /
patch -p1 < /root/OSX-PROXMOX/tmp/timeout.patch >> ${LOGFILE} 2>> ${LOGFILE}
cd ${SCRIPT_DIR}
rm -f ${TMPDIR}/timeout.patch
fi
diff -u --color /mnt/opencore/EFI/OC/config.plist.backup /mnt/opencore/EFI/OC/config.plist
umount /mnt/opencore >> ${LOGFILE} 2>> ${LOGFILE}
rmdir /mnt/opencore
losetup -d ${LOOPDEV} >> ${LOGFILE} 2>> ${LOGFILE}
fi
exit
################################################################################################################################################################################################
################################################################################################################################################################################################
################################################################################################################################################################################################
## Option for QUIT PROGRAM
if [ ${OPT} -eq 0 ]
then
exit
fi
done