3 Commits
+19 -12
View File
@@ -42,9 +42,8 @@ OCVERSION="1.0.7"
DEFAULT_VM_PREFIX="HACK-" DEFAULT_VM_PREFIX="HACK-"
BASE_RAM_SIZE=4096 BASE_RAM_SIZE=4096
RAM_PER_CORE=512 RAM_PER_CORE=512
BASE_DISK_SIZE=64 BASE_DISK_SIZE=128
DISK_INCREMENT=8 MAX_CORES=32
MAX_CORES=16
DHCP_CONF_DIR="/etc/dhcp/dhcpd.d" DHCP_CONF_DIR="/etc/dhcp/dhcpd.d"
NETWORK_INTERFACES_FILE="/etc/network/interfaces" NETWORK_INTERFACES_FILE="/etc/network/interfaces"
DHCP_USER="dhcpd" DHCP_USER="dhcpd"
@@ -407,29 +406,38 @@ create_vm() {
fi fi
if [[ "$OSX_PLATFORM" == "AMD" ]]; then if [[ "$OSX_PLATFORM" == "AMD" ]]; then
if [[ "$version_name" =~ ^(Ventura|Sonoma|Sequoia|Tahoe)$ ]]; then if [[ "$version_name" =~ ^(Ventura|Sonoma|Sequoia|Tahoe)$ ]]; then
cpu_args="-cpu Cascadelake-Server,vendor=GenuineIntel,+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,-spec-ctrl,kvm=on,vmware-cpuid-freq=on" cpu_args="-cpu Skylake-Client-v4,vendor=GenuineIntel,+invtsc,+hypervisor,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,-spec-ctrl,kvm=on,vmware-cpuid-freq=on"
else else
cpu_args="-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" cpu_args="-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"
fi fi
else else
cpu_args="-cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc" cpu_args="-cpu Skylake-Client-v4,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+vmx,vmware-cpuid-freq=on"
fi fi
# Check QEMU version and append hotplug fix if 6.1 or newer # Check QEMU version and append hotplug fix if 6.1 or newer
local qemu_version=$(qemu-system-x86_64 --version | awk '/version/ {print $4}' | cut -d'(' -f1) local qemu_version=$(qemu-system-x86_64 --version | awk '/version/ {print $4}' | cut -d'(' -f1)
version_compare "$qemu_version" "6.1" && device_args="$device_args -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off" version_compare "$qemu_version" "6.1" && device_args="$device_args -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off"
# CD-ROM bus: High Sierra (10.13) and Mojave (10.14) use sata0 as the system
# disk, so their CD-ROMs stay on IDE to avoid colliding with it.
local cdrom_boot cdrom_recovery
if [[ "$version_name" =~ ^(High\ Sierra|Mojave)$ ]]; then
cdrom_boot="ide0"; cdrom_recovery="ide2"
else
cdrom_boot="sata0"; cdrom_recovery="sata2"
fi
qm create "$vm_id" \ qm create "$vm_id" \
--agent 1 --args "$device_args $cpu_args" --autostart 0 \ --agent 1 --args "$device_args $cpu_args" --autostart 0 \
--balloon 0 --bios ovmf --boot "order=sata0;$disk_type" \ --balloon 0 --bios ovmf --boot "order=${cdrom_boot};$disk_type" \
--cores "$core_count" --description "Hackintosh VM - $version_name" \ --cores "$core_count" --description "Hackintosh VM - $version_name" \
--efidisk0 "${storage}:4" --machine q35 --memory "$ram_size" \ --efidisk0 "${storage}:4" --machine q35 --memory "$ram_size" \
--name "$vm_name" --net0 "vmxnet3,bridge=$bridge" --numa 0 \ --name "$vm_name" --net0 "vmxnet3,bridge=$bridge" --numa 0 \
--onboot 0 --ostype other --sockets 1 --start 0 --tablet 1 \ --onboot 0 --ostype other --sockets 1 --start 0 --tablet 1 \
--vga vmware --vmgenid 1 --scsihw virtio-scsi-pci \ --vga vmware --vmgenid 1 --scsihw virtio-scsi-pci \
--"$disk_type" "${storage}:${disk_size},cache=none,discard=on" \ --"$disk_type" "${storage}:${disk_size},cache=none,discard=on" \
--sata0 "${storage_iso}:iso/${iso_file},media=cdrom,cache=unsafe,size=96M" \ --"$cdrom_boot" "${storage_iso}:iso/${iso_file},media=cdrom,cache=unsafe,size=96M" \
--sata2 "${storage_iso}:iso/recovery-${version_name,,}.iso,media=cdrom,cache=unsafe,size=${iso_size}" >>"$logfile" 2>&1 || log_and_exit "Failed to create VM" "$logfile" --"$cdrom_recovery" "${storage_iso}:iso/recovery-${version_name,,}.iso,media=cdrom,cache=unsafe,size=${iso_size}" >>"$logfile" 2>&1 || log_and_exit "Failed to create VM" "$logfile"
sed -i 's/media=cdrom/media=disk/' "/etc/pve/qemu-server/$vm_id.conf" >>"$logfile" 2>&1 || log_and_exit "Failed to update VM config" "$logfile" sed -i 's/media=cdrom/media=disk/' "/etc/pve/qemu-server/$vm_id.conf" >>"$logfile" 2>&1 || log_and_exit "Failed to update VM config" "$logfile"
display_and_log "VM ($vm_name) created successfully" "$logfile" display_and_log "VM ($vm_name) created successfully" "$logfile"
@@ -1229,7 +1237,7 @@ configure_network_bridge() {
configure_macos_vm() { configure_macos_vm() {
local macopt=$1 local macopt=$1
local nextid=$2 local nextid=$2
local version_name version board_id model_id iso_size disk_type opt=$3 local version_name version board_id model_id iso_size disk_type
IFS='|' read -r version_name version board_id model_id iso_size disk_type <<< "$macopt" IFS='|' read -r version_name version board_id model_id iso_size disk_type <<< "$macopt"
local default_vm_name="${DEFAULT_VM_PREFIX}$(echo "$version_name" | tr -s ' ' | sed 's/^[ ]*//;s/[ ]*$//;s/[ ]/-/g' | tr '[:lower:]' '[:upper:]' | sed 's/-*$//')" local default_vm_name="${DEFAULT_VM_PREFIX}$(echo "$version_name" | tr -s ' ' | sed 's/^[ ]*//;s/[ ]*$//;s/[ ]/-/g' | tr '[:lower:]' '[:upper:]' | sed 's/-*$//')"
validate_vm_name "$default_vm_name" || log_and_exit "Invalid default VM name: $default_vm_name" "${LOGDIR}/main-menu.log" validate_vm_name "$default_vm_name" || log_and_exit "Invalid default VM name: $default_vm_name" "${LOGDIR}/main-menu.log"
@@ -1259,7 +1267,7 @@ configure_macos_vm() {
done done
# Disk Size # Disk Size
default_disk_size=$((BASE_DISK_SIZE + (opt > 6 ? 2 : opt == 4 ? 1 : 0) * DISK_INCREMENT)) local default_disk_size=$BASE_DISK_SIZE
while true; do while true; do
read -rp "Disk size (GB) [default: $default_disk_size]: " SIZEDISK read -rp "Disk size (GB) [default: $default_disk_size]: " SIZEDISK
SIZEDISK=${SIZEDISK:-$default_disk_size} SIZEDISK=${SIZEDISK:-$default_disk_size}
@@ -1437,7 +1445,7 @@ main_menu() {
[[ -z "$OPT" || "$OPT" -eq 0 ]] && exit [[ -z "$OPT" || "$OPT" -eq 0 ]] && exit
if [[ ${MACOS_CONFIG[$OPT]} ]]; then if [[ ${MACOS_CONFIG[$OPT]} ]]; then
configure_macos_vm "${MACOS_CONFIG[$OPT]}" "$NEXTID" "$OPT" configure_macos_vm "${MACOS_CONFIG[$OPT]}" "$NEXTID"
else else
case $OPT in case $OPT in
200) add_no_subscription_repo ;; 200) add_no_subscription_repo ;;
@@ -1461,7 +1469,6 @@ set_isodir
if [ ! -f "${ISODIR}/${OPENCORE_ISO}" ]; then if [ ! -f "${ISODIR}/${OPENCORE_ISO}" ]; then
update_opencore_iso "0" update_opencore_iso "0"
fi fi
sleep 2
OSX_PLATFORM=$(detect_cpu_platform) OSX_PLATFORM=$(detect_cpu_platform)
[[ ! -e /etc/pve/qemu-server/.osx-proxmox ]] && setup_prerequisites [[ ! -e /etc/pve/qemu-server/.osx-proxmox ]] && setup_prerequisites
main_menu main_menu